@ethlete/cdk 2.5.3 → 2.6.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 (183) hide show
  1. package/CHANGELOG.md +14 -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 +3 -3
  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 +3 -3
  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/email-input/email-input.component.mjs +3 -3
  26. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -3
  27. package/esm2022/lib/components/forms/components/input/components/number-input/number-input.component.mjs +3 -3
  28. package/esm2022/lib/components/forms/components/input/components/password-input/password-input.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/components/input/components/search-input/search-input.component.mjs +3 -3
  30. package/esm2022/lib/components/forms/components/input/components/text-input/text-input.component.mjs +3 -3
  31. package/esm2022/lib/components/forms/components/input/components/textarea-input/textarea-input.component.mjs +3 -3
  32. package/esm2022/lib/components/forms/components/input/directives/autosize-textarea/autosize-textarea.directive.mjs +3 -3
  33. package/esm2022/lib/components/forms/components/input/directives/email-input/email-input.directive.mjs +3 -3
  34. package/esm2022/lib/components/forms/components/input/directives/number-input/number-input.directive.mjs +3 -3
  35. package/esm2022/lib/components/forms/components/input/directives/password-input/password-input.directive.mjs +3 -3
  36. package/esm2022/lib/components/forms/components/input/directives/search-input/search-input.directive.mjs +3 -3
  37. package/esm2022/lib/components/forms/components/input/directives/text-input/text-input.directive.mjs +3 -3
  38. package/esm2022/lib/components/forms/components/input/directives/textarea-input/textarea-input.directive.mjs +3 -3
  39. package/esm2022/lib/components/forms/components/input/partials/password-input-toggle/password-input-toggle.component.mjs +3 -3
  40. package/esm2022/lib/components/forms/components/input/partials/search-input-clear/search-input-clear.component.mjs +3 -3
  41. package/esm2022/lib/components/forms/components/label/components/label/label.component.mjs +3 -3
  42. package/esm2022/lib/components/forms/components/label/directives/label-suffix/label-suffix.directive.mjs +3 -3
  43. package/esm2022/lib/components/forms/components/radio/components/radio/radio.component.mjs +3 -3
  44. package/esm2022/lib/components/forms/components/radio/components/radio-field/radio-field.component.mjs +3 -3
  45. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  46. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +3 -3
  47. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +3 -3
  48. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +3 -3
  49. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button/segmented-button.component.mjs +3 -3
  50. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
  51. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  52. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +3 -3
  53. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +3 -3
  54. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +3 -3
  55. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +32 -66
  56. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +3 -3
  57. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +3 -3
  58. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +13 -14
  59. package/esm2022/lib/components/forms/components/select/components/combobox/public-api.mjs +2 -1
  60. package/esm2022/lib/components/forms/components/select/components/combobox/utils/index.mjs +2 -0
  61. package/esm2022/lib/components/forms/components/select/components/combobox/utils/option.utils.mjs +7 -0
  62. package/esm2022/lib/components/forms/components/select/components/combobox/utils/public-api.mjs +2 -0
  63. package/esm2022/lib/components/forms/components/select/components/native-select/components/native-select/native-select.component.mjs +3 -3
  64. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-input/native-select-input.directive.mjs +3 -3
  65. package/esm2022/lib/components/forms/components/select/components/native-select/directives/native-select-option/native-select-option.directive.mjs +3 -3
  66. package/esm2022/lib/components/forms/components/select/components/native-select/partials/native-select-option/native-select-option.component.mjs +3 -3
  67. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +3 -3
  68. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +3 -3
  69. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +3 -3
  70. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +3 -3
  71. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +3 -3
  72. package/esm2022/lib/components/forms/components/select/components/select/partials/select-option/select-option.component.mjs +3 -3
  73. package/esm2022/lib/components/forms/components/select/components/select-field/select-field.component.mjs +3 -3
  74. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -3
  75. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle/slide-toggle.component.mjs +3 -3
  76. package/esm2022/lib/components/forms/components/slide-toggle/components/slide-toggle-field/slide-toggle-field.component.mjs +3 -3
  77. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +3 -3
  78. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +3 -3
  79. package/esm2022/lib/components/forms/components/slider/components/slider-field/slider-field.component.mjs +3 -3
  80. package/esm2022/lib/components/forms/directives/dynamic-form-field/dynamic-form-field.directive.mjs +3 -3
  81. package/esm2022/lib/components/forms/directives/dynamic-form-group/dynamic-form-group.directive.mjs +3 -3
  82. package/esm2022/lib/components/forms/directives/if-input-empty/if-input-empty.directive.mjs +3 -3
  83. package/esm2022/lib/components/forms/directives/if-input-filled/if-input-filled.directive.mjs +3 -3
  84. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +3 -3
  85. package/esm2022/lib/components/forms/directives/input-prefix/input-prefix.directive.mjs +3 -3
  86. package/esm2022/lib/components/forms/directives/input-suffix/input-suffix.directive.mjs +3 -3
  87. package/esm2022/lib/components/forms/directives/native-input-ref/native-input-ref.directive.mjs +3 -3
  88. package/esm2022/lib/components/forms/directives/static-form-field/static-form-field.directive.mjs +3 -3
  89. package/esm2022/lib/components/forms/directives/static-form-group/static-form-group.directive.mjs +3 -3
  90. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +3 -3
  91. package/esm2022/lib/components/forms/services/default-validator-errors.service.mjs +3 -3
  92. package/esm2022/lib/components/forms/services/form-field-state.service.mjs +3 -3
  93. package/esm2022/lib/components/forms/services/form-group-state.service.mjs +3 -3
  94. package/esm2022/lib/components/forms/services/input-state.service.mjs +3 -3
  95. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +3 -3
  96. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +3 -3
  97. package/esm2022/lib/components/forms/utils/input.base.mjs +3 -3
  98. package/esm2022/lib/components/icons/chevron-icon/chevron-icon.component.mjs +3 -3
  99. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +3 -3
  100. package/esm2022/lib/components/masonry/partials/masonry-item/masonry-item.component.mjs +3 -3
  101. package/esm2022/lib/components/overlay/components/bottom-sheet/components/bottom-sheet-container/bottom-sheet-container.component.mjs +3 -3
  102. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +3 -3
  103. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-drag-handle/bottom-sheet-drag-handle.component.mjs +3 -3
  104. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-title/bottom-sheet-title.directive.mjs +3 -3
  105. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-base.service.mjs +3 -3
  106. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet-swipe-handler.service.mjs +3 -3
  107. package/esm2022/lib/components/overlay/components/bottom-sheet/services/bottom-sheet.service.mjs +3 -3
  108. package/esm2022/lib/components/overlay/components/dialog/components/dialog-container/dialog-container.component.mjs +3 -3
  109. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-close/dialog-close.directive.mjs +3 -3
  110. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +3 -3
  111. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-title/dialog-title.directive.mjs +3 -3
  112. package/esm2022/lib/components/overlay/components/dialog/services/dialog-base.service.mjs +3 -3
  113. package/esm2022/lib/components/overlay/components/dialog/services/dialog.service.mjs +3 -3
  114. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +3 -3
  115. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +3 -3
  116. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +3 -3
  117. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +3 -3
  118. package/esm2022/lib/components/overlay/services/dynamic-overlay.service.mjs +3 -3
  119. package/esm2022/lib/components/pagination/components/pagination/pagination.component.mjs +3 -3
  120. package/esm2022/lib/components/pagination/partials/pagination-link/pagination-link.directive.mjs +3 -3
  121. package/esm2022/lib/components/pagination/services/pagination-head.service.mjs +3 -3
  122. package/esm2022/lib/components/picture/picture-data.directive.mjs +3 -3
  123. package/esm2022/lib/components/picture/picture.component.mjs +3 -3
  124. package/esm2022/lib/components/progress-spinner/progress-spinner.component.mjs +3 -3
  125. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +70 -12
  126. package/esm2022/lib/components/scrollable/public-api.mjs +2 -1
  127. package/esm2022/lib/components/scrollable/scrollable.imports.mjs +10 -2
  128. package/esm2022/lib/components/scrollable/types/index.mjs +2 -0
  129. package/esm2022/lib/components/scrollable/types/public-api.mjs +2 -0
  130. package/esm2022/lib/components/scrollable/types/scrollable.types.mjs +2 -0
  131. package/esm2022/lib/components/skeleton/components/skeleton/skeleton.component.mjs +3 -3
  132. package/esm2022/lib/components/skeleton/partials/skeleton-item/skeleton-item.component.mjs +3 -3
  133. package/esm2022/lib/components/sort/components/sort-header/sort-header.component.mjs +3 -3
  134. package/esm2022/lib/components/sort/partials/sort/sort.directive.mjs +3 -3
  135. package/esm2022/lib/components/sort/services/sort-header-intl.mjs +3 -3
  136. package/esm2022/lib/components/table/components/table/table.component.mjs +3 -3
  137. package/esm2022/lib/components/table/partials/cells/cell/cell.directive.mjs +3 -3
  138. package/esm2022/lib/components/table/partials/cells/cell-def/cell-def.directive.mjs +3 -3
  139. package/esm2022/lib/components/table/partials/cells/column-def/column-def.directive.mjs +3 -3
  140. package/esm2022/lib/components/table/partials/cells/footer-cell/footer-cell.directive.mjs +3 -3
  141. package/esm2022/lib/components/table/partials/cells/footer-cell-def/footer-cell-def.directive.mjs +3 -3
  142. package/esm2022/lib/components/table/partials/cells/header-cell/header-cell.directive.mjs +3 -3
  143. package/esm2022/lib/components/table/partials/cells/header-cell-def/header-cell-def.directive.mjs +3 -3
  144. package/esm2022/lib/components/table/partials/cells/text-column/text-column.component.mjs +3 -3
  145. package/esm2022/lib/components/table/partials/rows/footer-row/footer-row.component.mjs +3 -3
  146. package/esm2022/lib/components/table/partials/rows/footer-row-def/footer-row-def.directive.mjs +3 -3
  147. package/esm2022/lib/components/table/partials/rows/header-row/header-row.component.mjs +3 -3
  148. package/esm2022/lib/components/table/partials/rows/header-row-def/header-row-def.directive.mjs +3 -3
  149. package/esm2022/lib/components/table/partials/rows/no-data-row/no-data-row.directive.mjs +3 -3
  150. package/esm2022/lib/components/table/partials/rows/recycle-rows/recycle-rows.directive.mjs +3 -3
  151. package/esm2022/lib/components/table/partials/rows/row/row.component.mjs +3 -3
  152. package/esm2022/lib/components/table/partials/rows/row-def/row-def.directive.mjs +3 -3
  153. package/esm2022/lib/components/table/partials/table-busy/table-busy.directive.mjs +3 -3
  154. package/esm2022/lib/components/table/partials/table-busy-outlet/table-busy-outlet.directive.mjs +3 -3
  155. package/esm2022/lib/components/tabs/components/inline-tabs/inline-tabs.component.mjs +3 -3
  156. package/esm2022/lib/components/tabs/components/nav-tabs/nav-tabs.component.mjs +3 -3
  157. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab/inline-tab.component.mjs +3 -3
  158. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body/inline-tab-body.component.mjs +3 -3
  159. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-body-host/inline-tab-body-host.directive.mjs +3 -3
  160. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-content/inline-tab-content.directive.mjs +3 -3
  161. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-header/inline-tab-header.component.mjs +3 -3
  162. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label/inline-tab-label.directive.mjs +3 -3
  163. package/esm2022/lib/components/tabs/partials/inline-tabs/inline-tab-label-wrapper/inline-tab-label-wrapper.directive.mjs +3 -3
  164. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tab-link/nav-tab-link.directive.mjs +3 -3
  165. package/esm2022/lib/components/tabs/partials/nav-tabs/nav-tabs-outlet/nav-tabs-outlet.component.mjs +3 -3
  166. package/esm2022/lib/components/tabs/utils/active-tab-underline.util.mjs +3 -3
  167. package/esm2022/lib/components/tabs/utils/paginated-tab-header.directive.mjs +3 -3
  168. package/esm2022/lib/services/swipe-handler.service.mjs +3 -3
  169. package/fesm2022/ethlete-cdk.mjs +589 -554
  170. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  171. package/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.d.ts +2 -0
  172. package/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.d.ts +2 -2
  173. package/lib/components/forms/components/select/components/combobox/public-api.d.ts +1 -0
  174. package/lib/components/forms/components/select/components/combobox/utils/index.d.ts +1 -0
  175. package/lib/components/forms/components/select/components/combobox/utils/option.utils.d.ts +1 -0
  176. package/lib/components/forms/components/select/components/combobox/utils/public-api.d.ts +1 -0
  177. package/lib/components/scrollable/components/scrollable/scrollable.component.d.ts +8 -4
  178. package/lib/components/scrollable/public-api.d.ts +1 -0
  179. package/lib/components/scrollable/scrollable.imports.d.ts +2 -1
  180. package/lib/components/scrollable/types/index.d.ts +1 -0
  181. package/lib/components/scrollable/types/public-api.d.ts +1 -0
  182. package/lib/components/scrollable/types/scrollable.types.d.ts +1 -0
  183. package/package.json +4 -4
