@koobiq/components 18.30.0 → 18.32.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 (254) hide show
  1. package/actions-panel/actions-panel-config.d.ts +2 -0
  2. package/actions-panel/actions-panel.d.ts +3 -57
  3. package/autocomplete/autocomplete-trigger.directive.d.ts +3 -4
  4. package/autocomplete/autocomplete.component.d.ts +1 -0
  5. package/autocomplete/autocomplete.module.d.ts +1 -1
  6. package/button-toggle/button-toggle.module.d.ts +3 -4
  7. package/code-block/code-block-highlight.d.ts +1 -2
  8. package/code-block/code-block.d.ts +57 -10
  9. package/core/common-behaviors/color.d.ts +3 -0
  10. package/core/common-behaviors/common-module.d.ts +16 -3
  11. package/core/common-behaviors/error-state.d.ts +18 -0
  12. package/core/common-behaviors/index.d.ts +1 -1
  13. package/core/form-field/form-field-ref.d.ts +5 -3
  14. package/core/option/_option-theme.scss +24 -2
  15. package/core/option/option.d.ts +2 -2
  16. package/core/public-api.d.ts +1 -0
  17. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -1
  18. package/core/styles/common/_select.scss +10 -24
  19. package/core/styles/theming/_theming.scss +0 -4
  20. package/core/tokens/index.d.ts +1 -0
  21. package/core/tokens/window.d.ts +5 -0
  22. package/core/validation/validation.d.ts +23 -2
  23. package/datepicker/datepicker-input.directive.d.ts +14 -5
  24. package/datepicker/datepicker-input.scss +1 -5
  25. package/datepicker/datepicker-module.d.ts +1 -1
  26. package/datepicker/datepicker-toggle.component.d.ts +22 -0
  27. package/datepicker/datepicker-toggle.scss +6 -0
  28. package/dropdown/dropdown-trigger.directive.d.ts +1 -0
  29. package/ellipsis-center/ellipsis-center.directive.d.ts +7 -1
  30. package/esm2022/actions-panel/actions-panel-config.mjs +1 -1
  31. package/esm2022/actions-panel/actions-panel.mjs +16 -113
  32. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +9 -13
  33. package/esm2022/autocomplete/autocomplete.component.mjs +10 -2
  34. package/esm2022/autocomplete/autocomplete.module.mjs +5 -11
  35. package/esm2022/breadcrumbs/breadcrumbs.mjs +1 -1
  36. package/esm2022/button-toggle/button-toggle.module.mjs +5 -6
  37. package/esm2022/code-block/code-block-highlight.mjs +8 -12
  38. package/esm2022/code-block/code-block.mjs +60 -18
  39. package/esm2022/core/common-behaviors/color.mjs +4 -1
  40. package/esm2022/core/common-behaviors/common-module.mjs +19 -26
  41. package/esm2022/core/common-behaviors/error-state.mjs +28 -1
  42. package/esm2022/core/common-behaviors/index.mjs +2 -2
  43. package/esm2022/core/form-field/form-field-ref.mjs +3 -4
  44. package/esm2022/core/option/option.mjs +9 -7
  45. package/esm2022/core/public-api.mjs +2 -1
  46. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +3 -3
  47. package/esm2022/core/tokens/index.mjs +2 -0
  48. package/esm2022/core/tokens/window.mjs +19 -0
  49. package/esm2022/core/utils/utils.mjs +2 -1
  50. package/esm2022/core/validation/validation.mjs +21 -2
  51. package/esm2022/core/version.mjs +2 -2
  52. package/esm2022/datepicker/calendar-body.component.mjs +3 -3
  53. package/esm2022/datepicker/calendar-header.component.mjs +3 -3
  54. package/esm2022/datepicker/datepicker-input.directive.mjs +66 -6
  55. package/esm2022/datepicker/datepicker-module.mjs +8 -3
  56. package/esm2022/datepicker/datepicker-toggle.component.mjs +94 -10
  57. package/esm2022/dropdown/dropdown-trigger.directive.mjs +4 -3
  58. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  59. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +8 -1
  60. package/esm2022/file-upload/multiple-file-upload.component.mjs +2 -2
  61. package/esm2022/filter-bar/filter-bar.mjs +27 -5
  62. package/esm2022/filter-bar/filter-bar.types.mjs +1 -1
  63. package/esm2022/filter-bar/filter-search.mjs +2 -2
  64. package/esm2022/filter-bar/filters.mjs +3 -3
  65. package/esm2022/filter-bar/pipe-add.mjs +2 -2
  66. package/esm2022/filter-bar/pipes/pipe-date.mjs +5 -11
  67. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +5 -11
  68. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +29 -9
  69. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +30 -10
  70. package/esm2022/filter-bar/pipes/pipe-select.mjs +2 -2
  71. package/esm2022/filter-bar/pipes/pipe-text.mjs +2 -2
  72. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +2 -2
  73. package/esm2022/form-field/cleaner.mjs +11 -6
  74. package/esm2022/form-field/error.mjs +20 -0
  75. package/esm2022/form-field/fieldset.mjs +84 -0
  76. package/esm2022/form-field/form-field-control.mjs +2 -2
  77. package/esm2022/form-field/form-field.mjs +247 -74
  78. package/esm2022/form-field/form-field.module.mjs +59 -47
  79. package/esm2022/form-field/hint.mjs +10 -18
  80. package/esm2022/form-field/label.mjs +19 -0
  81. package/esm2022/form-field/password-hint.mjs +6 -5
  82. package/esm2022/form-field/password-toggle.mjs +52 -27
  83. package/esm2022/form-field/prefix.mjs +9 -3
  84. package/esm2022/form-field/public-api.mjs +5 -2
  85. package/esm2022/form-field/reactive-password-hint.mjs +65 -0
  86. package/esm2022/form-field/stepper.mjs +34 -16
  87. package/esm2022/form-field/suffix.mjs +8 -3
  88. package/esm2022/form-field/validate.directive.mjs +16 -19
  89. package/esm2022/icon/icon-button.component.mjs +2 -2
  90. package/esm2022/input/input-number.mjs +7 -2
  91. package/esm2022/input/input.module.mjs +1 -5
  92. package/esm2022/list/list-selection.component.mjs +5 -4
  93. package/esm2022/list/list.component.mjs +2 -2
  94. package/esm2022/modal/modal-util.mjs +2 -1
  95. package/esm2022/navbar/navbar-item.component.mjs +10 -11
  96. package/esm2022/overflow-items/overflow-items.mjs +27 -10
  97. package/esm2022/radio/radio.module.mjs +4 -5
  98. package/esm2022/scrollbar/scrollbar.component.mjs +14 -11
  99. package/esm2022/scrollbar/scrollbar.directive.mjs +2 -1
  100. package/esm2022/select/select.component.mjs +39 -18
  101. package/esm2022/sidepanel/sidepanel.module.mjs +1 -5
  102. package/esm2022/splitter/splitter.component.mjs +5 -3
  103. package/esm2022/tabs/paginated-tab-header.mjs +6 -2
  104. package/esm2022/tabs/tabs.module.mjs +1 -5
  105. package/esm2022/tags/tag-list.component.mjs +2 -2
  106. package/esm2022/textarea/textarea.component.mjs +7 -6
  107. package/esm2022/textarea/textarea.module.mjs +4 -5
  108. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  109. package/esm2022/timezone/timezone-select.component.mjs +6 -4
  110. package/esm2022/toast/toast-animations.mjs +2 -2
  111. package/esm2022/toast/toast.component.mjs +3 -3
  112. package/esm2022/toggle/toggle.component.mjs +3 -3
  113. package/esm2022/toggle/toggle.module.mjs +4 -5
  114. package/esm2022/top-bar/top-bar.mjs +2 -2
  115. package/esm2022/tree/padding.directive.mjs +8 -6
  116. package/esm2022/tree/toggle.mjs +2 -2
  117. package/esm2022/tree/tree-option.component.mjs +5 -4
  118. package/esm2022/tree/tree-selection.component.mjs +2 -2
  119. package/esm2022/tree/tree.mjs +2 -2
  120. package/esm2022/tree-select/tree-select.component.mjs +48 -24
  121. package/fesm2022/koobiq-components-actions-panel.mjs +16 -112
  122. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-autocomplete.mjs +21 -24
  124. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  125. package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
  126. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  127. package/fesm2022/koobiq-components-button-toggle.mjs +5 -5
  128. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  129. package/fesm2022/koobiq-components-code-block.mjs +65 -28
  130. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-core.mjs +99 -39
  132. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-datepicker.mjs +162 -14
  134. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-dropdown.mjs +5 -4
  136. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -0
  138. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-file-upload.mjs +1 -1
  140. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-filter-bar.mjs +95 -46
  142. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-form-field.mjs +610 -219
  144. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  145. package/fesm2022/koobiq-components-icon.mjs +2 -2
  146. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  147. package/fesm2022/koobiq-components-input.mjs +7 -5
  148. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  149. package/fesm2022/koobiq-components-list.mjs +6 -5
  150. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  151. package/fesm2022/koobiq-components-modal.mjs +1 -0
  152. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-navbar.mjs +9 -10
  154. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-overflow-items.mjs +26 -9
  156. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  157. package/fesm2022/koobiq-components-radio.mjs +4 -4
  158. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  159. package/fesm2022/koobiq-components-scrollbar.mjs +14 -10
  160. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  161. package/fesm2022/koobiq-components-select.mjs +39 -18
  162. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  163. package/fesm2022/koobiq-components-sidepanel.mjs +1 -4
  164. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  165. package/fesm2022/koobiq-components-splitter.mjs +4 -2
  166. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  167. package/fesm2022/koobiq-components-tabs.mjs +5 -5
  168. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  169. package/fesm2022/koobiq-components-tags.mjs +2 -2
  170. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  171. package/fesm2022/koobiq-components-textarea.mjs +9 -8
  172. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  173. package/fesm2022/koobiq-components-timezone.mjs +7 -5
  174. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  175. package/fesm2022/koobiq-components-toast.mjs +3 -3
  176. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  177. package/fesm2022/koobiq-components-toggle.mjs +6 -6
  178. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  179. package/fesm2022/koobiq-components-top-bar.mjs +2 -2
  180. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  181. package/fesm2022/koobiq-components-tree-select.mjs +48 -24
  182. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  183. package/fesm2022/koobiq-components-tree.mjs +17 -14
  184. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  185. package/file-upload/multiple-file-upload.component.d.ts +1 -1
  186. package/filter-bar/filter-bar.d.ts +7 -1
  187. package/filter-bar/filter-bar.types.d.ts +5 -0
  188. package/filter-bar/pipes/pipe-multi-select.d.ts +5 -1
  189. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -1
  190. package/form-field/_fiedset-theme.scss +13 -0
  191. package/form-field/_form-field-theme.scss +29 -13
  192. package/form-field/_hint-theme.scss +21 -22
  193. package/form-field/cleaner.d.ts +5 -1
  194. package/form-field/cleaner.scss +1 -4
  195. package/form-field/error.d.ts +8 -0
  196. package/form-field/fieldset-tokens.scss +5 -0
  197. package/form-field/fieldset.d.ts +27 -0
  198. package/form-field/fieldset.scss +93 -0
  199. package/form-field/form-field-control.d.ts +1 -1
  200. package/form-field/form-field-tokens.scss +13 -3
  201. package/form-field/form-field.d.ts +210 -22
  202. package/form-field/form-field.module.d.ts +14 -12
  203. package/form-field/form-field.scss +58 -78
  204. package/form-field/hint.d.ts +5 -1
  205. package/form-field/hint.scss +3 -5
  206. package/form-field/label.d.ts +6 -0
  207. package/form-field/password-hint.d.ts +1 -1
  208. package/form-field/password-toggle.d.ts +25 -11
  209. package/form-field/password-toggle.scss +1 -2
  210. package/form-field/prefix.d.ts +2 -1
  211. package/form-field/public-api.d.ts +4 -1
  212. package/form-field/reactive-password-hint.d.ts +19 -0
  213. package/form-field/stepper.d.ts +20 -8
  214. package/form-field/stepper.scss +12 -11
  215. package/form-field/suffix.d.ts +2 -1
  216. package/form-field/validate.directive.d.ts +10 -12
  217. package/icon/_icon-button-theme.scss +67 -85
  218. package/input/input-tokens.scss +2 -2
  219. package/input/input.module.d.ts +3 -4
  220. package/input/input.scss +1 -2
  221. package/list/_list-theme.scss +24 -2
  222. package/list/list-tokens.scss +5 -0
  223. package/navbar/navbar-item.component.d.ts +3 -1
  224. package/overflow-items/overflow-items.d.ts +12 -5
  225. package/package.json +6 -6
  226. package/prebuilt-themes/dark-theme.css +1 -1
  227. package/prebuilt-themes/light-theme.css +1 -1
  228. package/prebuilt-themes/theme.css +1 -1
  229. package/radio/radio.module.d.ts +1 -2
  230. package/schematics/ng-add/index.js +5 -5
  231. package/scrollbar/scrollbar.component.d.ts +1 -0
  232. package/select/select-tokens.scss +5 -4
  233. package/select/select.component.d.ts +12 -3
  234. package/sidepanel/sidepanel.module.d.ts +5 -6
  235. package/splitter/splitter.component.d.ts +1 -0
  236. package/tabs/paginated-tab-header.d.ts +1 -0
  237. package/tabs/tabs.module.d.ts +5 -6
  238. package/tags/tag-list.scss +8 -4
  239. package/textarea/textarea.component.d.ts +1 -0
  240. package/textarea/textarea.module.d.ts +2 -3
  241. package/timepicker/timepicker.scss +1 -1
  242. package/toast/toast.component.scss +2 -0
  243. package/toggle/_toggle-theme.scss +10 -2
  244. package/toggle/toggle-tokens.scss +7 -1
  245. package/toggle/toggle.module.d.ts +1 -2
  246. package/toggle/toggle.scss +6 -6
  247. package/top-bar/top-bar.scss +48 -32
  248. package/tree/_tree-theme.scss +30 -7
  249. package/tree/padding.directive.d.ts +1 -1
  250. package/tree/tree-option.scss +5 -2
  251. package/tree/tree-tokens.scss +5 -0
  252. package/tree-select/tree-select.component.d.ts +10 -1
  253. package/esm2022/form-field/form-field-errors.mjs +0 -7
  254. package/form-field/form-field-errors.d.ts +0 -2
