@sebgroup/green-angular 4.5.0 → 4.6.1

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 (203) hide show
  1. package/esm2022/index.mjs +1 -1
  2. package/esm2022/lib/shared/on-scroll.directive.mjs +2 -2
  3. package/esm2022/src/lib/shared/on-scroll.directive.mjs +2 -2
  4. package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +287 -0
  5. package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +17 -0
  6. package/esm2022/src/v-angular/base-control-value-accessor/index.mjs +3 -0
  7. package/esm2022/src/v-angular/base-control-value-accessor/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +5 -0
  8. package/esm2022/src/v-angular/breadcrumbs/breadcrumbs.component.mjs +25 -0
  9. package/esm2022/src/v-angular/breadcrumbs/breadcrumbs.module.mjs +20 -0
  10. package/esm2022/src/v-angular/breadcrumbs/index.mjs +3 -0
  11. package/esm2022/src/v-angular/breadcrumbs/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +5 -0
  12. package/esm2022/src/v-angular/button/button.component.mjs +108 -0
  13. package/esm2022/src/v-angular/button/button.module.mjs +20 -0
  14. package/esm2022/src/v-angular/button/index.mjs +3 -0
  15. package/esm2022/src/v-angular/button/sebgroup-green-angular-src-v-angular-button.mjs +5 -0
  16. package/esm2022/src/v-angular/card/card.component.mjs +11 -0
  17. package/esm2022/src/v-angular/card/card.module.mjs +18 -0
  18. package/esm2022/src/v-angular/card/index.mjs +3 -0
  19. package/esm2022/src/v-angular/card/sebgroup-green-angular-src-v-angular-card.mjs +5 -0
  20. package/esm2022/src/v-angular/character-countdown/character-countdown.directive.mjs +51 -0
  21. package/esm2022/src/v-angular/character-countdown/character-countdown.module.mjs +18 -0
  22. package/esm2022/src/v-angular/character-countdown/index.mjs +3 -0
  23. package/esm2022/src/v-angular/character-countdown/sebgroup-green-angular-src-v-angular-character-countdown.mjs +5 -0
  24. package/esm2022/src/v-angular/checkbox/checkbox.component.mjs +72 -0
  25. package/esm2022/src/v-angular/checkbox/checkbox.module.mjs +19 -0
  26. package/esm2022/src/v-angular/checkbox/index.mjs +3 -0
  27. package/esm2022/src/v-angular/checkbox/sebgroup-green-angular-src-v-angular-checkbox.mjs +5 -0
  28. package/esm2022/src/v-angular/core/core.globals.mjs +20 -0
  29. package/esm2022/src/v-angular/core/core.utils.mjs +28 -0
  30. package/esm2022/src/v-angular/core/index.mjs +3 -0
  31. package/esm2022/src/v-angular/core/sebgroup-green-angular-src-v-angular-core.mjs +5 -0
  32. package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +256 -0
  33. package/esm2022/src/v-angular/dropdown/dropdown-list/index.mjs +2 -0
  34. package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +239 -0
  35. package/esm2022/src/v-angular/dropdown/dropdown.module.mjs +22 -0
  36. package/esm2022/src/v-angular/dropdown/index.mjs +6 -0
  37. package/esm2022/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.mjs +5 -0
  38. package/esm2022/src/v-angular/dropdown/typeahead/index.mjs +3 -0
  39. package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +98 -0
  40. package/esm2022/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +85 -0
  41. package/esm2022/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +132 -0
  42. package/esm2022/src/v-angular/dropdown/typeahead/typeahead.module.mjs +33 -0
  43. package/esm2022/src/v-angular/external-link/external-link.directive.mjs +37 -0
  44. package/esm2022/src/v-angular/external-link/external-link.module.mjs +18 -0
  45. package/esm2022/src/v-angular/external-link/index.mjs +3 -0
  46. package/esm2022/src/v-angular/external-link/sebgroup-green-angular-src-v-angular-external-link.mjs +5 -0
  47. package/esm2022/src/v-angular/i18n/i18n.json +12 -0
  48. package/esm2022/src/v-angular/i18n/i18n.module.mjs +83 -0
  49. package/esm2022/src/v-angular/i18n/i18n.test.module.mjs +89 -0
  50. package/esm2022/src/v-angular/i18n/index.mjs +3 -0
  51. package/esm2022/src/v-angular/i18n/sebgroup-green-angular-src-v-angular-i18n.mjs +5 -0
  52. package/esm2022/src/v-angular/info-circle/index.mjs +3 -0
  53. package/esm2022/src/v-angular/info-circle/info-circle.component.mjs +28 -0
  54. package/esm2022/src/v-angular/info-circle/info-circle.module.mjs +21 -0
  55. package/esm2022/src/v-angular/info-circle/sebgroup-green-angular-src-v-angular-info-circle.mjs +5 -0
  56. package/esm2022/src/v-angular/input/index.mjs +3 -0
  57. package/esm2022/src/v-angular/input/input.component.mjs +221 -0
  58. package/esm2022/src/v-angular/input/input.module.mjs +32 -0
  59. package/esm2022/src/v-angular/input/sebgroup-green-angular-src-v-angular-input.mjs +5 -0
  60. package/esm2022/src/v-angular/input-mask/config.mjs +9 -0
  61. package/esm2022/src/v-angular/input-mask/constants.mjs +2 -0
  62. package/esm2022/src/v-angular/input-mask/index.mjs +6 -0
  63. package/esm2022/src/v-angular/input-mask/input-mask-format.pipe.mjs +20 -0
  64. package/esm2022/src/v-angular/input-mask/input-mask.directive.mjs +165 -0
  65. package/esm2022/src/v-angular/input-mask/input-mask.module.mjs +35 -0
  66. package/esm2022/src/v-angular/input-mask/input-mask.types.mjs +2 -0
  67. package/esm2022/src/v-angular/input-mask/sebgroup-green-angular-src-v-angular-input-mask.mjs +5 -0
  68. package/esm2022/src/v-angular/modal/dialog/dialog.component.mjs +190 -0
  69. package/esm2022/src/v-angular/modal/fold-out/fold-out.component.mjs +56 -0
  70. package/esm2022/src/v-angular/modal/fold-out/fold-out.directive.mjs +19 -0
  71. package/esm2022/src/v-angular/modal/index.mjs +6 -0
  72. package/esm2022/src/v-angular/modal/modal.globals.mjs +20 -0
  73. package/esm2022/src/v-angular/modal/modal.module.mjs +40 -0
  74. package/esm2022/src/v-angular/modal/modal.types.mjs +2 -0
  75. package/esm2022/src/v-angular/modal/sebgroup-green-angular-src-v-angular-modal.mjs +5 -0
  76. package/esm2022/src/v-angular/modal/slide-out/slide-out.component.mjs +229 -0
  77. package/esm2022/src/v-angular/radio/index.mjs +3 -0
  78. package/esm2022/src/v-angular/radio/radio.component.mjs +130 -0
  79. package/esm2022/src/v-angular/radio/radio.module.mjs +20 -0
  80. package/esm2022/src/v-angular/radio/sebgroup-green-angular-src-v-angular-radio.mjs +5 -0
  81. package/esm2022/src/v-angular/slug/index.mjs +3 -0
  82. package/esm2022/src/v-angular/slug/sebgroup-green-angular-src-v-angular-slug.mjs +5 -0
  83. package/esm2022/src/v-angular/slug/slug.module.mjs +18 -0
  84. package/esm2022/src/v-angular/slug/slug.pipe.mjs +27 -0
  85. package/esm2022/src/v-angular/textarea/index.mjs +3 -0
  86. package/esm2022/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.mjs +5 -0
  87. package/esm2022/src/v-angular/textarea/textarea.component.mjs +101 -0
  88. package/esm2022/src/v-angular/textarea/textarea.module.mjs +18 -0
  89. package/esm2022/src/v-angular/tooltip/index.mjs +3 -0
  90. package/esm2022/src/v-angular/tooltip/sebgroup-green-angular-src-v-angular-tooltip.mjs +5 -0
  91. package/esm2022/src/v-angular/tooltip/tooltip.directive.mjs +273 -0
  92. package/esm2022/src/v-angular/tooltip/tooltip.module.mjs +18 -0
  93. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +1 -1
  94. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
  95. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +308 -0
  96. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -0
  97. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +49 -0
  98. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -0
  99. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +131 -0
  100. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -0
  101. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +33 -0
  102. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -0
  103. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +73 -0
  104. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -0
  105. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +94 -0
  106. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -0
  107. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +54 -0
  108. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -0
  109. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +830 -0
  110. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -0
  111. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +58 -0
  112. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -0
  113. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +192 -0
  114. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -0
  115. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +53 -0
  116. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -0
  117. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +226 -0
  118. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -0
  119. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +256 -0
  120. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -0
  121. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +545 -0
  122. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -0
  123. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +153 -0
  124. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -0
  125. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +49 -0
  126. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -0
  127. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +122 -0
  128. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -0
  129. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +295 -0
  130. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -0
  131. package/fesm2022/sebgroup-green-angular.mjs +1 -1
  132. package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
  133. package/package.json +115 -4
  134. package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +124 -0
  135. package/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +7 -0
  136. package/src/v-angular/base-control-value-accessor/index.d.ts +2 -0
  137. package/src/v-angular/breadcrumbs/breadcrumbs.component.d.ts +18 -0
  138. package/src/v-angular/breadcrumbs/breadcrumbs.module.d.ts +10 -0
  139. package/src/v-angular/breadcrumbs/index.d.ts +2 -0
  140. package/src/v-angular/button/button.component.d.ts +62 -0
  141. package/src/v-angular/button/button.module.d.ts +10 -0
  142. package/src/v-angular/button/index.d.ts +2 -0
  143. package/src/v-angular/card/card.component.d.ts +5 -0
  144. package/src/v-angular/card/card.module.d.ts +8 -0
  145. package/src/v-angular/card/index.d.ts +2 -0
  146. package/src/v-angular/character-countdown/character-countdown.directive.d.ts +17 -0
  147. package/src/v-angular/character-countdown/character-countdown.module.d.ts +8 -0
  148. package/src/v-angular/character-countdown/index.d.ts +2 -0
  149. package/src/v-angular/checkbox/checkbox.component.d.ts +27 -0
  150. package/src/v-angular/checkbox/checkbox.module.d.ts +9 -0
  151. package/src/v-angular/checkbox/index.d.ts +2 -0
  152. package/src/v-angular/core/core.globals.d.ts +13 -0
  153. package/src/v-angular/core/core.utils.d.ts +22 -0
  154. package/src/v-angular/core/index.d.ts +2 -0
  155. package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +89 -0
  156. package/src/v-angular/dropdown/dropdown-list/index.d.ts +1 -0
  157. package/src/v-angular/dropdown/dropdown.component.d.ts +99 -0
  158. package/src/v-angular/dropdown/dropdown.module.d.ts +12 -0
  159. package/src/v-angular/dropdown/index.d.ts +5 -0
  160. package/src/v-angular/dropdown/typeahead/index.d.ts +2 -0
  161. package/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +34 -0
  162. package/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +34 -0
  163. package/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +59 -0
  164. package/src/v-angular/dropdown/typeahead/typeahead.module.d.ts +11 -0
  165. package/src/v-angular/external-link/external-link.directive.d.ts +17 -0
  166. package/src/v-angular/external-link/external-link.module.d.ts +8 -0
  167. package/src/v-angular/external-link/index.d.ts +2 -0
  168. package/src/v-angular/i18n/i18n.module.d.ts +15 -0
  169. package/src/v-angular/i18n/i18n.test.module.d.ts +27 -0
  170. package/src/v-angular/i18n/index.d.ts +2 -0
  171. package/src/v-angular/info-circle/index.d.ts +2 -0
  172. package/src/v-angular/info-circle/info-circle.component.d.ts +16 -0
  173. package/src/v-angular/info-circle/info-circle.module.d.ts +10 -0
  174. package/src/v-angular/input/index.d.ts +2 -0
  175. package/src/v-angular/input/input.component.d.ts +90 -0
  176. package/src/v-angular/input/input.module.d.ts +11 -0
  177. package/src/v-angular/input-mask/config.d.ts +6 -0
  178. package/src/v-angular/input-mask/constants.d.ts +2 -0
  179. package/src/v-angular/input-mask/index.d.ts +5 -0
  180. package/src/v-angular/input-mask/input-mask-format.pipe.d.ts +8 -0
  181. package/src/v-angular/input-mask/input-mask.directive.d.ts +39 -0
  182. package/src/v-angular/input-mask/input-mask.module.d.ts +11 -0
  183. package/src/v-angular/input-mask/input-mask.types.d.ts +20 -0
  184. package/src/v-angular/modal/dialog/dialog.component.d.ts +55 -0
  185. package/src/v-angular/modal/fold-out/fold-out.component.d.ts +24 -0
  186. package/src/v-angular/modal/fold-out/fold-out.directive.d.ts +6 -0
  187. package/src/v-angular/modal/index.d.ts +5 -0
  188. package/src/v-angular/modal/modal.globals.d.ts +13 -0
  189. package/src/v-angular/modal/modal.module.d.ts +13 -0
  190. package/src/v-angular/modal/modal.types.d.ts +5 -0
  191. package/src/v-angular/modal/slide-out/slide-out.component.d.ts +76 -0
  192. package/src/v-angular/radio/index.d.ts +2 -0
  193. package/src/v-angular/radio/radio.component.d.ts +48 -0
  194. package/src/v-angular/radio/radio.module.d.ts +9 -0
  195. package/src/v-angular/slug/index.d.ts +2 -0
  196. package/src/v-angular/slug/slug.module.d.ts +8 -0
  197. package/src/v-angular/slug/slug.pipe.d.ts +12 -0
  198. package/src/v-angular/textarea/index.d.ts +2 -0
  199. package/src/v-angular/textarea/textarea.component.d.ts +44 -0
  200. package/src/v-angular/textarea/textarea.module.d.ts +8 -0
  201. package/src/v-angular/tooltip/index.d.ts +2 -0
  202. package/src/v-angular/tooltip/tooltip.directive.d.ts +106 -0
  203. package/src/v-angular/tooltip/tooltip.module.d.ts +8 -0