@@ -1,14 +1,15 @@
1
1
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, PAGE_DOWN, PAGE_UP, SPACE, TAB, UP_ARROW, } from '@angular/cdk/keycodes';
2
+ import { A, ENTER, ESCAPE, TAB } from '@angular/cdk/keycodes';
3
3
  import { AsyncPipe, NgFor, NgIf } from '@angular/common';
4
4
  import { ChangeDetectionStrategy, Component, EventEmitter, InjectionToken, Input, Output, ViewEncapsulation, inject, isDevMode, } from '@angular/core';
5
- import { AnimatedOverlayDirective, LetDirective, RuntimeError, SelectionModel } from '@ethlete/core';
5
+ import { ActiveSelectionModel, AnimatedOverlayDirective, LetDirective, RuntimeError, SelectionModel, } from '@ethlete/core';
6
6
  import { BehaviorSubject, catchError, combineLatest, debounceTime, distinctUntilChanged, map, skip, skipWhile, takeUntil, tap, throwError, } from 'rxjs';
7
7
  import { ChevronIconComponent } from '../../../../../../../icons';
8
8
  import { INPUT_TOKEN, InputDirective, NativeInputRefDirective } from '../../../../../../directives';
9
9
  import { DecoratedInputBase } from '../../../../../../utils';
10
10
  import { SELECT_FIELD_TOKEN } from '../../../../directives';
11
11
  import { ComboboxBodyComponent } from '../../partials';
12
+ import { isOptionDisabled } from '../../utils';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "../../../../../../directives/input/input.directive";
14
15
  import * as i2 from "@ethlete/core";