@@ -1,6 +1,6 @@
1
- import { ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
1
+ import { AfterContentInit, DoCheck, ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
2
2
  import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
3
- import { DateAdapter, KbqDateFormats, KbqLocaleService } from '@koobiq/components/core';
3
+ import { DateAdapter, ErrorStateMatcher, KbqDateFormats, KbqLocaleService } from '@koobiq/components/core';
4
4
  import { KbqFormFieldControl } from '@koobiq/components/form-field';
5
5
  import { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';
6
6
  import { Subject } from 'rxjs';
@@ -31,14 +31,13 @@ export declare class KbqDatepickerInputEvent<D> {
31
31
  targetElement: HTMLElement);
32
32
  }
33
33
  /** Directive used to connect an input to a KbqDatepicker. */
34
- export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlValueAccessor, Validator, OnDestroy {
34
+ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, ControlValueAccessor, Validator, OnDestroy, DoCheck, AfterContentInit {
35
35
  elementRef: ElementRef<HTMLInputElement>;
36
36
  private readonly renderer;
37
37
  readonly adapter: DateAdapter<D>;
38
38
  private readonly dateFormats;
39
39
  private localeService;
40
40
  readonly stateChanges: Subject<void>;
41
- readonly errorState: boolean;
42
41
  controlType: string;
43
42
  focused: boolean;
44
43
  datepicker: KbqDatepicker<D>;
@@ -48,6 +47,9 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
48
47
  valueChange: EventEmitter<D | null>;
49
48
  /** Emits when the disabled state has changed */
50
49
  disabledChange: EventEmitter<boolean>;
50
+ /** Object used to control when error messages are shown. */
51
+ get errorStateMatcher(): ErrorStateMatcher;
52
+ set errorStateMatcher(value: ErrorStateMatcher);
51
53
  get placeholder(): string;
52
54
  set placeholder(value: string);
53
55
  private _placeholder;
@@ -90,6 +92,8 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
90
92
  get ngControl(): any;
91
93
  get isReadOnly(): boolean;
92
94
  get dateInputFormat(): string;
95
+ get errorState(): boolean;
96
+ set errorState(value: boolean);
93
97
  private get readyForParse();
94
98
  private get selectionStart();
95
99
  private set selectionStart(value);
@@ -109,11 +113,14 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
109
113
  private thirdDigit;
110
114
  private separatorPositions;
111
115
  private usePlaceholderFromInput;
116
+ private errorStateTracker;
112
117
  constructor(elementRef: ElementRef<HTMLInputElement>, renderer: Renderer2, adapter: DateAdapter<D>, dateFormats: KbqDateFormats, localeService: KbqLocaleService);
118
+ ngDoCheck(): void;
113
119
  onContainerClick(): void;
114
120
  focus(): void;
115
121
  focusChanged(isFocused: boolean): void;
116
122
  onTouched: () => void;
123
+ ngAfterContentInit(): void;
117
124
  ngOnDestroy(): void;
118
125
  /** @docs-private */
119
126
  registerOnValidatorChange(fn: () => void): void;
@@ -131,6 +138,8 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
131
138
  onBlur(): void;
132
139
  onPaste($event: any): any;
133
140
  toISO8601(value: D): string;
141
+ /** Refreshes the error state of the input. */
142
+ updateErrorState(): void;
134
143
  private saveTimePart;
135
144
  private updateLocaleParams;
136
145
  private setFormat;
@@ -191,5 +200,5 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
191
200
  private createDateTime;
192
201
  private correctCursorPosition;
193
202
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerInput<any>, [null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
194
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker], input[kbqCalendar]", ["kbqDatepickerInput"], { "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqCalendar": { "alias": "kbqCalendar"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, false, never>;
203
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker], input[kbqCalendar]", ["kbqDatepickerInput"], { "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqCalendar": { "alias": "kbqCalendar"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, false, never>;
195
204
  }
@@ -1,7 +1,3 @@
1
1
  .kbq-form-field-type-datepicker {
2
- width: auto;
3
- }
4
-
5
- .kbq-datepicker {
6
- width: 130px;
2
+ width: 136px;
7
3
  }
@@ -15,6 +15,6 @@ import * as i13 from "@koobiq/components/icon";
15
15
  import * as i14 from "@angular/common";
16
16
  export declare class KbqDatepickerModule {
17
17
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerModule, never>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<KbqDatepickerModule, [typeof i1.KbqCalendar, typeof i2.KbqCalendarBody, typeof i3.KbqDatepicker, typeof i3.KbqDatepickerContent, typeof i4.KbqDatepickerInput, typeof i5.KbqDatepickerToggle, typeof i5.KbqDatepickerToggleIcon, typeof i6.KbqMonthView, typeof i7.KbqCalendarHeader], [typeof i8.KbqButtonModule, typeof i9.OverlayModule, typeof i10.A11yModule, typeof i11.PortalModule, typeof i12.KbqSelectModule, typeof i13.KbqIconModule, typeof i14.NgClass, typeof i14.TitleCasePipe], [typeof i1.KbqCalendar, typeof i2.KbqCalendarBody, typeof i3.KbqDatepicker, typeof i3.KbqDatepickerContent, typeof i4.KbqDatepickerInput, typeof i5.KbqDatepickerToggle, typeof i5.KbqDatepickerToggleIcon, typeof i6.KbqMonthView, typeof i7.KbqCalendarHeader]>;
18
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KbqDatepickerModule, [typeof i1.KbqCalendar, typeof i2.KbqCalendarBody, typeof i3.KbqDatepicker, typeof i3.KbqDatepickerContent, typeof i4.KbqDatepickerInput, typeof i5.KbqDatepickerToggle, typeof i5.KbqDatepickerToggleIcon, typeof i6.KbqMonthView, typeof i7.KbqCalendarHeader], [typeof i8.KbqButtonModule, typeof i9.OverlayModule, typeof i10.A11yModule, typeof i11.PortalModule, typeof i12.KbqSelectModule, typeof i13.KbqIconModule, typeof i5.KbqDatepickerToggleIconComponent, typeof i14.NgClass, typeof i14.TitleCasePipe], [typeof i1.KbqCalendar, typeof i2.KbqCalendarBody, typeof i3.KbqDatepicker, typeof i3.KbqDatepickerContent, typeof i4.KbqDatepickerInput, typeof i5.KbqDatepickerToggle, typeof i5.KbqDatepickerToggleIcon, typeof i5.KbqDatepickerToggleIconComponent, typeof i6.KbqMonthView, typeof i7.KbqCalendarHeader]>;
19
19
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqDatepickerModule>;
20
20
  }
@@ -8,6 +8,28 @@ export declare class KbqDatepickerToggleIcon {
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerToggleIcon, never>;
9
9
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerToggleIcon, "[kbqDatepickerToggleIcon]", never, {}, {}, never, never, false, never>;
10
10
  }
11
+ export declare class KbqDatepickerToggleIconComponent<D> implements AfterContentInit, OnChanges, OnDestroy {
12
+ /** Whether the toggle button is disabled. */
13
+ get disabled(): boolean;
14
+ set disabled(value: boolean);
15
+ private _disabled;
16
+ /** Datepicker instance that the button will toggle. */
17
+ datepicker: KbqDatepicker<D>;
18
+ private readonly destroyRef;
19
+ private readonly cdr;
20
+ private stateChangesSubscription;
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ ngAfterContentInit(): void;
23
+ ngOnDestroy(): void;
24
+ /** Open datepicker */
25
+ open($event: MouseEvent): void;
26
+ private watchStateChanges;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerToggleIconComponent<any>, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqDatepickerToggleIconComponent<any>, "kbq-datepicker-toggle-icon", never, { "disabled": { "alias": "disabled"; "required": false; }; "datepicker": { "alias": "for"; "required": false; }; }, {}, never, ["[kbqDatepickerToggleIcon]"], true, never>;
29
+ }
30
+ /**
31
+ * @deprecated Use `KbqDatepickerToggleIconComponent` instead
32
+ */
11
33
  export declare class KbqDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {
12
34
  intl: KbqDatepickerIntl;
13
35
  private changeDetectorRef;
@@ -1,6 +1,12 @@
1
1
  @use '../core/styles/tokens';
2
2
  @use '../core/styles/common/tokens' as *;
3
3
 
4
+ .kbq-datepicker-toggle-icon {
5
+ display: inline-flex;
6
+ justify-content: center;
7
+ align-items: center;
8
+ }
9
+
4
10
  .kbq-datepicker-toggle:focus {
5
11
  outline: 0;
6
12
  }
@@ -34,6 +34,7 @@ export declare class KbqDropdownTrigger implements AfterContentInit, OnDestroy {
34
34
  private changeDetectorRef;
35
35
  private focusMonitor?;
36
36
  protected readonly isBrowser: boolean;
37
+ private readonly window;
37
38
  lastDestroyReason: DropdownCloseReason;
38
39
  /** Data to be passed along to any lazily-rendered content. */
39
40
  data: any;
@@ -13,13 +13,19 @@ export declare class KbqEllipsisCenterDirective extends KbqTooltipTrigger implem
13
13
  * @default 50
14
14
  */
15
15
  debounceInterval: number;
16
+ /** @docs-private */
16
17
  readonly resizeStream: Subject<Event>;
17
18
  private _kbqEllipsisCenter;
18
19
  private resizeSubscription;
19
20
  ngOnInit(): void;
20
21
  ngAfterViewInit(): void;
21
22
  ngOnDestroy(): void;
22
- private refresh;
23
+ /**
24
+ * Updates the displayed text with center ellipsis truncation based on container width.
25
+ * Recreates start/end span elements, measures available space, and adjusts text accordingly.
26
+ * @docs-private
27
+ */
28
+ refresh(): void;
23
29
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqEllipsisCenterDirective, never>;
24
30
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqEllipsisCenterDirective, "[kbqEllipsisCenter]", never, { "kbqEllipsisCenter": { "alias": "kbqEllipsisCenter"; "required": false; }; "minVisibleLength": { "alias": "minVisibleLength"; "required": false; }; "charWidth": { "alias": "charWidth"; "required": false; }; "debounceInterval": { "alias": "debounceInterval"; "required": false; }; }, {}, never, never, false, never>;
25
31
  static ngAcceptInputType_debounceInterval: unknown;
@@ -52,4 +52,4 @@ export class KbqActionsPanelConfig {
52
52
  this.disableClose = false;
53
53
  }
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2FjdGlvbnMtcGFuZWwvYWN0aW9ucy1wYW5lbC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFL0UsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUM5RCxrQ0FBa0MsRUFDbEMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLENBQ2pELENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsQ0FBSSxNQUFnQyxFQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0M7SUFDekMsUUFBUSxFQUFFLE1BQU07Q0FDbkIsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQUFsQztRQU1JOzs7O1dBSUc7UUFDSCxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBS3ZCOzs7OztXQUtHO1FBQ0gsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBNkJuQzs7OztXQUlHO1FBQ0gsY0FBUyxHQUFlLEtBQUssQ0FBQztRQUU5Qjs7OztXQUlHO1FBQ0gsbUJBQWMsR0FBMEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUzRzs7OztXQUlHO1FBQ0gsaUJBQVksR0FBYSxLQUFLLENBQUM7SUFDbkMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuICovXG5leHBvcnQgY29uc3QgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48S2JxQWN0aW9uc1BhbmVsQ29uZmlnPihcbiAgICAnS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcnLFxuICAgIHsgZmFjdG9yeTogKCkgPT4gbmV3IEticUFjdGlvbnNQYW5lbENvbmZpZygpIH1cbik7XG5cbi8qKlxuICogVXRpbGl0eSBmb3IgcHJvdmlkaW5nIGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuXG4gKlxuICogQHNlZSBgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUdgXG4gKi9cbmV4cG9ydCBjb25zdCBrYnFBY3Rpb25zUGFuZWxEZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSA8RD4oY29uZmlnOiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD4pOiBQcm92aWRlciA9PiAoe1xuICAgIHByb3ZpZGU6IEtCUV9BQ1RJT05TX1BBTkVMX0RFRkFVTFRfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBjb25maWdcbn0pO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG9wZW5lZCBhY3Rpb25zIHBhbmVsLlxuICogQmFzZWQgb24gY2RrIGBEaWFsb2dDb25maWdgLlxuICpcbiAqIEBzZWUgYERpYWxvZ0NvbmZpZ2BcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBLYnFBY3Rpb25zUGFuZWxDb25maWc8RCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBJbmplY3RvciB1c2VkIGZvciB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGF0dGFjaGVkLlxuICAgICAqL1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgYEtCUV9BQ1RJT05TX1BBTkVMX0RBVEFgXG4gICAgICovXG4gICAgZGF0YT86IEQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgYWN0aW9ucyBwYW5lbCBjb250YWluZXIuICovXG4gICAgY29udGFpbmVyQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGFjdGlvbnMgcGFuZWwgc2hvdWxkIGJlIGNsb3NlZCBvZiB3aGVuIHRoZSB1c2VyIGdvZXMgYmFja3dhcmRzL2ZvcndhcmRzIGluIGhpc3RvcnkuXG4gICAgICogTk9URSEgVGhpcyBkb2VzIG5vdCBhcHBseSB0byByb3V0ZXIgbmF2aWdhdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBjbG9zZU9uTmF2aWdhdGlvbj86IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogT3ZlcmxheSBjb250YWluZXIgZWxlbWVudCBpbiB3aGljaCB0aGUgYWN0aW9ucyBwYW5lbCBhcmUgcmVuZGVyZWQuXG4gICAgICovXG4gICAgb3ZlcmxheUNvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogRXh0cmEgQ1NTIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICovXG4gICAgb3ZlcmxheVBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqL1xuICAgIHdpZHRoPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWluLXdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIElmIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBhc3N1bWVzIHBpeGVsIHVuaXRzLlxuICAgICAqL1xuICAgIG1pbldpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWF4LXdpZHRoIG9mIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIElmIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBhc3N1bWVzIHBpeGVsIHVuaXRzLlxuICAgICAqL1xuICAgIG1heFdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGlyZWN0aW9uIG9mIHRoZSB0ZXh0IGluIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2x0cidcbiAgICAgKi9cbiAgICBkaXJlY3Rpb24/OiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIC8qKlxuICAgICAqIFNjcm9sbCBzdHJhdGVneSB0byBiZSB1c2VkIGZvciB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3lgXG4gICAgICovXG4gICAgc2Nyb2xsU3RyYXRlZ3k/OiAob3ZlcmxheTogT3ZlcmxheSkgPT4gU2Nyb2xsU3RyYXRlZ3kgPSAob3ZlcmxheSkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVzZXIgY2FuIHVzZSBFU0Mgb3IgY2xpY2sgb24gY2xvc2UgYnV0dG9uIHRvIGNsb3NlIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuID0gZmFsc2U7XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2FjdGlvbnMtcGFuZWwvYWN0aW9ucy1wYW5lbC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFL0UsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUM5RCxrQ0FBa0MsRUFDbEMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxFQUFFLENBQ2pELENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsQ0FBSSxNQUFnQyxFQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0M7SUFDekMsUUFBUSxFQUFFLE1BQU07Q0FDbkIsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQUFsQztRQU1JOzs7O1dBSUc7UUFDSCxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBS3ZCOzs7OztXQUtHO1FBQ0gsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBK0JuQzs7OztXQUlHO1FBQ0gsY0FBUyxHQUFlLEtBQUssQ0FBQztRQUU5Qjs7OztXQUlHO1FBQ0gsbUJBQWMsR0FBMEMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUzRzs7OztXQUlHO1FBQ0gsaUJBQVksR0FBYSxLQUFLLENBQUM7SUFDbkMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuICovXG5leHBvcnQgY29uc3QgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48S2JxQWN0aW9uc1BhbmVsQ29uZmlnPihcbiAgICAnS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUcnLFxuICAgIHsgZmFjdG9yeTogKCkgPT4gbmV3IEticUFjdGlvbnNQYW5lbENvbmZpZygpIH1cbik7XG5cbi8qKlxuICogVXRpbGl0eSBmb3IgcHJvdmlkaW5nIGRlZmF1bHQgYWN0aW9ucyBwYW5lbCBjb25maWcuXG4gKlxuICogQHNlZSBgS0JRX0FDVElPTlNfUEFORUxfREVGQVVMVF9DT05GSUdgXG4gKi9cbmV4cG9ydCBjb25zdCBrYnFBY3Rpb25zUGFuZWxEZWZhdWx0Q29uZmlnUHJvdmlkZXIgPSA8RD4oY29uZmlnOiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD4pOiBQcm92aWRlciA9PiAoe1xuICAgIHByb3ZpZGU6IEtCUV9BQ1RJT05TX1BBTkVMX0RFRkFVTFRfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBjb25maWdcbn0pO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG9wZW5lZCBhY3Rpb25zIHBhbmVsLlxuICogQmFzZWQgb24gY2RrIGBEaWFsb2dDb25maWdgLlxuICpcbiAqIEBzZWUgYERpYWxvZ0NvbmZpZ2BcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBLYnFBY3Rpb25zUGFuZWxDb25maWc8RCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBJbmplY3RvciB1c2VkIGZvciB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGF0dGFjaGVkLlxuICAgICAqL1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgYEtCUV9BQ1RJT05TX1BBTkVMX0RBVEFgXG4gICAgICovXG4gICAgZGF0YT86IEQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgYWN0aW9ucyBwYW5lbCBjb250YWluZXIuICovXG4gICAgY29udGFpbmVyQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGFjdGlvbnMgcGFuZWwgc2hvdWxkIGJlIGNsb3NlZCBvZiB3aGVuIHRoZSB1c2VyIGdvZXMgYmFja3dhcmRzL2ZvcndhcmRzIGluIGhpc3RvcnkuXG4gICAgICogTk9URSEgVGhpcyBkb2VzIG5vdCBhcHBseSB0byByb3V0ZXIgbmF2aWdhdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBjbG9zZU9uTmF2aWdhdGlvbj86IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogT3ZlcmxheSBjb250YWluZXIgZWxlbWVudCBpbiB3aGljaCB0aGUgYWN0aW9ucyBwYW5lbCBhcmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBgZG9jdW1lbnQuYm9keWBcbiAgICAgKi9cbiAgICBvdmVybGF5Q29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgb3ZlcmxheSBwYW5lbC5cbiAgICAgKi9cbiAgICBvdmVybGF5UGFuZWxDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgdGhlIGFjdGlvbnMgcGFuZWwuXG4gICAgICovXG4gICAgd2lkdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNaW4td2lkdGggb2YgdGhlIGFjdGlvbnMgcGFuZWwuXG4gICAgICogSWYgYSBudW1iZXIgaXMgcHJvdmlkZWQsIGFzc3VtZXMgcGl4ZWwgdW5pdHMuXG4gICAgICovXG4gICAgbWluV2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNYXgtd2lkdGggb2YgdGhlIGFjdGlvbnMgcGFuZWwuXG4gICAgICogSWYgYSBudW1iZXIgaXMgcHJvdmlkZWQsIGFzc3VtZXMgcGl4ZWwgdW5pdHMuXG4gICAgICovXG4gICAgbWF4V2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHRleHQgaW4gdGhlIGFjdGlvbnMgcGFuZWwuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbHRyJ1xuICAgICAqL1xuICAgIGRpcmVjdGlvbj86IERpcmVjdGlvbiA9ICdsdHInO1xuXG4gICAgLyoqXG4gICAgICogU2Nyb2xsIHN0cmF0ZWd5IHRvIGJlIHVzZWQgZm9yIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgYFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneWBcbiAgICAgKi9cbiAgICBzY3JvbGxTdHJhdGVneT86IChvdmVybGF5OiBPdmVybGF5KSA9PiBTY3JvbGxTdHJhdGVneSA9IChvdmVybGF5KSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciBjYW4gdXNlIEVTQyBvciBjbGljayBvbiBjbG9zZSBidXR0b24gdG8gY2xvc2UgdGhlIGFjdGlvbnMgcGFuZWwuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRpc2FibGVDbG9zZT86IGJvb2xlYW4gPSBmYWxzZTtcbn1cbiJdfQ==
@@ -1,16 +1,10 @@
1
- import { Directionality } from '@angular/cdk/bidi';
2
- import { DEFAULT_DIALOG_CONFIG, Dialog, DIALOG_SCROLL_STRATEGY, DialogConfig } from '@angular/cdk/dialog';
3
- import { Overlay, OverlayContainer, OverlayKeyboardDispatcher, OverlayOutsideClickDispatcher, OverlayPositionBuilder, ScrollStrategyOptions } from '@angular/cdk/overlay';
4
- import { DOCUMENT, Location } from '@angular/common';
5
- import { ANIMATION_MODULE_TYPE, ComponentFactoryResolver, Inject, inject, Injectable, InjectionToken, Injector, NgZone, Optional, SkipSelf } from '@angular/core';
1
+ import { Dialog } from '@angular/cdk/dialog';
2
+ import { Overlay, OverlayContainer } from '@angular/cdk/overlay';
3
+ import { inject, Injectable, InjectionToken, Injector } from '@angular/core';
6
4
  import { KBQ_ACTIONS_PANEL_DEFAULT_CONFIG, KbqActionsPanelConfig } from './actions-panel-config';
7
5
  import { KbqActionsPanelContainer } from './actions-panel-container';
8
6
  import { KbqActionsPanelRef } from './actions-panel-ref';
9
7
  import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/cdk/overlay";
11
- import * as i2 from "@angular/cdk/bidi";
12
- import * as i3 from "@angular/common";
13
- import * as i4 from "@angular/cdk/dialog";
14
8
  /** Injection token that can be used to access the data that was passed in to actions panel. */
15
9
  export const KBQ_ACTIONS_PANEL_DATA = new InjectionToken('KBQ_ACTIONS_PANEL_DATA');
16
10
  /**
@@ -25,109 +19,15 @@ export const KBQ_ACTIONS_PANEL_OVERLAY_SELECTOR = 'kbq-actions-panel-overlay';
25
19
  * @docs-private
26
20
  */
27
21
  export const KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR = 'kbq-actions-panel-overlay-container';
28
- /**
29
- * Actions panel overlay container.
30
- *
31
- * @docs-private
32
- */
33
- export class KbqActionsPanelOverlayContainer extends OverlayContainer {
34
- /**
35
- * Set the overlay container element.
36
- *
37
- * @param containerElement The element into which the overlay will be rendered.
38
- * @returns Current OverlayContainer instance.
39
- */
40
- setContainerElement(containerElement) {
41
- this._containerElement = containerElement || this._document.body.querySelector('.cdk-overlay-container');
42
- }
43
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
44
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlayContainer, providedIn: 'root' }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlayContainer, decorators: [{
47
- type: Injectable,
48
- args: [{ providedIn: 'root' }]
49
- }] });
50
- /**
51
- * Actions panel overlay.
52
- *
53
- * @docs-private
54
- */
55
- export class KbqActionsPanelOverlay extends Overlay {
56
- constructor(scrollStrategies, overlayContainer, componentFactoryResolver, positionBuilder, keyboardDispatcher, injector, ngZone, document, directionality, location, outsideClickDispatcher, animationsModuleType) {
57
- super(scrollStrategies, overlayContainer, componentFactoryResolver, positionBuilder, keyboardDispatcher, injector, ngZone, document, directionality, location, outsideClickDispatcher, animationsModuleType);
58
- this.overlayContainer = overlayContainer;
59
- }
60
- /**
61
- * Set the overlay container element.
62
- *
63
- * @param containerElement The element into which the overlay will be rendered.
64
- * @returns Current Overlay instance.
65
- */
66
- setOverlayContainerElement(containerElement) {
67
- this.overlayContainer.setContainerElement(containerElement);
68
- }
69
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlay, deps: [{ token: i1.ScrollStrategyOptions }, { token: KbqActionsPanelOverlayContainer }, { token: i0.ComponentFactoryResolver }, { token: i1.OverlayPositionBuilder }, { token: i1.OverlayKeyboardDispatcher }, { token: i0.Injector }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i2.Directionality }, { token: i3.Location }, { token: i1.OverlayOutsideClickDispatcher }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlay, providedIn: 'root' }); }
71
- }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelOverlay, decorators: [{
73
- type: Injectable,
74
- args: [{ providedIn: 'root' }]
75
- }], ctorParameters: () => [{ type: i1.ScrollStrategyOptions }, { type: KbqActionsPanelOverlayContainer }, { type: i0.ComponentFactoryResolver }, { type: i1.OverlayPositionBuilder }, { type: i1.OverlayKeyboardDispatcher }, { type: i0.Injector }, { type: i0.NgZone }, { type: undefined, decorators: [{
76
- type: Inject,
77
- args: [DOCUMENT]
78
- }] }, { type: i2.Directionality }, { type: i3.Location }, { type: i1.OverlayOutsideClickDispatcher }, { type: undefined, decorators: [{
79
- type: Inject,
80
- args: [ANIMATION_MODULE_TYPE]
81
- }, {
82
- type: Optional
83
- }] }] });
84
- /**
85
- * Actions panel dialog service.
86
- *
87
- * @docs-private
88
- */
89
- export class KbqActionsPanelDialog extends Dialog {
90
- constructor(overlay, injector, defaultOptions, parentDialog, overlayContainer, scrollStrategy) {
91
- super(overlay, injector, defaultOptions, parentDialog, overlayContainer, scrollStrategy);
92
- this.overlay = overlay;
93
- }
94
- /**
95
- * Set the dialog overlay container element.
96
- *
97
- * @param containerElement The element into which the overlay will be rendered.
98
- * @returns Current dialog instance.
99
- */
100
- setOverlayContainerElement(containerElement) {
101
- this.overlay.setOverlayContainerElement(containerElement);
102
- return this;
103
- }
104
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelDialog, deps: [{ token: KbqActionsPanelOverlay }, { token: i0.Injector }, { token: DEFAULT_DIALOG_CONFIG, optional: true }, { token: i4.Dialog, optional: true, skipSelf: true }, { token: KbqActionsPanelOverlayContainer }, { token: DIALOG_SCROLL_STRATEGY }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelDialog, providedIn: 'root' }); }
106
- }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqActionsPanelDialog, decorators: [{
108
- type: Injectable,
109
- args: [{ providedIn: 'root' }]
110
- }], ctorParameters: () => [{ type: KbqActionsPanelOverlay }, { type: i0.Injector }, { type: i4.DialogConfig, decorators: [{
111
- type: Optional
112
- }, {
113
- type: Inject,
114
- args: [DEFAULT_DIALOG_CONFIG]
115
- }] }, { type: i4.Dialog, decorators: [{
116
- type: Optional
117
- }, {
118
- type: SkipSelf
119
- }] }, { type: KbqActionsPanelOverlayContainer }, { type: undefined, decorators: [{
120
- type: Inject,
121
- args: [DIALOG_SCROLL_STRATEGY]
122
- }] }] });
123
22
  /**
124
23
  * Service for opening actions panel.
125
24
  */