@@ -0,0 +1,256 @@
1
+ import { Component, EventEmitter, HostBinding, HostListener, Inject, Input, Optional, Output, ViewChildren, } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import scrollIntoView from 'scroll-into-view-if-needed';
4
+ import { TRANSLOCO_SCOPE } from '@ngneat/transloco';
5
+ import { DropdownUtils, } from '@sebgroup/green-angular/src/v-angular/core';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "../typeahead/typeahead-highlight/typeahead-highlight.component";
9
+ import * as i3 from "@sebgroup/green-angular/src/v-angular/tooltip";
10
+ import * as i4 from "@ngneat/transloco";
11
+ export class NgvDropdownListComponent {
12
+ set expanded(state) {
13
+ this.setExpanded(state);
14
+ }
15
+ get expanded() {
16
+ return this._expanded;
17
+ }
18
+ constructor(translocoScope) {
19
+ this.translocoScope = translocoScope;
20
+ /** The additional amount to show when option is scrolled into view. */
21
+ this.scrollOffset = 24;
22
+ /** Id of the host element and is accessible by the children, automatically generated if not provided. */
23
+ this.id = window.ngv?.nextId();
24
+ /** Special property used for selecting DOM elements during automated UI testing. */
25
+ this.thook = 'dropdown';
26
+ this.selectedValueChanged = new EventEmitter();
27
+ this.closed = new EventEmitter();
28
+ /** The current active option based on numeric index. */
29
+ this.activeIndex = -1;
30
+ this.dropdownUtils = new DropdownUtils();
31
+ this._expanded = false;
32
+ this.closed$ = new Subject();
33
+ if (this.translocoScope)
34
+ this.scope = this.translocoScope.toString();
35
+ }
36
+ ngOnInit() {
37
+ if (this.state)
38
+ this.activeIndex = this.options.findIndex((option) => option.key === this.state.key);
39
+ }
40
+ ngOnChanges(changes) {
41
+ if (!!changes.state && !changes.state.firstChange)
42
+ this.selectedValue = changes.state.currentValue;
43
+ if (!!changes.options?.currentValue?.length && this.expanded)
44
+ this.refreshSelectedOption();
45
+ }
46
+ /**
47
+ * Returns true if argument is an {@link OptionGroup}.
48
+ * @param option the object to check.
49
+ */
50
+ isGroup(option) {
51
+ return 'options' in option;
52
+ }
53
+ /** @internal */
54
+ updateState(option, event) {
55
+ if (option.disabled)
56
+ return;
57
+ this.selectedValue = option;
58
+ this.state = option;
59
+ this.selectedValueChanged.emit(option);
60
+ this.setExpanded(false);
61
+ event.stopPropagation();
62
+ }
63
+ /**
64
+ * @internal
65
+ */
66
+ setExpanded(expanded = true) {
67
+ // update expanded state
68
+ this._expanded = expanded;
69
+ if (expanded)
70
+ this.refreshSelectedOption();
71
+ else {
72
+ this.closed$.next(true);
73
+ this.onClickSubscription?.unsubscribe();
74
+ }
75
+ }
76
+ /**
77
+ * @internal
78
+ */
79
+ refreshSelectedOption() {
80
+ const options = this.dropdownUtils.flattenOptions(this.options, !this.optionContentTpl);
81
+ this.activeIndex = this.getActiveIndex();
82
+ this.state = options[this.activeIndex];
83
+ this.scrollToResult(this.state);
84
+ }
85
+ /**
86
+ * @internal
87
+ * @returns The active index (number) if option is found, -1 otherwise.
88
+ * - If a selectedValue exists that's not nullish and that options is found, return that index
89
+ * - Else, return first non nullish index
90
+ * - If none of the above criterias are met, -1 are returned
91
+ */
92
+ getActiveIndex() {
93
+ if (!!this.selectedValue && this.selectedValue?.key != null) {
94
+ const selectedIndex = this.dropdownUtils
95
+ .flattenOptions(this.options, !this.optionContentTpl)
96
+ .findIndex((option) => option.key != null && option.key === this.selectedValue?.key);
97
+ if (selectedIndex > -1)
98
+ return selectedIndex;
99
+ }
100
+ return this.dropdownUtils
101
+ .flattenOptions(this.options, !this.optionContentTpl)
102
+ .findIndex((option) => option.key != null);
103
+ }
104
+ /**
105
+ * @internal
106
+ * evaluates wether the HTML element overflows
107
+ * @param elem The HTMLElement to evaluate
108
+ * */
109
+ isOverflow(elem) {
110
+ return elem.offsetWidth < elem.scrollWidth;
111
+ }
112
+ /**
113
+ * Typecast anything to an {@link OptionGroup}.
114
+ * @param group the object to typecast.
115
+ */
116
+ castGroup(group) {
117
+ return group;
118
+ }
119
+ /**
120
+ * @internal
121
+ * Disables default events.
122
+ * @param event fired containing which key was pressed.
123
+ */
124
+ onKeyDown(event) {
125
+ switch (event.key) {
126
+ case 'Enter': // Disable form submission
127
+ case 'ArrowUp': // Disable scrolling up
128
+ case 'ArrowDown': // Disable scrolling down
129
+ event.preventDefault();
130
+ event.stopPropagation();
131
+ return false;
132
+ }
133
+ return true;
134
+ }
135
+ /**
136
+ * @internal
137
+ * Enter toggles the dropdown, home, end, and, arrows change the index.
138
+ * @param event fired containing which key was released.
139
+ */
140
+ onKeyUp(event) {
141
+ if (!this.expanded)
142
+ return;
143
+ const options = this.dropdownUtils.flattenOptions(this.options, !this.optionContentTpl);
144
+ let option;
145
+ switch (event.key) {
146
+ case 'Escape':
147
+ this.setExpanded(false);
148
+ this.closed.emit();
149
+ break;
150
+ case 'Enter': // Select the currently chosen value
151
+ option = options[this.activeIndex];
152
+ this.updateState(option, event);
153
+ break;
154
+ case 'Home': // Move to the first option
155
+ this.activeIndex = 0;
156
+ option = options[this.activeIndex];
157
+ this.state = option;
158
+ this.scrollToResult(option);
159
+ break;
160
+ case 'ArrowUp': // Move up one step to the previous option
161
+ if (this.activeIndex > 0)
162
+ this.activeIndex--;
163
+ else if (this.activeIndex === 0)
164
+ this.activeIndex = options.length - 1;
165
+ option = options[this.activeIndex];
166
+ this.state = option;
167
+ this.scrollToResult(option);
168
+ break;
169
+ case 'ArrowDown': // Move down one step to the next option
170
+ if (options.length > this.activeIndex + 1)
171
+ this.activeIndex++;
172
+ else if (this.activeIndex === options.length - 1)
173
+ this.activeIndex = 0;
174
+ option = options[this.activeIndex];
175
+ this.state = option;
176
+ this.scrollToResult(option);
177
+ break;
178
+ case 'End': // Move to the last options
179
+ this.activeIndex = options.length - 1;
180
+ option = options[this.activeIndex];
181
+ this.state = option;
182
+ this.scrollToResult(option);
183
+ break;
184
+ }
185
+ }
186
+ /**
187
+ * Scrolls focused result into view with a specified offset.
188
+ * @param key the result index which to scroll to.
189
+ */
190
+ scrollToResult(option) {
191
+ if (!this.optionRefs || !option)
192
+ return;
193
+ const optionRef = this.optionRefs.find((li) => li.nativeElement.id === this.id + '-option-' + option.key);
194
+ const offset = this.scrollOffset;
195
+ if (optionRef) {
196
+ let delta = window.scrollY || document.documentElement.scrollTop;
197
+ // The list seems not to be visible at the time of scrolling, but this setTimeout "hack" makes it work...
198
+ setTimeout(() => {
199
+ scrollIntoView(optionRef.nativeElement, {
200
+ scrollMode: 'if-needed',
201
+ block: 'nearest',
202
+ });
203
+ delta -= window.scrollY || document.documentElement.scrollTop;
204
+ if (delta)
205
+ window.scrollBy(0, delta > 0 ? -offset : offset);
206
+ }, 0);
207
+ }
208
+ }
209
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvDropdownListComponent, deps: [{ token: TRANSLOCO_SCOPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
210
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgvDropdownListComponent, selector: "nggv-dropdown-list", inputs: { expanded: "expanded", state: "state", scrollOffset: "scrollOffset", optionContentTpl: "optionContentTpl", id: "id", thook: "thook", options: "options", textToHighlight: "textToHighlight" }, outputs: { selectedValueChanged: "selectedValueChanged", closed: "closed" }, host: { listeners: { "document:keydown": "onKeyDown($event)", "document:keyup": "onKeyUp($event)" }, properties: { "attr.id": "this.id", "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "optionRefs", predicate: ["optionRefs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *transloco=\"let t; read: scope\">\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <div class=\"sdv-list__label\">{{ t(item.label) }}</div>\n <ul [attr.aria-disabled]=\"item.disabled\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [ngvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding ngvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host{position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));--z-index: var(--sg-z-index-dropdown)}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--grey-400)}:host .gds-dropdown__options__label:active{background-color:var(--grey-500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.NgvTypeaheadHighlightComponent, selector: "nggv-typeahead-highlight", inputs: ["textContent", "textToHighlight"] }, { kind: "directive", type: i3.NgvTooltipDirective, selector: "[ngvTooltip]", inputs: ["ngvTooltip", "thook", "placement", "shown", "offset", "resizeThrottle", "maxWidth"], outputs: ["ngvShow", "ngvHide"] }, { kind: "directive", type: i4.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvDropdownListComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ selector: 'nggv-dropdown-list', template: "<ng-container *transloco=\"let t; read: scope\">\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <div class=\"sdv-list__label\">{{ t(item.label) }}</div>\n <ul [attr.aria-disabled]=\"item.disabled\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [ngvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding ngvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [":host{position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));--z-index: var(--sg-z-index-dropdown)}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--grey-400)}:host .gds-dropdown__options__label:active{background-color:var(--grey-500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}\n"] }]
215
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
216
+ type: Optional
217
+ }, {
218
+ type: Inject,
219
+ args: [TRANSLOCO_SCOPE]
220
+ }] }]; }, propDecorators: { expanded: [{
221
+ type: Input
222
+ }], state: [{
223
+ type: Input
224
+ }], scrollOffset: [{
225
+ type: Input
226
+ }], optionContentTpl: [{
227
+ type: Input
228
+ }], optionRefs: [{
229
+ type: ViewChildren,
230
+ args: ['optionRefs']
231
+ }], id: [{
232
+ type: HostBinding,
233
+ args: ['attr.id']
234
+ }, {
235
+ type: Input
236
+ }], thook: [{
237
+ type: HostBinding,
238
+ args: ['attr.data-thook']
239
+ }, {
240
+ type: Input
241
+ }], options: [{
242
+ type: Input
243
+ }], textToHighlight: [{
244
+ type: Input
245
+ }], selectedValueChanged: [{
246
+ type: Output
247
+ }], closed: [{
248
+ type: Output
249
+ }], onKeyDown: [{
250
+ type: HostListener,
251
+ args: ['document:keydown', ['$event']]
252
+ }], onKeyUp: [{
253
+ type: HostListener,
254
+ args: ['document:keyup', ['$event']]
255
+ }] } });
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi9kcm9wZG93bi1saXN0L2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24tbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUlOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQTtBQUM1QyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQTtBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLG1CQUFtQixDQUFBO0FBRW5FLE9BQU8sRUFDTCxhQUFhLEdBR2QsTUFBTSw0Q0FBNEMsQ0FBQTs7Ozs7O0FBT25ELE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsSUFBYSxRQUFRLENBQUMsS0FBYztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUE7SUFDdkIsQ0FBQztJQXlDRCxZQUdZLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpDMUMsdUVBQXVFO1FBQzlELGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBUzFCLHlHQUF5RztRQUN4RSxPQUFFLEdBQUksTUFBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FB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QUFLO2dCQUdXLEtBQUs7c0JBQTdDLFdBQVc7dUJBQUMsaUJBQWlCOztzQkFBRyxLQUFLO2dCQUU3QixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQWlJUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBbUI1QyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCBzY3JvbGxJbnRvVmlldyBmcm9tICdzY3JvbGwtaW50by12aWV3LWlmLW5lZWRlZCdcblxuaW1wb3J0IHsgVFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29TY29wZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJ1xuXG5pbXBvcnQge1xuICBEcm9wZG93blV0aWxzLFxuICBPcHRpb24sXG4gIE9wdGlvbkJhc2UsXG59IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvY29yZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdndi1kcm9wZG93bi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndkRyb3Bkb3duTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2V0IGV4cGFuZGVkKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRFeHBhbmRlZChzdGF0ZSlcbiAgfVxuICBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkXG4gIH1cbiAgQElucHV0KCkgc3RhdGU6IGFueVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgQElucHV0KCkgb3B0aW9uQ29udGVudFRwbDogVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PiB8IHVuZGVmaW5lZFxuXG4gIC8qKiBAaW50ZXJuYWwgTGlzdCBvZiByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gZWxlbWVudHMuICovXG4gIEBWaWV3Q2hpbGRyZW4oJ29wdGlvblJlZnMnKSBvcHRpb25SZWZzOlxuICAgIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+XG4gICAgfCB1bmRlZmluZWRcblxuICAvKiogSWQgb2YgdGhlIGhvc3QgZWxlbWVudCBhbmQgaXMgYWNjZXNzaWJsZSBieSB0aGUgY2hpbGRyZW4sIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGlmIG5vdCBwcm92aWRlZC4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgQElucHV0KCkgaWQgPSAod2luZG93IGFzIGFueSkubmd2Py5uZXh0SWQoKVxuXG4gIC8qKiBTcGVjaWFsIHByb3BlcnR5IHVzZWQgZm9yIHNlbGVjdGluZyBET00gZWxlbWVudHMgZHVyaW5nIGF1dG9tYXRlZCBVSSB0ZXN0aW5nLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10aG9vaycpIEBJbnB1dCgpIHRob29rID0gJ2Ryb3Bkb3duJ1xuXG4gIEBJbnB1dCgpIG9wdGlvbnMhOiBhbnlbXVxuXG4gIEBJbnB1dCgpIHRleHRUb0hpZ2hsaWdodD86IHN0cmluZ1xuXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gIC8qKiBUaGUgY3VycmVudCBhY3RpdmUgb3B0aW9uIGJhc2VkIG9uIG51bWVyaWMgaW5kZXguICovXG4gIHB1YmxpYyBhY3RpdmVJbmRleCA9IC0xXG5cbiAgc2NvcGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIHByaXZhdGUgZHJvcGRvd25VdGlsczogRHJvcGRvd25VdGlsczxzdHJpbmcgfCBudWxsLCBzdHJpbmcsIGFueT4gPVxuICAgIG5ldyBEcm9wZG93blV0aWxzPHN0cmluZyB8IG51bGwsIHN0cmluZywgYW55PigpXG4gIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2VcbiAgcHJpdmF0ZSBjbG9zZWQkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKVxuICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZT86IE9wdGlvbjxzdHJpbmcsIGFueT5cblxuICAvKiogU3Vic2NyaWJlIGlmIGRyb3Bkb3duIGV4cGFuZGVkIHRvIGxpc3RlbiB0byBjbGljayBvdXRzaWRlIHRvIGNsb3NlIGRyb3Bkb3duLiAqL1xuICBwcm90ZWN0ZWQgb25DbGlja1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICApIHtcbiAgICBpZiAodGhpcy50cmFuc2xvY29TY29wZSkgdGhpcy5zY29wZSA9IHRoaXMudHJhbnNsb2NvU2NvcGUudG9TdHJpbmcoKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUpXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5vcHRpb25zLmZpbmRJbmRleChcbiAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gdGhpcy5zdGF0ZS5rZXksXG4gICAgICApXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCEhY2hhbmdlcy5zdGF0ZSAmJiAhY2hhbmdlcy5zdGF0ZS5maXJzdENoYW5nZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGNoYW5nZXMuc3RhdGUuY3VycmVudFZhbHVlXG4gICAgaWYgKCEhY2hhbmdlcy5vcHRpb25zPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCAmJiB0aGlzLmV4cGFuZGVkKVxuICAgICAgdGhpcy5yZWZyZXNoU2VsZWN0ZWRPcHRpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudCBpcyBhbiB7QGxpbmsgT3B0aW9uR3JvdXB9LlxuICAgKiBAcGFyYW0gb3B0aW9uIHRoZSBvYmplY3QgdG8gY2hlY2suXG4gICAqL1xuICBpc0dyb3VwKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdvcHRpb25zJyBpbiBvcHRpb25cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgdXBkYXRlU3RhdGUob3B0aW9uOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHJldHVyblxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uXG4gICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUNoYW5nZWQuZW1pdChvcHRpb24pXG4gICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2V0RXhwYW5kZWQoZXhwYW5kZWQgPSB0cnVlKSB7XG4gICAgLy8gdXBkYXRlIGV4cGFuZGVkIHN0YXRlXG4gICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZFxuXG4gICAgaWYgKGV4cGFuZGVkKSB0aGlzLnJlZnJlc2hTZWxlY3RlZE9wdGlvbigpXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlZCQubmV4dCh0cnVlKVxuICAgICAgdGhpcy5vbkNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVmcmVzaFNlbGVjdGVkT3B0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duVXRpbHMuZmxhdHRlbk9wdGlvbnMoXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAhdGhpcy5vcHRpb25Db250ZW50VHBsLFxuICAgIClcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5nZXRBY3RpdmVJbmRleCgpXG4gICAgdGhpcy5zdGF0ZSA9IG9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgaW5kZXggKG51bWJlcikgaWYgb3B0aW9uIGlzIGZvdW5kLCAtMSBvdGhlcndpc2UuXG4gICAqIC0gSWYgYSBzZWxlY3RlZFZhbHVlIGV4aXN0cyB0aGF0J3Mgbm90IG51bGxpc2ggYW5kIHRoYXQgb3B0aW9ucyBpcyBmb3VuZCwgcmV0dXJuIHRoYXQgaW5kZXhcbiAgICogLSBFbHNlLCByZXR1cm4gZmlyc3Qgbm9uIG51bGxpc2ggaW5kZXhcbiAgICogLSBJZiBub25lIG9mIHRoZSBhYm92ZSBjcml0ZXJpYXMgYXJlIG1ldCwgLTEgYXJlIHJldHVybmVkXG4gICAqL1xuICBnZXRBY3RpdmVJbmRleCgpOiBudW1iZXIge1xuICAgIGlmICghIXRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWU/LmtleSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5kcm9wZG93blV0aWxzXG4gICAgICAgIC5mbGF0dGVuT3B0aW9ucyh0aGlzLm9wdGlvbnMsICF0aGlzLm9wdGlvbkNvbnRlbnRUcGwpXG4gICAgICAgIC5maW5kSW5kZXgoXG4gICAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICAgIG9wdGlvbi5rZXkgIT0gbnVsbCAmJiBvcHRpb24ua2V5ID09PSB0aGlzLnNlbGVjdGVkVmFsdWU/LmtleSxcbiAgICAgICAgKVxuICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPiAtMSkgcmV0dXJuIHNlbGVjdGVkSW5kZXhcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25VdGlsc1xuICAgICAgLmZsYXR0ZW5PcHRpb25zKHRoaXMub3B0aW9ucywgIXRoaXMub3B0aW9uQ29udGVudFRwbClcbiAgICAgIC5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSAhPSBudWxsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBldmFsdWF0ZXMgd2V0aGVyIHRoZSBIVE1MIGVsZW1lbnQgb3ZlcmZsb3dzXG4gICAqIEBwYXJhbSBlbGVtIFRoZSBIVE1MRWxlbWVudCB0byBldmFsdWF0ZVxuICAgKiAqL1xuICBpc092ZXJmbG93KGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPCBlbGVtLnNjcm9sbFdpZHRoXG4gIH1cblxuICAvKipcbiAgICogVHlwZWNhc3QgYW55dGhpbmcgdG8gYW4ge0BsaW5rIE9wdGlvbkdyb3VwfS5cbiAgICogQHBhcmFtIGdyb3VwIHRoZSBvYmplY3QgdG8gdHlwZWNhc3QuXG4gICAqL1xuICBjYXN0R3JvdXAoZ3JvdXA6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGdyb3VwXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIERpc2FibGVzIGRlZmF1bHQgZXZlbnRzLlxuICAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHByZXNzZWQuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzogLy8gIERpc2FibGUgZm9ybSBzdWJtaXNzaW9uXG4gICAgICBjYXNlICdBcnJvd1VwJzogLy8gRGlzYWJsZSBzY3JvbGxpbmcgdXBcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IC8vIERpc2FibGUgc2Nyb2xsaW5nIGRvd25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogRW50ZXIgdG9nZ2xlcyB0aGUgZHJvcGRvd24sIGhvbWUsIGVuZCwgYW5kLCBhcnJvd3MgY2hhbmdlIHRoZSBpbmRleC5cbiAgICogQHBhcmFtIGV2ZW50IGZpcmVkIGNvbnRhaW5pbmcgd2hpY2gga2V5IHdhcyByZWxlYXNlZC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICghdGhpcy5leHBhbmRlZCkgcmV0dXJuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICF0aGlzLm9wdGlvbkNvbnRlbnRUcGwsXG4gICAgKVxuICAgIGxldCBvcHRpb25cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ0VudGVyJzogLy8gU2VsZWN0IHRoZSBjdXJyZW50bHkgY2hvc2VuIHZhbHVlXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShvcHRpb24sIGV2ZW50KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdIb21lJzogLy8gTW92ZSB0byB0aGUgZmlyc3Qgb3B0aW9uXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwXG5cbiAgICAgICAgb3B0aW9uID0gb3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzogLy8gTW92ZSB1cCBvbmUgc3RlcCB0byB0aGUgcHJldmlvdXMgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID4gMCkgdGhpcy5hY3RpdmVJbmRleC0tXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IDApIHRoaXMuYWN0aXZlSW5kZXggPSBvcHRpb25zLmxlbmd0aCAtIDFcblxuICAgICAgICBvcHRpb24gPSBvcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChvcHRpb24pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IC8vIE1vdmUgZG93biBvbmUgc3RlcCB0byB0aGUgbmV4dCBvcHRpb25cbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gdGhpcy5hY3RpdmVJbmRleCArIDEpIHRoaXMuYWN0aXZlSW5kZXgrK1xuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSBvcHRpb25zLmxlbmd0aCAtIDEpIHRoaXMuYWN0aXZlSW5kZXggPSAwXG5cbiAgICAgICAgb3B0aW9uID0gb3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdFbmQnOiAvLyBNb3ZlIHRvIHRoZSBsYXN0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KG9wdGlvbilcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyBmb2N1c2VkIHJlc3VsdCBpbnRvIHZpZXcgd2l0aCBhIHNwZWNpZmllZCBvZmZzZXQuXG4gICAqIEBwYXJhbSBrZXkgdGhlIHJlc3VsdCBpbmRleCB3aGljaCB0byBzY3JvbGwgdG8uXG4gICAqL1xuICBzY3JvbGxUb1Jlc3VsdChvcHRpb246IGFueSkge1xuICAgIGlmICghdGhpcy5vcHRpb25SZWZzIHx8ICFvcHRpb24pIHJldHVyblxuICAgIGNvbnN0IG9wdGlvblJlZiA9IHRoaXMub3B0aW9uUmVmcy5maW5kKFxuICAgICAgKGxpKSA9PiBsaS5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLmlkICsgJy1vcHRpb24tJyArIG9wdGlvbi5rZXksXG4gICAgKVxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuc2Nyb2xsT2Zmc2V0XG4gICAgaWYgKG9wdGlvblJlZikge1xuICAgICAgbGV0IGRlbHRhID0gd2luZG93LnNjcm9sbFkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuXG4gICAgICAvLyBUaGUgbGlzdCBzZWVtcyBub3QgdG8gYmUgdmlzaWJsZSBhdCB0aGUgdGltZSBvZiBzY3JvbGxpbmcsIGJ1dCB0aGlzIHNldFRpbWVvdXQgXCJoYWNrXCIgbWFrZXMgaXQgd29yay4uLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNjcm9sbEludG9WaWV3KG9wdGlvblJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXG4gICAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgfSlcblxuICAgICAgICBkZWx0YSAtPSB3aW5kb3cuc2Nyb2xsWSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgIGlmIChkZWx0YSkgd2luZG93LnNjcm9sbEJ5KDAsIGRlbHRhID4gMCA/IC1vZmZzZXQgOiBvZmZzZXQpXG4gICAgICB9LCAwKVxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHQ7IHJlYWQ6IHNjb3BlXCI+XG4gIDx1bFxuICAgIGNsYXNzPVwiZ2RzLWRyb3Bkb3duX19vcHRpb25zIGNhcmQgb3B0aW9ucyBnZHMtcmVzZXRcIlxuICAgIFtjbGFzcy5nZHMtZHJvcGRvd25fX29wdGlvbnMtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1vcHRpb25zJ1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImlkICsgJy1sYWJlbCdcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJcbiAgICAgIHN0YXRlID8gaWQgKyAnLW9wdGlvbi0nICsgc3RhdGU/LmtleSA6IHVuZGVmaW5lZFxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cbiAgICAgIDwhLS0gT1BUSU9OIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0dyb3VwKGl0ZW0pXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdEl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gT1BUSU9OIEdST1VQIC0tPlxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzPVwiZ2RzLWRyb3Bkb3duX19vcHRpb25zX19sYWJlbCBncm91cFwiXG4gICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi1ncm91cCdcIlxuICAgICAgICAqbmdJZj1cImlzR3JvdXAoaXRlbSlcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2R2LWxpc3RfX2xhYmVsXCI+e3sgdChpdGVtLmxhYmVsKSB9fTwvZGl2PlxuICAgICAgICA8dWwgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNhc3RHcm91cChpdGVtKS5vcHRpb25zXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBsaXN0SXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuXG4gIDwhLS0gVEVNUExBVEUgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiIW9wdGlvbkNvbnRlbnRUcGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgb3B0aW9uXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgI2xpRWxlbVxuICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLScgKyBvcHRpb24ua2V5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiXG4gICAgICAgIG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkVmFsdWU/LmtleSAmJiAhIXNlbGVjdGVkVmFsdWU/LmtleVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtZm9jdXNdPVwib3B0aW9uLmtleSA9PT0gc3RhdGU/LmtleSAmJiAhb3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFtuZ3ZUb29sdGlwXT1cImlzT3ZlcmZsb3cobGlFbGVtKSA/IHQob3B0aW9uLmxhYmVsKSA6IHVuZGVmaW5lZFwiXG4gICAgICAoY2xpY2spPVwidXBkYXRlU3RhdGUob3B0aW9uLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBiYXNpY09wdGlvbkNvbnRlbnRUcGw7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG9wdGlvbiB9XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gICAgPCEtLSBDaGVja2luZyBvdmVyZmxvdyBvbiBjdXN0b20gdGVtcGxhdGVzIGRvIG5vdCB3b3JrIHNraXAgYWRkaW5nIG5ndlRvb2xUaXAgaWYgY3VzdG9tIHRlbXBsYXRlIGlzIHByb3ZpZGVkIC0tPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiISFvcHRpb25Db250ZW50VHBsXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cImlkICsgJy1vcHRpb24tJyArIG9wdGlvbi5rZXlcIlxuICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIG9wdGlvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICNsaUVsZW1cbiAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIlxuICAgICAgICBvcHRpb24ua2V5ID09PSBzZWxlY3RlZFZhbHVlPy5rZXkgJiYgISFzZWxlY3RlZFZhbHVlPy5rZXlcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWZvY3VzXT1cIm9wdGlvbi5rZXkgPT09IHN0YXRlPy5rZXkgJiYgIW9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwidXBkYXRlU3RhdGUob3B0aW9uLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25Db250ZW50VHBsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjYmFzaWNPcHRpb25Db250ZW50VHBsIGxldC1vcHRpb24+XG4gICAgPG5nZ3YtdHlwZWFoZWFkLWhpZ2hsaWdodFxuICAgICAgKm5nSWY9XCIhIXRleHRUb0hpZ2hsaWdodFwiXG4gICAgICBbdGV4dFRvSGlnaGxpZ2h0XT1cInRleHRUb0hpZ2hsaWdodFwiXG4gICAgICBbdGV4dENvbnRlbnRdPVwidChvcHRpb24ubGFiZWwpXCJcbiAgICA+XG4gICAgPC9uZ2d2LXR5cGVhaGVhZC1oaWdobGlnaHQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0ZXh0VG9IaWdobGlnaHRcIj5cbiAgICAgIHt7IHQob3B0aW9uLmxhYmVsKSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './dropdown-list.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi9kcm9wZG93bi1saXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50J1xuIl19