@@ -135,10 +136,12 @@ class ComboboxComponent extends DecoratedInputBase {
135
136
  this._currentFilter$ = new BehaviorSubject('');
136
137
  this._isOpen$ = this._animatedOverlay.isMounted$;
137
138
  this._selectionModel = new SelectionModel();
139
+ this._activeSelectionModel = new ActiveSelectionModel();
138
140
  this.selectedOptions$ = this._selectionModel.selection$;
139
141
  this.multiple$ = this._selectionModel.allowMultiple$;
140
142
  this.options$ = this._selectionModel.filteredOptions$;
141
143
  this.rawOptions$ = this._selectionModel.options$;
144
+ this._activeSelectionModel.setSelectionModel(this._selectionModel);
142
145
  this._animatedOverlay.placement = 'bottom';
143
146
  this._animatedOverlay.allowedAutoPlacements = ['bottom', 'top'];
144
147
  this._bindings.push({
@@ -232,6 +235,9 @@ class ComboboxComponent extends DecoratedInputBase {
232
235
  isOptionSelected(option) {
233
236
  return this._selectionModel.isSelected$(option);
234
237
  }
238
+ isOptionActive(option) {
239
+ return this._activeSelectionModel.activeOption$.pipe(map((activeOption) => activeOption === option));
240
+ }
235
241
  //#endregion
236
242
  //#region Protected Methods
237
243
  processKeydownEvent(event) {
@@ -242,17 +248,26 @@ class ComboboxComponent extends DecoratedInputBase {
242
248
  const value = event.target.value;
243
249
  const hasFilterValue = !!value;
244
250
  const result = {};
245
- // The user typed a custom value and pressed enter. Add it to the selected options.
246
251
  if (keyCode === ENTER) {
252
+ event.preventDefault();
253
+ event.stopPropagation();
254
+ // The user typed a custom value and pressed enter. Add it to the selected options.
255
+ // FIXME: Currently it is impossible to select the active option with the keyboard if canAddCustomValue is true.
256
+ // To fix this, the active option should also include the origin it got active from (keyboard or programmatic).
257
+ // The "value" changing should put the combobox into a "use the custom input on enter" mode.
258
+ // The "active option" changing via keyboard should put the combobox into a "use the active option on enter" mode.
247
259
  if (canAddCustomValue && hasFilterValue) {
248
260
  result.optionAction = { type: 'add', option: value };
249
261
  }
250
262
  else {
251
- if (isMultiple) {
252
- // TODO: Toggle the focused option
253
- }
254
- else {
255
- // TODO: Select the focused option
263
+ const activeOption = this._activeSelectionModel.activeOption;
264
+ if (activeOption) {
265
+ if (isMultiple) {
266
+ result.optionAction = { type: 'toggle', option: activeOption };
267
+ }
268
+ else {
269
+ result.optionAction = { type: 'add', option: activeOption };
270
+ }
256
271
  }
257
272
  }
258
273
  if (isMultiple) {
@@ -263,17 +278,6 @@ class ComboboxComponent extends DecoratedInputBase {
263
278
  }
264
279
  return this._interpretKeyHandlerResult(result);
265
280
  }
266
- if (keyCode === SPACE) {
267
- if (isMultiple) {
268
- // result.setFilter = '';
269
- // TODO: Toggle the focused option
270
- }
271
- else {
272
- result.overlayOperation = 'close';
273
- // TODO: Select the focused option
274
- }
275
- return this._interpretKeyHandlerResult(result);
276
- }
277
281
  if (keyCode === ESCAPE) {
278
282
  if (isOpen) {
279
283
  result.overlayOperation = 'close';
@@ -291,24 +295,7 @@ class ComboboxComponent extends DecoratedInputBase {
291
295
  if (!isOpen) {
292
296
  result.overlayOperation = 'open';
293
297
  }
294
- if (keyCode === DOWN_ARROW) {
295
- result.focusAction = 'next';
296
- }
297
- if (keyCode === UP_ARROW) {
298
- result.focusAction = 'previous';
299
- }
300
- if (keyCode === PAGE_UP) {
301
- result.focusAction = { type: 'offset', offset: -10 };
302
- }
303
- if (keyCode === PAGE_DOWN) {
304
- result.focusAction = { type: 'offset', offset: 10 };
305
- }
306
- if (keyCode === HOME) {
307
- result.focusAction = 'first';
308
- }
309
- if (keyCode === END) {
310
- result.focusAction = 'last';
311
- }
298
+ this._activeSelectionModel.evaluateKeyboardEvent(event);
312
299
  if (keyCode === A && event.ctrlKey && isMultiple) {
313
300
  result.optionAction = 'toggleAll';
314
301
  event.preventDefault();
@@ -392,6 +379,8 @@ class ComboboxComponent extends DecoratedInputBase {
392
379
  }
393
380
  else {
394
381
  const { type, option } = result.optionAction;
382
+ if (isOptionDisabled(option))
383
+ return;
395
384
  if (type === 'add') {
396
385
  this._selectionModel.addSelectedOption(option);
397
386
  }
@@ -403,29 +392,6 @@ class ComboboxComponent extends DecoratedInputBase {
403
392
  }
404
393
  }
405
394
  }
406
- if (result.focusAction) {
407
- if (typeof result.focusAction === 'string') {
408
- if (result.focusAction === 'first') {
409
- // TODO: Implement
410
- }
411
- if (result.focusAction === 'last') {
412
- // TODO: Implement
413
- }
414
- if (result.focusAction === 'next') {
415
- // TODO: Implement
416
- }
417
- if (result.focusAction === 'previous') {
418
- // TODO: Implement
419
- }
420
- }
421
- else {
422
- const { type } = result.focusAction;
423
- if (type === 'offset') {
424
- const { offset } = result.focusAction;
425
- // TODO: Implement
426
- }
427
- }
428
- }
429
395
  }
430
396
  //#endregion
431
397
  //#region Dev mode
@@ -459,16 +425,16 @@ class ComboboxComponent extends DecoratedInputBase {
459
425
  }))
460
426
  .subscribe();
461
427
  }
462
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
463
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", inputs: { options: "options", initialValue: "initialValue", filterInternal: "filterInternal", loading: "loading", error: "error", emptyText: "emptyText", placeholder: "placeholder", multiple: "multiple", bindLabel: "bindLabel", bindValue: "bindValue", allowCustomValues: "allowCustomValues" }, outputs: { filterChange: "filterChange" }, host: { listeners: { "click": "selectInputAndOpen()" }, classAttribute: "et-combobox" }, providers: [
428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
429
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.5", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", inputs: { options: "options", initialValue: "initialValue", filterInternal: "filterInternal", loading: "loading", error: "error", emptyText: "emptyText", placeholder: "placeholder", multiple: "multiple", bindLabel: "bindLabel", bindValue: "bindValue", allowCustomValues: "allowCustomValues" }, outputs: { filterChange: "filterChange" }, host: { listeners: { "click": "selectInputAndOpen()" }, classAttribute: "et-combobox" }, providers: [
464
430
  {
465
431
  provide: COMBOBOX_TOKEN,
466
432
  useExisting: ComboboxComponent,
467
433
  },
468
- ], usesInheritance: true, hostDirectives: [{ directive: i1.InputDirective }, { directive: i2.AnimatedOverlayDirective }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"multiple$ | async\" class=\"et-combobox-selected-options\">\n <li *ngFor=\"let item of selectedOptions$ | async\" class=\"et-combobox-selected-option\">\n {{ getOptionLabel(item) | async }}\n <span\n (click)=\"removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n </ul>\n\n <input\n (keydown)=\"processKeydownEvent($event)\"\n (click)=\"open()\"\n (blur)=\"handleBlurEvent()\"\n (input)=\"processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[data-popper-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[data-popper-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:300px;overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid}.et-combobox-option{display:block}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
434
+ ], usesInheritance: true, hostDirectives: [{ directive: i1.InputDirective }, { directive: i2.AnimatedOverlayDirective }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"multiple$ | async\" class=\"et-combobox-selected-options\">\n <li *ngFor=\"let item of selectedOptions$ | async\" class=\"et-combobox-selected-option\">\n {{ getOptionLabel(item) | async }}\n <span\n (click)=\"removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n </ul>\n\n <input\n (keydown)=\"processKeydownEvent($event)\"\n (click)=\"open()\"\n (blur)=\"handleBlurEvent()\"\n (input)=\"processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[data-popper-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[data-popper-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:300px;overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
469
435
  }
470
436
  export { ComboboxComponent };
471
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxComponent, decorators: [{
437
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxComponent, decorators: [{
472
438
  type: Component,
473
439
  args: [{ selector: 'et-combobox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
474
440
  class: 'et-combobox',
@@ -478,7 +444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
478
444
  provide: COMBOBOX_TOKEN,
479
445
  useExisting: ComboboxComponent,
480
446
  },
481
- ], template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"multiple$ | async\" class=\"et-combobox-selected-options\">\n <li *ngFor=\"let item of selectedOptions$ | async\" class=\"et-combobox-selected-option\">\n {{ getOptionLabel(item) | async }}\n <span\n (click)=\"removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n </ul>\n\n <input\n (keydown)=\"processKeydownEvent($event)\"\n (click)=\"open()\"\n (blur)=\"handleBlurEvent()\"\n (input)=\"processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[data-popper-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[data-popper-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:300px;overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid}.et-combobox-option{display:block}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
447
+ ], template: "<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n<ng-content select=\"[etInputPrefix]\" />\n\n<div class=\"et-combobox-wrapper\">\n <ul *ngIf=\"multiple$ | async\" class=\"et-combobox-selected-options\">\n <li *ngFor=\"let item of selectedOptions$ | async\" class=\"et-combobox-selected-option\">\n {{ getOptionLabel(item) | async }}\n <span\n (click)=\"removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </span>\n </li>\n </ul>\n\n <input\n (keydown)=\"processKeydownEvent($event)\"\n (click)=\"open()\"\n (blur)=\"handleBlurEvent()\"\n (input)=\"processInputEvent($event)\"\n type=\"text\"\n etNativeInputRef\n />\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[data-popper-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[data-popper-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:300px;overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
482
448
  }], ctorParameters: function () { return []; }, propDecorators: { options: [{
483
449
  type: Input,
484
450
  args: [{ required: true }]
@@ -505,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
505
471
  }], filterChange: [{
506
472
  type: Output
507
473
  }] } });
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsQ0FBQyxFQUNELFVBQVUsRUFDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxFQUNULE9BQU8sRUFDUCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxF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LFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7U0FDRixpSkNsSUgsMmdDQW1DQSwwMUNEd0ZZLElBQUksNkZBQUUsdUJBQXVCLCtJQUFFLFNBQVMsOENBQUUsb0JBQW9CLDREQUFnQixLQUFLOztTQVNsRixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFwQjdCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsU0FBUyxFQUFFLHNCQUFzQjtxQkFDbEMsV0FDUSxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxrQkFDOUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxhQUM5RDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsY0FBYzs0QkFDdkIsV0FBVyxtQkFBbUI7eUJBQy9CO3FCQUNGOzBFQWNHLE9BQU87c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBU3JCLFlBQVk7c0JBRGYsS0FBSztnQkFNRixjQUFjO3NCQURqQixLQUFLO2dCQWlCRixPQUFPO3NCQURWLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQVVOLFNBQVM7c0JBRFIsS0FBSztnQkFJRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQU1GLFNBQVM7c0JBRFosS0FBSztnQkFNRixTQUFTO3NCQURaLEtBQUs7Z0JBTUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQWNhLFlBQVk7c0JBRDlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBBLFxuICBET1dOX0FSUk9XLFxuICBFTkQsXG4gIEVOVEVSLFxuICBFU0NBUEUsXG4gIEhPTUUsXG4gIFBBR0VfRE9XTixcbiAgUEFHRV9VUCxcbiAgU1BBQ0UsXG4gIFRBQixcbiAgVVBfQVJST1csXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSwgTGV0RGlyZWN0aXZlLCBSdW50aW1lRXJyb3IsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2tpcCxcbiAgc2tpcFdoaWxlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2ljb25zJztcbmltcG9ydCB7IElOUFVUX1RPS0VOLCBJbnB1dERpcmVjdGl2ZSwgTmF0aXZlSW5wdXRSZWZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IERlY29yYXRlZElucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFNFTEVDVF9GSUVMRF9UT0tFTiB9IGZyb20gJy4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29tYm9ib3hCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFydGlhbHMnO1xuXG5jb25zdCBDT01CT0JPWF9FUlJPUlMgPSB7XG4gIDE6ICdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIGFycmF5IG9mIG9iamVjdHMuIFRoaXMgaXMgZHVlIHRvIFwiYmluZExhYmVsXCIgYW5kIFwiYmluZFZhbHVlXCIgYmVpbmcgc2V0LicsXG4gIDI6ICdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIGFycmF5IG9mIHByaW1pdGl2ZXMuIFRoaXMgaXMgZHVlIHRvIFwiYmluZExhYmVsXCIgYW5kIFwiYmluZFZhbHVlXCIgbm90IGJlaW5nIHNldCBvciBcImFsbG93Q3VzdG9tVmFsdWVzXCIgYmVpbmcgc2V0IHRvIHRydWUuJyxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IGNvbWJvYm94RXJyb3IgPSAoY29kZToga2V5b2YgdHlwZW9mIENPTUJPQk9YX0VSUk9SUywgZGF0YTogdW5rbm93bikgPT4ge1xuICBjb25zdCBtZXNzYWdlID0gYDxldC1jb21ib2JveD46ICR7Q09NQk9CT1hfRVJST1JTW2NvZGVdfWA7XG5cbiAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihjb2RlLCBtZXNzYWdlLCBkYXRhKTtcbn07XG5cbmNvbnN0IGlzUHJpbWl0aXZlQXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdCA9IHZhbHVlWzBdO1xuICBjb25zdCBsYXN0ID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG5cbiAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0eXBlb2YgZmlyc3QgIT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXN0ICE9PSAnb2JqZWN0Jztcbn07XG5cbmNvbnN0IGlzT2JqZWN0QXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZmlyc3QgPSB2YWx1ZVswXTtcbiAgY29uc3QgbGFzdCA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuXG4gIGlmICghZmlyc3QgfHwgIWxhc3QpIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gdHlwZW9mIGZpcnN0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbGFzdCA9PT0gJ29iamVjdCc7XG59O1xuXG5jb25zdCBpc0VtcHR5QXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBbXSA9PiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDA7XG59O1xuXG5jb25zdCBDb21ib2JveE9wdGlvblR5cGUgPSB7XG4gIFByaW1pdGl2ZTogJ3ByaW1pdGl2ZScsXG4gIE9iamVjdDogJ29iamVjdCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQ09NQk9CT1hfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tYm9ib3hDb21wb25lbnQ+KCdFVF9DT01CT0JPWF9UT0tFTicpO1xuXG5pbnRlcmZhY2UgS2V5SGFuZGxlclJlc3VsdCB7XG4gIHNldEZpbHRlcj86IHN0cmluZztcbiAgb3ZlcmxheU9wZXJhdGlvbj86ICdvcGVuJyB8ICdjbG9zZSc7XG4gIG9wdGlvbkFjdGlvbj86XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhZGQnO1xuICAgICAgICBvcHRpb246IHVua25vd247XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyZW1vdmUnO1xuICAgICAgICBvcHRpb246IHVua25vd247XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGUnO1xuICAgICAgICBvcHRpb246IHVua25vd247XG4gICAgICB9XG4gICAgfCAnY2xlYXInXG4gICAgfCAndG9nZ2xlQWxsJztcbiAgZm9jdXNBY3Rpb24/OiAnZmlyc3QnIHwgJ2xhc3QnIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8IHsgdHlwZTogJ29mZnNldCc7IG9mZnNldDogbnVtYmVyIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbWJvYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2V0LWNvbWJvYm94JyxcbiAgICAnKGNsaWNrKSc6ICdzZWxlY3RJbnB1dEFuZE9wZW4oKScsXG4gIH0sXG4gIGltcG9ydHM6IFtOZ0lmLCBOYXRpdmVJbnB1dFJlZkRpcmVjdGl2ZSwgQXN5bmNQaXBlLCBDaGV2cm9uSWNvbkNvbXBvbmVudCwgTGV0RGlyZWN0aXZlLCBOZ0Zvcl0sXG4gIGhvc3REaXJlY3RpdmVzOiBbeyBkaXJlY3RpdmU6IElucHV0RGlyZWN0aXZlIH0sIEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPTUJPQk9YX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IENvbWJvYm94Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGV4dGVuZHMgRGVjb3JhdGVkSW5wdXRCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8jcmVnaW9uIEluamVjdHNcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dCA9IGluamVjdChJTlBVVF9UT0tFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGVkT3ZlcmxheSA9IGluamVjdDxBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmU8Q29tYm9ib3hCb2R5Q29tcG9uZW50Pj4oQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0RmllbGQgPSBpbmplY3QoU0VMRUNUX0ZJRUxEX1RPS0VOKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW5wdXRzXG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldEZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiB1bmtub3duW10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24odmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGZpbHRlckludGVybmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJbnRlcm5hbCQudmFsdWU7XG4gIH1cbiAgc2V0IGZpbHRlckludGVybmFsKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICBjb25zdCB2YWwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2ZpbHRlckludGVybmFsJC5uZXh0KHZhbCk7XG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0RmlsdGVyKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0RmlsdGVyKHRoaXMuX2N1cnJlbnRGaWx0ZXIpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9maWx0ZXJJbnRlcm5hbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nJC52YWx1ZTtcbiAgfVxuICBzZXQgbG9hZGluZyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fbG9hZGluZyQubmV4dChjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKTtcbiAgfVxuICBwcml2YXRlIF9sb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nJCA9IHRoaXMuX2xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3IkLnZhbHVlO1xuICB9XG4gIHNldCBlcnJvcih2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX2Vycm9yJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9lcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHVua25vd24+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIGVtcHR5VGV4dCA9ICdObyByZXN1bHRzIGZvdW5kJztcblxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyJC52YWx1ZTtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoKVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEFsbG93TXVsdGlwbGUoY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgYmluZExhYmVsKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0TGFiZWxCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBiaW5kVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRWYWx1ZUJpbmRpbmcodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGFsbG93Q3VzdG9tVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyQudmFsdWU7XG4gIH1cbiAgc2V0IGFsbG93Q3VzdG9tVmFsdWVzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyQubmV4dChjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKTtcbiAgfVxuICBwcml2YXRlIF9hbGxvd0N1c3RvbVZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gT3V0cHV0c1xuXG4gIEBPdXRwdXQoKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1lbWJlcnNcblxuICBwcml2YXRlIGdldCBfY3VycmVudEZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlciQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudEZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgZ2V0IF9pc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50ZWQ7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNPcGVuJCA9IHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50ZWQkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsKCk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRPcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGlvbiQ7XG4gIHJlYWRvbmx5IG11bHRpcGxlJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUkO1xuICByZWFkb25seSBvcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmZpbHRlcmVkT3B0aW9ucyQ7XG4gIHJlYWRvbmx5IHJhd09wdGlvbnMkID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwub3B0aW9ucyQ7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENvbXB1dGVzXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIExpZmVjeWNsZVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9hbmltYXRlZE92ZXJsYXkucGxhY2VtZW50ID0gJ2JvdHRvbSc7XG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IFsnYm90dG9tJywgJ3RvcCddO1xuXG4gICAgdGhpcy5fYmluZGluZ3MucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC0tbG9hZGluZycsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9sb2FkaW5nJCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2JpbmRpbmdzLnB1c2goe1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtLWVycm9yJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2Vycm9yJC5waXBlKG1hcCgodikgPT4gISF2KSksXG4gICAgfSk7XG5cbiAgICB0aGlzLl9iaW5kaW5ncy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZWxlY3RGaWVsZC5fYmluZGluZ3MucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1zZWxlY3QtZmllbGQtLW11bHRpcGxlJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMubXVsdGlwbGUkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2VsZWN0RmllbGQuX2JpbmRpbmdzLnB1c2goe1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LWZpZWxkLS1vcGVuJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuX2lzT3BlbiQsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0RGlzcGF0Y2hGaWx0ZXJDaGFuZ2VzKCk7XG4gICAgdGhpcy5faW5pdFJlcG9zaXRpb25PblZhbHVlQ2hhbmdlcygpO1xuXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICB0aGlzLl9kZWJ1Z1ZhbGlkYXRlQ29tYm9ib3hDb25maWcoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC52YWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5faW5wdXQuX3VwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLl9zZXRGaWx0ZXJGcm9tSW5wdXRWYWx1ZSgpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRMYWJlbCQob3B0aW9uKTtcbiAgfVxuXG4gIGdldE9wdGlvblZhbHVlKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRWYWx1ZSQob3B0aW9uKTtcbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogdW5rbm93bikge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG5cbiAgICB0aGlzLmlucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIC8vIGlmICghdGhpcy5fc2VsZWN0Qm9keUNvbmZpZykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX2lzT3BlbiB8fCB0aGlzLmlucHV0LmRpc2FibGVkIHx8IHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc01vdW50aW5nKSByZXR1cm47XG5cbiAgICAvLyB0aGlzLl9zZXRTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkubW91bnQoe1xuICAgICAgY29tcG9uZW50OiBDb21ib2JveEJvZHlDb21wb25lbnQsXG4gICAgICBtaXJyb3JXaWR0aDogdHJ1ZSxcbiAgICAgIC8vIGRhdGE6IHsgX2JvZHlUZW1wbGF0ZTogdGhpcy5fc2VsZWN0Qm9keUNvbmZpZy50ZW1wbGF0ZSB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgLy8gdGhpcy5fc2VsZWN0Qm9keUlkJC5uZXh0KGluc3RhbmNlLnNlbGVjdEJvZHkuaWQpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc09wZW4gfHwgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LmlzVW5tb3VudGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LnVubW91bnQoKTtcblxuICAgIC8vIHRoaXMuX3NlbGVjdEJvZHlJZCQubmV4dChudWxsKTtcbiAgfVxuXG4gIHNlbGVjdElucHV0QW5kT3BlbigpIHtcbiAgICBpZiAodGhpcy5pbnB1dC5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVJbnB1dFJlZj8uZWxlbWVudC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgIHRoaXMub3BlbigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZUZyb21PcHRpb24ob3B0aW9uOiB1bmtub3duKSB7XG4gICAgdGhpcy5pbnB1dC5fbWFya0FzVG91Y2hlZCgpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB0aGlzLl9zZXRGaWx0ZXJGcm9tSW5wdXRWYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgIH1cbiAgfVxuXG4gIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQkKG9wdGlvbik7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0tleWRvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuX2lzT3BlbjtcbiAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZTtcbiAgICBjb25zdCBjYW5BZGRDdXN0b21WYWx1ZSA9IHRoaXMuYWxsb3dDdXN0b21WYWx1ZXM7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIGNvbnN0IGhhc0ZpbHRlclZhbHVlID0gISF2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3VsdDogS2V5SGFuZGxlclJlc3VsdCA9IHt9O1xuXG4gICAgLy8gVGhlIHVzZXIgdHlwZWQgYSBjdXN0b20gdmFsdWUgYW5kIHByZXNzZWQgZW50ZXIuIEFkZCBpdCB0byB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgIGlmIChjYW5BZGRDdXN0b21WYWx1ZSAmJiBoYXNGaWx0ZXJWYWx1ZSkge1xuICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0geyB0eXBlOiAnYWRkJywgb3B0aW9uOiB2YWx1ZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBUb2dnbGUgdGhlIGZvY3VzZWQgb3B0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVE9ETzogU2VsZWN0IHRoZSBmb2N1c2VkIG9wdGlvblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgIHJlc3VsdC5zZXRGaWx0ZXIgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gU1BBQ0UpIHtcbiAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgIC8vIHJlc3VsdC5zZXRGaWx0ZXIgPSAnJztcbiAgICAgICAgLy8gVE9ETzogVG9nZ2xlIHRoZSBmb2N1c2VkIG9wdGlvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgICAvLyBUT0RPOiBTZWxlY3QgdGhlIGZvY3VzZWQgb3B0aW9uXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IEVTQ0FQRSkge1xuICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICByZXN1bHQub3ZlcmxheU9wZXJhdGlvbiA9ICdjbG9zZSc7XG4gICAgICB9IGVsc2UgaWYgKCFpc011bHRpcGxlKSB7XG4gICAgICAgIHJlc3VsdC5zZXRGaWx0ZXIgPSAnJztcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9ICdjbGVhcic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IFRBQikge1xuICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnb3Blbic7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cpIHtcbiAgICAgIHJlc3VsdC5mb2N1c0FjdGlvbiA9ICduZXh0JztcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgIHJlc3VsdC5mb2N1c0FjdGlvbiA9ICdwcmV2aW91cyc7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IFBBR0VfVVApIHtcbiAgICAgIHJlc3VsdC5mb2N1c0FjdGlvbiA9IHsgdHlwZTogJ29mZnNldCcsIG9mZnNldDogLTEwIH07XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09IFBBR0VfRE9XTikge1xuICAgICAgcmVzdWx0LmZvY3VzQWN0aW9uID0geyB0eXBlOiAnb2Zmc2V0Jywgb2Zmc2V0OiAxMCB9O1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBIT01FKSB7XG4gICAgICByZXN1bHQuZm9jdXNBY3Rpb24gPSAnZmlyc3QnO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBFTkQpIHtcbiAgICAgIHJlc3VsdC5mb2N1c0FjdGlvbiA9ICdsYXN0JztcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gQSAmJiBldmVudC5jdHJsS2V5ICYmIGlzTXVsdGlwbGUpIHtcbiAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSAndG9nZ2xlQWxsJztcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzSW5wdXRFdmVudChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUJsdXJFdmVudCgpIHtcbiAgICB0aGlzLmlucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09ICcnKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG5cbiAgcHJpdmF0ZSBfaW5pdERpc3BhdGNoRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiB0aGlzLmZpbHRlckludGVybmFsKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodikgPT4gdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0UmVwb3NpdGlvbk9uVmFsdWVDaGFuZ2VzKCkge1xuICAgIHRoaXMuaW5wdXQudmFsdWVDaGFuZ2UkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fYW5pbWF0ZWRPdmVybGF5Ll9yZXBvc2l0aW9uKCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pbnB1dC5uYXRpdmVJbnB1dFJlZiAmJiB0aGlzLmlucHV0Lm5hdGl2ZUlucHV0UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlSW5wdXRSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09IHZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJC5uZXh0KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmZpbHRlckludGVybmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCkge1xuICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXQudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwob3B0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIobGFiZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQ6IEtleUhhbmRsZXJSZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID09PSAnb3BlbicpIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuc2V0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcihyZXN1bHQuc2V0RmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQub3B0aW9uQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ3RvZ2dsZUFsbCcpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBvcHRpb24gfSA9IHJlc3VsdC5vcHRpb25BY3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhZGQnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWRkU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnJlbW92ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5mb2N1c0FjdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQuZm9jdXNBY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChyZXN1bHQuZm9jdXNBY3Rpb24gPT09ICdmaXJzdCcpIHtcbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQuZm9jdXNBY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5mb2N1c0FjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LmZvY3VzQWN0aW9uID09PSAncHJldmlvdXMnKSB7XG4gICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcmVzdWx0LmZvY3VzQWN0aW9uO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnb2Zmc2V0Jykge1xuICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSByZXN1bHQuZm9jdXNBY3Rpb247XG5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBEZXYgbW9kZVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZyhpc1JldHJ5ID0gZmFsc2UpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5sYWJlbEJpbmRpbmckLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC52YWx1ZUJpbmRpbmckLCB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoaXNSZXRyeSA/IDEgOiAwKSwgLy8gU2tpcCBpZiByZXRyeWluZyB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgbWFwKChbYmluZExhYmVsLCBiaW5kVmFsdWUsIGFsbG93Q3VzdG9tVmFsdWVzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlT2JqZWN0cyA9IGJpbmRMYWJlbCAmJiBiaW5kVmFsdWUgJiYgIWFsbG93Q3VzdG9tVmFsdWVzO1xuXG4gICAgICAgICAgaWYgKHNob3VsZEJlT2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5QcmltaXRpdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGV4cGVjdGVkT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5vcHRpb25zO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHBlY3RlZE9wdGlvblR5cGUgPT09IENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3RBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICB0aHJvdyBjb21ib2JveEVycm9yKDEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRPcHRpb25UeXBlID09PSBDb21ib2JveE9wdGlvblR5cGUuUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWl0aXZlQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcigyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKHRydWUpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAtLT5cbjwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL3VzZS10cmFjay1ieS1mdW5jdGlvbiAtLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltldElucHV0UHJlZml4XVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJldC1jb21ib2JveC13cmFwcGVyXCI+XG4gIDx1bCAqbmdJZj1cIm11bHRpcGxlJCB8IGFzeW5jXCIgY2xhc3M9XCJldC1jb21ib2JveC1zZWxlY3RlZC1vcHRpb25zXCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkT3B0aW9ucyQgfCBhc3luY1wiIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uXCI+XG4gICAgICB7eyBnZXRPcHRpb25MYWJlbChpdGVtKSB8IGFzeW5jIH19XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPcHRpb24oaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uLXJlbW92ZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICB4XG4gICAgICA8L3NwYW4+XG4gICAgPC9saT5cbiAgPC91bD5cblxuICA8aW5wdXRcbiAgICAoa2V5ZG93bik9XCJwcm9jZXNzS2V5ZG93bkV2ZW50KCRldmVudClcIlxuICAgIChjbGljayk9XCJvcGVuKClcIlxuICAgIChibHVyKT1cImhhbmRsZUJsdXJFdmVudCgpXCJcbiAgICAoaW5wdXQpPVwicHJvY2Vzc0lucHV0RXZlbnQoJGV2ZW50KVwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIGV0TmF0aXZlSW5wdXRSZWZcbiAgLz5cblxuICA8ZXQtY2hldnJvbi1pY29uIGNsYXNzPVwiZXQtY29tYm9ib3gtY2hldnJvblwiIC8+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRTdWZmaXhdXCIgLz5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudCAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixZQUFZLEVBQ1osY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxJQUFJLEVBQ0osU0FBUyxFQUNU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QixLQUFLO2dCQWlCRixPQUFPO3NCQURWLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQVVOLFNBQVM7c0JBRFIsS0FBSztnQkFJRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQU1GLFNBQVM7c0JBRFosS0FBSztnQkFNRixTQUFTO3NCQURaLEtBQUs7Z0JBTUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQWNhLFlBQVk7c0JBRDlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBBLCBFTlRFUiwgRVNDQVBFLCBUQUIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmVTZWxlY3Rpb25Nb2RlbCxcbiAgQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlLFxuICBMZXREaXJlY3RpdmUsXG4gIFJ1bnRpbWVFcnJvcixcbiAgU2VsZWN0aW9uTW9kZWwsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNraXAsXG4gIHNraXBXaGlsZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hldnJvbkljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9pY29ucyc7XG5pbXBvcnQgeyBJTlBVVF9UT0tFTiwgSW5wdXREaXJlY3RpdmUsIE5hdGl2ZUlucHV0UmVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBEZWNvcmF0ZWRJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTRUxFQ1RfRklFTERfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IENvbWJvYm94Qm9keUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhcnRpYWxzJztcbmltcG9ydCB7IGlzT3B0aW9uRGlzYWJsZWQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IENPTUJPQk9YX0VSUk9SUyA9IHtcbiAgMTogJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cy4gVGhpcyBpcyBkdWUgdG8gXCJiaW5kTGFiZWxcIiBhbmQgXCJiaW5kVmFsdWVcIiBiZWluZyBzZXQuJyxcbiAgMjogJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gYXJyYXkgb2YgcHJpbWl0aXZlcy4gVGhpcyBpcyBkdWUgdG8gXCJiaW5kTGFiZWxcIiBhbmQgXCJiaW5kVmFsdWVcIiBub3QgYmVpbmcgc2V0IG9yIFwiYWxsb3dDdXN0b21WYWx1ZXNcIiBiZWluZyBzZXQgdG8gdHJ1ZS4nLFxufSBhcyBjb25zdDtcblxuY29uc3QgY29tYm9ib3hFcnJvciA9IChjb2RlOiBrZXlvZiB0eXBlb2YgQ09NQk9CT1hfRVJST1JTLCBkYXRhOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgPGV0LWNvbWJvYm94PjogJHtDT01CT0JPWF9FUlJPUlNbY29kZV19YDtcblxuICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGNvZGUsIG1lc3NhZ2UsIGRhdGEpO1xufTtcblxuY29uc3QgaXNQcmltaXRpdmVBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGZpcnN0ID0gdmFsdWVbMF07XG4gIGNvbnN0IGxhc3QgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcblxuICBpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHR5cGVvZiBmaXJzdCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGxhc3QgIT09ICdvYmplY3QnO1xufTtcblxuY29uc3QgaXNPYmplY3RBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdCA9IHZhbHVlWzBdO1xuICBjb25zdCBsYXN0ID0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XG5cbiAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0eXBlb2YgZmlyc3QgPT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXN0ID09PSAnb2JqZWN0Jztcbn07XG5cbmNvbnN0IGlzRW1wdHlBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFtdID0+IHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMDtcbn07XG5cbmNvbnN0IENvbWJvYm94T3B0aW9uVHlwZSA9IHtcbiAgUHJpbWl0aXZlOiAncHJpbWl0aXZlJyxcbiAgT2JqZWN0OiAnb2JqZWN0Jyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21ib2JveENvbXBvbmVudD4oJ0VUX0NPTUJPQk9YX1RPS0VOJyk7XG5cbmludGVyZmFjZSBLZXlIYW5kbGVyUmVzdWx0IHtcbiAgc2V0RmlsdGVyPzogc3RyaW5nO1xuICBvdmVybGF5T3BlcmF0aW9uPzogJ29wZW4nIHwgJ2Nsb3NlJztcbiAgb3B0aW9uQWN0aW9uPzpcbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2FkZCc7XG4gICAgICAgIG9wdGlvbjogdW5rbm93bjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3JlbW92ZSc7XG4gICAgICAgIG9wdGlvbjogdW5rbm93bjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZSc7XG4gICAgICAgIG9wdGlvbjogdW5rbm93bjtcbiAgICAgIH1cbiAgICB8ICdjbGVhcidcbiAgICB8ICd0b2dnbGVBbGwnO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1jb21ib2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1jb21ib2JveCcsXG4gICAgJyhjbGljayknOiAnc2VsZWN0SW5wdXRBbmRPcGVuKCknLFxuICB9LFxuICBpbXBvcnRzOiBbTmdJZiwgTmF0aXZlSW5wdXRSZWZEaXJlY3RpdmUsIEFzeW5jUGlwZSwgQ2hldnJvbkljb25Db21wb25lbnQsIExldERpcmVjdGl2ZSwgTmdGb3JdLFxuICBob3N0RGlyZWN0aXZlczogW3sgZGlyZWN0aXZlOiBJbnB1dERpcmVjdGl2ZSB9LCBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDT01CT0JPWF9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBDb21ib2JveENvbXBvbmVudCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIERlY29yYXRlZElucHV0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vI3JlZ2lvbiBJbmplY3RzXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXQgPSBpbmplY3QoSU5QVVRfVE9LRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hbmltYXRlZE92ZXJsYXkgPSBpbmplY3Q8QW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlPENvbWJvYm94Qm9keUNvbXBvbmVudD4+KEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdEZpZWxkID0gaW5qZWN0KFNFTEVDVF9GSUVMRF9UT0tFTik7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIElucHV0c1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5nZXRGaWx0ZXJlZE9wdGlvbnMoKTtcbiAgfVxuICBzZXQgb3B0aW9ucyh2YWx1ZTogdW5rbm93bltdKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgaW5pdGlhbFZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBmaWx0ZXJJbnRlcm5hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySW50ZXJuYWwkLnZhbHVlO1xuICB9XG4gIHNldCBmaWx0ZXJJbnRlcm5hbCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgdmFsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9maWx0ZXJJbnRlcm5hbCQubmV4dCh2YWwpO1xuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEZpbHRlcignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldEZpbHRlcih0aGlzLl9jdXJyZW50RmlsdGVyKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZmlsdGVySW50ZXJuYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcblxuICBASW5wdXQoKVxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQudmFsdWU7XG4gIH1cbiAgc2V0IGxvYWRpbmcodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZGluZyQgPSB0aGlzLl9sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcblxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yJC52YWx1ZTtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9lcnJvciQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPihudWxsKTtcblxuICBASW5wdXQoKVxuICBlbXB0eVRleHQgPSAnTm8gcmVzdWx0cyBmb3VuZCc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlciQudmFsdWU7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIkLm5leHQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgc2V0IG11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRBbGxvd011bHRpcGxlKGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGJpbmRMYWJlbCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldExhYmVsQmluZGluZyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgYmluZFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0VmFsdWVCaW5kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBhbGxvd0N1c3RvbVZhbHVlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDdXN0b21WYWx1ZXMkLnZhbHVlO1xuICB9XG4gIHNldCBhbGxvd0N1c3RvbVZhbHVlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fYWxsb3dDdXN0b21WYWx1ZXMkLm5leHQoY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDdXN0b21WYWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE91dHB1dHNcblxuICBAT3V0cHV0KClcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNZW1iZXJzXG5cbiAgcHJpdmF0ZSBnZXQgX2N1cnJlbnRGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIGdldCBfaXNPcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzT3BlbiQgPSB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGVkJDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVTZWxlY3Rpb25Nb2RlbCA9IG5ldyBBY3RpdmVTZWxlY3Rpb25Nb2RlbCgpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9ucyQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24kO1xuICByZWFkb25seSBtdWx0aXBsZSQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlJDtcbiAgcmVhZG9ubHkgb3B0aW9ucyQgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5maWx0ZXJlZE9wdGlvbnMkO1xuICByZWFkb25seSByYXdPcHRpb25zJCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLm9wdGlvbnMkO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBDb21wdXRlc1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fYWN0aXZlU2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fc2VsZWN0aW9uTW9kZWwpO1xuXG4gICAgdGhpcy5fYW5pbWF0ZWRPdmVybGF5LnBsYWNlbWVudCA9ICdib3R0b20nO1xuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5hbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBbJ2JvdHRvbScsICd0b3AnXTtcblxuICAgIHRoaXMuX2JpbmRpbmdzLnB1c2goe1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtLWxvYWRpbmcnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fbG9hZGluZyQsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9iaW5kaW5ncy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LS1lcnJvcicsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9lcnJvciQucGlwZShtYXAoKHYpID0+ICEhdikpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fYmluZGluZ3MucHVzaCh7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC0tb3BlbicsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9pc09wZW4kLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2VsZWN0RmllbGQuX2JpbmRpbmdzLnB1c2goe1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtc2VsZWN0LWZpZWxkLS1tdWx0aXBsZScsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLm11bHRpcGxlJCxcbiAgICB9KTtcblxuICAgIHRoaXMuX3NlbGVjdEZpZWxkLl9iaW5kaW5ncy5wdXNoKHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LXNlbGVjdC1maWVsZC0tb3BlbicsXG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLl9pc09wZW4kLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdERpc3BhdGNoRmlsdGVyQ2hhbmdlcygpO1xuICAgIHRoaXMuX2luaXRSZXBvc2l0aW9uT25WYWx1ZUNoYW5nZXMoKTtcblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2lucHV0Ll91cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5fc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwkKG9wdGlvbik7XG4gIH1cblxuICBnZXRPcHRpb25WYWx1ZShvcHRpb246IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0VmFsdWUkKG9wdGlvbik7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IHVua25vd24pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuXG4gICAgdGhpcy5pbnB1dC5fbWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICAvLyBpZiAoIXRoaXMuX3NlbGVjdEJvZHlDb25maWcpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9pc09wZW4gfHwgdGhpcy5pbnB1dC5kaXNhYmxlZCB8fCB0aGlzLl9hbmltYXRlZE92ZXJsYXkuaXNNb3VudGluZykgcmV0dXJuO1xuXG4gICAgLy8gdGhpcy5fc2V0U2VsZWN0ZWRPcHRpb25BY3RpdmUoKTtcblxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5fYW5pbWF0ZWRPdmVybGF5Lm1vdW50KHtcbiAgICAgIGNvbXBvbmVudDogQ29tYm9ib3hCb2R5Q29tcG9uZW50LFxuICAgICAgbWlycm9yV2lkdGg6IHRydWUsXG4gICAgICAvLyBkYXRhOiB7IF9ib2R5VGVtcGxhdGU6IHRoaXMuX3NlbGVjdEJvZHlDb25maWcudGVtcGxhdGUgfSxcbiAgICB9KTtcblxuICAgIGlmICghaW5zdGFuY2UpIHJldHVybjtcblxuICAgIC8vIHRoaXMuX3NlbGVjdEJvZHlJZCQubmV4dChpbnN0YW5jZS5zZWxlY3RCb2R5LmlkKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5faXNPcGVuIHx8IHRoaXMuX2FuaW1hdGVkT3ZlcmxheS5pc1VubW91bnRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2FuaW1hdGVkT3ZlcmxheS51bm1vdW50KCk7XG5cbiAgICAvLyB0aGlzLl9zZWxlY3RCb2R5SWQkLm5leHQobnVsbCk7XG4gIH1cblxuICBzZWxlY3RJbnB1dEFuZE9wZW4oKSB7XG4gICAgaWYgKHRoaXMuaW5wdXQuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuaW5wdXQubmF0aXZlSW5wdXRSZWY/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWVGcm9tT3B0aW9uKG9wdGlvbjogdW5rbm93bikge1xuICAgIHRoaXMuaW5wdXQuX21hcmtBc1RvdWNoZWQoKTtcblxuICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hZGRTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2VsZWN0aW9uTW9kZWwuYWxsb3dNdWx0aXBsZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgdGhpcy5fc2V0RmlsdGVyRnJvbUlucHV0VmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyKCcnKTtcbiAgICB9XG4gIH1cblxuICBpc09wdGlvblNlbGVjdGVkKG9wdGlvbjogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkJChvcHRpb24pO1xuICB9XG5cbiAgaXNPcHRpb25BY3RpdmUob3B0aW9uOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmFjdGl2ZU9wdGlvbiQucGlwZShtYXAoKGFjdGl2ZU9wdGlvbikgPT4gYWN0aXZlT3B0aW9uID09PSBvcHRpb24pKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5ZG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5faXNPcGVuO1xuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlO1xuICAgIGNvbnN0IGNhbkFkZEN1c3RvbVZhbHVlID0gdGhpcy5hbGxvd0N1c3RvbVZhbHVlcztcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgY29uc3QgaGFzRmlsdGVyVmFsdWUgPSAhIXZhbHVlO1xuXG4gICAgY29uc3QgcmVzdWx0OiBLZXlIYW5kbGVyUmVzdWx0ID0ge307XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gVGhlIHVzZXIgdHlwZWQgYSBjdXN0b20gdmFsdWUgYW5kIHByZXNzZWQgZW50ZXIuIEFkZCBpdCB0byB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgaXQgaXMgaW1wb3NzaWJsZSB0byBzZWxlY3QgdGhlIGFjdGl2ZSBvcHRpb24gd2l0aCB0aGUga2V5Ym9hcmQgaWYgY2FuQWRkQ3VzdG9tVmFsdWUgaXMgdHJ1ZS5cbiAgICAgIC8vIFRvIGZpeCB0aGlzLCB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBvcmlnaW4gaXQgZ290IGFjdGl2ZSBmcm9tIChrZXlib2FyZCBvciBwcm9ncmFtbWF0aWMpLlxuICAgICAgLy8gVGhlIFwidmFsdWVcIiBjaGFuZ2luZyBzaG91bGQgcHV0IHRoZSBjb21ib2JveCBpbnRvIGEgXCJ1c2UgdGhlIGN1c3RvbSBpbnB1dCBvbiBlbnRlclwiIG1vZGUuXG4gICAgICAvLyBUaGUgXCJhY3RpdmUgb3B0aW9uXCIgY2hhbmdpbmcgdmlhIGtleWJvYXJkIHNob3VsZCBwdXQgdGhlIGNvbWJvYm94IGludG8gYSBcInVzZSB0aGUgYWN0aXZlIG9wdGlvbiBvbiBlbnRlclwiIG1vZGUuXG4gICAgICBpZiAoY2FuQWRkQ3VzdG9tVmFsdWUgJiYgaGFzRmlsdGVyVmFsdWUpIHtcbiAgICAgICAgcmVzdWx0Lm9wdGlvbkFjdGlvbiA9IHsgdHlwZTogJ2FkZCcsIG9wdGlvbjogdmFsdWUgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmFjdGl2ZU9wdGlvbjtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSB7IHR5cGU6ICd0b2dnbGUnLCBvcHRpb246IGFjdGl2ZU9wdGlvbiB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQub3B0aW9uQWN0aW9uID0geyB0eXBlOiAnYWRkJywgb3B0aW9uOiBhY3RpdmVPcHRpb24gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgcmVzdWx0LnNldEZpbHRlciA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBFU0NBUEUpIHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgcmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPSAnY2xvc2UnO1xuICAgICAgfSBlbHNlIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICByZXN1bHQuc2V0RmlsdGVyID0gJyc7XG4gICAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSAnY2xlYXInO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSBUQUIpIHtcbiAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ2Nsb3NlJztcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcnByZXRLZXlIYW5kbGVyUmVzdWx0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID0gJ29wZW4nO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGVsLmV2YWx1YXRlS2V5Ym9hcmRFdmVudChldmVudCk7XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gQSAmJiBldmVudC5jdHJsS2V5ICYmIGlzTXVsdGlwbGUpIHtcbiAgICAgIHJlc3VsdC5vcHRpb25BY3Rpb24gPSAndG9nZ2xlQWxsJztcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ludGVycHJldEtleUhhbmRsZXJSZXN1bHQocmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzSW5wdXRFdmVudChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUJsdXJFdmVudCgpIHtcbiAgICB0aGlzLmlucHV0Ll9tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5pbnB1dC5fc2V0U2hvdWxkRGlzcGxheUVycm9yKHRydWUpO1xuXG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcignJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09ICcnKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhclNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG5cbiAgcHJpdmF0ZSBfaW5pdERpc3BhdGNoRmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSgoKSA9PiB0aGlzLmZpbHRlckludGVybmFsKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgodikgPT4gdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0UmVwb3NpdGlvbk9uVmFsdWVDaGFuZ2VzKCkge1xuICAgIHRoaXMuaW5wdXQudmFsdWVDaGFuZ2UkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fYW5pbWF0ZWRPdmVybGF5Ll9yZXBvc2l0aW9uKCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pbnB1dC5uYXRpdmVJbnB1dFJlZiAmJiB0aGlzLmlucHV0Lm5hdGl2ZUlucHV0UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlSW5wdXRSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXIgPT09IHZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyJC5uZXh0KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmZpbHRlckludGVybmFsKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRGaWx0ZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEZpbHRlckZyb21JbnB1dFZhbHVlKCkge1xuICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5hbGxvd011bHRpcGxlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXQudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLl91cGRhdGVGaWx0ZXIoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKCFvcHRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuZ2V0TGFiZWwob3B0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICB0aGlzLl91cGRhdGVGaWx0ZXIobGFiZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJwcmV0S2V5SGFuZGxlclJlc3VsdChyZXN1bHQ6IEtleUhhbmRsZXJSZXN1bHQpIHtcbiAgICBpZiAocmVzdWx0Lm92ZXJsYXlPcGVyYXRpb24gPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5vdmVybGF5T3BlcmF0aW9uID09PSAnb3BlbicpIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuc2V0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcihyZXN1bHQuc2V0RmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQub3B0aW9uQWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ2NsZWFyJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm9wdGlvbkFjdGlvbiA9PT0gJ3RvZ2dsZUFsbCcpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC50b2dnbGVBbGxTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBvcHRpb24gfSA9IHJlc3VsdC5vcHRpb25BY3Rpb247XG5cbiAgICAgICAgaWYgKGlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnYWRkJykge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBEZXYgbW9kZVxuXG4gIHByaXZhdGUgX2RlYnVnVmFsaWRhdGVDb21ib2JveENvbmZpZyhpc1JldHJ5ID0gZmFsc2UpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5sYWJlbEJpbmRpbmckLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC52YWx1ZUJpbmRpbmckLCB0aGlzLl9hbGxvd0N1c3RvbVZhbHVlcyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoaXNSZXRyeSA/IDEgOiAwKSwgLy8gU2tpcCBpZiByZXRyeWluZyB0byBhdm9pZCBpbmZpbml0ZSBsb29wXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgbWFwKChbYmluZExhYmVsLCBiaW5kVmFsdWUsIGFsbG93Q3VzdG9tVmFsdWVzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlT2JqZWN0cyA9IGJpbmRMYWJlbCAmJiBiaW5kVmFsdWUgJiYgIWFsbG93Q3VzdG9tVmFsdWVzO1xuXG4gICAgICAgICAgaWYgKHNob3VsZEJlT2JqZWN0cykge1xuICAgICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIENvbWJvYm94T3B0aW9uVHlwZS5QcmltaXRpdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGV4cGVjdGVkT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5vcHRpb25zO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHBlY3RlZE9wdGlvblR5cGUgPT09IENvbWJvYm94T3B0aW9uVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3RBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICB0aHJvdyBjb21ib2JveEVycm9yKDEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRPcHRpb25UeXBlID09PSBDb21ib2JveE9wdGlvblR5cGUuUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJpbWl0aXZlQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgY29tYm9ib3hFcnJvcigyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWdWYWxpZGF0ZUNvbWJvYm94Q29uZmlnKHRydWUpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAtLT5cbjwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL3VzZS10cmFjay1ieS1mdW5jdGlvbiAtLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cIltldElucHV0UHJlZml4XVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJldC1jb21ib2JveC13cmFwcGVyXCI+XG4gIDx1bCAqbmdJZj1cIm11bHRpcGxlJCB8IGFzeW5jXCIgY2xhc3M9XCJldC1jb21ib2JveC1zZWxlY3RlZC1vcHRpb25zXCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkT3B0aW9ucyQgfCBhc3luY1wiIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uXCI+XG4gICAgICB7eyBnZXRPcHRpb25MYWJlbChpdGVtKSB8IGFzeW5jIH19XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPcHRpb24oaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uLXJlbW92ZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICB4XG4gICAgICA8L3NwYW4+XG4gICAgPC9saT5cbiAgPC91bD5cblxuICA8aW5wdXRcbiAgICAoa2V5ZG93bik9XCJwcm9jZXNzS2V5ZG93bkV2ZW50KCRldmVudClcIlxuICAgIChjbGljayk9XCJvcGVuKClcIlxuICAgIChibHVyKT1cImhhbmRsZUJsdXJFdmVudCgpXCJcbiAgICAoaW5wdXQpPVwicHJvY2Vzc0lucHV0RXZlbnQoJGV2ZW50KVwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIGV0TmF0aXZlSW5wdXRSZWZcbiAgLz5cblxuICA8ZXQtY2hldnJvbi1pY29uIGNsYXNzPVwiZXQtY29tYm9ib3gtY2hldnJvblwiIC8+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRTdWZmaXhdXCIgLz5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudCAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -2,8 +2,8 @@ import { Directive, InjectionToken } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export const COMBOBOX_DIR_TOKEN = new InjectionToken('ET_COMBOBOX_INPUT_TOKEN');
4
4
  class ComboboxDirective {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: ComboboxDirective, isStandalone: true, providers: [
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.5", type: ComboboxDirective, isStandalone: true, providers: [
7
7
  {
8
8
  provide: COMBOBOX_DIR_TOKEN,
9
9
  useExisting: ComboboxDirective,
@@ -11,7 +11,7 @@ class ComboboxDirective {
11
11
  ], ngImport: i0 }); }
12
12
  }
13
13
  export { ComboboxDirective };
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxDirective, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxDirective, decorators: [{
15
15
  type: Directive,
16
16
  args: [{
17
17
  standalone: true,
@@ -23,8 +23,8 @@ class ComboboxBodyComponent {
23
23
  .pipe(takeUntil(this._destroy$), tap(() => this.combobox.close()))
24
24
  .subscribe();
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: ComboboxBodyComponent, isStandalone: true, selector: "et-combobox-body", host: { classAttribute: "et-combobox-body et-with-default-animation" }, providers: [
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.5", type: ComboboxBodyComponent, isStandalone: true, selector: "et-combobox-body", host: { classAttribute: "et-combobox-body et-with-default-animation" }, providers: [
28
28
  {
29
29
  provide: COMBOBOX_BODY_TOKEN,
30
30
  useExisting: ComboboxBodyComponent,
@@ -32,7 +32,7 @@ class ComboboxBodyComponent {
32
32
  ], viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n<div class=\"et-combobox-body-container\" etAnimatedLifecycle>\n <ng-container *etLet=\"combobox.options$ | async as options\">\n <p *ngIf=\"!options?.length\" class=\"et-combobox-body--empty\">{{ combobox.emptyText }}</p>\n\n <et-combobox-option *ngFor=\"let option of options\" [option]=\"option\" />\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ComboboxOptionComponent, selector: "et-combobox-option", inputs: ["option"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
33
33
  }
34
34
  export { ComboboxBodyComponent };
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxBodyComponent, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxBodyComponent, decorators: [{
36
36
  type: Component,
37
37
  args: [{ selector: 'et-combobox-body', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
38
38
  class: 'et-combobox-body et-with-default-animation',
@@ -3,20 +3,25 @@ import { ChangeDetectionStrategy, Component, InjectionToken, Input, ViewEncapsul
3
3
  import { createReactiveBindings } from '@ethlete/core';
4
4
  import { BehaviorSubject, map, switchMap } from 'rxjs';
5
5
  import { COMBOBOX_TOKEN } from '../../components';
6
+ import { isOptionDisabled } from '../../utils';
6
7
  import * as i0 from "@angular/core";
7
8
  export const COMBOBOX_OPTION_TOKEN = new InjectionToken('ET_COMBOBOX_OPTION_TOKEN');
8
9
  class ComboboxOptionComponent {
9
10
  constructor() {
10
11
  this.combobox = inject(COMBOBOX_TOKEN);
11
12
  this._option$ = new BehaviorSubject(null);
12
- this.disabled$ = this._option$.pipe(map((opt) => this._isOptionDisabled(opt)));
13
+ this.disabled$ = this._option$.pipe(map((opt) => isOptionDisabled(opt)));
13
14
  this.selected$ = this._option$.pipe(switchMap((opt) => this.combobox.isOptionSelected(opt)));
15
+ this.active$ = this._option$.pipe(switchMap((opt) => this.combobox.isOptionActive(opt)));
14
16
  this._bindings = createReactiveBindings({
15
17
  attribute: 'class.et-combobox-option--selected',
16
18
  observable: this.selected$,
17
19
  }, {
18
20
  attribute: 'class.et-combobox-option--disabled',
19
21
  observable: this.disabled$,
22
+ }, {
23
+ attribute: 'class.et-combobox-option--active',
24
+ observable: this.active$,
20
25
  });
21
26
  }
22
27
  get option() {
@@ -25,20 +30,14 @@ class ComboboxOptionComponent {
25
30
  set option(value) {
26
31
  this._option$.next(value);
27
32
  }
28
- activateOption() {
29
- if (this._isOptionDisabled(this.option)) {
33
+ selectOption() {
34
+ if (isOptionDisabled(this.option)) {
30
35
  return;
31
36
  }
32
37
  this.combobox.writeValueFromOption(this.option);
33
38
  }
34
- _isOptionDisabled(opt) {
35
- if (typeof opt === 'object' && opt !== null && 'disabled' in opt) {
36
- return !!opt.disabled;
37
- }
38
- return false;
39
- }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: ComboboxOptionComponent, isStandalone: true, selector: "et-combobox-option", inputs: { option: "option" }, host: { listeners: { "click": "activateOption()" }, classAttribute: "et-combobox-option" }, providers: [
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.5", type: ComboboxOptionComponent, isStandalone: true, selector: "et-combobox-option", inputs: { option: "option" }, host: { listeners: { "click": "selectOption()" }, classAttribute: "et-combobox-option" }, providers: [
42
41
  {
43
42
  provide: COMBOBOX_OPTION_TOKEN,
44
43
  useExisting: ComboboxOptionComponent,
@@ -46,11 +45,11 @@ class ComboboxOptionComponent {
46
45
  ], ngImport: i0, template: "{{ combobox.getOptionLabel(option) | async }}\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
47
46
  }
48
47
  export { ComboboxOptionComponent };
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ComboboxOptionComponent, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.5", ngImport: i0, type: ComboboxOptionComponent, decorators: [{
50
49
  type: Component,
51
50
  args: [{ selector: 'et-combobox-option', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
52
51
  class: 'et-combobox-option',
53
- '(click)': 'activateOption()',
52
+ '(click)': 'selectOption()',
54
53
  }, imports: [AsyncPipe], hostDirectives: [], providers: [
55
54
  {
56
55
  provide: COMBOBOX_OPTION_TOKEN,
@@ -61,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
61
60
  type: Input,
62
61
  args: [{ required: true }]
63
62
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtb3B0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL2NvbWJvYm94L3BhcnRpYWxzL2NvbWJvYm94LW9wdGlvbi9jb21ib2JveC1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvcGFydGlhbHMvY29tYm9ib3gtb3B0aW9uL2NvbWJvYm94LW9wdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFbEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQTBCLDBCQUEwQixDQUFDLENBQUM7QUFFN0csTUFtQmEsdUJBQXVCO0lBbkJwQztRQW9CcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQVM3QyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFbkMsY0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRSxjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRyxjQUFTLEdBQUcsc0JBQXNCLENBQ3pDO1lBQ0UsU0FBUyxFQUFFLG9DQUFvQztZQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDM0IsRUFDRDtZQUNFLFNBQVMsRUFBRSxvQ0FBb0M7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzNCLENBQ0YsQ0FBQztLQWlCSDtJQXZDQyxJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFrQkQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBWTtRQUNwQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUU7WUFDaEUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUN2QjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0F6Q1UsdUJBQXVCO2tHQUF2Qix1QkFBdUIsMkxBUHZCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLHVCQUF1QjthQUNyQztTQUNGLDBCQ3pCSCxpREFDQSx1Q0RpQlksU0FBUzs7U0FTUix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFuQm5DLFNBQVM7K0JBQ0Usb0JBQW9CLGNBRWxCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsb0JBQW9CO3dCQUMzQixTQUFTLEVBQUUsa0JBQWtCO3FCQUM5QixXQUNRLENBQUMsU0FBUyxDQUFDLGtCQUNKLEVBQUUsYUFDUDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0Y7OEJBTUcsTUFBTTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENPTUJPQk9YX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9PUFRJT05fVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tYm9ib3hPcHRpb25Db21wb25lbnQ+KCdFVF9DT01CT0JPWF9PUFRJT05fVE9LRU4nKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtY29tYm9ib3gtb3B0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LW9wdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1jb21ib2JveC1vcHRpb24nLFxuICAgICcoY2xpY2spJzogJ2FjdGl2YXRlT3B0aW9uKCknLFxuICB9LFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDT01CT0JPWF9PUFRJT05fVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQ29tYm9ib3hPcHRpb25Db21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hPcHRpb25Db21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tYm9ib3ggPSBpbmplY3QoQ09NQk9CT1hfVE9LRU4pO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbiQudmFsdWU7XG4gIH1cbiAgc2V0IG9wdGlvbih2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX29wdGlvbiQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfb3B0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5rbm93bj4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc2FibGVkJCA9IHRoaXMuX29wdGlvbiQucGlwZShtYXAoKG9wdCkgPT4gdGhpcy5faXNPcHRpb25EaXNhYmxlZChvcHQpKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkJCA9IHRoaXMuX29wdGlvbiQucGlwZShzd2l0Y2hNYXAoKG9wdCkgPT4gdGhpcy5jb21ib2JveC5pc09wdGlvblNlbGVjdGVkKG9wdCkpKTtcblxuICByZWFkb25seSBfYmluZGluZ3MgPSBjcmVhdGVSZWFjdGl2ZUJpbmRpbmdzKFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LW9wdGlvbi0tc2VsZWN0ZWQnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5zZWxlY3RlZCQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC1vcHRpb24tLWRpc2FibGVkJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuZGlzYWJsZWQkLFxuICAgIH0sXG4gICk7XG5cbiAgYWN0aXZhdGVPcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuX2lzT3B0aW9uRGlzYWJsZWQodGhpcy5vcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21ib2JveC53cml0ZVZhbHVlRnJvbU9wdGlvbih0aGlzLm9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF9pc09wdGlvbkRpc2FibGVkKG9wdDogdW5rbm93bikge1xuICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyAmJiBvcHQgIT09IG51bGwgJiYgJ2Rpc2FibGVkJyBpbiBvcHQpIHtcbiAgICAgIHJldHVybiAhIW9wdC5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsInt7IGNvbWJvYm94LmdldE9wdGlvbkxhYmVsKG9wdGlvbikgfCBhc3luYyB9fVxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtb3B0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL2NvbWJvYm94L3BhcnRpYWxzL2NvbWJvYm94LW9wdGlvbi9jb21ib2JveC1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvcGFydGlhbHMvY29tYm9ib3gtb3B0aW9uL2NvbWJvYm94LW9wdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUEwQiwwQkFBMEIsQ0FBQyxDQUFDO0FBRTdHLE1BbUJhLHVCQUF1QjtJQW5CcEM7UUFvQnFCLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFTN0MsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRW5DLGNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRSxjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RixZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUYsY0FBUyxHQUFHLHNCQUFzQixDQUN6QztZQUNFLFNBQVMsRUFBRSxvQ0FBb0M7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzNCLEVBQ0Q7WUFDRSxTQUFTLEVBQUUsb0NBQW9DO1lBQy9DLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMzQixFQUNEO1lBQ0UsU0FBUyxFQUFFLGtDQUFrQztZQUM3QyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDekIsQ0FDRixDQUFDO0tBU0g7SUFyQ0MsSUFDSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBd0JTLFlBQVk7UUFDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0F2Q1UsdUJBQXVCO2tHQUF2Qix1QkFBdUIseUxBUHZCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLHVCQUF1QjthQUNyQztTQUNGLDBCQzFCSCxpREFDQSx1Q0RrQlksU0FBUzs7U0FTUix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFuQm5DLFNBQVM7K0JBQ0Usb0JBQW9CLGNBRWxCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsb0JBQW9CO3dCQUMzQixTQUFTLEVBQUUsZ0JBQWdCO3FCQUM1QixXQUNRLENBQUMsU0FBUyxDQUFDLGtCQUNKLEVBQUUsYUFDUDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0Y7OEJBTUcsTUFBTTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENPTUJPQk9YX1RPS0VOIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBpc09wdGlvbkRpc2FibGVkIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgQ09NQk9CT1hfT1BUSU9OX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94T3B0aW9uQ29tcG9uZW50PignRVRfQ09NQk9CT1hfT1BUSU9OX1RPS0VOJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbWJvYm94LW9wdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1vcHRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtY29tYm9ib3gtb3B0aW9uJyxcbiAgICAnKGNsaWNrKSc6ICdzZWxlY3RPcHRpb24oKScsXG4gIH0sXG4gIGltcG9ydHM6IFtBc3luY1BpcGVdLFxuICBob3N0RGlyZWN0aXZlczogW10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENPTUJPQk9YX09QVElPTl9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBDb21ib2JveE9wdGlvbkNvbXBvbmVudCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveE9wdGlvbkNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21ib2JveCA9IGluamVjdChDT01CT0JPWF9UT0tFTik7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uJC52YWx1ZTtcbiAgfVxuICBzZXQgb3B0aW9uKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fb3B0aW9uJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9vcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duPihudWxsKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYWJsZWQkID0gdGhpcy5fb3B0aW9uJC5waXBlKG1hcCgob3B0KSA9PiBpc09wdGlvbkRpc2FibGVkKG9wdCkpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWQkID0gdGhpcy5fb3B0aW9uJC5waXBlKHN3aXRjaE1hcCgob3B0KSA9PiB0aGlzLmNvbWJvYm94LmlzT3B0aW9uU2VsZWN0ZWQob3B0KSkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmUkID0gdGhpcy5fb3B0aW9uJC5waXBlKHN3aXRjaE1hcCgob3B0KSA9PiB0aGlzLmNvbWJvYm94LmlzT3B0aW9uQWN0aXZlKG9wdCkpKTtcblxuICByZWFkb25seSBfYmluZGluZ3MgPSBjcmVhdGVSZWFjdGl2ZUJpbmRpbmdzKFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZTogJ2NsYXNzLmV0LWNvbWJvYm94LW9wdGlvbi0tc2VsZWN0ZWQnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5zZWxlY3RlZCQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGU6ICdjbGFzcy5ldC1jb21ib2JveC1vcHRpb24tLWRpc2FibGVkJyxcbiAgICAgIG9ic2VydmFibGU6IHRoaXMuZGlzYWJsZWQkLFxuICAgIH0sXG4gICAge1xuICAgICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtY29tYm9ib3gtb3B0aW9uLS1hY3RpdmUnLFxuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5hY3RpdmUkLFxuICAgIH0sXG4gICk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdE9wdGlvbigpIHtcbiAgICBpZiAoaXNPcHRpb25EaXNhYmxlZCh0aGlzLm9wdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbWJvYm94LndyaXRlVmFsdWVGcm9tT3B0aW9uKHRoaXMub3B0aW9uKTtcbiAgfVxufVxuIiwie3sgY29tYm9ib3guZ2V0T3B0aW9uTGFiZWwob3B0aW9uKSB8IGFzeW5jIH19XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  export * from './combobox.imports';
2
2
  export * from './components/public-api';
3
3
  export * from './directives/public-api';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL2NvbWJvYm94L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbWJvYm94LmltcG9ydHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3B1YmxpYy1hcGknO1xuIl19
4
+ export * from './utils/public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL2NvbWJvYm94L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tYm9ib3guaW1wb3J0cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export const isOptionDisabled = (opt) => {
2
+ if (typeof opt === 'object' && opt !== null && 'disabled' in opt) {
3
+ return !!opt.disabled;
4
+ }
5
+ return false;
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvdXRpbHMvb3B0aW9uLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUU7SUFDL0MsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFO1FBQ2hFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7S0FDdkI7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc09wdGlvbkRpc2FibGVkID0gKG9wdDogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgJiYgb3B0ICE9PSBudWxsICYmICdkaXNhYmxlZCcgaW4gb3B0KSB7XG4gICAgcmV0dXJuICEhb3B0LmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './option.utils';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9jb21wb25lbnRzL2NvbWJvYm94L3V0aWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb3B0aW9uLnV0aWxzJztcbiJdfQ==