126
25
  export class KbqActionsPanel {
127
26
  constructor() {
128
27
  this.injector = inject(Injector);
129
- this.overlay = inject(KbqActionsPanelOverlay);
130
- this.dialog = inject(KbqActionsPanelDialog);
28
+ this.overlay = inject(Overlay);
29
+ this.overlayContainer = inject(OverlayContainer);
30
+ this.dialog = inject(Dialog);
131
31
  this.defaultConfig = inject(KBQ_ACTIONS_PANEL_DEFAULT_CONFIG);
132
32
  /** The reference to the currently opened actions panel. */
133
33
  this.openedActionsPanelRef = null;
@@ -164,11 +64,14 @@ export class KbqActionsPanel {
164
64
  }
165
65
  openDialog(componentOrTemplateRef, config = {}) {
166
66
  let actionsPanelRef;
167
- const overlayContainerElement = config.overlayContainer?.nativeElement;
168
- overlayContainerElement?.classList.add(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);
169
- const dialogRef = this.dialog
170
- .setOverlayContainerElement(overlayContainerElement)
171
- .open(componentOrTemplateRef, {
67
+ if (config.overlayContainer) {
68
+ // We should override protected `_containerElement` property to set custom container without creating
69
+ // new `OverlayContainer` instance.
70
+ this.overlayContainer['_containerElement'] = config.overlayContainer.nativeElement;
71
+ }
72
+ const overlayContainerElement = this.overlayContainer.getContainerElement();
73
+ overlayContainerElement.classList.add(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);
74
+ const dialogRef = this.dialog.open(componentOrTemplateRef, {
172
75
  ...config,
173
76
  container: KbqActionsPanelContainer,
174
77
  restoreFocus: false,
@@ -206,7 +109,7 @@ export class KbqActionsPanel {
206
109
  dialogRef.addPanelClass(config.overlayPanelClass);
207
110
  }
208
111
  actionsPanelRef?.afterClosed.subscribe(() => {
209
- overlayContainerElement?.classList.remove(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);
112
+ overlayContainerElement.classList.remove(KBQ_ACTIONS_PANEL_OVERLAY_CONTAINER_SELECTOR);
210
113
  });
211
114
  return actionsPanelRef;
212
115
  }
@@ -217,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
217
120
  type: Injectable,
218
121
  args: [{ providedIn: 'root' }]
219
122
  }] });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvYWN0aW9ucy1wYW5lbC9hY3Rpb25zLXBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFHLE9BQU8sRUFFSCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUN4QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNILHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFFBQVEsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBRXpELCtGQUErRjtBQUMvRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBd0NuRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsMkJBQTJCLENBQUM7QUFFOUU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRDQUE0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LEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDcEUsQ0FBQztZQUNGLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQy9DLGVBQWUsR0FBRyxJQUFJLGtCQUFrQixDQUFPLFNBQVMsRUFBRSxTQUFxQyxDQUFDLENBQUM7Z0JBRWpHLE9BQU87b0JBQ0gsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTtvQkFDMUQsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7aUJBQzdELENBQUM7WUFDTixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFDLGFBQWEsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRTVELElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7a0lBaElRLGVBQWU7c0lBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgREVGQVVMVF9ESUFMT0dfQ09ORklHLCBEaWFsb2csIERJQUxPR19TQ1JPTExfU1RSQVRFR1ksIERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnRUeXBlLFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbnRhaW5lcixcbiAgICBPdmVybGF5S2V5Ym9hcmREaXNwYXRjaGVyLFxuICAgIE92ZXJsYXlPdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLFxuICAgIE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXG4gICAgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IERPQ1VNRU5ULCBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFOSU1BVElPTl9NT0RVTEVfVFlQRSxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLQlFfQUNUSU9OU19QQU5FTF9ERUZBVUxUX0NPTkZJRywgS2JxQWN0aW9uc1BhbmVsQ29uZmlnIH0gZnJvbSAnLi9hY3Rpb25zLXBhbmVsLWNvbmZpZyc7XG5pbXBvcnQgeyBLYnFBY3Rpb25zUGFuZWxDb250YWluZXIgfSBmcm9tICcuL2FjdGlvbnMtcGFuZWwtY29udGFpbmVyJztcbmltcG9ydCB7IEticUFjdGlvbnNQYW5lbFJlZiB9IGZyb20gJy4vYWN0aW9ucy1wYW5lbC1yZWYnO1xuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCBpbiB0byBhY3Rpb25zIHBhbmVsLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BQ1RJT05TX1BBTkVMX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0tCUV9BQ1RJT05TX1BBTkVMX0RBVEEnKTtcblxuLyoqXG4gKiBDb250ZXh0IGZvciBhY3Rpb25zIHBhbmVsIHRlbXBsYXRlLlxuICovXG5leHBvcnQgdHlwZSBLYnFBY3Rpb25zUGFuZWxUZW1wbGF0ZUNvbnRleHQ8VCA9IHVua25vd24sIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gPSB7XG4gICAgLyoqXG4gICAgICogRGF0YSBwYXNzZWQgdG8gYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEV4YW1wbGU6XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPG5nLXRlbXBsYXRlICNhY3Rpb25zUGFuZWwgbGV0LWRhdGE+e3sgZGF0YS5LRVkgfX08L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICAkaW1wbGljaXQ/OiBEIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBEYXRhIHBhc3NlZCB0byBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8bmctdGVtcGxhdGUgI2FjdGlvbnNQYW5lbCBsZXQtZGF0YT1cImRhdGFcIj57eyBkYXRhLktFWSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIGRhdGE/OiBEIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBPcGVuZWQgYWN0aW9ucyBwYW5lbCByZWZlcmVuY2UuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSAjYWN0aW9uc1BhbmVsIGxldC1hY3Rpb25zUGFuZWxSZWY9XCJhY3Rpb25zUGFuZWxSZWZcIj5cbiAgICAgKiAgIDxidXR0b24gKGNsaWNrKT1cImFjdGlvbnNQYW5lbFJlZi5jbG9zZSgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgKiA8L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBhY3Rpb25zUGFuZWxSZWY6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPjtcbn07XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIGFjdGlvbnMgcGFuZWwgb3ZlcmxheS5cbiAqXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX1NFTEVDVE9SID0gJ2ticS1hY3Rpb25zLXBhbmVsLW92ZXJsYXknO1xuXG4vKipcbiAqIFNlbGVjdG9yIGZvciBjdXN0b20gYWN0aW9ucyBwYW5lbCBvdmVybGF5IGNvbnRhaW5lci5cbiAqXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX0NPTlRBSU5FUl9TRUxFQ1RPUiA9ICdrYnEtYWN0aW9ucy1wYW5lbC1vdmVybGF5LWNvbnRhaW5lcic7XG5cbi8qKlxuICogQWN0aW9ucyBwYW5lbCBvdmVybGF5IGNvbnRhaW5lci5cbiAqXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgS2JxQWN0aW9uc1BhbmVsT3ZlcmxheUNvbnRhaW5lciBleHRlbmRzIE92ZXJsYXlDb250YWluZXIge1xuICAgIC8qKlxuICAgICAqIFNldCB0aGUgb3ZlcmxheSBjb250YWluZXIgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXJFbGVtZW50IFRoZSBlbGVtZW50IGludG8gd2hpY2ggdGhlIG92ZXJsYXkgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKiBAcmV0dXJucyBDdXJyZW50IE92ZXJsYXlDb250YWluZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0Q29udGFpbmVyRWxlbWVudChjb250YWluZXJFbGVtZW50PzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQgfHwgdGhpcy5fZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJykhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBY3Rpb25zIHBhbmVsIG92ZXJsYXkuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEticUFjdGlvbnNQYW5lbE92ZXJsYXkgZXh0ZW5kcyBPdmVybGF5IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ2llczogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlDb250YWluZXI6IEticUFjdGlvbnNQYW5lbE92ZXJsYXlDb250YWluZXIsXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXG4gICAgICAgIGtleWJvYXJkRGlzcGF0Y2hlcjogT3ZlcmxheUtleWJvYXJkRGlzcGF0Y2hlcixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5LFxuICAgICAgICBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgIG91dHNpZGVDbGlja0Rpc3BhdGNoZXI6IE92ZXJsYXlPdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLFxuICAgICAgICBASW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSkgQE9wdGlvbmFsKCkgYW5pbWF0aW9uc01vZHVsZVR5cGU/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVnaWVzLFxuICAgICAgICAgICAgb3ZlcmxheUNvbnRhaW5lcixcbiAgICAgICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgIHBvc2l0aW9uQnVpbGRlcixcbiAgICAgICAgICAgIGtleWJvYXJkRGlzcGF0Y2hlcixcbiAgICAgICAgICAgIGluamVjdG9yLFxuICAgICAgICAgICAgbmdab25lLFxuICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICBkaXJlY3Rpb25hbGl0eSxcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcixcbiAgICAgICAgICAgIGFuaW1hdGlvbnNNb2R1bGVUeXBlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBvdmVybGF5IGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRhaW5lckVsZW1lbnQgVGhlIGVsZW1lbnQgaW50byB3aGljaCB0aGUgb3ZlcmxheSB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqIEByZXR1cm5zIEN1cnJlbnQgT3ZlcmxheSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzZXRPdmVybGF5Q29udGFpbmVyRWxlbWVudChjb250YWluZXJFbGVtZW50PzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLnNldENvbnRhaW5lckVsZW1lbnQoY29udGFpbmVyRWxlbWVudCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFjdGlvbnMgcGFuZWwgZGlhbG9nIHNlcnZpY2UuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEticUFjdGlvbnNQYW5lbERpYWxvZyBleHRlbmRzIERpYWxvZyB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogS2JxQWN0aW9uc1BhbmVsT3ZlcmxheSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERFRkFVTFRfRElBTE9HX0NPTkZJRykgZGVmYXVsdE9wdGlvbnM6IERpYWxvZ0NvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcGFyZW50RGlhbG9nOiBEaWFsb2csXG4gICAgICAgIG92ZXJsYXlDb250YWluZXI6IEticUFjdGlvbnNQYW5lbE92ZXJsYXlDb250YWluZXIsXG4gICAgICAgIEBJbmplY3QoRElBTE9HX1NDUk9MTF9TVFJBVEVHWSkgc2Nyb2xsU3RyYXRlZ3k6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihvdmVybGF5LCBpbmplY3RvciwgZGVmYXVsdE9wdGlvbnMsIHBhcmVudERpYWxvZywgb3ZlcmxheUNvbnRhaW5lciwgc2Nyb2xsU3RyYXRlZ3kpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGlhbG9nIG92ZXJsYXkgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbWVudCBUaGUgZWxlbWVudCBpbnRvIHdoaWNoIHRoZSBvdmVybGF5IHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICogQHJldHVybnMgQ3VycmVudCBkaWFsb2cgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0T3ZlcmxheUNvbnRhaW5lckVsZW1lbnQoY29udGFpbmVyRWxlbWVudD86IEhUTUxFbGVtZW50KTogdGhpcyB7XG4gICAgICAgIHRoaXMub3ZlcmxheS5zZXRPdmVybGF5Q29udGFpbmVyRWxlbWVudChjb250YWluZXJFbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8qKlxuICogU2VydmljZSBmb3Igb3BlbmluZyBhY3Rpb25zIHBhbmVsLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEticUFjdGlvbnNQYW5lbCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KEticUFjdGlvbnNQYW5lbE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nID0gaW5qZWN0KEticUFjdGlvbnNQYW5lbERpYWxvZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0Q29uZmlnID0gaW5qZWN0KEtCUV9BQ1RJT05TX1BBTkVMX0RFRkFVTFRfQ09ORklHKTtcblxuICAgIC8qKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgb3BlbmVkIGFjdGlvbnMgcGFuZWwuICovXG4gICAgcHJpdmF0ZSBvcGVuZWRBY3Rpb25zUGFuZWxSZWY6IEticUFjdGlvbnNQYW5lbFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbXBvbmVudE9yVGVtcGxhdGVSZWYgQ29tcG9uZW50IHRvIGJlIG9wZW5lZCBpbnRvIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgYWN0aW9ucyBwYW5lbC5cbiAgICAgKi9cbiAgICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcbiAgICAgICAgY29uZmlnPzogS2JxQWN0aW9uc1BhbmVsQ29uZmlnPEQ+XG4gICAgKTogS2JxQWN0aW9uc1BhbmVsUmVmPFQsIFI+O1xuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZVJlZiB0byBiZSB1c2VkIGFzIHRoZSBjb250ZW50LlxuICAgICAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhY3Rpb25zIHBhbmVsLlxuICAgICAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgYWN0aW9ucyBwYW5lbC5cbiAgICAgKi9cbiAgICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUPixcbiAgICAgICAgY29uZmlnPzogS2JxQWN0aW9uc1BhbmVsQ29uZmlnPEQ+XG4gICAgKTogS2JxQWN0aW9uc1BhbmVsUmVmPFQsIFI+O1xuXG4gICAgb3BlbjxULCBEID0gdW5rbm93biwgUiA9IHVua25vd24+KFxuICAgICAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgICAgIGNvbmZpZz86IEticUFjdGlvbnNQYW5lbENvbmZpZzxEPlxuICAgICk6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPiB7XG4gICAgICAgIGNvbnN0IF9jb25maWc6IEticUFjdGlvbnNQYW5lbENvbmZpZzxEPiA9IHtcbiAgICAgICAgICAgIC4uLih0aGlzLmRlZmF1bHRDb25maWcgYXMgS2JxQWN0aW9uc1BhbmVsQ29uZmlnPEQ+KSxcbiAgICAgICAgICAgIC4uLmNvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY3Rpb25zUGFuZWxSZWYgPSB0aGlzLm9wZW5EaWFsb2c8VCwgRCwgUj4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgX2NvbmZpZyk7XG5cbiAgICAgICAgYWN0aW9uc1BhbmVsUmVmLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuZWRBY3Rpb25zUGFuZWxSZWYgPT09IGFjdGlvbnNQYW5lbFJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkQWN0aW9uc1BhbmVsUmVmID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BlbmVkQWN0aW9uc1BhbmVsUmVmKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGlvbnNQYW5lbFJlZi5jb250YWluZXJJbnN0YW5jZT8uc3RhcnRPcGVuQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkQWN0aW9uc1BhbmVsUmVmLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3Rpb25zUGFuZWxSZWYuY29udGFpbmVySW5zdGFuY2Uuc3RhcnRPcGVuQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZiA9IGFjdGlvbnNQYW5lbFJlZiBhcyBLYnFBY3Rpb25zUGFuZWxSZWY7XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnNQYW5lbFJlZjtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbmVkIGFjdGlvbnMgcGFuZWwuICovXG4gICAgY2xvc2U8Uj4ocmVzdWx0PzogUik6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZj8uY2xvc2UocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EaWFsb2c8VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICAgICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgICAgICBjb25maWc6IEticUFjdGlvbnNQYW5lbENvbmZpZzxEPiA9IHt9XG4gICAgKTogS2JxQWN0aW9uc1BhbmVsUmVmPFQsIFI+IHtcbiAgICAgICAgbGV0IGFjdGlvbnNQYW5lbFJlZiE6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPjtcbiAgICAgICAgY29uc3Qgb3ZlcmxheUNvbnRhaW5lckVsZW1lbnQgPSBjb25maWcub3ZlcmxheUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBvdmVybGF5Q29udGFpbmVyRWxlbWVudD8uY2xhc3NMaXN0LmFkZChLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX0NPTlRBSU5FUl9TRUxFQ1RPUik7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nXG4gICAgICAgICAgICAuc2V0T3ZlcmxheUNvbnRhaW5lckVsZW1lbnQob3ZlcmxheUNvbnRhaW5lckVsZW1lbnQpXG4gICAgICAgICAgICAub3BlbjxSLCBELCBUPihjb21wb25lbnRPclRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogS2JxQWN0aW9uc1BhbmVsQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBudWxsISxcbiAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjbG9zaW5nIHNpbmNlIHdlIG5lZWQgdG8gc3luYyBpdCB1cCB0byB0aGUgYW5pbWF0aW9uIG91cnNlbHZlc1xuICAgICAgICAgICAgICAgIGNsb3NlT25PdmVybGF5RGV0YWNobWVudHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIERpc2FibGUgY2xvc2luZyBzaW5jZSB3ZSBuZWVkIHRvIHN5bmMgaXQgdXAgdG8gdGhlIGFuaW1hdGlvbiBvdXJzZWx2ZXNcbiAgICAgICAgICAgICAgICBjbG9zZU9uRGVzdHJveTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjbG9zaW5nIHNpbmNlIHdlIG5lZWQgdG8gc3luYyBpdCB1cCB0byB0aGUgYW5pbWF0aW9uIG91cnNlbHZlc1xuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogY29uZmlnLnNjcm9sbFN0cmF0ZWd5ICYmIGNvbmZpZy5zY3JvbGxTdHJhdGVneSh0aGlzLm92ZXJsYXkpLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmJvdHRvbSgpLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29udGV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb25maWcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGNvbmZpZy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc1BhbmVsUmVmXG4gICAgICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIEticUFjdGlvbnNQYW5lbFRlbXBsYXRlQ29udGV4dDxULCBELCBSPjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNvbmZpZy5pbmplY3RvciB8fCB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEticUFjdGlvbnNQYW5lbENvbmZpZywgdXNlVmFsdWU6IGNvbmZpZyB9XVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogKGRpYWxvZ1JlZiwgX2RpYWxvZ0NvbmZpZywgY29udGFpbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnNQYW5lbFJlZiA9IG5ldyBLYnFBY3Rpb25zUGFuZWxSZWY8VCwgUj4oZGlhbG9nUmVmLCBjb250YWluZXIgYXMgS2JxQWN0aW9uc1BhbmVsQ29udGFpbmVyKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLYnFBY3Rpb25zUGFuZWxSZWYsIHVzZVZhbHVlOiBhY3Rpb25zUGFuZWxSZWYgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogS0JRX0FDVElPTlNfUEFORUxfREFUQSwgdXNlVmFsdWU6IGNvbmZpZy5kYXRhIH1cbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWRkUGFuZWxDbGFzcyhLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX1NFTEVDVE9SKTtcblxuICAgICAgICBpZiAoY29uZmlnLm92ZXJsYXlQYW5lbENsYXNzKSB7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWRkUGFuZWxDbGFzcyhjb25maWcub3ZlcmxheVBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWN0aW9uc1BhbmVsUmVmPy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgb3ZlcmxheUNvbnRhaW5lckVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoS0JRX0FDVElPTlNfUEFORUxfT1ZFUkxBWV9DT05UQUlORVJfU0VMRUNUT1IpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYWN0aW9uc1BhbmVsUmVmO1xuICAgIH1cbn1cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvYWN0aW9ucy1wYW5lbC9hY3Rpb25zLXBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQWlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUV6RCwrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQXdDbkY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLDJCQUEyQixDQUFDO0FBRTlFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0Q0FBNEMsR0FBRyxxQ0FBcUMsQ0FBQztBQUVsRzs7R0FFRztBQUVILE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRXFCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFMUUsMkRBQTJEO1FBQ25ELDBCQUFxQixHQUE4QixJQUFJLENBQUM7S0FnSW5FO0lBOUhHLFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQTBCRCxJQUFJLENBQ0Esc0JBQXlELEVBQ3pELE1BQWlDO1FBRWpDLE1BQU0sT0FBTyxHQUE2QjtZQUN0QyxHQUFJLElBQUksQ0FBQyxhQUEwQztZQUNuRCxHQUFHLE1BQU07U0FDWixDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBVSxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVsRixlQUFlLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDdEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xELGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ0osZUFBZSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxlQUFxQyxDQUFDO1FBRW5FLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsS0FBSyxDQUFJLE1BQVU7UUFDZixJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxVQUFVLENBQ2Qsc0JBQXlELEVBQ3pELFNBQW1DLEVBQUU7UUFFckMsSUFBSSxlQUEwQyxDQUFDO1FBRS9DLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIscUdBQXFHO1lBQ3JHLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTVFLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUVwRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBVSxzQkFBc0IsRUFBRTtZQUNoRSxHQUFHLE1BQU07WUFDVCxTQUFTLEVBQUUsd0JBQXdCO1lBQ25DLFlBQVksRUFBRSxLQUFLO1lBQ25CLFNBQVMsRUFBRSxJQUFLO1lBQ2hCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLHlFQUF5RTtZQUN6RSx5QkFBeUIsRUFBRSxLQUFLO1lBQ2hDLHlFQUF5RTtZQUN6RSxjQUFjLEVBQUUsS0FBSztZQUNyQix5RUFBeUU7WUFDekUsWUFBWSxFQUFFLElBQUk7WUFDbEIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzVFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDaEYsZUFBZSxFQUFFLEdBQUcsRUFBRTtnQkFDbEIsT0FBTztvQkFDSCxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsZUFBZTtpQkFDZ0MsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUN4QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDcEUsQ0FBQztZQUNGLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQy9DLGVBQWUsR0FBRyxJQUFJLGtCQUFrQixDQUFPLFNBQVMsRUFBRSxTQUFxQyxDQUFDLENBQUM7Z0JBRWpHLE9BQU87b0JBQ0gsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTtvQkFDMUQsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7aUJBQzdELENBQUM7WUFDTixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRTVELElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7a0lBdklRLGVBQWU7c0lBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSwgT3ZlcmxheUNvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPbkRlc3Ryb3ksIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLQlFfQUNUSU9OU19QQU5FTF9ERUZBVUxUX0NPTkZJRywgS2JxQWN0aW9uc1BhbmVsQ29uZmlnIH0gZnJvbSAnLi9hY3Rpb25zLXBhbmVsLWNvbmZpZyc7XG5pbXBvcnQgeyBLYnFBY3Rpb25zUGFuZWxDb250YWluZXIgfSBmcm9tICcuL2FjdGlvbnMtcGFuZWwtY29udGFpbmVyJztcbmltcG9ydCB7IEticUFjdGlvbnNQYW5lbFJlZiB9IGZyb20gJy4vYWN0aW9ucy1wYW5lbC1yZWYnO1xuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCBpbiB0byBhY3Rpb25zIHBhbmVsLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BQ1RJT05TX1BBTkVMX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0tCUV9BQ1RJT05TX1BBTkVMX0RBVEEnKTtcblxuLyoqXG4gKiBDb250ZXh0IGZvciBhY3Rpb25zIHBhbmVsIHRlbXBsYXRlLlxuICovXG5leHBvcnQgdHlwZSBLYnFBY3Rpb25zUGFuZWxUZW1wbGF0ZUNvbnRleHQ8VCA9IHVua25vd24sIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gPSB7XG4gICAgLyoqXG4gICAgICogRGF0YSBwYXNzZWQgdG8gYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEV4YW1wbGU6XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPG5nLXRlbXBsYXRlICNhY3Rpb25zUGFuZWwgbGV0LWRhdGE+e3sgZGF0YS5LRVkgfX08L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICAkaW1wbGljaXQ/OiBEIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBEYXRhIHBhc3NlZCB0byBhY3Rpb25zIHBhbmVsLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8bmctdGVtcGxhdGUgI2FjdGlvbnNQYW5lbCBsZXQtZGF0YT1cImRhdGFcIj57eyBkYXRhLktFWSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICogYGBgYFxuICAgICAqL1xuICAgIGRhdGE/OiBEIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBPcGVuZWQgYWN0aW9ucyBwYW5lbCByZWZlcmVuY2UuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSAjYWN0aW9uc1BhbmVsIGxldC1hY3Rpb25zUGFuZWxSZWY9XCJhY3Rpb25zUGFuZWxSZWZcIj5cbiAgICAgKiAgIDxidXR0b24gKGNsaWNrKT1cImFjdGlvbnNQYW5lbFJlZi5jbG9zZSgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgKiA8L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBhY3Rpb25zUGFuZWxSZWY6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPjtcbn07XG5cbi8qKlxuICogU2VsZWN0b3IgZm9yIGFjdGlvbnMgcGFuZWwgb3ZlcmxheS5cbiAqXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX1NFTEVDVE9SID0gJ2ticS1hY3Rpb25zLXBhbmVsLW92ZXJsYXknO1xuXG4vKipcbiAqIFNlbGVjdG9yIGZvciBjdXN0b20gYWN0aW9ucyBwYW5lbCBvdmVybGF5IGNvbnRhaW5lci5cbiAqXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX0NPTlRBSU5FUl9TRUxFQ1RPUiA9ICdrYnEtYWN0aW9ucy1wYW5lbC1vdmVybGF5LWNvbnRhaW5lcic7XG5cbi8qKlxuICogU2VydmljZSBmb3Igb3BlbmluZyBhY3Rpb25zIHBhbmVsLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEticUFjdGlvbnNQYW5lbCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheUNvbnRhaW5lciA9IGluamVjdChPdmVybGF5Q29udGFpbmVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChEaWFsb2cpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZyA9IGluamVjdChLQlFfQUNUSU9OU19QQU5FTF9ERUZBVUxUX0NPTkZJRyk7XG5cbiAgICAvKiogVGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IG9wZW5lZCBhY3Rpb25zIHBhbmVsLiAqL1xuICAgIHByaXZhdGUgb3BlbmVkQWN0aW9uc1BhbmVsUmVmOiBLYnFBY3Rpb25zUGFuZWxSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYWN0aW9ucyBwYW5lbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb21wb25lbnRPclRlbXBsYXRlUmVmIENvbXBvbmVudCB0byBiZSBvcGVuZWQgaW50byB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgb3BlbmVkIGFjdGlvbnMgcGFuZWwuXG4gICAgICovXG4gICAgb3BlbjxULCBEID0gdW5rbm93biwgUiA9IHVua25vd24+KFxuICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sXG4gICAgICAgIGNvbmZpZz86IEticUFjdGlvbnNQYW5lbENvbmZpZzxEPlxuICAgICk6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPjtcblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGFjdGlvbnMgcGFuZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUgVGVtcGxhdGVSZWYgdG8gYmUgdXNlZCBhcyB0aGUgY29udGVudC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYWN0aW9ucyBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBBIHJlZmVyZW5jZSB0byB0aGUgb3BlbmVkIGFjdGlvbnMgcGFuZWwuXG4gICAgICovXG4gICAgb3BlbjxULCBEID0gdW5rbm93biwgUiA9IHVua25vd24+KFxuICAgICAgICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8VD4sXG4gICAgICAgIGNvbmZpZz86IEticUFjdGlvbnNQYW5lbENvbmZpZzxEPlxuICAgICk6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPjtcblxuICAgIG9wZW48VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICAgICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgICAgICBjb25maWc/OiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD5cbiAgICApOiBLYnFBY3Rpb25zUGFuZWxSZWY8VCwgUj4ge1xuICAgICAgICBjb25zdCBfY29uZmlnOiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD4gPSB7XG4gICAgICAgICAgICAuLi4odGhpcy5kZWZhdWx0Q29uZmlnIGFzIEticUFjdGlvbnNQYW5lbENvbmZpZzxEPiksXG4gICAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aW9uc1BhbmVsUmVmID0gdGhpcy5vcGVuRGlhbG9nPFQsIEQsIFI+KGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIF9jb25maWcpO1xuXG4gICAgICAgIGFjdGlvbnNQYW5lbFJlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkQWN0aW9uc1BhbmVsUmVmID09PSBhY3Rpb25zUGFuZWxSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZikge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWRBY3Rpb25zUGFuZWxSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zUGFuZWxSZWYuY29udGFpbmVySW5zdGFuY2U/LnN0YXJ0T3BlbkFuaW1hdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZEFjdGlvbnNQYW5lbFJlZi5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9uc1BhbmVsUmVmLmNvbnRhaW5lckluc3RhbmNlLnN0YXJ0T3BlbkFuaW1hdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGVuZWRBY3Rpb25zUGFuZWxSZWYgPSBhY3Rpb25zUGFuZWxSZWYgYXMgS2JxQWN0aW9uc1BhbmVsUmVmO1xuXG4gICAgICAgIHJldHVybiBhY3Rpb25zUGFuZWxSZWY7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW5lZCBhY3Rpb25zIHBhbmVsLiAqL1xuICAgIGNsb3NlPFI+KHJlc3VsdD86IFIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuZWRBY3Rpb25zUGFuZWxSZWY/LmNsb3NlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuRGlhbG9nPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICAgICAgY29uZmlnOiBLYnFBY3Rpb25zUGFuZWxDb25maWc8RD4gPSB7fVxuICAgICk6IEticUFjdGlvbnNQYW5lbFJlZjxULCBSPiB7XG4gICAgICAgIGxldCBhY3Rpb25zUGFuZWxSZWYhOiBLYnFBY3Rpb25zUGFuZWxSZWY8VCwgUj47XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vdmVybGF5Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAvLyBXZSBzaG91bGQgb3ZlcnJpZGUgcHJvdGVjdGVkIGBfY29udGFpbmVyRWxlbWVudGAgcHJvcGVydHkgdG8gc2V0IGN1c3RvbSBjb250YWluZXIgd2l0aG91dCBjcmVhdGluZ1xuICAgICAgICAgICAgLy8gbmV3IGBPdmVybGF5Q29udGFpbmVyYCBpbnN0YW5jZS5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lclsnX2NvbnRhaW5lckVsZW1lbnQnXSA9IGNvbmZpZy5vdmVybGF5Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyRWxlbWVudCA9IHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7XG5cbiAgICAgICAgb3ZlcmxheUNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZChLQlFfQUNUSU9OU19QQU5FTF9PVkVSTEFZX0NPTlRBSU5FUl9TRUxFQ1RPUik7XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSLCBELCBUPihjb21wb25lbnRPclRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBjb250YWluZXI6IEticUFjdGlvbnNQYW5lbENvbnRhaW5lcixcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IG51bGwhLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgLy8gRGlzYWJsZSBjbG9zaW5nIHNpbmNlIHdlIG5lZWQgdG8gc3luYyBpdCB1cCB0byB0aGUgYW5pbWF0aW9uIG91cnNlbHZlc1xuICAgICAgICAgICAgY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50czogZmFsc2UsXG4gICAgICAgICAgICAvLyBEaXNhYmxlIGNsb3Npbmcgc2luY2Ugd2UgbmVlZCB0byBzeW5jIGl0IHVwIHRvIHRoZSBhbmltYXRpb24gb3Vyc2VsdmVzXG4gICAgICAgICAgICBjbG9zZU9uRGVzdHJveTogZmFsc2UsXG4gICAgICAgICAgICAvLyBEaXNhYmxlIGNsb3Npbmcgc2luY2Ugd2UgbmVlZCB0byBzeW5jIGl0IHVwIHRvIHRoZSBhbmltYXRpb24gb3Vyc2VsdmVzXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogY29uZmlnLnNjcm9sbFN0cmF0ZWd5ICYmIGNvbmZpZy5zY3JvbGxTdHJhdGVneSh0aGlzLm92ZXJsYXkpLFxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCksXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvbnRleHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjb25maWcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uc1BhbmVsUmVmXG4gICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgS2JxQWN0aW9uc1BhbmVsVGVtcGxhdGVDb250ZXh0PFQsIEQsIFI+O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHBhcmVudDogY29uZmlnLmluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBLYnFBY3Rpb25zUGFuZWxDb25maWcsIHVzZVZhbHVlOiBjb25maWcgfV1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiAoZGlhbG9nUmVmLCBfZGlhbG9nQ29uZmlnLCBjb250YWluZXIpID0+IHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zUGFuZWxSZWYgPSBuZXcgS2JxQWN0aW9uc1BhbmVsUmVmPFQsIFI+KGRpYWxvZ1JlZiwgY29udGFpbmVyIGFzIEticUFjdGlvbnNQYW5lbENvbnRhaW5lcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEticUFjdGlvbnNQYW5lbFJlZiwgdXNlVmFsdWU6IGFjdGlvbnNQYW5lbFJlZiB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtCUV9BQ1RJT05TX1BBTkVMX0RBVEEsIHVzZVZhbHVlOiBjb25maWcuZGF0YSB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFkZFBhbmVsQ2xhc3MoS0JRX0FDVElPTlNfUEFORUxfT1ZFUkxBWV9TRUxFQ1RPUik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5vdmVybGF5UGFuZWxDbGFzcykge1xuICAgICAgICAgICAgZGlhbG9nUmVmLmFkZFBhbmVsQ2xhc3MoY29uZmlnLm92ZXJsYXlQYW5lbENsYXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjdGlvbnNQYW5lbFJlZj8uYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIG92ZXJsYXlDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoS0JRX0FDVElPTlNfUEFORUxfT1ZFUkxBWV9DT05UQUlORVJfU0VMRUNUT1IpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYWN0aW9uc1BhbmVsUmVmO1xuICAgIH1cbn1cbiJdfQ==