@sebgroup/green-angular 10.0.2 → 10.0.3-rc.20260616114541449

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 (469) hide show
  1. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +10 -10
  2. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -1
  3. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs +7 -7
  4. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -1
  5. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs +7 -7
  6. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -1
  7. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs +23 -23
  8. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -1
  9. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs +11 -11
  10. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -1
  11. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +11 -11
  12. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -1
  13. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +24 -27
  14. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -1
  15. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs +7 -7
  16. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -1
  17. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +45 -46
  18. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -1
  19. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs +7 -7
  20. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -1
  21. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs +7 -7
  22. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -1
  23. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs +7 -7
  24. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -1
  25. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +41 -41
  26. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
  27. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs +7 -7
  28. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -1
  29. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +7 -7
  30. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -1
  31. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +7 -7
  32. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -1
  33. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs +8 -8
  34. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs.map +1 -1
  35. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +8 -8
  36. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
  37. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +8 -8
  38. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -1
  39. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +8 -8
  40. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
  41. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +8 -8
  42. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -1
  43. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +7 -7
  44. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
  45. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +8 -8
  46. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -1
  47. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +3 -3
  48. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
  49. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +37 -37
  50. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
  51. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +13 -13
  52. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -1
  53. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +29 -29
  54. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
  55. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +7 -7
  56. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -1
  57. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +14 -14
  58. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
  59. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +7 -7
  60. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
  61. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +10 -10
  62. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
  63. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +8 -8
  64. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
  65. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +19 -19
  66. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
  67. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs +7 -7
  68. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs.map +1 -1
  69. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +14 -14
  70. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -1
  71. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +7 -7
  72. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -1
  73. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +23 -23
  74. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
  75. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs +11 -11
  76. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs.map +1 -1
  77. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +8 -8
  78. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
  79. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +10 -10
  80. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -1
  81. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +7 -7
  82. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
  83. package/fesm2022/sebgroup-green-angular-v-angular.mjs +300 -300
  84. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  85. package/fesm2022/sebgroup-green-angular.mjs +222 -226
  86. package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
  87. package/index.d.ts +1021 -17
  88. package/package.json +12 -12
  89. package/src/lib/accordion/index.d.ts +51 -3
  90. package/src/lib/badge/index.d.ts +46 -2
  91. package/src/lib/button/index.d.ts +20 -2
  92. package/src/lib/cell-table/index.d.ts +105 -3
  93. package/src/lib/context-menu/index.d.ts +63 -2
  94. package/src/lib/datepicker/index.d.ts +80 -2
  95. package/src/lib/dropdown/index.d.ts +114 -4
  96. package/src/lib/in-page-wizard/index.d.ts +30 -2
  97. package/src/lib/modal/index.d.ts +96 -4
  98. package/src/lib/pagination/index.d.ts +66 -2
  99. package/src/lib/progress-circle/index.d.ts +24 -2
  100. package/src/lib/segmented-control/index.d.ts +29 -2
  101. package/src/lib/shared/index.d.ts +223 -7
  102. package/src/lib/slider/index.d.ts +48 -2
  103. package/src/lib/sortable-list/index.d.ts +105 -2
  104. package/src/v-angular/account-number/index.d.ts +43 -2
  105. package/src/v-angular/alert/index.d.ts +44 -3
  106. package/src/v-angular/base-control-value-accessor/index.d.ts +143 -2
  107. package/src/v-angular/breadcrumbs/index.d.ts +29 -2
  108. package/src/v-angular/button/index.d.ts +75 -2
  109. package/src/v-angular/card/index.d.ts +15 -2
  110. package/src/v-angular/character-countdown/index.d.ts +27 -2
  111. package/src/v-angular/checkbox/index.d.ts +47 -2
  112. package/src/v-angular/core/index.d.ts +40 -2
  113. package/src/v-angular/datepicker/index.d.ts +577 -13
  114. package/src/v-angular/drag-drop/index.d.ts +233 -4
  115. package/src/v-angular/dropdown/index.d.ts +474 -5
  116. package/src/v-angular/external-link/index.d.ts +27 -2
  117. package/src/v-angular/i18n/index.d.ts +44 -2
  118. package/src/v-angular/info-circle/index.d.ts +27 -2
  119. package/src/v-angular/input/index.d.ts +127 -2
  120. package/src/v-angular/input-mask/index.d.ts +81 -5
  121. package/src/v-angular/modal/index.d.ts +243 -5
  122. package/src/v-angular/pagination/index.d.ts +75 -2
  123. package/src/v-angular/radio/index.d.ts +111 -3
  124. package/src/v-angular/slug/index.d.ts +22 -2
  125. package/src/v-angular/table/index.d.ts +379 -5
  126. package/src/v-angular/tabs/index.d.ts +138 -4
  127. package/src/v-angular/textarea/index.d.ts +69 -2
  128. package/src/v-angular/toast/index.d.ts +65 -4
  129. package/src/v-angular/tooltip/index.d.ts +118 -2
  130. package/v-angular/index.d.ts +3088 -28
  131. package/lib/accordion/accordion-list-item.component.d.ts +0 -16
  132. package/lib/accordion/accordion.component.d.ts +0 -21
  133. package/lib/accordion/accordion.module.d.ts +0 -14
  134. package/lib/accordion/index.d.ts +0 -3
  135. package/lib/badge/badge.component.d.ts +0 -30
  136. package/lib/badge/badge.module.d.ts +0 -13
  137. package/lib/badge/index.d.ts +0 -2
  138. package/lib/button/button.component.d.ts +0 -11
  139. package/lib/button/button.module.d.ts +0 -8
  140. package/lib/button/index.d.ts +0 -2
  141. package/lib/cell-table/cell-table-item.component.d.ts +0 -14
  142. package/lib/cell-table/cell-table.component.d.ts +0 -44
  143. package/lib/cell-table/cell-table.module.d.ts +0 -10
  144. package/lib/cell-table/cell-table.types.d.ts +0 -34
  145. package/lib/cell-table/cell-underline.directive.d.ts +0 -14
  146. package/lib/cell-table/index.d.ts +0 -3
  147. package/lib/context-menu/context-menu.component.d.ts +0 -48
  148. package/lib/context-menu/context-menu.module.d.ts +0 -14
  149. package/lib/context-menu/index.d.ts +0 -2
  150. package/lib/datepicker/datepicker.component.d.ts +0 -63
  151. package/lib/datepicker/datepicker.module.d.ts +0 -14
  152. package/lib/datepicker/index.d.ts +0 -2
  153. package/lib/dropdown/dropdown-button.directive.d.ts +0 -8
  154. package/lib/dropdown/dropdown-option.directive.d.ts +0 -8
  155. package/lib/dropdown/dropdown.component.d.ts +0 -87
  156. package/lib/dropdown/dropdown.module.d.ts +0 -16
  157. package/lib/dropdown/index.d.ts +0 -4
  158. package/lib/green-angular.module.d.ts +0 -21
  159. package/lib/in-page-wizard/in-page-wizard-step-card.component.d.ts +0 -19
  160. package/lib/in-page-wizard/in-page-wizard.module.d.ts +0 -9
  161. package/lib/in-page-wizard/index.d.ts +0 -2
  162. package/lib/modal/index.d.ts +0 -4
  163. package/lib/modal/modal-footer.directive.d.ts +0 -8
  164. package/lib/modal/modal-header.directive.d.ts +0 -8
  165. package/lib/modal/modal.component.d.ts +0 -74
  166. package/lib/modal/modal.module.d.ts +0 -14
  167. package/lib/pagination/index.d.ts +0 -2
  168. package/lib/pagination/pagination.component.d.ts +0 -56
  169. package/lib/pagination/pagination.module.d.ts +0 -8
  170. package/lib/progress-circle/index.d.ts +0 -2
  171. package/lib/progress-circle/progress-circle.component.d.ts +0 -15
  172. package/lib/progress-circle/progress-circle.module.d.ts +0 -8
  173. package/lib/segmented-control/index.d.ts +0 -2
  174. package/lib/segmented-control/segmented-control.component.d.ts +0 -14
  175. package/lib/segmented-control/segmented-control.module.d.ts +0 -12
  176. package/lib/shared/core-control/core-checkbox.directive.d.ts +0 -10
  177. package/lib/shared/core-control/core-control.directive.d.ts +0 -19
  178. package/lib/shared/core-control/core-control.module.d.ts +0 -10
  179. package/lib/shared/core-control/index.d.ts +0 -3
  180. package/lib/shared/core-element/core-element.directive.d.ts +0 -17
  181. package/lib/shared/core-element/core-element.module.d.ts +0 -11
  182. package/lib/shared/core-element/index.d.ts +0 -2
  183. package/lib/shared/core-renderer/core-renderer.d.ts +0 -111
  184. package/lib/shared/core-renderer/index.d.ts +0 -1
  185. package/lib/shared/core-router-link/core-router-link.directive.d.ts +0 -19
  186. package/lib/shared/core-router-link/core-router-link.module.d.ts +0 -10
  187. package/lib/shared/core-router-link/index.d.ts +0 -2
  188. package/lib/shared/id.d.ts +0 -1
  189. package/lib/shared/index.d.ts +0 -7
  190. package/lib/shared/on-scroll.directive.d.ts +0 -14
  191. package/lib/shared/scope-resolver.d.ts +0 -5
  192. package/lib/shared/shared.module.d.ts +0 -9
  193. package/lib/slider/index.d.ts +0 -2
  194. package/lib/slider/slider.component.d.ts +0 -38
  195. package/lib/slider/slider.module.d.ts +0 -9
  196. package/lib/sortable-list/index.d.ts +0 -2
  197. package/lib/sortable-list/sortable-list.component.d.ts +0 -92
  198. package/lib/sortable-list/sortable-list.module.d.ts +0 -11
  199. package/src/lib/accordion/accordion-list-item.component.d.ts +0 -16
  200. package/src/lib/accordion/accordion.component.d.ts +0 -21
  201. package/src/lib/accordion/accordion.module.d.ts +0 -14
  202. package/src/lib/badge/badge.component.d.ts +0 -30
  203. package/src/lib/badge/badge.module.d.ts +0 -13
  204. package/src/lib/button/button.component.d.ts +0 -11
  205. package/src/lib/button/button.module.d.ts +0 -8
  206. package/src/lib/cell-table/cell-table-item.component.d.ts +0 -14
  207. package/src/lib/cell-table/cell-table.component.d.ts +0 -44
  208. package/src/lib/cell-table/cell-table.module.d.ts +0 -10
  209. package/src/lib/cell-table/cell-table.types.d.ts +0 -34
  210. package/src/lib/cell-table/cell-underline.directive.d.ts +0 -14
  211. package/src/lib/context-menu/context-menu.component.d.ts +0 -48
  212. package/src/lib/context-menu/context-menu.module.d.ts +0 -14
  213. package/src/lib/datepicker/datepicker.component.d.ts +0 -63
  214. package/src/lib/datepicker/datepicker.module.d.ts +0 -14
  215. package/src/lib/dropdown/dropdown-button.directive.d.ts +0 -8
  216. package/src/lib/dropdown/dropdown-option.directive.d.ts +0 -8
  217. package/src/lib/dropdown/dropdown.component.d.ts +0 -87
  218. package/src/lib/dropdown/dropdown.module.d.ts +0 -16
  219. package/src/lib/in-page-wizard/in-page-wizard-step-card.component.d.ts +0 -19
  220. package/src/lib/in-page-wizard/in-page-wizard.module.d.ts +0 -9
  221. package/src/lib/modal/modal-footer.directive.d.ts +0 -8
  222. package/src/lib/modal/modal-header.directive.d.ts +0 -8
  223. package/src/lib/modal/modal.component.d.ts +0 -74
  224. package/src/lib/modal/modal.module.d.ts +0 -14
  225. package/src/lib/pagination/pagination.component.d.ts +0 -56
  226. package/src/lib/pagination/pagination.module.d.ts +0 -8
  227. package/src/lib/progress-circle/progress-circle.component.d.ts +0 -15
  228. package/src/lib/progress-circle/progress-circle.module.d.ts +0 -8
  229. package/src/lib/segmented-control/segmented-control.component.d.ts +0 -14
  230. package/src/lib/segmented-control/segmented-control.module.d.ts +0 -12
  231. package/src/lib/shared/core-control/core-checkbox.directive.d.ts +0 -10
  232. package/src/lib/shared/core-control/core-control.directive.d.ts +0 -19
  233. package/src/lib/shared/core-control/core-control.module.d.ts +0 -10
  234. package/src/lib/shared/core-control/index.d.ts +0 -3
  235. package/src/lib/shared/core-element/core-element.directive.d.ts +0 -17
  236. package/src/lib/shared/core-element/core-element.module.d.ts +0 -11
  237. package/src/lib/shared/core-element/index.d.ts +0 -2
  238. package/src/lib/shared/core-renderer/core-renderer.d.ts +0 -111
  239. package/src/lib/shared/core-renderer/index.d.ts +0 -1
  240. package/src/lib/shared/core-router-link/core-router-link.directive.d.ts +0 -19
  241. package/src/lib/shared/core-router-link/core-router-link.module.d.ts +0 -10
  242. package/src/lib/shared/core-router-link/index.d.ts +0 -2
  243. package/src/lib/shared/id.d.ts +0 -1
  244. package/src/lib/shared/on-scroll.directive.d.ts +0 -14
  245. package/src/lib/shared/scope-resolver.d.ts +0 -5
  246. package/src/lib/shared/shared.module.d.ts +0 -9
  247. package/src/lib/slider/slider.component.d.ts +0 -38
  248. package/src/lib/slider/slider.module.d.ts +0 -9
  249. package/src/lib/sortable-list/sortable-list.component.d.ts +0 -92
  250. package/src/lib/sortable-list/sortable-list.module.d.ts +0 -11
  251. package/src/v-angular/account-number/account-number.module.d.ts +0 -8
  252. package/src/v-angular/account-number/account-number.pipe.d.ts +0 -32
  253. package/src/v-angular/alert/alert.component.d.ts +0 -20
  254. package/src/v-angular/alert/alert.models.d.ts +0 -13
  255. package/src/v-angular/alert/alert.module.d.ts +0 -8
  256. package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +0 -134
  257. package/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +0 -7
  258. package/src/v-angular/breadcrumbs/breadcrumbs.component.d.ts +0 -18
  259. package/src/v-angular/breadcrumbs/breadcrumbs.module.d.ts +0 -10
  260. package/src/v-angular/button/button.component.d.ts +0 -62
  261. package/src/v-angular/button/button.module.d.ts +0 -10
  262. package/src/v-angular/card/card.component.d.ts +0 -5
  263. package/src/v-angular/card/card.module.d.ts +0 -8
  264. package/src/v-angular/character-countdown/character-countdown.directive.d.ts +0 -17
  265. package/src/v-angular/character-countdown/character-countdown.module.d.ts +0 -8
  266. package/src/v-angular/checkbox/checkbox.component.d.ts +0 -36
  267. package/src/v-angular/checkbox/checkbox.module.d.ts +0 -10
  268. package/src/v-angular/core/core.globals.d.ts +0 -13
  269. package/src/v-angular/core/core.utils.d.ts +0 -23
  270. package/src/v-angular/datepicker/components/calendar/calendar.component.d.ts +0 -36
  271. package/src/v-angular/datepicker/components/calendar-control/calendar-control.component.d.ts +0 -30
  272. package/src/v-angular/datepicker/components/date-input/date-input.component.d.ts +0 -113
  273. package/src/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +0 -76
  274. package/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +0 -169
  275. package/src/v-angular/datepicker/datepicker.globals.d.ts +0 -13
  276. package/src/v-angular/datepicker/datepicker.models.d.ts +0 -50
  277. package/src/v-angular/datepicker/datepicker.module.d.ts +0 -19
  278. package/src/v-angular/datepicker/datepicker.utils.d.ts +0 -46
  279. package/src/v-angular/datepicker/directives/calendar-date.directive.d.ts +0 -21
  280. package/src/v-angular/datepicker/models/dates.d.ts +0 -15
  281. package/src/v-angular/datepicker/pipes/date-thook.pipe.d.ts +0 -8
  282. package/src/v-angular/datepicker/pipes/is-disabled.pipe.d.ts +0 -8
  283. package/src/v-angular/datepicker/pipes/matches.pipe.d.ts +0 -7
  284. package/src/v-angular/drag-drop/drag-drop.component.d.ts +0 -131
  285. package/src/v-angular/drag-drop/drag-drop.models.d.ts +0 -49
  286. package/src/v-angular/drag-drop/drag-drop.module.d.ts +0 -13
  287. package/src/v-angular/drag-drop/drag-drop.pipes.d.ts +0 -40
  288. package/src/v-angular/drag-drop/drag-drop.utils.d.ts +0 -33
  289. package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +0 -135
  290. package/src/v-angular/dropdown/dropdown-list/index.d.ts +0 -1
  291. package/src/v-angular/dropdown/dropdown.component.d.ts +0 -129
  292. package/src/v-angular/dropdown/dropdown.module.d.ts +0 -13
  293. package/src/v-angular/dropdown/typeahead/index.d.ts +0 -5
  294. package/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +0 -40
  295. package/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +0 -34
  296. package/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +0 -61
  297. package/src/v-angular/dropdown/typeahead/typeahead.directive.d.ts +0 -78
  298. package/src/v-angular/dropdown/typeahead/typeahead.module.d.ts +0 -11
  299. package/src/v-angular/external-link/external-link.directive.d.ts +0 -17
  300. package/src/v-angular/external-link/external-link.module.d.ts +0 -8
  301. package/src/v-angular/i18n/i18n.module.d.ts +0 -15
  302. package/src/v-angular/i18n/i18n.test.module.d.ts +0 -27
  303. package/src/v-angular/info-circle/info-circle.component.d.ts +0 -16
  304. package/src/v-angular/info-circle/info-circle.module.d.ts +0 -10
  305. package/src/v-angular/input/input.component.d.ts +0 -112
  306. package/src/v-angular/input/input.module.d.ts +0 -13
  307. package/src/v-angular/input-mask/config.d.ts +0 -6
  308. package/src/v-angular/input-mask/constants.d.ts +0 -2
  309. package/src/v-angular/input-mask/input-mask-format.pipe.d.ts +0 -8
  310. package/src/v-angular/input-mask/input-mask.directive.d.ts +0 -39
  311. package/src/v-angular/input-mask/input-mask.module.d.ts +0 -11
  312. package/src/v-angular/input-mask/input-mask.types.d.ts +0 -20
  313. package/src/v-angular/modal/dialog/dialog.component.d.ts +0 -72
  314. package/src/v-angular/modal/fold-out/fold-out.component.d.ts +0 -51
  315. package/src/v-angular/modal/fold-out/fold-out.directive.d.ts +0 -6
  316. package/src/v-angular/modal/fold-out/keyboard-key.enum.d.ts +0 -8
  317. package/src/v-angular/modal/modal.globals.d.ts +0 -13
  318. package/src/v-angular/modal/modal.module.d.ts +0 -15
  319. package/src/v-angular/modal/modal.types.d.ts +0 -6
  320. package/src/v-angular/modal/slide-out/slide-out.component.d.ts +0 -85
  321. package/src/v-angular/pagination/pagination.component.d.ts +0 -64
  322. package/src/v-angular/pagination/pagination.module.d.ts +0 -12
  323. package/src/v-angular/radio/radio-group/radio-group.component.d.ts +0 -42
  324. package/src/v-angular/radio/radio.component.d.ts +0 -63
  325. package/src/v-angular/radio/radio.module.d.ts +0 -11
  326. package/src/v-angular/slug/slug.module.d.ts +0 -8
  327. package/src/v-angular/slug/slug.pipe.d.ts +0 -12
  328. package/src/v-angular/table/table.component.d.ts +0 -248
  329. package/src/v-angular/table/table.directive.d.ts +0 -36
  330. package/src/v-angular/table/table.models.d.ts +0 -78
  331. package/src/v-angular/table/table.module.d.ts +0 -12
  332. package/src/v-angular/table/table.tools.d.ts +0 -5
  333. package/src/v-angular/table/tr-thook.pipe.d.ts +0 -7
  334. package/src/v-angular/tabs/tab.directive.d.ts +0 -37
  335. package/src/v-angular/tabs/tabs.component.d.ts +0 -65
  336. package/src/v-angular/tabs/tabs.models.d.ts +0 -25
  337. package/src/v-angular/tabs/tabs.module.d.ts +0 -11
  338. package/src/v-angular/textarea/textarea.component.d.ts +0 -57
  339. package/src/v-angular/textarea/textarea.module.d.ts +0 -12
  340. package/src/v-angular/toast/toast-message.service.d.ts +0 -19
  341. package/src/v-angular/toast/toast.component.d.ts +0 -20
  342. package/src/v-angular/toast/toast.models.d.ts +0 -18
  343. package/src/v-angular/toast/toast.module.d.ts +0 -10
  344. package/src/v-angular/tooltip/tooltip.directive.d.ts +0 -108
  345. package/src/v-angular/tooltip/tooltip.module.d.ts +0 -8
  346. package/src/v-angular/tooltip/tooltip.styles.d.ts +0 -11
  347. package/v-angular/account-number/account-number.module.d.ts +0 -8
  348. package/v-angular/account-number/account-number.pipe.d.ts +0 -32
  349. package/v-angular/account-number/index.d.ts +0 -2
  350. package/v-angular/alert/alert.component.d.ts +0 -20
  351. package/v-angular/alert/alert.models.d.ts +0 -13
  352. package/v-angular/alert/alert.module.d.ts +0 -8
  353. package/v-angular/alert/index.d.ts +0 -3
  354. package/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +0 -134
  355. package/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +0 -7
  356. package/v-angular/base-control-value-accessor/index.d.ts +0 -2
  357. package/v-angular/breadcrumbs/breadcrumbs.component.d.ts +0 -18
  358. package/v-angular/breadcrumbs/breadcrumbs.module.d.ts +0 -10
  359. package/v-angular/breadcrumbs/index.d.ts +0 -2
  360. package/v-angular/button/button.component.d.ts +0 -62
  361. package/v-angular/button/button.module.d.ts +0 -10
  362. package/v-angular/button/index.d.ts +0 -2
  363. package/v-angular/card/card.component.d.ts +0 -5
  364. package/v-angular/card/card.module.d.ts +0 -8
  365. package/v-angular/card/index.d.ts +0 -2
  366. package/v-angular/character-countdown/character-countdown.directive.d.ts +0 -17
  367. package/v-angular/character-countdown/character-countdown.module.d.ts +0 -8
  368. package/v-angular/character-countdown/index.d.ts +0 -2
  369. package/v-angular/checkbox/checkbox.component.d.ts +0 -36
  370. package/v-angular/checkbox/checkbox.module.d.ts +0 -10
  371. package/v-angular/checkbox/index.d.ts +0 -2
  372. package/v-angular/core/core.globals.d.ts +0 -13
  373. package/v-angular/core/core.utils.d.ts +0 -23
  374. package/v-angular/core/index.d.ts +0 -2
  375. package/v-angular/datepicker/components/calendar/calendar.component.d.ts +0 -36
  376. package/v-angular/datepicker/components/calendar-control/calendar-control.component.d.ts +0 -30
  377. package/v-angular/datepicker/components/date-input/date-input.component.d.ts +0 -113
  378. package/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +0 -76
  379. package/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +0 -169
  380. package/v-angular/datepicker/datepicker.globals.d.ts +0 -13
  381. package/v-angular/datepicker/datepicker.models.d.ts +0 -50
  382. package/v-angular/datepicker/datepicker.module.d.ts +0 -19
  383. package/v-angular/datepicker/datepicker.utils.d.ts +0 -46
  384. package/v-angular/datepicker/directives/calendar-date.directive.d.ts +0 -21
  385. package/v-angular/datepicker/index.d.ts +0 -13
  386. package/v-angular/datepicker/models/dates.d.ts +0 -15
  387. package/v-angular/datepicker/pipes/date-thook.pipe.d.ts +0 -8
  388. package/v-angular/datepicker/pipes/is-disabled.pipe.d.ts +0 -8
  389. package/v-angular/datepicker/pipes/matches.pipe.d.ts +0 -7
  390. package/v-angular/drag-drop/drag-drop.component.d.ts +0 -131
  391. package/v-angular/drag-drop/drag-drop.models.d.ts +0 -49
  392. package/v-angular/drag-drop/drag-drop.module.d.ts +0 -13
  393. package/v-angular/drag-drop/drag-drop.pipes.d.ts +0 -40
  394. package/v-angular/drag-drop/drag-drop.utils.d.ts +0 -33
  395. package/v-angular/drag-drop/index.d.ts +0 -4
  396. package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +0 -135
  397. package/v-angular/dropdown/dropdown-list/index.d.ts +0 -1
  398. package/v-angular/dropdown/dropdown.component.d.ts +0 -129
  399. package/v-angular/dropdown/dropdown.module.d.ts +0 -13
  400. package/v-angular/dropdown/index.d.ts +0 -5
  401. package/v-angular/dropdown/typeahead/index.d.ts +0 -5
  402. package/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +0 -40
  403. package/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +0 -34
  404. package/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +0 -61
  405. package/v-angular/dropdown/typeahead/typeahead.directive.d.ts +0 -78
  406. package/v-angular/dropdown/typeahead/typeahead.module.d.ts +0 -11
  407. package/v-angular/external-link/external-link.directive.d.ts +0 -17
  408. package/v-angular/external-link/external-link.module.d.ts +0 -8
  409. package/v-angular/external-link/index.d.ts +0 -2
  410. package/v-angular/i18n/i18n.module.d.ts +0 -15
  411. package/v-angular/i18n/i18n.test.module.d.ts +0 -27
  412. package/v-angular/i18n/index.d.ts +0 -2
  413. package/v-angular/info-circle/index.d.ts +0 -2
  414. package/v-angular/info-circle/info-circle.component.d.ts +0 -16
  415. package/v-angular/info-circle/info-circle.module.d.ts +0 -10
  416. package/v-angular/input/index.d.ts +0 -2
  417. package/v-angular/input/input.component.d.ts +0 -112
  418. package/v-angular/input/input.module.d.ts +0 -13
  419. package/v-angular/input-mask/config.d.ts +0 -6
  420. package/v-angular/input-mask/constants.d.ts +0 -2
  421. package/v-angular/input-mask/index.d.ts +0 -5
  422. package/v-angular/input-mask/input-mask-format.pipe.d.ts +0 -8
  423. package/v-angular/input-mask/input-mask.directive.d.ts +0 -39
  424. package/v-angular/input-mask/input-mask.module.d.ts +0 -11
  425. package/v-angular/input-mask/input-mask.types.d.ts +0 -20
  426. package/v-angular/modal/dialog/dialog.component.d.ts +0 -72
  427. package/v-angular/modal/fold-out/fold-out.component.d.ts +0 -51
  428. package/v-angular/modal/fold-out/fold-out.directive.d.ts +0 -6
  429. package/v-angular/modal/fold-out/keyboard-key.enum.d.ts +0 -8
  430. package/v-angular/modal/index.d.ts +0 -5
  431. package/v-angular/modal/modal.globals.d.ts +0 -13
  432. package/v-angular/modal/modal.module.d.ts +0 -15
  433. package/v-angular/modal/modal.types.d.ts +0 -6
  434. package/v-angular/modal/slide-out/slide-out.component.d.ts +0 -85
  435. package/v-angular/pagination/index.d.ts +0 -2
  436. package/v-angular/pagination/pagination.component.d.ts +0 -64
  437. package/v-angular/pagination/pagination.module.d.ts +0 -12
  438. package/v-angular/radio/index.d.ts +0 -3
  439. package/v-angular/radio/radio-group/radio-group.component.d.ts +0 -42
  440. package/v-angular/radio/radio.component.d.ts +0 -63
  441. package/v-angular/radio/radio.module.d.ts +0 -11
  442. package/v-angular/slug/index.d.ts +0 -2
  443. package/v-angular/slug/slug.module.d.ts +0 -8
  444. package/v-angular/slug/slug.pipe.d.ts +0 -12
  445. package/v-angular/table/index.d.ts +0 -5
  446. package/v-angular/table/table.component.d.ts +0 -248
  447. package/v-angular/table/table.directive.d.ts +0 -36
  448. package/v-angular/table/table.models.d.ts +0 -78
  449. package/v-angular/table/table.module.d.ts +0 -12
  450. package/v-angular/table/table.tools.d.ts +0 -5
  451. package/v-angular/table/tr-thook.pipe.d.ts +0 -7
  452. package/v-angular/tabs/index.d.ts +0 -4
  453. package/v-angular/tabs/tab.directive.d.ts +0 -37
  454. package/v-angular/tabs/tabs.component.d.ts +0 -65
  455. package/v-angular/tabs/tabs.models.d.ts +0 -25
  456. package/v-angular/tabs/tabs.module.d.ts +0 -11
  457. package/v-angular/textarea/index.d.ts +0 -2
  458. package/v-angular/textarea/textarea.component.d.ts +0 -57
  459. package/v-angular/textarea/textarea.module.d.ts +0 -12
  460. package/v-angular/toast/index.d.ts +0 -4
  461. package/v-angular/toast/toast-message.service.d.ts +0 -19
  462. package/v-angular/toast/toast.component.d.ts +0 -20
  463. package/v-angular/toast/toast.models.d.ts +0 -18
  464. package/v-angular/toast/toast.module.d.ts +0 -10
  465. package/v-angular/tooltip/index.d.ts +0 -2
  466. package/v-angular/tooltip/tooltip.directive.d.ts +0 -108
  467. package/v-angular/tooltip/tooltip.module.d.ts +0 -8
  468. package/v-angular/tooltip/tooltip.styles.d.ts +0 -11
  469. package/v-angular/v-angular.module.d.ts +0 -33
@@ -1 +1 @@
1
- {"version":3,"file":"sebgroup-green-angular-src-v-angular-dropdown.mjs","sources":["../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.module.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.directive.ts","../../../../libs/angular/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.ts"],"sourcesContent":["import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'\n\n@Component({\n selector: 'nggv-typeahead-highlight',\n templateUrl: './typeahead-highlight.component.html',\n styleUrls: ['./typeahead-highlight.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadHighlightComponent implements OnChanges {\n /** The text that is displayed in the dropdown list */\n @Input() textContent?: string\n /** The substring that should be highlighted within textContent */\n @Input() textToHighlight?: string\n\n prefix?: string // Substring before the match\n match?: string // The match\n suffix?: string // Substring after the match\n\n text = ''\n input = ''\n\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n allowedNonMatchingChars = new RegExp(/\\s/)\n\n ngOnChanges(changes: SimpleChanges) {\n const { textContent, textToHighlight } = changes\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`\n this.updateValues()\n }\n\n private updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('')\n const splittedInput = this.input.toLocaleLowerCase().split('')\n\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput)\n\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = ''\n return\n }\n this.prefix = this.text.substring(0, start)\n this.match = this.text.substring(start, end)\n this.suffix = this.text.substring(end)\n }\n\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n private getHighlightedPart(\n splittedText: string[],\n splittedInput: string[],\n ): { start: number; end: number } {\n let start = -1\n let end = -1\n\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1) break\n\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i\n end = start + t\n break\n }\n if (splittedText[t + i] === splittedInput[matches]) matches++\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue // Ignore whitespace, continue\n else break // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end }\n }\n}\n","<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span\n >{{ suffix || '' }}\n</ng-container>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { filter, fromEvent, Subject, Subscription, takeUntil } from 'rxjs'\n\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n@Component({\n selector: 'nggv-dropdown-list',\n templateUrl: './dropdown-list.component.html',\n styleUrls: ['./dropdown-list.component.scss'],\n standalone: false,\n})\nexport class NggvDropdownListComponent implements OnInit, OnChanges {\n @Input() set expanded(state: boolean) {\n this.setExpanded(state)\n }\n get expanded(): boolean {\n return this._expanded\n }\n @Input() state: any\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n @Input() optionContentTpl: TemplateRef<OptionBase<any>> | undefined\n @Input() groupLabelTpl: TemplateRef<OptionBase<any>> | undefined\n\n /** @internal List of references to the option elements. */\n @ViewChildren('optionRefs') optionRefs:\n | QueryList<ElementRef<HTMLLIElement>>\n | undefined\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.dropdownPosition\n }\n\n @Input() options!: any[]\n\n @Input() textToHighlight?: string\n\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n @Input() onlyEmitDistinctChanges = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n @Output() closed = new EventEmitter<void>()\n\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n @Output() afterClose = new EventEmitter<void>()\n\n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n dropdownPosition: 'bottom' | 'top' = 'bottom'\n\n private dropdownUtils: DropdownUtils<string | null, string, any> =\n new DropdownUtils<string | null, string, any>()\n private _expanded = false\n private closed$ = new Subject<boolean>()\n public selectedValue?: Option<string, any>\n\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n protected onClickSubscription: Subscription | undefined\n /** Subscribe to to keyboard events only when list is open. */\n private onKeyDownSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n private _flattenedOptions: any[] = []\n\n constructor(\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer: Renderer2,\n private elRef: ElementRef,\n ) {\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n ngOnInit(): void {\n if (this.state)\n this.activeIndex = this.options.findIndex(\n (option) => option.key === this.state.key,\n )\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption()\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option: any): boolean {\n return 'options' in option\n }\n\n /** @internal */\n updateState(option: any, event: Event) {\n if (option.disabled) return\n\n if (\n !this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)\n ) {\n this.selectedValue = option\n this.state = option\n this.selectedValueChanged.emit(option)\n }\n\n this.setExpanded(false)\n event.stopPropagation()\n }\n\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded\n\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition()\n }\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\n this.afterClose.emit()\n this.onClickSubscription?.unsubscribe()\n this.onKeyDownSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n // to trigger gc removal\n this.onKeyDownSubscription = undefined\n this.onKeyUpSubscription = undefined\n }\n }\n\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(\n this.options,\n !this.optionContentTpl,\n )\n this.activeIndex = this.getActiveIndex()\n this.state = this._flattenedOptions[this.activeIndex]\n this.scrollToResult(this.state)\n }\n\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex(): number {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex(\n (option) =>\n option.key != null && option.key === this.selectedValue?.key,\n )\n if (selectedIndex > -1) return selectedIndex\n }\n return this._flattenedOptions.findIndex((option) => option.key != null)\n }\n\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem: HTMLElement) {\n return elem.offsetWidth < elem.scrollWidth\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): any {\n return group\n }\n\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace) return true\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault()\n event.stopPropagation()\n return false\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n }\n return false\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n this.setExpanded(false)\n this.closed.emit()\n }\n return false\n }\n return true\n }\n\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace)) return\n let option\n\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false)\n this.closed.emit()\n break\n\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n break\n\n case 'Home': // Move to the first option\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0) this.activeIndex--\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n }\n }\n\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyUp(event))\n }\n\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyDown(event))\n }\n\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option: any, focusElement?: boolean) {\n if (!this.optionRefs || !option) return\n const optionRef = this.optionRefs.find(\n (li) =>\n li.nativeElement.id ===\n this.id + '-option-' + (option.id ?? option.key),\n )\n const offset = this.scrollOffset\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop\n\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n optionRef.nativeElement.scrollIntoView({\n block: 'nearest',\n })\n\n delta -= window.scrollY || document.documentElement.scrollTop\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset)\n }\n if (focusElement) {\n optionRef.nativeElement.focus()\n }\n }, 0)\n }\n }\n\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement\n // dropdown trigger\n const dropdownInput = dropdown.parentElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = dropdownInput.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const MIN_HEIGHT = 100\n const DROPDOWN_MAX_HEIGHT = 500\n let maxDropdownHeight\n\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n } else {\n this.dropdownPosition = 'top'\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n }\n}\n","<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\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?.id ?? 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 <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\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.id ?? 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 [nggvTooltip]=\"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 nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + (option.id ?? 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 #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\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\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subscription } from 'rxjs'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n OptionGroup,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\n@Component({\n selector: 'nggv-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n standalone: false\n})\nexport class NggvDropdownComponent<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n extends NggvBaseControlValueAccessorComponent\n implements OnDestroy, OnChanges\n{\n /** Custom template for displaying options and groups. */\n @ContentChild('selectedTpl', { read: TemplateRef }) selectedContentTpl:\n | TemplateRef<OptionBase<T>>\n | undefined\n @ContentChild('optionTpl', { read: TemplateRef }) optionContentTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n @ContentChild('groupLabelTpl', { read: TemplateRef }) groupLabelTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the dropdown.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n /** Text shown before an option is selected. */\n @Input() placeholder?: string\n /** Specific value for aria-label. If not provided, label/labelTpl will be used. */\n @Input() ariaLabel?: string\n /** If the dropdown should close when scrolling the viewport. Default: false */\n @Input() closeOnScroll = false\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n @Input() set options(value: OptionBase<T>[]) {\n // update options\n this._options = value\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null)\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n }\n\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0]\n this.updateModel(onlyOption)\n return\n }\n\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value)\n if (!this.allowControlNullishOption && !matchingOption) return\n\n // Update local state\n this.writeValue(this.ngControl?.value)\n }\n\n get options(): OptionBase<T>[] {\n return this._options\n }\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n @Input() allowControlNullishOption = true\n\n /** Text to highlight in option */\n @Input() textToHighlight?: string\n\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n @Input() selectOnSingleOption = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n @Input() onlyHandleDistinctChanges = true\n\n /**\n * Emits changes of the expanded state of the dropdown\n */\n @Output() expandedChange = new EventEmitter<boolean>()\n\n /** @internal nullish option. */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.placeholder ?? '\\u00A0' }\n }\n\n /** The current expanded state of the dropdown options. */\n public expanded = false\n /** The current option selected based on numeric index. */\n public activeIndex = -1\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n private onClickSubscription: Subscription | undefined\n /** Subscribe if dropdown expanded to listen to scroll outside to close dropdown. */\n private onScrollSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n protected dropdownUtils: DropdownUtils<K, V, T>,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue\n // remove nullish option\n const hasNullishOption =\n this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1)\n return\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n return\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onScrollSubscription?.unsubscribe()\n }\n\n /** @internal override to correctly set state from form value */\n writeValue(value: any): void {\n const options = this.dropdownUtils.flattenOptions(this._options, false)\n this.state = options.find((option) => option.key === value)\n }\n\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n\n /** @internal */\n onSelectChange(option: T) {\n if (option.disabled) return\n this.updateModel(option)\n this.setExpanded(false)\n }\n\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n this.keyEvent = event\n }\n\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onScrollSubscription?.unsubscribe()\n }\n },\n })\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n private updateModel(value: T) {\n this.state = value\n this.onChange(value.key)\n }\n\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded)\n this.cdr.detectChanges()\n }\n\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state\n this.expandedChange.emit(this.expanded)\n if (this.expanded) {\n this.subscribeToOutsideClickEvent()\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent()\n }\n }\n if (!this.expanded) this.onTouched()\n }\n\n /* TYPE CASTS */\n\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option: any): T {\n return option\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): OptionGroup<T> {\n return group\n }\n\n /* TYPE CHECKS */\n\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option: OptionBase<T>): option is OptionGroup<T> {\n return !('options' in option)\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n </label>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper dropdown-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n [onlyEmitDistinctChanges]=\"onlyHandleDistinctChanges\"\n [selectWithSpace]=\"selectWithSpace\"\n [dynamicPosition]=\"true\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subject, takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component'\n\n// Use dropdownList template and combine stylesheets\n@Component({\n selector: 'nggv-typeahead-dropdown-list',\n templateUrl: '../../dropdown-list/dropdown-list.component.html',\n styleUrls: [\n '../typeahead-dropdown-list/typeahead-dropdown-list.component.scss',\n '../../dropdown-list/dropdown-list.component.scss',\n ],\n standalone: false\n})\nexport class NggvTypeaheadDropdownListComponent\n extends NggvDropdownListComponent\n implements OnInit, OnDestroy\n{\n @Input() hostComponent!: NggvInputComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n private _destroy$ = new Subject<boolean>()\n\n constructor(\n @SkipSelf()\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer2: Renderer2,\n private element: ElementRef,\n ) {\n super(translocoScope, renderer2, element)\n }\n\n ngOnInit(): void {\n this.handleSelectedValueChanges()\n this.handleFocusChanges()\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n private subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setExpanded(false)\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n\n /** @Internal Update state of the host-input to reflect the selected value */\n private handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`\n }\n })\n }\n\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n private handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state) this.hostComponent.nggvInput.emit('')\n this.setExpanded(true)\n this.subscribeToOutsideClickEvent()\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n override setExpanded(expanded = true) {\n super.setExpanded(expanded)\n\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(\n this.element.nativeElement,\n 'width',\n `${this.hostComponent.element.nativeElement.offsetWidth}px`,\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../../dropdown.component'\n\n@Component({\n selector: 'nggv-typeahead-input',\n templateUrl: './typeahead-input.component.html',\n styleUrls: ['./typeahead-input.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadInputComponent\n extends NggvInputComponent\n implements OnInit, OnDestroy\n{\n /** Reference to the host dropdown */\n @Input() hostComponent!: NggvDropdownComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n get dropdownButton(): HTMLElement {\n return this.hostComponent.inputRef?.nativeElement\n }\n\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n expanded = false\n\n /** Used to determine the height of the inputin html */\n buttonHeight?: number\n\n /** @internal Used to determine wether the input has been moved or not */\n inputMoved = false\n\n constructor(\n public element: ElementRef,\n private renderer2: Renderer2,\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr, element)\n super.ngOnInit()\n }\n\n ngOnInit() {\n this.autocomplete = 'off'\n this.debounceTime = 0\n this.hostComponent.selectOnSingleOption = false\n\n this.handleExpandedChange()\n }\n\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault()\n }\n }\n\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n private moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(\n this.dropdownButton.querySelector('button'),\n this.element.nativeElement,\n )\n this.inputMoved = true\n }\n }, 0)\n }\n\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n private handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state\n\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved) this.moveInput()\n\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32 // Default to 2em;\n\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus())\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`\n this.setInput(formattedValue, false)\n } else this.setInput('', true)\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n private setInput(input: string, triggerFilter: boolean) {\n this.state = input\n if (triggerFilter) {\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n }\n}\n","<ng-container>\n <div\n class=\"input-wrapper\"\n [ngClass]=\"{ expanded: expanded, collapsed: !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@NgModule({\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n})\nexport class NggvTypeaheadModule {}\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component'\nimport { NggvDropdownComponent } from './dropdown.component'\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module'\n\n@NgModule({\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDropdownModule {}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Host,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef,\n} from '@angular/core'\nimport {\n distinctUntilChanged,\n from,\n OperatorFunction,\n Subject,\n Subscription,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs'\n\nimport { Option, OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../dropdown.component'\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@Directive({\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n})\nexport class NggvTypeaheadDirective<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n implements OnInit, OnDestroy\n{\n /** Function that filter the inputvalue */\n @Input() set nggvTypeahead(value: OperatorFunction<string, T[]> | undefined) {\n this.typeaheadFunction = value\n\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe()\n this.inputSubscription$ = undefined\n this.handleInputChanges()\n }\n }\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n @Input() allowUnselect = true\n\n /** Custom label for the unselect option */\n @Input() unselectLabel?: string\n\n /** Custom label for the empty option */\n @Input() emptyOptionLabel?: string\n\n /** Emits the entered string the user has written in the input */\n @Output() filterPhraseChange = new EventEmitter<string>()\n\n /** Forward text inputs to apply the filter function*/\n @HostListener('nggvInput', ['$event']) onNggvInput(event: any) {\n this.inputValue$.next(event)\n }\n\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown\n }\n\n /** Predefined options */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.unselectLabel || '\\u00A0' }\n }\n\n get emptyOption(): OptionBase<any> {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n }\n }\n\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName\n }\n\n dropdownListComponent!: ComponentRef<NggvTypeaheadDropdownListComponent>\n inputComponent!: ComponentRef<NggvTypeaheadInputComponent>\n\n private typeaheadFunction?: OperatorFunction<string, T[]>\n private inputValue$ = new Subject<any>()\n private inputSubscription$?: Subscription\n private onDestroy$ = new Subject<boolean>()\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private element: ElementRef,\n @Optional() @Host() private hostDropdown: NggvDropdownComponent,\n @Optional() @Host() private hostInput: NggvInputComponent,\n ) {}\n\n ngOnInit() {\n this.handleInputChanges()\n\n if (this.hostIsDropdown) this.createInput()\n else this.createDropdownList()\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next(true)\n this.onDestroy$.complete()\n }\n\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n private handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(\n takeUntil(this.onDestroy$),\n distinctUntilChanged(),\n tap((inputValue) => this.filterPhraseChange.emit(inputValue)),\n this.typeaheadFunction ? this.typeaheadFunction : () => from([]),\n withLatestFrom(this.inputValue$),\n )\n .subscribe(([filteredValues, input]) =>\n this.setOptions(filteredValues, input),\n )\n\n // Trigger the pipe when this function have been called\n this.inputValue$.next('')\n }\n\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n private createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadInputComponent,\n )\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown)\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter)\n this.inputComponent.setInput('resultFormatter', this.resultFormatter)\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue))\n }\n\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n private createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadDropdownListComponent,\n )\n this.dropdownListComponent.setInput('hostComponent', this.hostInput)\n }\n\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n private setOptions(filteredValues: T[], input: string) {\n if (!filteredValues) return\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish =\n this.allowUnselect &&\n !input &&\n !(\n Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null\n )\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption]\n } else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues)\n }\n\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false\n this.hostDropdown.options = this.formatOptions(filteredValues)\n this.hostDropdown.textToHighlight = `${input || ''}`\n this.hostDropdown.onlyHandleDistinctChanges = false\n this.hostDropdown.selectWithSpace = false\n this.hostDropdown.detectChanges()\n return\n }\n\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput(\n 'options',\n this.formatOptions(filteredValues),\n )\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`)\n }\n }\n\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n private formatOptions(options: T[]): OptionBase<any>[] {\n if (!options) return []\n if (!this.resultFormatter) return options\n return options.map((value) =>\n value?.label ? this.resultFormatter?.(value) : value,\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.NggvTypeaheadHighlightComponent","i3","i4","i5","i6.NggvDropdownListComponent","i2","i3.NggvTypeaheadHighlightComponent","i1.NggvDropdownComponent"],"mappings":"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"}
1
+ {"version":3,"file":"sebgroup-green-angular-src-v-angular-dropdown.mjs","sources":["../tmp-esm2022/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.js","../tmp-esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.js","../tmp-esm2022/src/v-angular/dropdown/dropdown.component.js","../tmp-esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.js","../tmp-esm2022/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.js","../tmp-esm2022/src/v-angular/dropdown/typeahead/typeahead.module.js","../tmp-esm2022/src/v-angular/dropdown/dropdown.module.js","../tmp-esm2022/src/v-angular/dropdown/typeahead/typeahead.directive.js","../tmp-esm2022/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.js"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nexport class NggvTypeaheadHighlightComponent {\n constructor() {\n this.text = '';\n this.input = '';\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n this.allowedNonMatchingChars = new RegExp(/\\s/);\n }\n ngOnChanges(changes) {\n const { textContent, textToHighlight } = changes;\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`;\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`;\n this.updateValues();\n }\n updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('');\n const splittedInput = this.input.toLocaleLowerCase().split('');\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput);\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = '';\n return;\n }\n this.prefix = this.text.substring(0, start);\n this.match = this.text.substring(start, end);\n this.suffix = this.text.substring(end);\n }\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n getHighlightedPart(splittedText, splittedInput) {\n let start = -1;\n let end = -1;\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1)\n break;\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1;\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i;\n end = start + t;\n break;\n }\n if (splittedText[t + i] === splittedInput[matches])\n matches++;\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue; // Ignore whitespace, continue\n else\n break; // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadHighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvTypeaheadHighlightComponent, isStandalone: false, selector: \"nggv-typeahead-highlight\", inputs: { textContent: \"textContent\", textToHighlight: \"textToHighlight\" }, usesOnChanges: true, ngImport: i0, template: \"<ng-container *ngIf=\\\"!this.match\\\">{{ textContent }}</ng-container>\\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\\n<ng-container *ngIf=\\\"!!this.match\\\">\\n {{ prefix || '' }}<span class=\\\"match\\\">{{ match }}</span\\n >{{ suffix || '' }}\\n</ng-container>\\n\", styles: [\":host .match{font-weight:500}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadHighlightComponent, decorators: [{\n type: Component,\n args: [{ selector: 'nggv-typeahead-highlight', standalone: false, template: \"<ng-container *ngIf=\\\"!this.match\\\">{{ textContent }}</ng-container>\\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\\n<ng-container *ngIf=\\\"!!this.match\\\">\\n {{ prefix || '' }}<span class=\\\"match\\\">{{ match }}</span\\n >{{ suffix || '' }}\\n</ng-container>\\n\", styles: [\":host .match{font-weight:500}\\n\"] }]\n }], propDecorators: { textContent: [{\n type: Input\n }], textToHighlight: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWhpZ2hsaWdodC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi90eXBlYWhlYWQvdHlwZWFoZWFkLWhpZ2hsaWdodC90eXBlYWhlYWQtaGlnaGxpZ2h0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaGlnaGxpZ2h0L3R5cGVhaGVhZC1oaWdobGlnaHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFBOzs7QUFRMUUsTUFBTSxPQUFPLCtCQUErQjtJQU41QztRQWdCRSxTQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ1QsVUFBSyxHQUFHLEVBQUUsQ0FBQTtRQUVWOzs7YUFHSztRQUNMLDRCQUF1QixHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0tBb0UzQztJQWxFQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFDaEQsSUFBSSxXQUFXLEVBQUUsWUFBWSxJQUFJLElBQUk7WUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUMzQyxJQUFJLGVBQWUsRUFBRSxZQUFZLElBQUksSUFBSTtZQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFOUQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBRTNFLCtFQUErRTtRQUMvRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7WUFDM0MsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ssa0JBQWtCLENBQ3hCLFlBQXNCLEVBQ3RCLGFBQXVCO1FBRXZCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ2QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFFWixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLG1EQUFtRDtZQUNuRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUFFLE1BQUs7WUFFakMscUZBQXFGO1lBQ3JGLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7Z0JBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDOUMsdURBQXVEO29CQUN2RCxJQUFJLE9BQU8sS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3JDLEtBQUssR0FBRyxDQUFDLENBQUE7d0JBQ1QsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7d0JBQ2YsTUFBSztvQkFDUCxDQUFDO29CQUNELElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDO3dCQUFFLE9BQU8sRUFBRSxDQUFBO3lCQUN4RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0QsU0FBUSxDQUFDLDhCQUE4Qjs7d0JBQ3BDLE1BQUssQ0FBQywrREFBK0Q7Z0JBQzVFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDdkIsQ0FBQzs4R0FwRlUsK0JBQStCO2tHQUEvQiwrQkFBK0Isc0xDUjVDLDZUQU1BOzsyRkRFYSwrQkFBK0I7a0JBTjNDLFNBQVM7K0JBQ0ksMEJBQTBCLGNBR3hCLEtBQUs7O3NCQUlsQixLQUFLOztzQkFFTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ2d2LXR5cGVhaGVhZC1oaWdobGlnaHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90eXBlYWhlYWQtaGlnaGxpZ2h0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90eXBlYWhlYWQtaGlnaGxpZ2h0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgTmdndlR5cGVhaGVhZEhpZ2hsaWdodENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKiBUaGUgdGV4dCB0aGF0IGlzIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24gbGlzdCAqL1xuICBASW5wdXQoKSB0ZXh0Q29udGVudD86IHN0cmluZ1xuICAvKiogVGhlIHN1YnN0cmluZyB0aGF0IHNob3VsZCBiZSBoaWdobGlnaHRlZCB3aXRoaW4gdGV4dENvbnRlbnQgKi9cbiAgQElucHV0KCkgdGV4dFRvSGlnaGxpZ2h0Pzogc3RyaW5nXG5cbiAgcHJlZml4Pzogc3RyaW5nIC8vIFN1YnN0cmluZyBiZWZvcmUgdGhlIG1hdGNoXG4gIG1hdGNoPzogc3RyaW5nIC8vIFRoZSBtYXRjaFxuICBzdWZmaXg/OiBzdHJpbmcgLy8gU3Vic3RyaW5nIGFmdGVyIHRoZSBtYXRjaFxuXG4gIHRleHQgPSAnJ1xuICBpbnB1dCA9ICcnXG5cbiAgLyoqXG4gICAqIFJlZ2V4cCBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGV4dENvbnRlbnQgd2l0aG91dCBiZWluZyBmb3VuZCBpbiB0ZXh0VG9IaWdobGlnaHRcbiAgICogQWxsb3cgd2hpdGVzcGFjZXMuXG4gICAqICovXG4gIGFsbG93ZWROb25NYXRjaGluZ0NoYXJzID0gbmV3IFJlZ0V4cCgvXFxzLylcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgeyB0ZXh0Q29udGVudCwgdGV4dFRvSGlnaGxpZ2h0IH0gPSBjaGFuZ2VzXG4gICAgaWYgKHRleHRDb250ZW50Py5jdXJyZW50VmFsdWUgIT0gbnVsbClcbiAgICAgIHRoaXMudGV4dCA9IGAke3RleHRDb250ZW50LmN1cnJlbnRWYWx1ZX1gXG4gICAgaWYgKHRleHRUb0hpZ2hsaWdodD8uY3VycmVudFZhbHVlICE9IG51bGwpXG4gICAgICB0aGlzLmlucHV0ID0gYCR7dGV4dFRvSGlnaGxpZ2h0LmN1cnJlbnRWYWx1ZX1gXG4gICAgdGhpcy51cGRhdGVWYWx1ZXMoKVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXMoKSB7XG4gICAgY29uc3Qgc3BsaXR0ZWRUZXh0ID0gdGhpcy50ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkuc3BsaXQoJycpXG4gICAgY29uc3Qgc3BsaXR0ZWRJbnB1dCA9IHRoaXMuaW5wdXQudG9Mb2NhbGVMb3dlckNhc2UoKS5zcGxpdCgnJylcblxuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRIaWdobGlnaHRlZFBhcnQoc3BsaXR0ZWRUZXh0LCBzcGxpdHRlZElucHV0KVxuXG4gICAgLy8gSWYgdXNlciBpbnB1dCBpcyBub3QgZm91bmQgd2l0aGluIHRoZSB0ZXh0Y29udGVudCwgcmVzZXQgb3B0aW9ucyBhbmQgcmV0dXJuLlxuICAgIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLm1hdGNoID0gdGhpcy5zdWZmaXggPSAnJ1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMucHJlZml4ID0gdGhpcy50ZXh0LnN1YnN0cmluZygwLCBzdGFydClcbiAgICB0aGlzLm1hdGNoID0gdGhpcy50ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKVxuICAgIHRoaXMuc3VmZml4ID0gdGhpcy50ZXh0LnN1YnN0cmluZyhlbmQpXG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCBmaW5kcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRleCBvZiB3aGVyZSB0aGUgaW5wdXQgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIHRleHQgdG8gZGlzcGxheS5cbiAgICogRmlyc3Qgb2NjdXJlbmNlIGlzIHJldHVybmVkLiBBbGxvd3MgZm9yIHNwYWNlcyB0byBvY2N1ciBkZXNwaXRlIGlucHV0IG5vdCBtYXRjaGluZyBzcGFjZS5cbiAgICogTG9vcHMgdGhyb3VnaCBlYWNoIGNoYXJhY3RlciBpbiBzcGxpdHRlZFRleHQgYW5kIHdoZW4gYSBjaGFyIGluIHNwbGl0dGVkVGV4dCBlcXVsYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgKiBzcGxpdHRlZElucHV0LCBldmFsdWF0ZSB3ZXRoZXIgaXQncyBtYXRjaCBvbiB0aGUgZW50aXJlIGlucHV0LlxuICAgKiAtIElmIGl0J3MgPT4gcmV0dXJuIGluZGV4ZXMuXG4gICAqIC0gSWYgaXQncyBub3QgPT4gYnJlYWsgb3V0IGFuZCBjaGVjayBuZXh0IGNoYXIgaW4gb3V0ZXIgbG9vcC5cbiAgICogQHBhcmFtIHNwbGl0dGVkVGV4dCB0aGUgdGV4dCBjb250ZW50IHNwbGl0dGVkIGluIGFuIGFycmF5XG4gICAqIEBwYXJhbSBzcGxpdHRlZElucHV0IHRoZSBpbnB1dCBzcGxpdHRlZCBpbiBhbiBhcnJheVxuICAgKiBAcmV0dXJucyB7IHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyIH0gSW5kZXhlcyBvZiB3aGVyZSB0aGUgbWF0Y2ggc3RhcnRzIGFuZCBlbmRzIGluIHRoZSB0ZXh0IGRpc3BsYXR5ZWRcbiAgICovXG4gIHByaXZhdGUgZ2V0SGlnaGxpZ2h0ZWRQYXJ0KFxuICAgIHNwbGl0dGVkVGV4dDogc3RyaW5nW10sXG4gICAgc3BsaXR0ZWRJbnB1dDogc3RyaW5nW10sXG4gICk6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB7XG4gICAgbGV0IHN0YXJ0ID0gLTFcbiAgICBsZXQgZW5kID0gLTFcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXR0ZWRUZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBJZiBzdGFydCBhbmQgZW5kIGhhdmUgYmVlbiBzZXQsIGJyZWFrIGFuZCByZXR1cm5cbiAgICAgIGlmIChzdGFydCA+IC0xIHx8IGVuZCA+IC0xKSBicmVha1xuXG4gICAgICAvLyBJZiBjdXJyZW50IGNoYXIgbWF0Y2ggZmlyc3QgaW4gaW5wdXQsIHRyeSBzZWUgaWYgd2hvbGUgaW5wdXQgbWF0Y2ggZnJvbSB0aGF0IGluZGV4XG4gICAgICBpZiAoc3BsaXR0ZWRUZXh0W2ldID09PSBzcGxpdHRlZElucHV0WzBdKSB7XG4gICAgICAgIGxldCBtYXRjaGVzID0gMVxuICAgICAgICBmb3IgKGxldCB0ID0gMTsgdCA8PSBzcGxpdHRlZFRleHQubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAvLyBJZiBtYXRjaCBvbiBsYXN0IGNoYXJhY3RlciBvZiBpbnB1dCwgd2UncmUgZmluaXNoZWQuXG4gICAgICAgICAgaWYgKG1hdGNoZXMgPT09IHNwbGl0dGVkSW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFydCA9IGlcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgdFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNwbGl0dGVkVGV4dFt0ICsgaV0gPT09IHNwbGl0dGVkSW5wdXRbbWF0Y2hlc10pIG1hdGNoZXMrK1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dlZE5vbk1hdGNoaW5nQ2hhcnMudGVzdChzcGxpdHRlZFRleHRbdCArIGldKSlcbiAgICAgICAgICAgIGNvbnRpbnVlIC8vIElnbm9yZSB3aGl0ZXNwYWNlLCBjb250aW51ZVxuICAgICAgICAgIGVsc2UgYnJlYWsgLy8gTm8gbWF0Y2gsIGJyZWFrIG91dCBvZiBpbm5lciBsb29wIHRvIGNoZWNrIG5leHQgY2hhciBpbiB0ZXh0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhdGhpcy5tYXRjaFwiPnt7IHRleHRDb250ZW50IH19PC9uZy1jb250YWluZXI+XG48IS0tIE5vdGUgdGhhdCB0aGlzIGlzIHNlbnNpdGl2ZSB0byBsaW5lIGJyZWFrcyBwcm9kdWNpbmcgZXh0cmEgc3BhY2luZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgcGFydHMgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiISF0aGlzLm1hdGNoXCI+XG4gIHt7IHByZWZpeCB8fCAnJyB9fTxzcGFuIGNsYXNzPVwibWF0Y2hcIj57eyBtYXRjaCB9fTwvc3BhblxuICA+e3sgc3VmZml4IHx8ICcnIH19XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==","import { Component, ElementRef, EventEmitter, HostBinding, Inject, Input, Optional, Output, Renderer2, ViewChildren, } from '@angular/core';\nimport { TRANSLOCO_SCOPE } from '@jsverse/transloco';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { DropdownUtils, } from '@sebgroup/green-angular/src/v-angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"../typeahead/typeahead-highlight/typeahead-highlight.component\";\nimport * as i3 from \"@sebgroup/green-angular/src/v-angular/tooltip\";\nimport * as i4 from \"@jsverse/transloco\";\nexport class NggvDropdownListComponent {\n set expanded(state) {\n this.setExpanded(state);\n }\n get expanded() {\n return this._expanded;\n }\n get positionAttr() {\n return this.dropdownPosition;\n }\n constructor(translocoScope, renderer, elRef) {\n this.translocoScope = translocoScope;\n this.renderer = renderer;\n this.elRef = elRef;\n /** The additional amount to show when option is scrolled into view. */\n this.scrollOffset = 24;\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n this.id = window.nggv?.nextId();\n /** Special property used for selecting DOM elements during automated UI testing. */\n this.thook = 'dropdown';\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n this.onlyEmitDistinctChanges = true;\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n this.selectWithSpace = true;\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n this.dynamicPosition = false;\n this.selectedValueChanged = new EventEmitter();\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n this.closed = new EventEmitter();\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n this.afterClose = new EventEmitter();\n /** The current active option based on numeric index. */\n this.activeIndex = -1;\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n this.dropdownPosition = 'bottom';\n this.dropdownUtils = new DropdownUtils();\n this._expanded = false;\n this.closed$ = new Subject();\n this._flattenedOptions = [];\n if (this.translocoScope)\n this.scope = this.translocoScope.toString();\n }\n ngOnInit() {\n if (this.state)\n this.activeIndex = this.options.findIndex((option) => option.key === this.state.key);\n }\n ngOnChanges(changes) {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue;\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption();\n }\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option) {\n return 'options' in option;\n }\n /** @internal */\n updateState(option, event) {\n if (option.disabled)\n return;\n if (!this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)) {\n this.selectedValue = option;\n this.state = option;\n this.selectedValueChanged.emit(option);\n }\n this.setExpanded(false);\n event.stopPropagation();\n }\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded;\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition();\n }\n this.refreshSelectedOption();\n this.subscribeToKeyUpEvents();\n this.subscribeToKeyDownEvents();\n }\n else {\n this.closed$.next(true);\n this.afterClose.emit();\n this.onClickSubscription?.unsubscribe();\n this.onKeyDownSubscription?.unsubscribe();\n this.onKeyUpSubscription?.unsubscribe();\n // to trigger gc removal\n this.onKeyDownSubscription = undefined;\n this.onKeyUpSubscription = undefined;\n }\n }\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(this.options, !this.optionContentTpl);\n this.activeIndex = this.getActiveIndex();\n this.state = this._flattenedOptions[this.activeIndex];\n this.scrollToResult(this.state);\n }\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex() {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex((option) => option.key != null && option.key === this.selectedValue?.key);\n if (selectedIndex > -1)\n return selectedIndex;\n }\n return this._flattenedOptions.findIndex((option) => option.key != null);\n }\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem) {\n return elem.offsetWidth < elem.scrollWidth;\n }\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group) {\n return group;\n }\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace)\n return true;\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault();\n event.stopPropagation();\n return false;\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault();\n event.stopPropagation();\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex];\n this.updateState(option, event);\n }\n return false;\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault();\n event.stopPropagation();\n if (this.expanded) {\n this.setExpanded(false);\n this.closed.emit();\n }\n return false;\n }\n return true;\n }\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace))\n return;\n let option;\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false);\n this.closed.emit();\n break;\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex];\n this.updateState(option, event);\n break;\n case 'Home': // Move to the first option\n this.activeIndex = 0;\n option = this._flattenedOptions[this.activeIndex];\n this.state = option;\n this.scrollToResult(option, true);\n break;\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0)\n this.activeIndex--;\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1;\n option = this._flattenedOptions[this.activeIndex];\n this.state = option;\n this.scrollToResult(option, true);\n break;\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++;\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0;\n option = this._flattenedOptions[this.activeIndex];\n this.state = option;\n this.scrollToResult(option, true);\n break;\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1;\n option = this._flattenedOptions[this.activeIndex];\n this.state = option;\n this.scrollToResult(option, true);\n break;\n }\n }\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent(document, 'keyup')\n .pipe(filter(() => this.expanded), takeUntil(this.closed$))\n .subscribe((event) => this.onKeyUp(event));\n }\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent(document, 'keydown')\n .pipe(filter(() => this.expanded), takeUntil(this.closed$))\n .subscribe((event) => this.onKeyDown(event));\n }\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option, focusElement) {\n if (!this.optionRefs || !option)\n return;\n const optionRef = this.optionRefs.find((li) => li.nativeElement.id ===\n this.id + '-option-' + (option.id ?? option.key));\n const offset = this.scrollOffset;\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop;\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n optionRef.nativeElement.scrollIntoView({\n block: 'nearest',\n });\n delta -= window.scrollY || document.documentElement.scrollTop;\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset);\n }\n if (focusElement) {\n optionRef.nativeElement.focus();\n }\n }, 0);\n }\n }\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement;\n // dropdown trigger\n const dropdownInput = dropdown.parentElement;\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]');\n const rect = dropdownInput.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n const MARGIN = 10;\n const MIN_HEIGHT = 100;\n const DROPDOWN_MAX_HEIGHT = 500;\n let maxDropdownHeight;\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom';\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT;\n }\n else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top';\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT;\n }\n else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom';\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT); // 10px margin, minimum height 100px\n }\n else {\n this.dropdownPosition = 'top';\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT); // 10px margin, minimum height 100px\n }\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownListComponent, deps: [{ token: TRANSLOCO_SCOPE, optional: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvDropdownListComponent, isStandalone: false, selector: \"nggv-dropdown-list\", inputs: { expanded: \"expanded\", state: \"state\", scrollOffset: \"scrollOffset\", optionContentTpl: \"optionContentTpl\", groupLabelTpl: \"groupLabelTpl\", id: \"id\", thook: \"thook\", options: \"options\", textToHighlight: \"textToHighlight\", onlyEmitDistinctChanges: \"onlyEmitDistinctChanges\", selectWithSpace: \"selectWithSpace\", dynamicPosition: \"dynamicPosition\" }, outputs: { selectedValueChanged: \"selectedValueChanged\", closed: \"closed\", afterClose: \"afterClose\" }, host: { properties: { \"attr.id\": \"this.id\", \"attr.data-thook\": \"this.thook\", \"attr.data-position\": \"this.positionAttr\" } }, viewQueries: [{ propertyName: \"optionRefs\", predicate: [\"optionRefs\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-container *transloco=\\\"let t; read: scope\\\">\\n <div class=\\\"visually-hidden\\\">{{ t(state?.label) }}</div>\\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?.id ?? 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 <!-- group label template (default or custom) -->\\n <ng-template\\n *ngTemplateOutlet=\\\"listGroupTemplate; context: { $implicit: item }\\\"\\n ></ng-template>\\n\\n <ul [attr.aria-disabled]=\\\"item.disabled\\\" class=\\\"gds-reset\\\">\\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.id ?? 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 [nggvTooltip]=\\\"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 nggvToolTip if custom template is provided -->\\n <li\\n #optionRefs\\n *ngIf=\\\"!!optionContentTpl\\\"\\n tabindex=\\\"-1\\\"\\n [id]=\\\"id + '-option-' + (option.id ?? 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 #listGroupTemplate let-item>\\n <ng-container *ngIf=\\\"groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"groupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"!groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"basicGroupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\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\\n <ng-template #basicGroupLabelTpl let-item>\\n <div class=\\\"nggv-group-label\\\">{{ t(item.label) }}</div>\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2);--gds-z-index-deep: -9999;--gds-z-index-dropdown-backdrop: 990;--gds-z-index-datepicker: 995;--gds-z-index-dropdown: 995;--gds-z-index-sticky: 1020;--gds-z-index-fixed: 1030;--gds-z-index-modal-backdrop: 1040;--gds-z-index-modal: 1050;--gds-z-index-popover: 1060;--gds-z-index-tooltip: 1070;--gds-z-index-top: 9999;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--gds-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding-left:.75rem \\\"\\\";padding-right:.75rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\"}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-sys-color-base-300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=menu] [role=menuitem]{cursor:pointer}:host ul[role=listbox]{--z-index: 1060;background-color:var(--gds-sys-color-background-primary);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:0 .125rem .375rem #00000026;color:var(--gds-sys-color-text-primary);padding:0;max-height:500px;overflow-y:auto;width:100%;overscroll-behavior:none;padding-bottom:0 \\\"\\\";border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-text-primary);border-radius:.25rem}:host ul[role=listbox] [role=option]{padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=listbox] [role=option]:active{background-color:var(--gds-sys-color-base-200)}: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(--gds-sys-color-base-800);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}: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}: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{display:none}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--gds-sys-color-base-200)}:host .gds-dropdown__options__label:active{background-color:var(--gds-sys-color-base-300)}: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}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\\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.NggvTypeaheadHighlightComponent, selector: \"nggv-typeahead-highlight\", inputs: [\"textContent\", \"textToHighlight\"] }, { kind: \"directive\", type: i3.NggvTooltipDirective, selector: \"[nggvTooltip]\", inputs: [\"nggvTooltip\", \"thook\", \"placement\", \"shown\", \"offset\", \"resizeThrottle\", \"tooltipId\", \"maxWidth\"], outputs: [\"nggvShow\", \"nggvHide\"] }, { kind: \"directive\", type: i4.TranslocoDirective, selector: \"[transloco]\", inputs: [\"transloco\", \"translocoParams\", \"translocoScope\", \"translocoRead\", \"translocoPrefix\", \"translocoLang\", \"translocoLoadingTpl\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'nggv-dropdown-list', standalone: false, template: \"<ng-container *transloco=\\\"let t; read: scope\\\">\\n <div class=\\\"visually-hidden\\\">{{ t(state?.label) }}</div>\\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?.id ?? 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 <!-- group label template (default or custom) -->\\n <ng-template\\n *ngTemplateOutlet=\\\"listGroupTemplate; context: { $implicit: item }\\\"\\n ></ng-template>\\n\\n <ul [attr.aria-disabled]=\\\"item.disabled\\\" class=\\\"gds-reset\\\">\\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.id ?? 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 [nggvTooltip]=\\\"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 nggvToolTip if custom template is provided -->\\n <li\\n #optionRefs\\n *ngIf=\\\"!!optionContentTpl\\\"\\n tabindex=\\\"-1\\\"\\n [id]=\\\"id + '-option-' + (option.id ?? 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 #listGroupTemplate let-item>\\n <ng-container *ngIf=\\\"groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"groupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"!groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"basicGroupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\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\\n <ng-template #basicGroupLabelTpl let-item>\\n <div class=\\\"nggv-group-label\\\">{{ t(item.label) }}</div>\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2);--gds-z-index-deep: -9999;--gds-z-index-dropdown-backdrop: 990;--gds-z-index-datepicker: 995;--gds-z-index-dropdown: 995;--gds-z-index-sticky: 1020;--gds-z-index-fixed: 1030;--gds-z-index-modal-backdrop: 1040;--gds-z-index-modal: 1050;--gds-z-index-popover: 1060;--gds-z-index-tooltip: 1070;--gds-z-index-top: 9999;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--gds-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding-left:.75rem \\\"\\\";padding-right:.75rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\"}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-sys-color-base-300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=menu] [role=menuitem]{cursor:pointer}:host ul[role=listbox]{--z-index: 1060;background-color:var(--gds-sys-color-background-primary);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:0 .125rem .375rem #00000026;color:var(--gds-sys-color-text-primary);padding:0;max-height:500px;overflow-y:auto;width:100%;overscroll-behavior:none;padding-bottom:0 \\\"\\\";border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-text-primary);border-radius:.25rem}:host ul[role=listbox] [role=option]{padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=listbox] [role=option]:active{background-color:var(--gds-sys-color-base-200)}: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(--gds-sys-color-base-800);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}: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}: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{display:none}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--gds-sys-color-base-200)}:host .gds-dropdown__options__label:active{background-color:var(--gds-sys-color-base-300)}: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}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\\n\"] }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TRANSLOCO_SCOPE]\n }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { expanded: [{\n type: Input\n }], state: [{\n type: Input\n }], scrollOffset: [{\n type: Input\n }], optionContentTpl: [{\n type: Input\n }], groupLabelTpl: [{\n type: Input\n }], optionRefs: [{\n type: ViewChildren,\n args: ['optionRefs']\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }, {\n type: Input\n }], thook: [{\n type: HostBinding,\n args: ['attr.data-thook']\n }, {\n type: Input\n }], positionAttr: [{\n type: HostBinding,\n args: ['attr.data-position']\n }], options: [{\n type: Input\n }], textToHighlight: [{\n type: Input\n }], onlyEmitDistinctChanges: [{\n type: Input\n }], selectWithSpace: [{\n type: Input\n }], dynamicPosition: [{\n type: Input\n }], selectedValueChanged: [{\n type: Output\n }], closed: [{\n type: Output\n }], afterClose: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi9kcm9wZG93bi1saXN0L2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24tbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFHVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUxRSxPQUFPLEVBQ0wsYUFBYSxHQUdkLE1BQU0sNENBQTRDLENBQUE7Ozs7OztBQVFuRCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLElBQWEsUUFBUSxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFxQkQsSUFBdUMsWUFBWTtRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtJQUM5QixDQUFDO0lBNkRELFlBR1ksY0FBOEIsRUFDaEMsUUFBbUIsRUFDbkIsS0FBaUI7UUFGZixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDaEMsYUFBUSxH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RyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFBO1lBQ2hDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQSxDQUFDLG9DQUFvQztRQUNwRyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDN0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBLENBQUMsb0NBQW9DO1FBQ3BHLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLElBQUksQ0FBQyxDQUFBO0lBQzlFLENBQUM7OEdBN1lVLHlCQUF5QixrQkE0RjFCLGVBQWU7a0dBNUZkLHlCQUF5Qix3d0JDaEN0Qyw0cklBOEhBOzsyRkQ5RmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLG9CQUFvQixjQUdsQixLQUFLOzswQkE2RmQsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlOztzQkEzRnhCLEtBQUs7O3NCQU1MLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUVMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUdMLFlBQVk7dUJBQUMsWUFBWTs7c0JBS3pCLFdBQVc7dUJBQUMsU0FBUzs7c0JBQUcsS0FBSzs7c0JBRzdCLFdBQVc7dUJBQUMsaUJBQWlCOztzQkFBRyxLQUFLOztzQkFHckMsV0FBVzt1QkFBQyxvQkFBb0I7O3NCQUloQyxLQUFLOztzQkFFTCxLQUFLOztzQkFPTCxLQUFLOztzQkFPTCxLQUFLOztzQkFNTCxLQUFLOztzQkFFTCxNQUFNOztzQkFNTixNQUFNOztzQkFNTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZmlsdGVyLCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHtcbiAgRHJvcGRvd25VdGlscyxcbiAgT3B0aW9uLFxuICBPcHRpb25CYXNlLFxufSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2NvcmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZ3YtZHJvcGRvd24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgTmdndkRyb3Bkb3duTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2V0IGV4cGFuZGVkKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRFeHBhbmRlZChzdGF0ZSlcbiAgfVxuICBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkXG4gIH1cbiAgQElucHV0KCkgc3RhdGU6IGFueVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgQElucHV0KCkgb3B0aW9uQ29udGVudFRwbDogVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PiB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBncm91cExhYmVsVHBsOiBUZW1wbGF0ZVJlZjxPcHRpb25CYXNlPGFueT4+IHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBpbnRlcm5hbCBMaXN0IG9mIHJlZmVyZW5jZXMgdG8gdGhlIG9wdGlvbiBlbGVtZW50cy4gKi9cbiAgQFZpZXdDaGlsZHJlbignb3B0aW9uUmVmcycpIG9wdGlvblJlZnM6XG4gICAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MTElFbGVtZW50Pj5cbiAgICB8IHVuZGVmaW5lZFxuXG4gIC8qKiBJZCBvZiB0aGUgaG9zdCBlbGVtZW50IGFuZCBpcyBhY2Nlc3NpYmxlIGJ5IHRoZSBjaGlsZHJlbiwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBASW5wdXQoKSBpZCA9ICh3aW5kb3cgYXMgYW55KS5uZ2d2Py5uZXh0SWQoKVxuXG4gIC8qKiBTcGVjaWFsIHByb3BlcnR5IHVzZWQgZm9yIHNlbGVjdGluZyBET00gZWxlbWVudHMgZHVyaW5nIGF1dG9tYXRlZCBVSSB0ZXN0aW5nLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10aG9vaycpIEBJbnB1dCgpIHRob29rOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAnZHJvcGRvd24nXG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcG9zaXRpb24nKSBnZXQgcG9zaXRpb25BdHRyKCkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duUG9zaXRpb25cbiAgfVxuXG4gIEBJbnB1dCgpIG9wdGlvbnMhOiBhbnlbXVxuXG4gIEBJbnB1dCgpIHRleHRUb0hpZ2hsaWdodD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGNvbnRyb2wgaWYgXCJzZWxlY3RlZFZhbHVlQ2hhbmdlZFwiIG9ubHkgc2hvdWxkIGVtaXQgZGlzdGluY3QgY2hhbmdlcywgb3IgZWFjaCB0aW1lIGEgdmFsdWUgaXMgc2VsZWN0ZWRcbiAgICogV2hlbiB0cnVlLCB2YWx1ZSBpcyBub3QgZW1pdHRlZCBpZiB0aGVyZSdzIG5vIGRpc3RpbmN0IGNoYW5nZVxuICAgKiBXaGVuIGZhbHNlLCB2YWx1ZSBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgYW4gb3B0aW9uIGlzIHNlbGVjdGVkXG4gICAqICovXG4gIEBJbnB1dCgpIG9ubHlFbWl0RGlzdGluY3RDaGFuZ2VzID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGNvbnRyb2wgaWYgdGhlIGRyb3Bkb3duIGxpc3Qgc2hvdWxkIHNlbGVjdCB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudCwgd2hlbiBTcGFjZSBpcyBwcmVzc2VkIG9uIHRoZSBrZXlib2FyZC5cbiAgICogUHJpbWFyeSB1c2FnZSBpcyBmb3IgdHlwZWFoZWFkLCB3aGVyZSB0aGUgc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUgYSBmaWx0ZXIgcXVlcnkgY29udGFpbmluZyBzcGFjZXMsXG4gICAqIGJ1dCBub3Qgc2VsZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50IHdpdGggU3BhY2UuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RXaXRoU3BhY2UgPSB0cnVlXG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIGRyb3Bkb3duIHdpbGwgYXV0b21hdGljYWxseSBjaG9vc2UgdG8gb3BlbiBhYm92ZSBvciBiZWxvdyB0aGUgaW5wdXRcbiAgICogYmFzZWQgb24gYXZhaWxhYmxlIHNwYWNlIGluIHRoZSB2aWV3cG9ydCwgYW5kIHdpbGwgc2NhbGUgaXRzIGhlaWdodCB0byBmaXQgaWYgbmVlZGVkLlxuICAgKi9cbiAgQElucHV0KCkgZHluYW1pY1Bvc2l0aW9uID0gZmFsc2VcblxuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCBieSB1c2VyIGludGVyYWN0aW9ucyAoZS5nLiBFc2NhcGUgb3IgVGFiKSBvciBvdGhlciBpbW1lZGlhdGUgY2xvc2UgdHJpZ2dlcnMuXG4gICAqIFRoaXMgbm90aWZpZXMgZXh0ZXJuYWwgY29uc3VtZXJzIHRoYXQgdGhlIGRyb3Bkb3duIHdhcyBjbG9zZWQgYXMgYSByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcblxuICAvKipcbiAgICogRW1pdHRlZCBhZnRlciB0aGUgZHJvcGRvd24gaGFzIGZ1bGx5IGNsb3NlZCBhbmQgaW50ZXJuYWwgY2xlYW51cCBoYXMgYmVlbiBwZXJmb3JtZWQuXG4gICAqIFVzZSB0aGlzIGZvciBwb3N0LWNsb3NlIHRhc2tzIHRoYXQgbXVzdCBydW4gYWZ0ZXIgc3Vic2NyaXB0aW9ucyBhcmUgdG9ybiBkb3duIGFuZCByZXNvdXJjZXMgcmVsZWFzZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgYWZ0ZXJDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gIC8qKiBUaGUgY3VycmVudCBhY3RpdmUgb3B0aW9uIGJhc2VkIG9uIG51bWVyaWMgaW5kZXguICovXG4gIHB1YmxpYyBhY3RpdmVJbmRleCA9IC0xXG5cbiAgc2NvcGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkcm9wZG93biBsaXN0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYmVsb3cgKCdib3R0b20nKSBvciBhYm92ZSAoJ3RvcCcpIHRoZSBpbnB1dCwgYmFzZWQgb24gYXZhaWxhYmxlIHNwYWNlLlxuICBkcm9wZG93blBvc2l0aW9uOiAnYm90dG9tJyB8ICd0b3AnID0gJ2JvdHRvbSdcblxuICBwcml2YXRlIGRyb3Bkb3duVXRpbHM6IERyb3Bkb3duVXRpbHM8c3RyaW5nIHwgbnVsbCwgc3RyaW5nLCBhbnk+ID1cbiAgICBuZXcgRHJvcGRvd25VdGlsczxzdHJpbmcgfCBudWxsLCBzdHJpbmcsIGFueT4oKVxuICBwcml2YXRlIF9leHBhbmRlZCA9IGZhbHNlXG4gIHByaXZhdGUgY2xvc2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KClcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU/OiBPcHRpb248c3RyaW5nLCBhbnk+XG5cbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBkcm9wZG93bi4gKi9cbiAgcHJvdGVjdGVkIG9uQ2xpY2tTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuICAvKiogU3Vic2NyaWJlIHRvIHRvIGtleWJvYXJkIGV2ZW50cyBvbmx5IHdoZW4gbGlzdCBpcyBvcGVuLiAqL1xuICBwcml2YXRlIG9uS2V5RG93blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgb25LZXlVcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2ZsYXR0ZW5lZE9wdGlvbnM6IGFueVtdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoVFJBTlNMT0NPX1NDT1BFKVxuICAgIHByb3RlY3RlZCB0cmFuc2xvY29TY29wZTogVHJhbnNsb2NvU2NvcGUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICkge1xuICAgIGlmICh0aGlzLnRyYW5zbG9jb1Njb3BlKSB0aGlzLnNjb3BlID0gdGhpcy50cmFuc2xvY29TY29wZS50b1N0cmluZygpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSlcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLm9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSB0aGlzLnN0YXRlLmtleSxcbiAgICAgIClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoISFjaGFuZ2VzLnN0YXRlICYmICFjaGFuZ2VzLnN0YXRlLmZpcnN0Q2hhbmdlKVxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gY2hhbmdlcy5zdGF0ZS5jdXJyZW50VmFsdWVcbiAgICBpZiAoISFjaGFuZ2VzLm9wdGlvbnM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoICYmIHRoaXMuZXhwYW5kZWQpXG4gICAgICB0aGlzLnJlZnJlc2hTZWxlY3RlZE9wdGlvbigpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50IGlzIGFuIHtAbGluayBPcHRpb25Hcm91cH0uXG4gICAqIEBwYXJhbSBvcHRpb24gdGhlIG9iamVjdCB0byBjaGVjay5cbiAgICovXG4gIGlzR3JvdXAob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ29wdGlvbnMnIGluIG9wdGlvblxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICB1cGRhdGVTdGF0ZShvcHRpb246IGFueSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgcmV0dXJuXG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5vbmx5RW1pdERpc3RpbmN0Q2hhbmdlcyB8fFxuICAgICAgIXRoaXMuZHJvcGRvd25VdGlscy5kZWVwRXF1YWwodGhpcy5zZWxlY3RlZFZhbHVlLCBvcHRpb24pXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb25cbiAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUNoYW5nZWQuZW1pdChvcHRpb24pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2V0RXhwYW5kZWQoZXhwYW5kZWQgPSB0cnVlKSB7XG4gICAgLy8gdXBkYXRlIGV4cGFuZGVkIHN0YXRlXG4gICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZFxuXG4gICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5keW5hbWljUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blBvc2l0aW9uKClcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaFNlbGVjdGVkT3B0aW9uKClcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9LZXlVcEV2ZW50cygpXG4gICAgICB0aGlzLnN1YnNjcmliZVRvS2V5RG93bkV2ZW50cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VkJC5uZXh0KHRydWUpXG4gICAgICB0aGlzLmFmdGVyQ2xvc2UuZW1pdCgpXG4gICAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMub25LZXlEb3duU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLm9uS2V5VXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgIC8vIHRvIHRyaWdnZXIgZ2MgcmVtb3ZhbFxuICAgICAgdGhpcy5vbktleURvd25TdWJzY3JpcHRpb24gPSB1bmRlZmluZWRcbiAgICAgIHRoaXMub25LZXlVcFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlZnJlc2hTZWxlY3RlZE9wdGlvbigpIHtcbiAgICB0aGlzLl9mbGF0dGVuZWRPcHRpb25zID0gdGhpcy5kcm9wZG93blV0aWxzLmZsYXR0ZW5PcHRpb25zKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgIXRoaXMub3B0aW9uQ29udGVudFRwbCxcbiAgICApXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuZ2V0QWN0aXZlSW5kZXgoKVxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgdGhpcy5zY3JvbGxUb1Jlc3VsdCh0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcmV0dXJucyBUaGUgYWN0aXZlIGluZGV4IChudW1iZXIpIGlmIG9wdGlvbiBpcyBmb3VuZCwgLTEgb3RoZXJ3aXNlLlxuICAgKiAtIElmIGEgc2VsZWN0ZWRWYWx1ZSBleGlzdHMgdGhhdCdzIG5vdCBudWxsaXNoIGFuZCB0aGF0IG9wdGlvbnMgaXMgZm91bmQsIHJldHVybiB0aGF0IGluZGV4XG4gICAqIC0gRWxzZSwgcmV0dXJuIGZpcnN0IG5vbiBudWxsaXNoIGluZGV4XG4gICAqIC0gSWYgbm9uZSBvZiB0aGUgYWJvdmUgY3JpdGVyaWFzIGFyZSBtZXQsIC0xIGFyZSByZXR1cm5lZFxuICAgKi9cbiAgZ2V0QWN0aXZlSW5kZXgoKTogbnVtYmVyIHtcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkVmFsdWUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlPy5rZXkgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5rZXkgIT0gbnVsbCAmJiBvcHRpb24ua2V5ID09PSB0aGlzLnNlbGVjdGVkVmFsdWU/LmtleSxcbiAgICAgIClcbiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gLTEpIHJldHVybiBzZWxlY3RlZEluZGV4XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ICE9IG51bGwpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIGV2YWx1YXRlcyB3ZXRoZXIgdGhlIEhUTUwgZWxlbWVudCBvdmVyZmxvd3NcbiAgICogQHBhcmFtIGVsZW0gVGhlIEhUTUxFbGVtZW50IHRvIGV2YWx1YXRlXG4gICAqICovXG4gIGlzT3ZlcmZsb3coZWxlbTogSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA8IGVsZW0uc2Nyb2xsV2lkdGhcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlY2FzdCBhbnl0aGluZyB0byBhbiB7QGxpbmsgT3B0aW9uR3JvdXB9LlxuICAgKiBAcGFyYW0gZ3JvdXAgdGhlIG9iamVjdCB0byB0eXBlY2FzdC5cbiAgICovXG4gIGNhc3RHcm91cChncm91cDogYW55KTogYW55IHtcbiAgICByZXR1cm4gZ3JvdXBcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogRGlzYWJsZXMgZGVmYXVsdCBldmVudHMuXG4gICAqIEBwYXJhbSBldmVudCBmaXJlZCBjb250YWluaW5nIHdoaWNoIGtleSB3YXMgcHJlc3NlZC5cbiAgICovXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIElmIHNwYWNlIGlzIHByZXNzZWQgYnV0IGl0IHNob3VsZCBub3Qgc2VsZWN0IGFuIG9wdGlvbiwgZG8gbm90aGluZ1xuICAgIGlmIChldmVudC5rZXkgPT09ICcgJyAmJiAhdGhpcy5zZWxlY3RXaXRoU3BhY2UpIHJldHVybiB0cnVlXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJyAnOiAvLyBTcGFjZSAtIHBsYWNlZCBoZXJlIHRvIGVuc3VyZSB0aGUgZHJvcGRvd24tbGlzdCBjbG9zZXMgYWZ0ZXIgc2VsZWN0aW5nIHVzaW5nIFwiU3BhY2VcIlxuICAgICAgY2FzZSAnQXJyb3dVcCc6IC8vIERpc2FibGUgc2Nyb2xsaW5nIHVwXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiAvLyBEaXNhYmxlIHNjcm9sbGluZyBkb3duXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICBjYXNlICdFbnRlcic6IC8vIERpc2FibGUgZm9ybSBzdWJtaXNzaW9uIGFuZCBzZWxlY3QgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmFsdWVcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKG9wdGlvbiwgZXZlbnQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICBjYXNlICdUYWInOiAvLyB0cmlnZ2VyIGRyb3Bkb3duIHRvIGNsb3NlIChmb3IgdHlwZWFoZWFkKVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSlcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogRW50ZXIgdG9nZ2xlcyB0aGUgZHJvcGRvd24sIGhvbWUsIGVuZCwgYW5kLCBhcnJvd3MgY2hhbmdlIHRoZSBpbmRleC5cbiAgICogU3BhY2Ugc2VsZWN0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBvcHRpb24gaWYgYHNlbGVjdFdpdGhTcGFjZWAgaXMgdHJ1ZS5cbiAgICogQHBhcmFtIGV2ZW50IGZpcmVkIGNvbnRhaW5pbmcgd2hpY2gga2V5IHdhcyByZWxlYXNlZC5cbiAgICovXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBJZiBzcGFjZSBpcyBwcmVzc2VkIGJ1dCBpdCBzaG91bGQgbm90IHNlbGVjdCBhbiBvcHRpb24sIGRvIG5vdGhpbmdcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgKGV2ZW50LmtleSA9PT0gJyAnICYmICF0aGlzLnNlbGVjdFdpdGhTcGFjZSkpIHJldHVyblxuICAgIGxldCBvcHRpb25cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnICc6IC8vIFNwYWNlIC0gc2VsZWN0IHRoZSBjdXJyZW50bHkgY2hvc2VuIHZhbHVlXG4gICAgICAgIG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShvcHRpb24sIGV2ZW50KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdIb21lJzogLy8gTW92ZSB0byB0aGUgZmlyc3Qgb3B0aW9uXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwXG5cbiAgICAgICAgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uLCB0cnVlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzogLy8gTW92ZSB1cCBvbmUgc3RlcCB0byB0aGUgcHJldmlvdXMgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID4gMCkgdGhpcy5hY3RpdmVJbmRleC0tXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IDApXG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgIG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KG9wdGlvbiwgdHJ1ZSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzogLy8gTW92ZSBkb3duIG9uZSBzdGVwIHRvIHRoZSBuZXh0IG9wdGlvblxuICAgICAgICBpZiAodGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5sZW5ndGggPiB0aGlzLmFjdGl2ZUluZGV4ICsgMSlcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4KytcbiAgICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gdGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5sZW5ndGggLSAxKVxuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwXG5cbiAgICAgICAgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uLCB0cnVlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdFbmQnOiAvLyBNb3ZlIHRvIHRoZSBsYXN0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgIG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KG9wdGlvbiwgdHJ1ZSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHN1YnNjcmliZVRvS2V5VXBFdmVudHMoKSB7XG4gICAgdGhpcy5vbktleVVwU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmV4cGFuZGVkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vbktleVVwKGV2ZW50KSlcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc3Vic2NyaWJlVG9LZXlEb3duRXZlbnRzKCkge1xuICAgIHRoaXMub25LZXlEb3duU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZXhwYW5kZWQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jbG9zZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLm9uS2V5RG93bihldmVudCkpXG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyBmb2N1c2VkIHJlc3VsdCBpbnRvIHZpZXcgd2l0aCBhIHNwZWNpZmllZCBvZmZzZXQuXG4gICAqIEBwYXJhbSBrZXkgdGhlIHJlc3VsdCBpbmRleCB3aGljaCB0byBzY3JvbGwgdG8uXG4gICAqL1xuICBzY3JvbGxUb1Jlc3VsdChvcHRpb246IGFueSwgZm9jdXNFbGVtZW50PzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5vcHRpb25SZWZzIHx8ICFvcHRpb24pIHJldHVyblxuICAgIGNvbnN0IG9wdGlvblJlZiA9IHRoaXMub3B0aW9uUmVmcy5maW5kKFxuICAgICAgKGxpKSA9PlxuICAgICAgICBsaS5uYXRpdmVFbGVtZW50LmlkID09PVxuICAgICAgICB0aGlzLmlkICsgJy1vcHRpb24tJyArIChvcHRpb24uaWQgPz8gb3B0aW9uLmtleSksXG4gICAgKVxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuc2Nyb2xsT2Zmc2V0XG4gICAgaWYgKG9wdGlvblJlZikge1xuICAgICAgbGV0IGRlbHRhID0gd2luZG93LnNjcm9sbFkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuXG4gICAgICAvLyBUaGUgbGlzdCBzZWVtcyBub3QgdG8gYmUgdmlzaWJsZSBhdCB0aGUgdGltZSBvZiBzY3JvbGxpbmcsIGJ1dCB0aGlzIHNldFRpbWVvdXQgXCJoYWNrXCIgbWFrZXMgaXQgd29yay4uLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG9wdGlvblJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGRlbHRhIC09IHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgaWYgKGRlbHRhKSB7XG4gICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIGRlbHRhID4gMCA/IC1vZmZzZXQgOiBvZmZzZXQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvY3VzRWxlbWVudCkge1xuICAgICAgICAgIG9wdGlvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhdmFpbGFibGUgc3BhY2UgYWJvdmUgYW5kIGJlbG93IHRoZSBkcm9wZG93biBpbnB1dCxcbiAgICogc2V0cyBkcm9wZG93blBvc2l0aW9uICgndG9wJyBvciAnYm90dG9tJykgYWNjb3JkaW5nbHksXG4gICAqIGFuZCBkeW5hbWljYWxseSBzZXRzIHRoZSBtYXgtaGVpZ2h0IG9mIHRoZSBkcm9wZG93biBsaXN0IHRvIGZpdCB0aGUgdmlld3BvcnQuXG4gICAqL1xuICBzZXREcm9wZG93blBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gZHJvcGRvd24gdHJpZ2dlclxuICAgIGNvbnN0IGRyb3Bkb3duSW5wdXQgPSBkcm9wZG93bi5wYXJlbnRFbGVtZW50XG4gICAgY29uc3QgZHJvcGRvd25MaXN0ID0gZHJvcGRvd24ucXVlcnlTZWxlY3RvcigndWxbcm9sZT1cImxpc3Rib3hcIl0nKVxuICAgIGNvbnN0IHJlY3QgPSBkcm9wZG93bklucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIHJlY3QuYm90dG9tXG4gICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wXG5cbiAgICBjb25zdCBNQVJHSU4gPSAxMFxuICAgIGNvbnN0IE1JTl9IRUlHSFQgPSAxMDBcbiAgICBjb25zdCBEUk9QRE9XTl9NQVhfSEVJR0hUID0gNTAwXG4gICAgbGV0IG1heERyb3Bkb3duSGVpZ2h0XG5cbiAgICBpZiAoc3BhY2VCZWxvdyA+PSBEUk9QRE9XTl9NQVhfSEVJR0hUKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duUG9zaXRpb24gPSAnYm90dG9tJ1xuICAgICAgbWF4RHJvcGRvd25IZWlnaHQgPSBEUk9QRE9XTl9NQVhfSEVJR0hUXG4gICAgfSBlbHNlIGlmIChzcGFjZUFib3ZlID49IERST1BET1dOX01BWF9IRUlHSFQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25Qb3NpdGlvbiA9ICd0b3AnXG4gICAgICBtYXhEcm9wZG93bkhlaWdodCA9IERST1BET1dOX01BWF9IRUlHSFRcbiAgICB9IGVsc2UgaWYgKHNwYWNlQmVsb3cgPiBzcGFjZUFib3ZlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duUG9zaXRpb24gPSAnYm90dG9tJ1xuICAgICAgbWF4RHJvcGRvd25IZWlnaHQgPSBNYXRoLm1heChzcGFjZUJlbG93IC0gTUFSR0lOLCBNSU5fSEVJR0hUKSAvLyAxMHB4IG1hcmdpbiwgbWluaW11bSBoZWlnaHQgMTAwcHhcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wZG93blBvc2l0aW9uID0gJ3RvcCdcbiAgICAgIG1heERyb3Bkb3duSGVpZ2h0ID0gTWF0aC5tYXgoc3BhY2VBYm92ZSAtIE1BUkdJTiwgTUlOX0hFSUdIVCkgLy8gMTBweCBtYXJnaW4sIG1pbmltdW0gaGVpZ2h0IDEwMHB4XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcm9wZG93bkxpc3QsICdtYXgtaGVpZ2h0JywgYCR7bWF4RHJvcGRvd25IZWlnaHR9cHhgKVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogc2NvcGVcIj5cbiAgPGRpdiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7IHQoc3RhdGU/LmxhYmVsKSB9fTwvZGl2PlxuICA8dWxcbiAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9ucyBjYXJkIG9wdGlvbnMgZ2RzLXJlc2V0XCJcbiAgICBbY2xhc3MuZ2RzLWRyb3Bkb3duX19vcHRpb25zLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9ucydcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctbGFiZWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiXG4gICAgICBzdGF0ZSA/IGlkICsgJy1vcHRpb24tJyArIChzdGF0ZT8uaWQgPz8gc3RhdGU/LmtleSkgOiB1bmRlZmluZWRcbiAgICBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCI+XG4gICAgICA8IS0tIE9QVElPTiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNHcm91cChpdGVtKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIE9QVElPTiBHUk9VUCAtLT5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgZ3JvdXBcIlxuICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1vcHRpb24tZ3JvdXAnXCJcbiAgICAgICAgKm5nSWY9XCJpc0dyb3VwKGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBncm91cCBsYWJlbCB0ZW1wbGF0ZSAoZGVmYXVsdCBvciBjdXN0b20pIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RHcm91cFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHVsIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIGNsYXNzPVwiZ2RzLXJlc2V0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNhc3RHcm91cChpdGVtKS5vcHRpb25zXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBsaXN0SXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuXG4gIDwhLS0gVEVNUExBVEUgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiIW9wdGlvbkNvbnRlbnRUcGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgKG9wdGlvbi5pZCA/PyBvcHRpb24ua2V5KVwiXG4gICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgb3B0aW9uXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgI2xpRWxlbVxuICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLScgKyBvcHRpb24ua2V5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiXG4gICAgICAgIG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkVmFsdWU/LmtleSAmJiAhIXNlbGVjdGVkVmFsdWU/LmtleVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtZm9jdXNdPVwib3B0aW9uLmtleSA9PT0gc3RhdGU/LmtleSAmJiAhb3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFtuZ2d2VG9vbHRpcF09XCJpc092ZXJmbG93KGxpRWxlbSkgPyB0KG9wdGlvbi5sYWJlbCkgOiB1bmRlZmluZWRcIlxuICAgICAgKGNsaWNrKT1cInVwZGF0ZVN0YXRlKG9wdGlvbiwgJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYmFzaWNPcHRpb25Db250ZW50VHBsO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICAgIDwhLS0gQ2hlY2tpbmcgb3ZlcmZsb3cgb24gY3VzdG9tIHRlbXBsYXRlcyBkbyBub3Qgd29yayBza2lwIGFkZGluZyBuZ2d2VG9vbFRpcCBpZiBjdXN0b20gdGVtcGxhdGUgaXMgcHJvdmlkZWQgLS0+XG4gICAgPGxpXG4gICAgICAjb3B0aW9uUmVmc1xuICAgICAgKm5nSWY9XCIhIW9wdGlvbkNvbnRlbnRUcGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgKG9wdGlvbi5pZCA/PyBvcHRpb24ua2V5KVwiXG4gICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgb3B0aW9uXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgI2xpRWxlbVxuICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLScgKyBvcHRpb24ua2V5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiXG4gICAgICAgIG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkVmFsdWU/LmtleSAmJiAhIXNlbGVjdGVkVmFsdWU/LmtleVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtZm9jdXNdPVwib3B0aW9uLmtleSA9PT0gc3RhdGU/LmtleSAmJiAhb3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGVTdGF0ZShvcHRpb24sICRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbkNvbnRlbnRUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNsaXN0R3JvdXBUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBMYWJlbFRwbFwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBMYWJlbFRwbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwTGFiZWxUcGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2ljR3JvdXBMYWJlbFRwbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Jhc2ljT3B0aW9uQ29udGVudFRwbCBsZXQtb3B0aW9uPlxuICAgIDxuZ2d2LXR5cGVhaGVhZC1oaWdobGlnaHRcbiAgICAgICpuZ0lmPVwiISF0ZXh0VG9IaWdobGlnaHRcIlxuICAgICAgW3RleHRUb0hpZ2hsaWdodF09XCJ0ZXh0VG9IaWdobGlnaHRcIlxuICAgICAgW3RleHRDb250ZW50XT1cInQob3B0aW9uLmxhYmVsKVwiXG4gICAgPlxuICAgIDwvbmdndi10eXBlYWhlYWQtaGlnaGxpZ2h0PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGV4dFRvSGlnaGxpZ2h0XCI+XG4gICAgICB7eyB0KG9wdGlvbi5sYWJlbCkgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Jhc2ljR3JvdXBMYWJlbFRwbCBsZXQtaXRlbT5cbiAgICA8ZGl2IGNsYXNzPVwibmdndi1ncm91cC1sYWJlbFwiPnt7IHQoaXRlbS5sYWJlbCkgfX08L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js';\nimport { ChangeDetectorRef, Component, ContentChild, EventEmitter, HostBinding, HostListener, Inject, Input, Optional, Output, Self, TemplateRef, } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { TRANSLOCO_SCOPE } from '@jsverse/transloco';\nimport { fromEvent } from 'rxjs';\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor';\nimport { DropdownUtils, } from '@sebgroup/green-angular/src/v-angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@sebgroup/green-angular/src/v-angular/core\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@sebgroup/green-angular/src/lib/shared\";\nimport * as i5 from \"@jsverse/transloco\";\nimport * as i6 from \"./dropdown-list/dropdown-list.component\";\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\nexport class NggvDropdownComponent extends NggvBaseControlValueAccessorComponent {\n get isSmall() {\n return this.size === 'small';\n }\n get isLarge() {\n return this.size === 'large';\n }\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n set options(value) {\n // update options\n this._options = value;\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null);\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options);\n }\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0];\n this.updateModel(onlyOption);\n return;\n }\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value);\n if (!this.allowControlNullishOption && !matchingOption)\n return;\n // Update local state\n this.writeValue(this.ngControl?.value);\n }\n get options() {\n return this._options;\n }\n /** @internal nullish option. */\n get defaultNullishOption() {\n return { key: null, label: this.placeholder ?? '\\u00A0' };\n }\n constructor(ngControl, translocoScope, cdr, dropdownUtils) {\n super(ngControl, translocoScope, cdr);\n this.ngControl = ngControl;\n this.translocoScope = translocoScope;\n this.cdr = cdr;\n this.dropdownUtils = dropdownUtils;\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n this.thook = 'dropdown';\n /**\n * Sets the displayed size of the dropdown.\n */\n this.size = 'large';\n /** If the dropdown should close when scrolling the viewport. Default: false */\n this.closeOnScroll = false;\n /** The additional amount to show when option is scrolled into view. */\n this.scrollOffset = 24;\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n this.allowControlNullishOption = true;\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n this.selectOnSingleOption = true;\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n this.selectWithSpace = true;\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n this.onlyHandleDistinctChanges = true;\n /**\n * Emits changes of the expanded state of the dropdown\n */\n this.expandedChange = new EventEmitter();\n /** The current expanded state of the dropdown options. */\n this.expanded = false;\n /** The current option selected based on numeric index. */\n this.activeIndex = -1;\n this.keyEvent = {};\n this._options = [];\n }\n ngOnChanges(changes) {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue;\n // remove nullish option\n const hasNullishOption = this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null;\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1);\n return;\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options);\n return;\n }\n }\n }\n ngOnDestroy() {\n this.onClickSubscription?.unsubscribe();\n this.onScrollSubscription?.unsubscribe();\n }\n /** @internal override to correctly set state from form value */\n writeValue(value) {\n const options = this.dropdownUtils.flattenOptions(this._options, false);\n this.state = options.find((option) => option.key === value);\n }\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n /** @internal */\n onSelectChange(option) {\n if (option.disabled)\n return;\n this.updateModel(option);\n this.setExpanded(false);\n }\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n onKeyUp(event) {\n this.keyEvent = event;\n }\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event) => {\n if (this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)) {\n this.toggleDropdown();\n this.onClickSubscription?.unsubscribe();\n }\n },\n });\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event) => {\n if (this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)) {\n this.toggleDropdown();\n this.onScrollSubscription?.unsubscribe();\n }\n },\n });\n }\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n updateModel(value) {\n this.state = value;\n this.onChange(value.key);\n }\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded);\n this.cdr.detectChanges();\n }\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state;\n this.expandedChange.emit(this.expanded);\n if (this.expanded) {\n this.subscribeToOutsideClickEvent();\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent();\n }\n }\n if (!this.expanded)\n this.onTouched();\n }\n /* TYPE CASTS */\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option) {\n return option;\n }\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group) {\n return group;\n }\n /* TYPE CHECKS */\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option) {\n return !('options' in option);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }, { token: i2.DropdownUtils }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvDropdownComponent, isStandalone: false, selector: \"nggv-dropdown\", inputs: { thook: \"thook\", size: \"size\", placeholder: \"placeholder\", ariaLabel: \"ariaLabel\", closeOnScroll: \"closeOnScroll\", options: \"options\", scrollOffset: \"scrollOffset\", allowControlNullishOption: \"allowControlNullishOption\", textToHighlight: \"textToHighlight\", selectOnSingleOption: \"selectOnSingleOption\", selectWithSpace: \"selectWithSpace\", onlyHandleDistinctChanges: \"onlyHandleDistinctChanges\" }, outputs: { expandedChange: \"expandedChange\" }, host: { listeners: { \"keyup\": \"onKeyUp($event)\" }, properties: { \"attr.data-thook\": \"this.thook\", \"class.small\": \"this.isSmall\", \"class.large\": \"this.isLarge\" } }, queries: [{ propertyName: \"selectedContentTpl\", first: true, predicate: [\"selectedTpl\"], descendants: true, read: TemplateRef }, { propertyName: \"optionContentTpl\", first: true, predicate: [\"optionTpl\"], descendants: true, read: TemplateRef }, { propertyName: \"groupLabelTpl\", first: true, predicate: [\"groupLabelTpl\"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"<!-- LABEL -->\\n<ng-container *transloco=\\\"let t; read: scope\\\">\\n <label\\n [id]=\\\"id + '-label'\\\"\\n class=\\\"gds-field-label hide-if-empty\\\"\\n [attr.for]=\\\"id + '-toggle'\\\"\\n *ngIf=\\\"labelContentTpl || label\\\"\\n >\\n <ng-template\\n *ngTemplateOutlet=\\\"labelContentTpl || basicLabelContentTpl\\\"\\n ></ng-template>\\n </label>\\n <ng-template #basicLabelContentTpl>\\n <!-- to trigger css:empty if no label was added -->\\n <ng-container *ngIf=\\\"label\\\">\\n {{ label }}\\n <span\\n *ngIf=\\\"optional === true || (required !== true && optional !== false)\\\"\\n class=\\\"gds-field-label--optional\\\"\\n >\\n ({{ t('label.optional') }})\\n </span>\\n </ng-container>\\n </ng-template>\\n\\n <!-- DESCRIPTION -->\\n <div class=\\\"description\\\" *ngIf=\\\"description\\\">{{ description }}</div>\\n\\n <!-- LOCKED INPUT -->\\n <ng-container *ngIf=\\\"locked\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n lockedTpl || defaultLockedTpl;\\n context: { $implicit: state }\\n \\\"\\n ></ng-template>\\n <ng-template #defaultLockedTpl>\\n <div\\n [id]=\\\"id + '-input'\\\"\\n class=\\\"nggv-field--locked\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.value]=\\\"state\\\"\\n [attr.role]=\\\"role\\\"\\n [attr.aria-labelledby]=\\\"id + '-label ' + id + '-input'\\\"\\n >\\n <span *ngIf=\\\"!state\\\" class=\\\"unset-state\\\">-</span>\\n <ng-container *ngIf=\\\"state\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n selectedContentTpl || defaultSelectedContentTpl;\\n context: { $implicit: state }\\n \\\"\\n >\\n </ng-template>\\n </ng-container>\\n </div>\\n </ng-template>\\n </ng-container>\\n\\n <!-- INPUT -->\\n <ng-container *ngIf=\\\"!locked\\\">\\n <div class=\\\"gds-input-wrapper dropdown-wrapper\\\">\\n <div #input [id]=\\\"id + '-input'\\\" class=\\\"dropdown\\\">\\n <button\\n [id]=\\\"id + '-toggle'\\\"\\n [disabled]=\\\"disabled\\\"\\n type=\\\"button\\\"\\n class=\\\"nggv-field-dropdown__label toggle\\\"\\n [class.nggv-field--error]=\\\"invalid\\\"\\n role=\\\"combobox\\\"\\n aria-owns=\\\"listbox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n aria-controls=\\\"listbox\\\"\\n [attr.data-thook]=\\\"thook + '-toggle'\\\"\\n [attr.aria-expanded]=\\\"expanded\\\"\\n [attr.aria-labelledby]=\\\"\\n ariaLabel ? null : id + '-label ' + id + '-toggle'\\n \\\"\\n [attr.aria-label]=\\\"ariaLabel || null\\\"\\n (click)=\\\"toggleDropdown()\\\"\\n >\\n <span>\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n selectedContentTpl || defaultSelectedContentTpl;\\n context: { $implicit: state }\\n \\\"\\n >\\n </ng-template>\\n </span>\\n </button>\\n <nggv-dropdown-list\\n #dropDownList\\n [options]=\\\"options\\\"\\n [scrollOffset]=\\\"scrollOffset\\\"\\n [state]=\\\"state\\\"\\n [expanded]=\\\"expanded\\\"\\n [optionContentTpl]=\\\"optionContentTpl\\\"\\n [groupLabelTpl]=\\\"groupLabelTpl\\\"\\n [textToHighlight]=\\\"textToHighlight\\\"\\n [onlyEmitDistinctChanges]=\\\"onlyHandleDistinctChanges\\\"\\n [selectWithSpace]=\\\"selectWithSpace\\\"\\n [dynamicPosition]=\\\"true\\\"\\n (closed)=\\\"setExpanded(false)\\\"\\n (selectedValueChanged)=\\\"onSelectChange($event)\\\"\\n >\\n </nggv-dropdown-list>\\n </div>\\n <!-- ERRORS -->\\n <div class=\\\"gds-form-item__footer error-wrapper\\\">\\n <span\\n class=\\\"form-info form-info--error\\\"\\n [attr.for]=\\\"id + '-input'\\\"\\n *ngIf=\\\"invalid && (error || ngControl?.invalid)\\\"\\n >\\n <span class=\\\"error-icon\\\">\\n <gds-icon-triangle-exclamation\\n width=\\\"16\\\"\\n height=\\\"16\\\"\\n [solid]=\\\"true\\\"\\n *nggCoreElement\\n ></gds-icon-triangle-exclamation>\\n </span>\\n <span\\n *ngIf=\\\"error; else errorsRef\\\"\\n [attr.data-thook]=\\\"thook + '-errorlabel'\\\"\\n >{{ error }}</span\\n >\\n </span>\\n <ng-template #errorsRef>\\n <span\\n *ngIf=\\\"firstError as error\\\"\\n [attr.data-thook]=\\\"thook + '-errorlabel'\\\"\\n >\\n {{ t('error.field' + error?.code, error?.params) }}\\n </span>\\n </ng-template>\\n </div>\\n <!-- CHILDREN -->\\n <ng-content></ng-content>\\n </div>\\n </ng-container>\\n\\n <ng-template #defaultSelectedContentTpl let-state>\\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2)}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host{display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .gds-form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .gds-form-info{margin-bottom:0}:host .gds-form-item__labels .gds-form-info a:link:not(.button,[aria-disabled]){color:var(--gds-sys-color-text-link)}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height var(--gds-sys-transition)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-sys-color-base-100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all var(--gds-sys-transition);border:1px solid transparent}@media(prefers-reduced-motion:reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-sys-color-base-600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host{position:initial}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";border-radius:.25rem;border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-base-600)}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host button{background:var(--gds-sys-color-background-primary);color:var(--gds-sys-color-text-primary);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%}@media(max-width:35.98em){:host button{min-width:100%}}:host button:not(:disabled,.disabled,[aria-disabled]):hover{--background: var(--gds-sys-color-base-200);--color: var(--gds-sys-color-base-800);background-color:var(--gds-sys-color-base-200);color:var(--gds-sys-color-base-800);border-color:var(--gds-sys-color-base-800)}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem \\\"\\\";margin-right:.5rem \\\"\\\";border-bottom:solid 2px var(--gds-sys-color-text-primary);border-left:solid 2px var(--gds-sys-color-text-primary);content:\\\"\\\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--gds-sys-color-base-300)}:host button{font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:var(--gds-sys-color-base-200)}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown-wrapper{position:relative}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}:host.small label{line-height:1rem;font-size:.875rem}:host.small label+.gds-input-wrapper,:host.small label+.nggv-field--locked{margin-top:.25rem}:host.small .description{font-size:.875rem;line-height:1rem;margin-bottom:.25rem}:host.small button{font-size:.875rem;line-height:1rem;padding:.38rem .5rem;min-height:2rem}:host.small .gds-form-item__footer:not(:empty){margin-top:.25rem}\\n\"], dependencies: [{ kind: \"directive\", type: i3.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i4.NggCoreElementDirective, selector: \"[nggCoreElement]\" }, { kind: \"directive\", type: i5.TranslocoDirective, selector: \"[transloco]\", inputs: [\"transloco\", \"translocoParams\", \"translocoScope\", \"translocoRead\", \"translocoPrefix\", \"translocoLang\", \"translocoLoadingTpl\"] }, { kind: \"component\", type: i6.NggvDropdownListComponent, selector: \"nggv-dropdown-list\", inputs: [\"expanded\", \"state\", \"scrollOffset\", \"optionContentTpl\", \"groupLabelTpl\", \"id\", \"thook\", \"options\", \"textToHighlight\", \"onlyEmitDistinctChanges\", \"selectWithSpace\", \"dynamicPosition\"], outputs: [\"selectedValueChanged\", \"closed\", \"afterClose\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownComponent, decorators: [{\n type: Component,\n args: [{ selector: 'nggv-dropdown', standalone: false, template: \"<!-- LABEL -->\\n<ng-container *transloco=\\\"let t; read: scope\\\">\\n <label\\n [id]=\\\"id + '-label'\\\"\\n class=\\\"gds-field-label hide-if-empty\\\"\\n [attr.for]=\\\"id + '-toggle'\\\"\\n *ngIf=\\\"labelContentTpl || label\\\"\\n >\\n <ng-template\\n *ngTemplateOutlet=\\\"labelContentTpl || basicLabelContentTpl\\\"\\n ></ng-template>\\n </label>\\n <ng-template #basicLabelContentTpl>\\n <!-- to trigger css:empty if no label was added -->\\n <ng-container *ngIf=\\\"label\\\">\\n {{ label }}\\n <span\\n *ngIf=\\\"optional === true || (required !== true && optional !== false)\\\"\\n class=\\\"gds-field-label--optional\\\"\\n >\\n ({{ t('label.optional') }})\\n </span>\\n </ng-container>\\n </ng-template>\\n\\n <!-- DESCRIPTION -->\\n <div class=\\\"description\\\" *ngIf=\\\"description\\\">{{ description }}</div>\\n\\n <!-- LOCKED INPUT -->\\n <ng-container *ngIf=\\\"locked\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n lockedTpl || defaultLockedTpl;\\n context: { $implicit: state }\\n \\\"\\n ></ng-template>\\n <ng-template #defaultLockedTpl>\\n <div\\n [id]=\\\"id + '-input'\\\"\\n class=\\\"nggv-field--locked\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.value]=\\\"state\\\"\\n [attr.role]=\\\"role\\\"\\n [attr.aria-labelledby]=\\\"id + '-label ' + id + '-input'\\\"\\n >\\n <span *ngIf=\\\"!state\\\" class=\\\"unset-state\\\">-</span>\\n <ng-container *ngIf=\\\"state\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n selectedContentTpl || defaultSelectedContentTpl;\\n context: { $implicit: state }\\n \\\"\\n >\\n </ng-template>\\n </ng-container>\\n </div>\\n </ng-template>\\n </ng-container>\\n\\n <!-- INPUT -->\\n <ng-container *ngIf=\\\"!locked\\\">\\n <div class=\\\"gds-input-wrapper dropdown-wrapper\\\">\\n <div #input [id]=\\\"id + '-input'\\\" class=\\\"dropdown\\\">\\n <button\\n [id]=\\\"id + '-toggle'\\\"\\n [disabled]=\\\"disabled\\\"\\n type=\\\"button\\\"\\n class=\\\"nggv-field-dropdown__label toggle\\\"\\n [class.nggv-field--error]=\\\"invalid\\\"\\n role=\\\"combobox\\\"\\n aria-owns=\\\"listbox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n aria-controls=\\\"listbox\\\"\\n [attr.data-thook]=\\\"thook + '-toggle'\\\"\\n [attr.aria-expanded]=\\\"expanded\\\"\\n [attr.aria-labelledby]=\\\"\\n ariaLabel ? null : id + '-label ' + id + '-toggle'\\n \\\"\\n [attr.aria-label]=\\\"ariaLabel || null\\\"\\n (click)=\\\"toggleDropdown()\\\"\\n >\\n <span>\\n <ng-template\\n *ngTemplateOutlet=\\\"\\n selectedContentTpl || defaultSelectedContentTpl;\\n context: { $implicit: state }\\n \\\"\\n >\\n </ng-template>\\n </span>\\n </button>\\n <nggv-dropdown-list\\n #dropDownList\\n [options]=\\\"options\\\"\\n [scrollOffset]=\\\"scrollOffset\\\"\\n [state]=\\\"state\\\"\\n [expanded]=\\\"expanded\\\"\\n [optionContentTpl]=\\\"optionContentTpl\\\"\\n [groupLabelTpl]=\\\"groupLabelTpl\\\"\\n [textToHighlight]=\\\"textToHighlight\\\"\\n [onlyEmitDistinctChanges]=\\\"onlyHandleDistinctChanges\\\"\\n [selectWithSpace]=\\\"selectWithSpace\\\"\\n [dynamicPosition]=\\\"true\\\"\\n (closed)=\\\"setExpanded(false)\\\"\\n (selectedValueChanged)=\\\"onSelectChange($event)\\\"\\n >\\n </nggv-dropdown-list>\\n </div>\\n <!-- ERRORS -->\\n <div class=\\\"gds-form-item__footer error-wrapper\\\">\\n <span\\n class=\\\"form-info form-info--error\\\"\\n [attr.for]=\\\"id + '-input'\\\"\\n *ngIf=\\\"invalid && (error || ngControl?.invalid)\\\"\\n >\\n <span class=\\\"error-icon\\\">\\n <gds-icon-triangle-exclamation\\n width=\\\"16\\\"\\n height=\\\"16\\\"\\n [solid]=\\\"true\\\"\\n *nggCoreElement\\n ></gds-icon-triangle-exclamation>\\n </span>\\n <span\\n *ngIf=\\\"error; else errorsRef\\\"\\n [attr.data-thook]=\\\"thook + '-errorlabel'\\\"\\n >{{ error }}</span\\n >\\n </span>\\n <ng-template #errorsRef>\\n <span\\n *ngIf=\\\"firstError as error\\\"\\n [attr.data-thook]=\\\"thook + '-errorlabel'\\\"\\n >\\n {{ t('error.field' + error?.code, error?.params) }}\\n </span>\\n </ng-template>\\n </div>\\n <!-- CHILDREN -->\\n <ng-content></ng-content>\\n </div>\\n </ng-container>\\n\\n <ng-template #defaultSelectedContentTpl let-state>\\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2)}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host{display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .gds-form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .gds-form-info{margin-bottom:0}:host .gds-form-item__labels .gds-form-info a:link:not(.button,[aria-disabled]){color:var(--gds-sys-color-text-link)}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height var(--gds-sys-transition)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-sys-color-base-100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all var(--gds-sys-transition);border:1px solid transparent}@media(prefers-reduced-motion:reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-sys-color-base-600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host{position:initial}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";border-radius:.25rem;border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-base-600)}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host button{background:var(--gds-sys-color-background-primary);color:var(--gds-sys-color-text-primary);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%}@media(max-width:35.98em){:host button{min-width:100%}}:host button:not(:disabled,.disabled,[aria-disabled]):hover{--background: var(--gds-sys-color-base-200);--color: var(--gds-sys-color-base-800);background-color:var(--gds-sys-color-base-200);color:var(--gds-sys-color-base-800);border-color:var(--gds-sys-color-base-800)}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem \\\"\\\";margin-right:.5rem \\\"\\\";border-bottom:solid 2px var(--gds-sys-color-text-primary);border-left:solid 2px var(--gds-sys-color-text-primary);content:\\\"\\\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--gds-sys-color-base-300)}:host button{font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:var(--gds-sys-color-base-200)}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown-wrapper{position:relative}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}:host.small label{line-height:1rem;font-size:.875rem}:host.small label+.gds-input-wrapper,:host.small label+.nggv-field--locked{margin-top:.25rem}:host.small .description{font-size:.875rem;line-height:1rem;margin-bottom:.25rem}:host.small button{font-size:.875rem;line-height:1rem;padding:.38rem .5rem;min-height:2rem}:host.small .gds-form-item__footer:not(:empty){margin-top:.25rem}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{\n type: Self\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TRANSLOCO_SCOPE]\n }] }, { type: i0.ChangeDetectorRef }, { type: i2.DropdownUtils }], propDecorators: { selectedContentTpl: [{\n type: ContentChild,\n args: ['selectedTpl', { read: TemplateRef }]\n }], optionContentTpl: [{\n type: ContentChild,\n args: ['optionTpl', { read: TemplateRef }]\n }], groupLabelTpl: [{\n type: ContentChild,\n args: ['groupLabelTpl', { read: TemplateRef }]\n }], thook: [{\n type: HostBinding,\n args: ['attr.data-thook']\n }, {\n type: Input\n }], isSmall: [{\n type: HostBinding,\n args: ['class.small']\n }], isLarge: [{\n type: HostBinding,\n args: ['class.large']\n }], size: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], closeOnScroll: [{\n type: Input\n }], options: [{\n type: Input\n }], scrollOffset: [{\n type: Input\n }], allowControlNullishOption: [{\n type: Input\n }], textToHighlight: [{\n type: Input\n }], selectOnSingleOption: [{\n type: Input\n }], selectWithSpace: [{\n type: Input\n }], onlyHandleDistinctChanges: [{\n type: Input\n }], expandedChange: [{\n type: Output\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxvRUFBb0UsQ0FBQTtBQUUzRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFFSixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sb0JBQW9CLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFFOUMsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUVBQW1FLENBQUE7QUFDekgsT0FBTyxFQUNMLGFBQWEsR0FJZCxNQUFNLDRDQUE0QyxDQUFBOzs7Ozs7OztBQUVuRDs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLHFCQUtYLFNBQVEscUNBQXFDO0lBb0I3QyxJQUFnQyxPQUFPO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUE7SUFDOUIsQ0FBQztJQUVELElBQWdDLE9BQU87UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQTtJQUM5QixDQUFDO0lBYUQsdUZBQXVGO0lBQ3ZGLElBQWEsT0FBTyxDQUFDLEtBQXNCO1FBQ3pDLGlCQUFpQjtRQUNq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QUtMLE1BQU07O3NCQTRFTixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL3RyaWFuZ2xlLWV4Y2xhbWF0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBOZ2d2QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50IH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InXG5pbXBvcnQge1xuICBEcm9wZG93blV0aWxzLFxuICBPcHRpb24sXG4gIE9wdGlvbkJhc2UsXG4gIE9wdGlvbkdyb3VwLFxufSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2NvcmUnXG5cbi8qKlxuICogQSBkcm9wZG93biBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGFuIG9wdGlvbiBmcm9tIGEgbGlzdC5cbiAqIERyb3Bkb3ducyBlbmFibGVzIHVzZXJzIHRvIG1ha2UgYSBxdWljayBzZWxlY3Rpb24gb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIGVudHJ5LlxuICogaHR0cHM6Ly9kZXNpZ25saWJyYXJ5LnNlYmdyb3VwLmNvbS9jb21wb25lbnRzL2NvbXBvbmVudC1kcm9wZG93blxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nZ3YtZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBOZ2d2RHJvcGRvd25Db21wb25lbnQ8XG4gICAgSyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgViA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgVCBleHRlbmRzIE9wdGlvbjxLLCBWPiA9IE9wdGlvbjxLLCBWPixcbiAgPlxuICBleHRlbmRzIE5nZ3ZCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAvKiogQ3VzdG9tIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIG9wdGlvbnMgYW5kIGdyb3Vwcy4gKi9cbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0ZWRUcGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHNlbGVjdGVkQ29udGVudFRwbDpcbiAgICB8IFRlbXBsYXRlUmVmPE9wdGlvbkJhc2U8VD4+XG4gICAgfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBvcHRpb25Db250ZW50VHBsOlxuICAgIHwgVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PlxuICAgIHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyb3VwTGFiZWxUcGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGdyb3VwTGFiZWxUcGw6XG4gICAgfCBUZW1wbGF0ZVJlZjxPcHRpb25CYXNlPGFueT4+XG4gICAgfCB1bmRlZmluZWRcblxuICAvKipcbiAgICogU3BlY2lhbCBwcm9wZXJ0eSB1c2VkIGZvciBzZWxlY3RpbmcgRE9NIGVsZW1lbnRzIGR1cmluZyBhdXRvbWF0ZWQgVUkgdGVzdGluZy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRob29rJykgQElucHV0KCkgdGhvb2s6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICdkcm9wZG93bidcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtYWxsJykgZ2V0IGlzU21hbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJ1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYXJnZScpIGdldCBpc0xhcmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdsYXJnZSdcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNwbGF5ZWQgc2l6ZSBvZiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ2xhcmdlJyA9ICdsYXJnZSdcblxuICAvKiogVGV4dCBzaG93biBiZWZvcmUgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKiogU3BlY2lmaWMgdmFsdWUgZm9yIGFyaWEtbGFiZWwuIElmIG5vdCBwcm92aWRlZCwgbGFiZWwvbGFiZWxUcGwgd2lsbCBiZSB1c2VkLiAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmdcbiAgLyoqIElmIHRoZSBkcm9wZG93biBzaG91bGQgY2xvc2Ugd2hlbiBzY3JvbGxpbmcgdGhlIHZpZXdwb3J0LiBEZWZhdWx0OiBmYWxzZSAqL1xuICBASW5wdXQoKSBjbG9zZU9uU2Nyb2xsID0gZmFsc2VcbiAgLyoqIExpc3Qgb2Yge0BsaW5rIE9wdGlvbn0gYW5kIHtAbGluayBPcHRpb25Hcm91cH0gbGlzdGVkIHdoZW4gZHJvcGRvd24gaXMgZXhwYW5kZWQuICovXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKHZhbHVlOiBPcHRpb25CYXNlPFQ+W10pIHtcbiAgICAvLyB1cGRhdGUgb3B0aW9uc1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZVxuICAgIC8vIGFscmVhZHkgaGFzIGEgbnVsbC91bmRlZmluZWQga2V5XG4gICAgY29uc3QgbnVsbGlzaE9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlsc1xuICAgICAgLmZsYXR0ZW5PcHRpb25zKHZhbHVlLCBmYWxzZSlcbiAgICAgIC5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gbnVsbClcbiAgICAvLyBpZiB0aGUgZHJvcGRvd24gaXMgb3B0aW9uYWwsIGFkZCBhIG51bGwgdmFsdWUgdG8gZGVzZWxlY3Qgb3B0aW9uXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICFudWxsaXNoT3B0aW9uICYmIHRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbikge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IFt0aGlzLmRlZmF1bHROdWxsaXNoT3B0aW9uXS5jb25jYXQodGhpcy5fb3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBzZXQgZGVmYXVsdCB2YWx1ZSBhbmQgZW1pdCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBvcHRpb25cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHRoaXMucmVxdWlyZWQgJiYgdGhpcy5zZWxlY3RPblNpbmdsZU9wdGlvbikge1xuICAgICAgY29uc3Qgb25seU9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpWzBdXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9ubHlPcHRpb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBkb24ndCB1cGRhdGUgbG9jYWwgc3RhdGUgaWYgd2Ugc2hvdWxkbid0IGNvbnRyb2wgbnVsbGlzaCB2YWx1ZSBhbmQgd2UgY2FudCBmaW5kIHRoZSBzZWxlY3RlZCB2YWx1ZSBhbW9uZ3N0IHRoZSBvcHRpb25zXG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSB0aGlzLmRyb3Bkb3duVXRpbHNcbiAgICAgIC5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpXG4gICAgICAuZmluZCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgICBpZiAoIXRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbiAmJiAhbWF0Y2hpbmdPcHRpb24pIHJldHVyblxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHN0YXRlXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IE9wdGlvbkJhc2U8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNcbiAgfVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgLyoqXG4gICAqIEFsbG93IHRoaXMgY29tcG9uZW50IHRvIGFkZC8gcmVtb3ZlIG51bGxpc2ggb3B0aW9ucyBiYXNlZCBvbiB3ZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3Igbm90XG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uID0gdHJ1ZVxuXG4gIC8qKiBUZXh0IHRvIGhpZ2hsaWdodCBpbiBvcHRpb24gKi9cbiAgQElucHV0KCkgdGV4dFRvSGlnaGxpZ2h0Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIElmIG9ubHkgb25lIG9wdGlvbiBleGlzdHMgaW4gb3B0aW9uc1tdLCBkZWZhdWx0IGlzIHRvIHNlbGVjdCBpdC5cbiAgICogVGhpcyBpbnB1dCBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGF0IGJlaGF2aW91ciBzbyBpdCBkb2Vzbid0IGF1dG9tYXRpY2FsbHlcbiAgICogc2VsZWN0IGEgdmFsdWUgaWYgaXQncyB0aGUgb25seSBvbmUuXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPblNpbmdsZU9wdGlvbiA9IHRydWVcblxuICAvKipcbiAgICogVXNlZCB0byBjb250cm9sIGlmIHRoZSBkcm9wZG93biBsaXN0IHNob3VsZCBzZWxlY3QgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQsIHdoZW4gU3BhY2UgaXMgcHJlc3NlZCBvbiB0aGUga2V5Ym9hcmQuXG4gICAqIFByaW1hcnkgdXNhZ2UgaXMgZm9yIHR5cGVhaGVhZCwgd2hlcmUgdGhlIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIGEgZmlsdGVyIHF1ZXJ5IGNvbnRhaW5pbmcgc3BhY2VzLFxuICAgKiBidXQgbm90IHNlbGVjdCB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudCB3aXRoIFNwYWNlLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0V2l0aFNwYWNlID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVybWluZSB3aGljaCBjaGFuZ2VzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkcm9wZG93bi5cbiAgICogSWYgc2V0IHRvIGZhbHNlLCBhbGwgY2hhbmdlcyB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGRyb3Bkb3duLlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgb25seSBjaGFuZ2VzIHRoYXQgYXJlIGRpc3RpbmN0IGZyb20gdGhlIGN1cnJlbnQgdmFsdWUgd2lsbCBiZSBoYW5kbGVkLlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgb25seUhhbmRsZURpc3RpbmN0Q2hhbmdlcyA9IHRydWVcblxuICAvKipcbiAgICogRW1pdHMgY2hhbmdlcyBvZiB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBAT3V0cHV0KCkgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcblxuICAvKiogQGludGVybmFsIG51bGxpc2ggb3B0aW9uLiAqL1xuICBnZXQgZGVmYXVsdE51bGxpc2hPcHRpb24oKTogT3B0aW9uQmFzZTxhbnk+IHtcbiAgICByZXR1cm4geyBrZXk6IG51bGwsIGxhYmVsOiB0aGlzLnBsYWNlaG9sZGVyID8/ICdcXHUwMEEwJyB9XG4gIH1cblxuICAvKiogVGhlIGN1cnJlbnQgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuICovXG4gIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlXG4gIC8qKiBUaGUgY3VycmVudCBvcHRpb24gc2VsZWN0ZWQgYmFzZWQgb24gbnVtZXJpYyBpbmRleC4gKi9cbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gLTFcbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBkcm9wZG93bi4gKi9cbiAgcHJpdmF0ZSBvbkNsaWNrU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gc2Nyb2xsIG91dHNpZGUgdG8gY2xvc2UgZHJvcGRvd24uICovXG4gIHByaXZhdGUgb25TY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuXG4gIHB1YmxpYyBrZXlFdmVudDogS2V5Ym9hcmRFdmVudCA9IHt9IGFzIEtleWJvYXJkRXZlbnRcbiAgcHJpdmF0ZSBfb3B0aW9uczogT3B0aW9uQmFzZTxUPltdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoVFJBTlNMT0NPX1NDT1BFKVxuICAgIHByb3RlY3RlZCB0cmFuc2xvY29TY29wZTogVHJhbnNsb2NvU2NvcGUsXG4gICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGRyb3Bkb3duVXRpbHM6IERyb3Bkb3duVXRpbHM8SywgViwgVD4sXG4gICkge1xuICAgIHN1cGVyKG5nQ29udHJvbCwgdHJhbnNsb2NvU2NvcGUsIGNkcilcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5yZXF1aXJlZD8uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBjaGFuZ2VzLnJlcXVpcmVkLmN1cnJlbnRWYWx1ZVxuICAgICAgLy8gcmVtb3ZlIG51bGxpc2ggb3B0aW9uXG4gICAgICBjb25zdCBoYXNOdWxsaXNoT3B0aW9uID1cbiAgICAgICAgdGhpcy5kcm9wZG93blV0aWxzLmZsYXR0ZW5PcHRpb25zKHRoaXMuX29wdGlvbnMsIGZhbHNlKVswXT8ua2V5ID09IG51bGxcbiAgICAgIC8vIGlmIHJlcXVpcmVkLCByZW1vdmUgbnVsbGlzaCBvcHRpb25cbiAgICAgIGlmIChpc1JlcXVpcmVkICYmIGhhc051bGxpc2hPcHRpb24gJiYgdGhpcy5hbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zLnNsaWNlKDEpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gaWYgbm90IHJlcXVpcmVkLCBhZGQgbnVsbGlzaCBvcHRpb25cbiAgICAgIGlmICghaXNSZXF1aXJlZCAmJiAhaGFzTnVsbGlzaE9wdGlvbiAmJiB0aGlzLmFsbG93Q29udHJvbE51bGxpc2hPcHRpb24pIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IFt0aGlzLmRlZmF1bHROdWxsaXNoT3B0aW9uXS5jb25jYXQodGhpcy5fb3B0aW9ucylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgdGhpcy5vblNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBvdmVycmlkZSB0byBjb3JyZWN0bHkgc2V0IHN0YXRlIGZyb20gZm9ybSB2YWx1ZSAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kcm9wZG93blV0aWxzLmZsYXR0ZW5PcHRpb25zKHRoaXMuX29wdGlvbnMsIGZhbHNlKVxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gdmFsdWUpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVWRU5UU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvblNlbGVjdENoYW5nZShvcHRpb246IFQpIHtcbiAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvbilcbiAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKiBFbnRlciB0b2dnbGVzIHRoZSBkcm9wZG93biwgaG9tZSwgZW5kLCBhbmQsIGFycm93cyBjaGFuZ2UgdGhlIGluZGV4LlxuICAvLyAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHJlbGVhc2VkLlxuICAvLyAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5rZXlFdmVudCA9IGV2ZW50XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkcm9wZG93biBvbiBjbGljayBvdXRzaWRlLlxuICAgKi9cbiAgc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpIHtcbiAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmV4cGFuZGVkICYmXG4gICAgICAgICAgIXRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKClcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICB9XG4gIHN1YnNjcmliZVRvT3V0c2lkZVNjcm9sbEV2ZW50KCkge1xuICAgIHRoaXMub25TY3JvbGxTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdzY3JvbGwnKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5leHBhbmRlZCAmJlxuICAgICAgICAgICF0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpXG4gICAgICAgICAgdGhpcy5vblNjcm9sbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEhFTFBFUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRyb3Bkb3duIHZhbHVlIHRvIGdpdmVuIG9wdGlvbi5cbiAgICogQHBhcmFtIHZhbHVlIHRoZSBkcm9wZG93biBvcHRpb24gdG8gc2VsZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCh2YWx1ZTogVCkge1xuICAgIHRoaXMuc3RhdGUgPSB2YWx1ZVxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUua2V5KVxuICB9XG5cbiAgLyoqIFRvZ2dsZSB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuICovXG4gIHRvZ2dsZURyb3Bkb3duKCkge1xuICAgIHRoaXMuc2V0RXhwYW5kZWQoIXRoaXMuZXhwYW5kZWQpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBleHBhbmRlZCBzdGF0ZSBvZiB0aGUgZHJvcGRvd24gb3B0aW9ucy4gSWYgdHJ1ZSB0aGUgb3B0aW9ucyBhcmUgc2hvd24gYmVsb3cgdGhlIGZpZWxkLlxuICAgKiBBY3RpdmF0ZSBvbiBjbGljayBldmVudCB0byBiZSBhYmxlIHRvIGNsb3NlIGRyb3Bkb3duIG9uIGNsaWNrIG91dHNpZGUuXG4gICAqIEBwYXJhbSBzdGF0ZSB0aGUgZXhwYW5kZWQgc3RhdGUgd2hpY2ggdG8gc2V0LlxuICAgKi9cbiAgc2V0RXhwYW5kZWQoc3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5leHBhbmRlZCA9IHN0YXRlXG4gICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpXG4gICAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdXRzaWRlU2Nyb2xsRXZlbnQoKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHRoaXMub25Ub3VjaGVkKClcbiAgfVxuXG4gIC8qIFRZUEUgQ0FTVFMgKi9cblxuICAvKipcbiAgICogVHlwZWNhc3QgYW55dGhpbmcgdG8gYW4ge0BsaW5rIE9wdGlvbn0uXG4gICAqIEBwYXJhbSBvcHRpb24gdGhlIG9iamVjdCB0byB0eXBlY2FzdC5cbiAgICovXG4gIGNhc3RPcHRpb24ob3B0aW9uOiBhbnkpOiBUIHtcbiAgICByZXR1cm4gb3B0aW9uXG4gIH1cblxuICAvKipcbiAgICogVHlwZWNhc3QgYW55dGhpbmcgdG8gYW4ge0BsaW5rIE9wdGlvbkdyb3VwfS5cbiAgICogQHBhcmFtIGdyb3VwIHRoZSBvYmplY3QgdG8gdHlwZWNhc3QuXG4gICAqL1xuICBjYXN0R3JvdXAoZ3JvdXA6IGFueSk6IE9wdGlvbkdyb3VwPFQ+IHtcbiAgICByZXR1cm4gZ3JvdXBcbiAgfVxuXG4gIC8qIFRZUEUgQ0hFQ0tTICovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudCBpcyBhbiB7QGxpbmsgT3B0aW9ufS5cbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgKi9cbiAgaXNPcHRpb24ob3B0aW9uOiBPcHRpb25CYXNlPFQ+KTogb3B0aW9uIGlzIE9wdGlvbkdyb3VwPFQ+IHtcbiAgICByZXR1cm4gISgnb3B0aW9ucycgaW4gb3B0aW9uKVxuICB9XG59XG4iLCI8IS0tIExBQkVMIC0tPlxuPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHQ7IHJlYWQ6IHNjb3BlXCI+XG4gIDxsYWJlbFxuICAgIFtpZF09XCJpZCArICctbGFiZWwnXCJcbiAgICBjbGFzcz1cImdkcy1maWVsZC1sYWJlbCBoaWRlLWlmLWVtcHR5XCJcbiAgICBbYXR0ci5mb3JdPVwiaWQgKyAnLXRvZ2dsZSdcIlxuICAgICpuZ0lmPVwibGFiZWxDb250ZW50VHBsIHx8IGxhYmVsXCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbENvbnRlbnRUcGwgfHwgYmFzaWNMYWJlbENvbnRlbnRUcGxcIlxuICAgID48L25nLXRlbXBsYXRlPlxuICA8L2xhYmVsPlxuICA8bmctdGVtcGxhdGUgI2Jhc2ljTGFiZWxDb250ZW50VHBsPlxuICAgIDwhLS0gdG8gdHJpZ2dlciBjc3M6ZW1wdHkgaWYgbm8gbGFiZWwgd2FzIGFkZGVkIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwib3B0aW9uYWwgPT09IHRydWUgfHwgKHJlcXVpcmVkICE9PSB0cnVlICYmIG9wdGlvbmFsICE9PSBmYWxzZSlcIlxuICAgICAgICBjbGFzcz1cImdkcy1maWVsZC1sYWJlbC0tb3B0aW9uYWxcIlxuICAgICAgPlxuICAgICAgICAoe3sgdCgnbGFiZWwub3B0aW9uYWwnKSB9fSlcbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIERFU0NSSVBUSU9OIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiAqbmdJZj1cImRlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L2Rpdj5cblxuICA8IS0tIExPQ0tFRCBJTlBVVCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2tlZFwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgbG9ja2VkVHBsIHx8IGRlZmF1bHRMb2NrZWRUcGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICBcIlxuICAgID48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvY2tlZFRwbD5cbiAgICAgIDxkaXZcbiAgICAgICAgW2lkXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgICBjbGFzcz1cIm5nZ3YtZmllbGQtLWxvY2tlZFwiXG4gICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgIFthdHRyLnZhbHVlXT1cInN0YXRlXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImlkICsgJy1sYWJlbCAnICsgaWQgKyAnLWlucHV0J1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIXN0YXRlXCIgY2xhc3M9XCJ1bnNldC1zdGF0ZVwiPi08L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb250ZW50VHBsIHx8IGRlZmF1bHRTZWxlY3RlZENvbnRlbnRUcGw7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gSU5QVVQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9ja2VkXCI+XG4gICAgPGRpdiBjbGFzcz1cImdkcy1pbnB1dC13cmFwcGVyIGRyb3Bkb3duLXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgI2lucHV0IFtpZF09XCJpZCArICctaW5wdXQnXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2lkXT1cImlkICsgJy10b2dnbGUnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwibmdndi1maWVsZC1kcm9wZG93bl9fbGFiZWwgdG9nZ2xlXCJcbiAgICAgICAgICBbY2xhc3Mubmdndi1maWVsZC0tZXJyb3JdPVwiaW52YWxpZFwiXG4gICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICBhcmlhLW93bnM9XCJsaXN0Ym94XCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgICAgYXJpYS1jb250cm9scz1cImxpc3Rib3hcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLXRvZ2dsZSdcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCA/IG51bGwgOiBpZCArICctbGFiZWwgJyArIGlkICsgJy10b2dnbGUnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29udGVudFRwbCB8fCBkZWZhdWx0U2VsZWN0ZWRDb250ZW50VHBsO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZ2d2LWRyb3Bkb3duLWxpc3RcbiAgICAgICAgICAjZHJvcERvd25MaXN0XG4gICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgW3Njcm9sbE9mZnNldF09XCJzY3JvbGxPZmZzZXRcIlxuICAgICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICBbb3B0aW9uQ29udGVudFRwbF09XCJvcHRpb25Db250ZW50VHBsXCJcbiAgICAgICAgICBbZ3JvdXBMYWJlbFRwbF09XCJncm91cExhYmVsVHBsXCJcbiAgICAgICAgICBbdGV4dFRvSGlnaGxpZ2h0XT1cInRleHRUb0hpZ2hsaWdodFwiXG4gICAgICAgICAgW29ubHlFbWl0RGlzdGluY3RDaGFuZ2VzXT1cIm9ubHlIYW5kbGVEaXN0aW5jdENoYW5nZXNcIlxuICAgICAgICAgIFtzZWxlY3RXaXRoU3BhY2VdPVwic2VsZWN0V2l0aFNwYWNlXCJcbiAgICAgICAgICBbZHluYW1pY1Bvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgIChjbG9zZWQpPVwic2V0RXhwYW5kZWQoZmFsc2UpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZUNoYW5nZWQpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZ2d2LWRyb3Bkb3duLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gRVJST1JTIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdkcy1mb3JtLWl0ZW1fX2Zvb3RlciBlcnJvci13cmFwcGVyXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWluZm8gZm9ybS1pbmZvLS1lcnJvclwiXG4gICAgICAgICAgW2F0dHIuZm9yXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgICAgICpuZ0lmPVwiaW52YWxpZCAmJiAoZXJyb3IgfHwgbmdDb250cm9sPy5pbnZhbGlkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLWljb25cIj5cbiAgICAgICAgICAgIDxnZHMtaWNvbi10cmlhbmdsZS1leGNsYW1hdGlvblxuICAgICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICBbc29saWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICpuZ2dDb3JlRWxlbWVudFxuICAgICAgICAgICAgPjwvZ2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImVycm9yOyBlbHNlIGVycm9yc1JlZlwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1lcnJvcmxhYmVsJ1wiXG4gICAgICAgICAgICA+e3sgZXJyb3IgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlcnJvcnNSZWY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiZmlyc3RFcnJvciBhcyBlcnJvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1lcnJvcmxhYmVsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnZXJyb3IuZmllbGQnICsgZXJyb3I/LmNvZGUsIGVycm9yPy5wYXJhbXMpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIENISUxEUkVOIC0tPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZENvbnRlbnRUcGwgbGV0LXN0YXRlPlxuICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9lcWVxZXEgLS0+XG4gICAge3sgc3RhdGU/LmtleSAhPSBudWxsICYmIHN0YXRlPy5sYWJlbCA/IHQoc3RhdGUubGFiZWwpIDogcGxhY2Vob2xkZXIgfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19","import { Component, ElementRef, Inject, Input, Optional, Renderer2, SkipSelf, } from '@angular/core';\nimport { TRANSLOCO_SCOPE } from '@jsverse/transloco';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input';\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@sebgroup/green-angular/src/v-angular/tooltip\";\nimport * as i3 from \"../typeahead-highlight/typeahead-highlight.component\";\n// Use dropdownList template and combine stylesheets\nexport class NggvTypeaheadDropdownListComponent extends NggvDropdownListComponent {\n constructor(translocoScope, renderer2, element) {\n super(translocoScope, renderer2, element);\n this.translocoScope = translocoScope;\n this.renderer2 = renderer2;\n this.element = element;\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this.handleSelectedValueChanges();\n this.handleFocusChanges();\n }\n ngOnDestroy() {\n this._destroy$.next(true);\n this._destroy$.complete();\n }\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event) => {\n if (this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)) {\n this.setExpanded(false);\n this.onClickSubscription?.unsubscribe();\n }\n },\n });\n }\n /** @Internal Update state of the host-input to reflect the selected value */\n handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`;\n }\n });\n }\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state)\n this.hostComponent.nggvInput.emit('');\n this.setExpanded(true);\n this.subscribeToOutsideClickEvent();\n });\n }\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n formatSelected(value) {\n if (value?.key == null)\n return '';\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter)\n return value.label ?? '';\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? '';\n }\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n setExpanded(expanded = true) {\n super.setExpanded(expanded);\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(this.element.nativeElement, 'width', `${this.hostComponent.element.nativeElement.offsetWidth}px`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadDropdownListComponent, deps: [{ token: TRANSLOCO_SCOPE, optional: true, skipSelf: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvTypeaheadDropdownListComponent, isStandalone: false, selector: \"nggv-typeahead-dropdown-list\", inputs: { hostComponent: \"hostComponent\", resultFormatter: \"resultFormatter\", selectedFormatter: \"selectedFormatter\" }, usesInheritance: true, ngImport: i0, template: \"<ng-container *transloco=\\\"let t; read: scope\\\">\\n <div class=\\\"visually-hidden\\\">{{ t(state?.label) }}</div>\\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?.id ?? 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 <!-- group label template (default or custom) -->\\n <ng-template\\n *ngTemplateOutlet=\\\"listGroupTemplate; context: { $implicit: item }\\\"\\n ></ng-template>\\n\\n <ul [attr.aria-disabled]=\\\"item.disabled\\\" class=\\\"gds-reset\\\">\\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.id ?? 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 [nggvTooltip]=\\\"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 nggvToolTip if custom template is provided -->\\n <li\\n #optionRefs\\n *ngIf=\\\"!!optionContentTpl\\\"\\n tabindex=\\\"-1\\\"\\n [id]=\\\"id + '-option-' + (option.id ?? 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 #listGroupTemplate let-item>\\n <ng-container *ngIf=\\\"groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"groupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"!groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"basicGroupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\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\\n <ng-template #basicGroupLabelTpl let-item>\\n <div class=\\\"nggv-group-label\\\">{{ t(item.label) }}</div>\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{display:flex;position:relative;bottom:initial!important;transform:translateY(-1rem)!important}\\n\", \":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2);--gds-z-index-deep: -9999;--gds-z-index-dropdown-backdrop: 990;--gds-z-index-datepicker: 995;--gds-z-index-dropdown: 995;--gds-z-index-sticky: 1020;--gds-z-index-fixed: 1030;--gds-z-index-modal-backdrop: 1040;--gds-z-index-modal: 1050;--gds-z-index-popover: 1060;--gds-z-index-tooltip: 1070;--gds-z-index-top: 9999;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--gds-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding-left:.75rem \\\"\\\";padding-right:.75rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\"}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-sys-color-base-300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=menu] [role=menuitem]{cursor:pointer}:host ul[role=listbox]{--z-index: 1060;background-color:var(--gds-sys-color-background-primary);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:0 .125rem .375rem #00000026;color:var(--gds-sys-color-text-primary);padding:0;max-height:500px;overflow-y:auto;width:100%;overscroll-behavior:none;padding-bottom:0 \\\"\\\";border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-text-primary);border-radius:.25rem}:host ul[role=listbox] [role=option]{padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=listbox] [role=option]:active{background-color:var(--gds-sys-color-base-200)}: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(--gds-sys-color-base-800);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}: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}: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{display:none}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--gds-sys-color-base-200)}:host .gds-dropdown__options__label:active{background-color:var(--gds-sys-color-base-300)}: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}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\\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: \"directive\", type: i2.NggvTooltipDirective, selector: \"[nggvTooltip]\", inputs: [\"nggvTooltip\", \"thook\", \"placement\", \"shown\", \"offset\", \"resizeThrottle\", \"tooltipId\", \"maxWidth\"], outputs: [\"nggvShow\", \"nggvHide\"] }, { kind: \"component\", type: i3.NggvTypeaheadHighlightComponent, selector: \"nggv-typeahead-highlight\", inputs: [\"textContent\", \"textToHighlight\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadDropdownListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'nggv-typeahead-dropdown-list', standalone: false, template: \"<ng-container *transloco=\\\"let t; read: scope\\\">\\n <div class=\\\"visually-hidden\\\">{{ t(state?.label) }}</div>\\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?.id ?? 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 <!-- group label template (default or custom) -->\\n <ng-template\\n *ngTemplateOutlet=\\\"listGroupTemplate; context: { $implicit: item }\\\"\\n ></ng-template>\\n\\n <ul [attr.aria-disabled]=\\\"item.disabled\\\" class=\\\"gds-reset\\\">\\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.id ?? 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 [nggvTooltip]=\\\"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 nggvToolTip if custom template is provided -->\\n <li\\n #optionRefs\\n *ngIf=\\\"!!optionContentTpl\\\"\\n tabindex=\\\"-1\\\"\\n [id]=\\\"id + '-option-' + (option.id ?? 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 #listGroupTemplate let-item>\\n <ng-container *ngIf=\\\"groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"groupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"!groupLabelTpl\\\">\\n <ng-template\\n *ngTemplateOutlet=\\\"basicGroupLabelTpl; context: { $implicit: item }\\\"\\n ></ng-template>\\n </ng-container>\\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\\n <ng-template #basicGroupLabelTpl let-item>\\n <div class=\\\"nggv-group-label\\\">{{ t(item.label) }}</div>\\n </ng-template>\\n</ng-container>\\n\", styles: [\":host{display:flex;position:relative;bottom:initial!important;transform:translateY(-1rem)!important}\\n\", \":host{--gds-sys-color-blue: #41b0ee;--gds-sys-color-dark-blue-1: #0092e1;--gds-sys-color-dark-blue-2: #007ac7;--gds-sys-color-green: #60cd18;--gds-sys-color-dark-green-1: #45b400;--gds-sys-color-dark-green-2: #308800;--gds-sys-color-yellow: #ffc500;--gds-sys-color-dark-yellow-1: #ffb400;--gds-sys-color-dark-yellow-2: #f8a000;--gds-sys-color-text-primary: #333333;--gds-sys-color-text-secondary: #ababab;--gds-sys-color-text-white: #ffffff;--gds-sys-color-text-black: #333333;--gds-sys-color-text-inverted: #ffffff;--gds-sys-color-text-link: #0062bc;--gds-sys-color-text-error: #9f000a;--gds-sys-color-text-disabled: #adadad;--gds-sys-color-red: #f03529;--gds-sys-color-dark-red-1: #d81a1a;--gds-sys-color-dark-red-2: #bb000c;--gds-sys-color-purple: #673ab6;--gds-sys-color-dark-purple-1: #4f2C99;--gds-sys-color-dark-purple-2: #3f2587;--gds-sys-color-white: #ffffff;--gds-sys-color-black: #000000;--gds-sys-color-background-primary: #ffffff;--gds-sys-color-background-secondary: #eeeeee;--gds-sys-color-base-100: #f8f8f8;--gds-sys-color-base-200: #e9e9e9;--gds-sys-color-base-300: #dedede;--gds-sys-color-base-400: #cecece;--gds-sys-color-base-500: #adadad;--gds-sys-color-base-600: #868686;--gds-sys-color-base-700: #494949;--gds-sys-color-base-800: #333333;--gds-sys-color-base-900: #1a1a1a;--gds-sys-color-hover-10: rgba(255, 255, 255, .1);--gds-sys-color-hover-20: rgba(255, 255, 255, .2);--gds-z-index-deep: -9999;--gds-z-index-dropdown-backdrop: 990;--gds-z-index-datepicker: 995;--gds-z-index-dropdown: 995;--gds-z-index-sticky: 1020;--gds-z-index-fixed: 1030;--gds-z-index-modal-backdrop: 1040;--gds-z-index-modal: 1050;--gds-z-index-popover: 1060;--gds-z-index-tooltip: 1070;--gds-z-index-top: 9999;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--gds-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding-left:.75rem \\\"\\\";padding-right:.75rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\"}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-sys-color-base-300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=menu] [role=menuitem]{cursor:pointer}:host ul[role=listbox]{--z-index: 1060;background-color:var(--gds-sys-color-background-primary);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:0 .125rem .375rem #00000026;color:var(--gds-sys-color-text-primary);padding:0;max-height:500px;overflow-y:auto;width:100%;overscroll-behavior:none;padding-bottom:0 \\\"\\\";border:solid 1px var(--gds-sys-color-base-600);--border-color: var(--gds-sys-color-text-primary);border-radius:.25rem}:host ul[role=listbox] [role=option]{padding-left:1rem \\\"\\\";padding-right:1rem \\\"\\\";padding-bottom:.75rem \\\"\\\";padding-top:.75rem \\\"\\\";line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--gds-sys-color-base-200)}:host ul[role=listbox] [role=option]:active{background-color:var(--gds-sys-color-base-200)}: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(--gds-sys-color-base-800);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}: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}: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{display:none}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover,:host .gds-dropdown__options__label:focus-visible{background-color:var(--gds-sys-color-base-200)}:host .gds-dropdown__options__label:active{background-color:var(--gds-sys-color-base-300)}: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}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\\n\"] }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: SkipSelf\n }, {\n type: Optional\n }, {\n type: Inject,\n args: [TRANSLOCO_SCOPE]\n }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { hostComponent: [{\n type: Input\n }], resultFormatter: [{\n type: Input\n }], selectedFormatter: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vdHlwZWFoZWFkL3R5cGVhaGVhZC1kcm9wZG93bi1saXN0L3R5cGVhaGVhZC1kcm9wZG93bi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL2Ryb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sb0JBQW9CLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBR3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFBOzs7OztBQUV2RixvREFBb0Q7QUFVcEQsTUFBTSxPQUFPLGtDQUNYLFNBQVEseUJBQXlCO0lBYWpDLFlBSVksY0FBOEIsRUFDaEMsU0FBb0IsRUFDcEIsT0FBbUI7UUFFM0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFKL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQVJyQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVB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QUNQLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxDQUM1RCxDQUFBO0lBQ0gsQ0FBQzs4R0F6R1Usa0NBQWtDLGtCQWlCbkMsZUFBZTtrR0FqQmQsa0NBQWtDLHdPQzVCL0MsNHJJQThIQTs7MkZEbEdhLGtDQUFrQztrQkFUOUMsU0FBUzsrQkFDSSw4QkFBOEIsY0FNNUIsS0FBSzs7MEJBaUJoQixRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLGVBQWU7O3NCQWJ4QixLQUFLOztzQkFHTCxLQUFLOztzQkFHTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgU2tpcFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBPcHRpb25CYXNlIH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdndklucHV0Q29tcG9uZW50IH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbnB1dCdcbmltcG9ydCB7IE5nZ3ZEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi1saXN0L2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50J1xuXG4vLyBVc2UgZHJvcGRvd25MaXN0IHRlbXBsYXRlIGFuZCBjb21iaW5lIHN0eWxlc2hlZXRzXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nZ3YtdHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi4vLi4vZHJvcGRvd24tbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4uL3R5cGVhaGVhZC1kcm9wZG93bi1saXN0L3R5cGVhaGVhZC1kcm9wZG93bi1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgICAgICAgJy4uLy4uL2Ryb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5jb21wb25lbnQuc2NzcycsXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBOZ2d2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50XG4gIGV4dGVuZHMgTmdndkRyb3Bkb3duTGlzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpIGhvc3RDb21wb25lbnQhOiBOZ2d2SW5wdXRDb21wb25lbnRcblxuICAvKiogRm9ybWF0cyBlYWNoIGl0ZW0gdGhhdCBpcyBkaXNwbGF5ZWQgYXMgYW4gb3B0aW9uLiBPbmx5IGFwcGxpZXMgZm9ybWF0IGlmIHRoZSBvcHRpb24gaWYgaXQgaW1wbGVtZW50IE9wdGlvbiBpbnRlcmZhY2UuICovXG4gIEBJbnB1dCgpIHJlc3VsdEZvcm1hdHRlcj86IChvcHRpb246IE9wdGlvbkJhc2U8YW55PikgPT4gc3RyaW5nXG5cbiAgLyoqIEZvcm1hdHMgdGhlIHNlbGVjdGVkIGl0ZW0gaW4gdGhlIGlucHV0IHdoZW4gZHJvcGRvd24gaXMgb3BlbmVkLiBJZiBubyBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgd2lsbCBkaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyBsYWJlbCBwcm9wZXJ0eSAqL1xuICBASW5wdXQoKSBzZWxlY3RlZEZvcm1hdHRlcj86IChzZWxlY3RlZDogT3B0aW9uQmFzZTxhbnk+KSA9PiBzdHJpbmdcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAU2tpcFNlbGYoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpXG4gICAgcHJvdGVjdGVkIHRyYW5zbG9jb1Njb3BlOiBUcmFuc2xvY29TY29wZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNsb2NvU2NvcGUsIHJlbmRlcmVyMiwgZWxlbWVudClcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRWYWx1ZUNoYW5nZXMoKVxuICAgIHRoaXMuaGFuZGxlRm9jdXNDaGFuZ2VzKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQodHJ1ZSlcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpXG4gIH1cblxuICAvKiogQEludGVybmFsIFN1YnNjcmliZSB0byBjbGljayBvdXRzaWRlIGRyb3Bkb3duTGlzdCBhbmQgaW5wdXQgdG8gY2xvc2UgZHJvcGRvd25MaXN0ICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpIHtcbiAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkICYmXG4gICAgICAgICAgICAhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMuaG9zdENvbXBvbmVudC5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5vbkNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgfVxuXG4gIC8qKiBASW50ZXJuYWwgVXBkYXRlIHN0YXRlIG9mIHRoZSBob3N0LWlucHV0IHRvIHJlZmxlY3QgdGhlIHNlbGVjdGVkIHZhbHVlICovXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0ZWRWYWx1ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlQ2hhbmdlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhvc3RDb21wb25lbnQuaW5wdXRSZWYpIHtcbiAgICAgICAgICB0aGlzLmhvc3RDb21wb25lbnQuc3RhdGUgPSBgJHt0aGlzLmZvcm1hdFNlbGVjdGVkKHNlbGVjdGVkKX1gXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICAvKiogQEludGVybmFsIEV4cGFuZCB0aGUgZHJvcGRvd24gd2hlbiBpbnB1dCByZWNlaXZlcyBmb2N1cy4gSWYgbm8gc3RhdGUsIHNldCBlbXB0eSBzdHJpbmcgaW4gaW5wdXQgKi9cbiAgcHJpdmF0ZSBoYW5kbGVGb2N1c0NoYW5nZXMoKSB7XG4gICAgdGhpcy5ob3N0Q29tcG9uZW50Lm5nZ3ZGb2N1c1xuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZSkgdGhpcy5ob3N0Q29tcG9uZW50Lm5nZ3ZJbnB1dC5lbWl0KCcnKVxuICAgICAgICB0aGlzLnNldEV4cGFuZGVkKHRydWUpXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpXG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBGb3JtYXRzIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gZGlzcGxheSBpbiB0aGUgaW5wdXQuIEludGVycG9sYXRlIHRoZSByZXR1cm5lZCB2YWx1ZVxuICAgKiBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSByZXR1cm4gdHlwZSBvciBsYWJlbCB0eXBlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNlbGVjdGVkIHZhbHVlXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U2VsZWN0ZWQodmFsdWU6IE9wdGlvbkJhc2U8YW55Pikge1xuICAgIGlmICh2YWx1ZT8ua2V5ID09IG51bGwpIHJldHVybiAnJ1xuICAgIC8vSWYgbm8gZm9ybWF0dGVyIGV4aXN0cywgcmV0dXJuIHRoZSBsYWJlbCBvciBlbXB0eSBzdHJpbmdcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGb3JtYXR0ZXIpIHJldHVybiB2YWx1ZS5sYWJlbCA/PyAnJ1xuICAgIC8vIElmIGEgZm9ybWF0dGVyIGV4aXN0cywgdXNlIGl0XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb3JtYXR0ZXIodmFsdWUpID8/ICcnXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV4cGFuZGVkIGJvb2xlYW4gdG8gc2V0IGlmIGRyb3Bkb3duIGlzIGV4cGFuZGVkXG4gICAqL1xuICBvdmVycmlkZSBzZXRFeHBhbmRlZChleHBhbmRlZCA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRFeHBhbmRlZChleHBhbmRlZClcblxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSB0eXBlYWhlYWQgZHJvcGRvd24gYXMgd2lkZSBhcyB0aGUgaG9zdCBjb21wb25lbnRcbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgJ3dpZHRoJyxcbiAgICAgIGAke3RoaXMuaG9zdENvbXBvbmVudC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9cHhgLFxuICAgIClcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHQ7IHJlYWQ6IHNjb3BlXCI+XG4gIDxkaXYgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyB0KHN0YXRlPy5sYWJlbCkgfX08L2Rpdj5cbiAgPHVsXG4gICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnMgY2FyZCBvcHRpb25zIGdkcy1yZXNldFwiXG4gICAgW2NsYXNzLmdkcy1kcm9wZG93bl9fb3B0aW9ucy1leHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbnMnXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaWQgKyAnLWxhYmVsJ1wiXG4gICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIlxuICAgICAgc3RhdGUgPyBpZCArICctb3B0aW9uLScgKyAoc3RhdGU/LmlkID8/IHN0YXRlPy5rZXkpIDogdW5kZWZpbmVkXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uc1wiPlxuICAgICAgPCEtLSBPUFRJT04gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzR3JvdXAoaXRlbSlcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBPUFRJT04gR1JPVVAgLS0+XG4gICAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIGdyb3VwXCJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLWdyb3VwJ1wiXG4gICAgICAgICpuZ0lmPVwiaXNHcm91cChpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gZ3JvdXAgbGFiZWwgdGVtcGxhdGUgKGRlZmF1bHQgb3IgY3VzdG9tKSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0R3JvdXBUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDx1bCBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBjbGFzcz1cImdkcy1yZXNldFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjYXN0R3JvdXAoaXRlbSkub3B0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cblxuICA8IS0tIFRFTVBMQVRFIC0tPlxuICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtVGVtcGxhdGUgbGV0LW9wdGlvbj5cbiAgICA8bGlcbiAgICAgICNvcHRpb25SZWZzXG4gICAgICAqbmdJZj1cIiFvcHRpb25Db250ZW50VHBsXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cImlkICsgJy1vcHRpb24tJyArIChvcHRpb24uaWQgPz8gb3B0aW9uLmtleSlcIlxuICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIG9wdGlvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICNsaUVsZW1cbiAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIlxuICAgICAgICBvcHRpb24ua2V5ID09PSBzZWxlY3RlZFZhbHVlPy5rZXkgJiYgISFzZWxlY3RlZFZhbHVlPy5rZXlcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWZvY3VzXT1cIm9wdGlvbi5rZXkgPT09IHN0YXRlPy5rZXkgJiYgIW9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbbmdndlRvb2x0aXBdPVwiaXNPdmVyZmxvdyhsaUVsZW0pID8gdChvcHRpb24ubGFiZWwpIDogdW5kZWZpbmVkXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGVTdGF0ZShvcHRpb24sICRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGJhc2ljT3B0aW9uQ29udGVudFRwbDtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8IS0tIENoZWNraW5nIG92ZXJmbG93IG9uIGN1c3RvbSB0ZW1wbGF0ZXMgZG8gbm90IHdvcmsgc2tpcCBhZGRpbmcgbmdndlRvb2xUaXAgaWYgY3VzdG9tIHRlbXBsYXRlIGlzIHByb3ZpZGVkIC0tPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiISFvcHRpb25Db250ZW50VHBsXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cImlkICsgJy1vcHRpb24tJyArIChvcHRpb24uaWQgPz8gb3B0aW9uLmtleSlcIlxuICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIG9wdGlvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICNsaUVsZW1cbiAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIlxuICAgICAgICBvcHRpb24ua2V5ID09PSBzZWxlY3RlZFZhbHVlPy5rZXkgJiYgISFzZWxlY3RlZFZhbHVlPy5rZXlcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWZvY3VzXT1cIm9wdGlvbi5rZXkgPT09IHN0YXRlPy5rZXkgJiYgIW9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwidXBkYXRlU3RhdGUob3B0aW9uLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25Db250ZW50VHBsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEdyb3VwVGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwTGFiZWxUcGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTGFiZWxUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cExhYmVsVHBsXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY0dyb3VwTGFiZWxUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNiYXNpY09wdGlvbkNvbnRlbnRUcGwgbGV0LW9wdGlvbj5cbiAgICA8bmdndi10eXBlYWhlYWQtaGlnaGxpZ2h0XG4gICAgICAqbmdJZj1cIiEhdGV4dFRvSGlnaGxpZ2h0XCJcbiAgICAgIFt0ZXh0VG9IaWdobGlnaHRdPVwidGV4dFRvSGlnaGxpZ2h0XCJcbiAgICAgIFt0ZXh0Q29udGVudF09XCJ0KG9wdGlvbi5sYWJlbClcIlxuICAgID5cbiAgICA8L25nZ3YtdHlwZWFoZWFkLWhpZ2hsaWdodD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRleHRUb0hpZ2hsaWdodFwiPlxuICAgICAge3sgdChvcHRpb24ubGFiZWwpIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNiYXNpY0dyb3VwTGFiZWxUcGwgbGV0LWl0ZW0+XG4gICAgPGRpdiBjbGFzcz1cIm5nZ3YtZ3JvdXAtbGFiZWxcIj57eyB0KGl0ZW0ubGFiZWwpIH19PC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==","import { ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, Optional, Renderer2, Self, } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { TRANSLOCO_SCOPE } from '@jsverse/transloco';\nimport { takeUntil } from 'rxjs';\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input';\nimport { NggvDropdownComponent } from '../../dropdown.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@angular/common\";\nexport class NggvTypeaheadInputComponent extends NggvInputComponent {\n get dropdownButton() {\n return this.hostComponent.inputRef?.nativeElement;\n }\n constructor(element, renderer2, ngControl, translocoScope, cdr) {\n super(ngControl, translocoScope, cdr, element);\n this.element = element;\n this.renderer2 = renderer2;\n this.ngControl = ngControl;\n this.translocoScope = translocoScope;\n this.cdr = cdr;\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n this.expanded = false;\n /** @internal Used to determine wether the input has been moved or not */\n this.inputMoved = false;\n super.ngOnInit();\n }\n ngOnInit() {\n this.autocomplete = 'off';\n this.debounceTime = 0;\n this.hostComponent.selectOnSingleOption = false;\n this.handleExpandedChange();\n }\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n onKeyUp(event) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault();\n }\n }\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(this.dropdownButton.querySelector('button'), this.element.nativeElement);\n this.inputMoved = true;\n }\n }, 0);\n }\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state;\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved)\n this.moveInput();\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32; // Default to 2em;\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus());\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`;\n this.setInput(formattedValue, false);\n }\n else\n this.setInput('', true);\n });\n }\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n formatSelected(value) {\n if (value?.key == null)\n return '';\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter)\n return value.label ?? '';\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? '';\n }\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n setInput(input, triggerFilter) {\n this.state = input;\n if (triggerFilter) {\n this.onChange(this.state);\n this.inputChange$.next(this.state);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvTypeaheadInputComponent, isStandalone: false, selector: \"nggv-typeahead-input\", inputs: { hostComponent: \"hostComponent\", resultFormatter: \"resultFormatter\", selectedFormatter: \"selectedFormatter\" }, host: { listeners: { \"keyup\": \"onKeyUp($event)\" } }, usesInheritance: true, ngImport: i0, template: \"<ng-container>\\n <div\\n class=\\\"input-wrapper\\\"\\n [ngClass]=\\\"{ expanded: expanded, collapsed: !expanded }\\\"\\n [ngStyle]=\\\"{ 'height.px': buttonHeight }\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n >\\n <!-- INPUT FIELD -->\\n <div class=\\\"input-group\\\">\\n <input\\n #input\\n [id]=\\\"id + '-input'\\\"\\n class=\\\"gds-field\\\"\\n [attr.type]=\\\"type\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.required]=\\\"required || null\\\"\\n [attr.email]=\\\"email\\\"\\n [min]=\\\"min\\\"\\n [max]=\\\"max\\\"\\n [step]=\\\"step\\\"\\n [attr.maxlength]=\\\"maxlength\\\"\\n [attr.minlength]=\\\"minlength\\\"\\n [pattern]=\\\"pattern\\\"\\n [disabled]=\\\"disabled\\\"\\n [autocomplete]=\\\"autocomplete\\\"\\n [autofocus]=\\\"autofocus\\\"\\n [readOnly]=\\\"readonly\\\"\\n [attr.role]=\\\"role\\\"\\n [attr.placeholder]=\\\"placeholder\\\"\\n [attr.aria-label]=\\\"description\\\"\\n aria-owns=\\\"listbox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n aria-controls=\\\"listbox\\\"\\n [value]=\\\"state\\\"\\n (input)=\\\"onInput($event)\\\"\\n (focus)=\\\"onFocus($event)\\\"\\n (blur)=\\\"onBlur($event)\\\"\\n />\\n </div>\\n </div>\\n</ng-container>\\n\", styles: [\":host{position:absolute;top:1px;left:0;width:calc(100% - 2.625em)}:host .input-wrapper{border:none;box-shadow:none}:host .input-wrapper.expanded{display:flex}:host .input-wrapper.expanded .input-group input.gds-field{height:calc(100% - 2px);width:100%;min-height:unset;margin-left:1px;padding-left:1rem;padding-right:1rem;border:none;box-shadow:none}:host .input-wrapper.collapsed{display:none}:host .input-wrapper .input-group{width:100%}\\n\"], dependencies: [{ kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadInputComponent, decorators: [{\n type: Component,\n args: [{ selector: 'nggv-typeahead-input', standalone: false, template: \"<ng-container>\\n <div\\n class=\\\"input-wrapper\\\"\\n [ngClass]=\\\"{ expanded: expanded, collapsed: !expanded }\\\"\\n [ngStyle]=\\\"{ 'height.px': buttonHeight }\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n >\\n <!-- INPUT FIELD -->\\n <div class=\\\"input-group\\\">\\n <input\\n #input\\n [id]=\\\"id + '-input'\\\"\\n class=\\\"gds-field\\\"\\n [attr.type]=\\\"type\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.required]=\\\"required || null\\\"\\n [attr.email]=\\\"email\\\"\\n [min]=\\\"min\\\"\\n [max]=\\\"max\\\"\\n [step]=\\\"step\\\"\\n [attr.maxlength]=\\\"maxlength\\\"\\n [attr.minlength]=\\\"minlength\\\"\\n [pattern]=\\\"pattern\\\"\\n [disabled]=\\\"disabled\\\"\\n [autocomplete]=\\\"autocomplete\\\"\\n [autofocus]=\\\"autofocus\\\"\\n [readOnly]=\\\"readonly\\\"\\n [attr.role]=\\\"role\\\"\\n [attr.placeholder]=\\\"placeholder\\\"\\n [attr.aria-label]=\\\"description\\\"\\n aria-owns=\\\"listbox\\\"\\n aria-haspopup=\\\"listbox\\\"\\n aria-controls=\\\"listbox\\\"\\n [value]=\\\"state\\\"\\n (input)=\\\"onInput($event)\\\"\\n (focus)=\\\"onFocus($event)\\\"\\n (blur)=\\\"onBlur($event)\\\"\\n />\\n </div>\\n </div>\\n</ng-container>\\n\", styles: [\":host{position:absolute;top:1px;left:0;width:calc(100% - 2.625em)}:host .input-wrapper{border:none;box-shadow:none}:host .input-wrapper.expanded{display:flex}:host .input-wrapper.expanded .input-group input.gds-field{height:calc(100% - 2px);width:100%;min-height:unset;margin-left:1px;padding-left:1rem;padding-right:1rem;border:none;box-shadow:none}:host .input-wrapper.collapsed{display:none}:host .input-wrapper .input-group{width:100%}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgControl, decorators: [{\n type: Self\n }, {\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TRANSLOCO_SCOPE]\n }] }, { type: i0.ChangeDetectorRef }], propDecorators: { hostComponent: [{\n type: Input\n }], resultFormatter: [{\n type: Input\n }], selectedFormatter: [{\n type: Input\n }], onKeyUp: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaW5wdXQvdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaW5wdXQvdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBR2hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBOzs7O0FBUWhFLE1BQU0sT0FBTywyQkFDWCxTQUFRLGtCQUFrQjtJQVkxQixJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUE7SUFDbkQsQ0FBQztJQVdELFlBQ1MsT0FBbUIsRUFDbEIsU0FBb0IsRUFDRCxTQUFvQixFQUdyQyxjQUE4QixFQUM5QixHQUFzQjtRQUVoQyxLQUFLLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxH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QWlCO1lBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQTtRQUNyRCxnQ0FBZ0M7UUFDaEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxRQUFRLENBQUMsS0FBYSxFQUFFLGFBQXNCO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BDLENBQUM7SUFDSCxDQUFDOzhHQXBJVSwyQkFBMkIsMEhBK0I1QixlQUFlO2tHQS9CZCwyQkFBMkIscVJDM0J4Qyw4c0NBeUNBOzsyRkRkYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0ksc0JBQXNCLGNBR3BCLEtBQUs7OzBCQStCaEIsSUFBSTs7MEJBQUksUUFBUTs7MEJBQ2hCLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsZUFBZTs7c0JBMUJ4QixLQUFLOztzQkFHTCxLQUFLOztzQkFHTCxLQUFLOztzQkF5Q0wsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgT3B0aW9uQmFzZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nZ3ZJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvaW5wdXQnXG5pbXBvcnQgeyBOZ2d2RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmdndi10eXBlYWhlYWQtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90eXBlYWhlYWQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3R5cGVhaGVhZC1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudFxuICBleHRlbmRzIE5nZ3ZJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGhvc3QgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaG9zdENvbXBvbmVudCE6IE5nZ3ZEcm9wZG93bkNvbXBvbmVudFxuXG4gIC8qKiBGb3JtYXRzIGVhY2ggaXRlbSB0aGF0IGlzIGRpc3BsYXllZCBhcyBhbiBvcHRpb24uIE9ubHkgYXBwbGllcyBmb3JtYXQgaWYgdGhlIG9wdGlvbiBpZiBpdCBpbXBsZW1lbnQgT3B0aW9uIGludGVyZmFjZS4gKi9cbiAgQElucHV0KCkgcmVzdWx0Rm9ybWF0dGVyPzogKG9wdGlvbjogT3B0aW9uQmFzZTxhbnk+KSA9PiBzdHJpbmdcblxuICAvKiogRm9ybWF0cyB0aGUgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgaW5wdXQgd2hlbiBkcm9wZG93biBpcyBvcGVuZWQuIElmIG5vIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGRpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvYmplY3RzIGxhYmVsIHByb3BlcnR5ICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkRm9ybWF0dGVyPzogKHNlbGVjdGVkOiBPcHRpb25CYXNlPGFueT4pID0+IHN0cmluZ1xuXG4gIGdldCBkcm9wZG93bkJ1dHRvbigpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdENvbXBvbmVudC5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudFxuICB9XG5cbiAgLyoqIEJvb2xlYW4gdG8gaW5kaWNhdGUgd2V0aGVyIHRoZSBkcm9wZG93biBpcyBleHBhbmRlZCBvciBub3QsIHRvIGFwcGx5IGFwcHJvcHJpYXRlIHN0eWxpbmcgKi9cbiAgZXhwYW5kZWQgPSBmYWxzZVxuXG4gIC8qKiBVc2VkIHRvIGRldGVybWluZSB0aGUgaGVpZ2h0IG9mIHRoZSBpbnB1dGluIGh0bWwgKi9cbiAgYnV0dG9uSGVpZ2h0PzogbnVtYmVyXG5cbiAgLyoqIEBpbnRlcm5hbCBVc2VkIHRvIGRldGVybWluZSB3ZXRoZXIgdGhlIGlucHV0IGhhcyBiZWVuIG1vdmVkIG9yIG5vdCAqL1xuICBpbnB1dE1vdmVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpXG4gICAgcHJvdGVjdGVkIHRyYW5zbG9jb1Njb3BlOiBUcmFuc2xvY29TY29wZSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgc3VwZXIobmdDb250cm9sLCB0cmFuc2xvY29TY29wZSwgY2RyLCBlbGVtZW50KVxuICAgIHN1cGVyLm5nT25Jbml0KClcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gJ29mZidcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IDBcbiAgICB0aGlzLmhvc3RDb21wb25lbnQuc2VsZWN0T25TaW5nbGVPcHRpb24gPSBmYWxzZVxuXG4gICAgdGhpcy5oYW5kbGVFeHBhbmRlZENoYW5nZSgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEFsbG93IHNwYWNlIHRvIGJlIGlucHV0dGVkIGFzIHRleHRcbiAgICogQHBhcmFtIGV2ZW50IGZpcmVkIGNvbnRhaW5pbmcgd2hpY2gga2V5IHdhcyByZWxlYXNlZC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jb2RlID09PSAnU3BhY2UnICYmIHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcnN0IHRpbWUgdGhlIGRyb3Bkb3duIGlzIGV4cGFuZGVkLCBtb3ZlIHRoZSBpbnB1dCBzcCBpdCBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGRyb3Bkb3duIGJ1dHRvblxuICAgKiB0byBiZXR0ZXIgcmVmbGVjdCBzZW1hbnRpY3MgYW5kIHN0eWxpbmcuXG4gICAqL1xuICBwcml2YXRlIG1vdmVJbnB1dCgpIHtcbiAgICAvLyBXb3JrYXJvdW5kIHRvIGV4ZWN1dGUgY29kZSBpbiBzZXRUaW1lb3V0IGR1ZSB0byBob29rcyBtYW5hZ2VtZW50IGV0Yy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIE9ubHkgbW92ZSBpZiBwYXJlbnQgZHJvcGRvd24gaXMgZm91bmRcbiAgICAgIGlmICh0aGlzLmRyb3Bkb3duQnV0dG9uKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLmFwcGVuZENoaWxkKFxuICAgICAgICAgIHRoaXMuZHJvcGRvd25CdXR0b24ucXVlcnlTZWxlY3RvcignYnV0dG9uJyksXG4gICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5pbnB1dE1vdmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDApXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdoZW4gZHJvcGRvd24gaXMgZXhwYW5kZWQsIGZvY3VzIG9uIHRoZSBpbnB1dC4gSWYgYSB2YWx1ZSBpcyBzZWxlY3RlZCwgc2V0IGl0IGluIHRoZSBpbnB1dC5cbiAgICogV2hlbiB0aGUgZHJvcGRvd24gaXMgY29sbGFwc2VkLCBlbXB0eSB0aGUgaW5wdXQgZnJvbSB0ZXh0LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVFeHBhbmRlZENoYW5nZSgpIHtcbiAgICB0aGlzLmhvc3RDb21wb25lbnQuZXhwYW5kZWRDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gc3RhdGVcblxuICAgICAgICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSBvbkluaXQgY2F1c2VkIGlzc3VlcyB3aGVuIERPTSBoYXMgbm90IGZ1bGx5IGJlZW4gaW5pdGlhbGl6ZWQgYmVjYXVzZSBvZlxuICAgICAgICAvLyBkaWZmZXJlbnQgQ1NTIHVzZWQgdG8gaGlkZSAoYnV0IG5vdCByZW1vdmUpIGZyb20gRE9NXG4gICAgICAgIGlmICghdGhpcy5pbnB1dE1vdmVkKSB0aGlzLm1vdmVJbnB1dCgpXG5cbiAgICAgICAgLy8gR2V0IHRoZSBoZWlnaHQgb2YgdGhlIHBhcmVudCBidXR0b24gc28gdGhlIGlucHV0IGNhbiBiZSBleHBsaWNpdGx5IHNldCB0byB0aGUgc2FtZSBoZWlnaHQgc2luY2UgaXQncyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWRcbiAgICAgICAgdGhpcy5idXR0b25IZWlnaHQgPVxuICAgICAgICAgIHRoaXMuZHJvcGRvd25CdXR0b24/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCAzMiAvLyBEZWZhdWx0IHRvIDJlbTtcblxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgIC8vIFdlaXJkIHdvcmthcm91bmQgZm9yIHNldHRpbmcgZm9jdXMuIERpZG4ndCBzZXQgZm9jdXMsIGJ1dCB3cmFwcGluZyBpbiBzZXRUaW1lb3V0IHNvbHZlZCBpdC5cbiAgICAgICAgICAvLyBTZWUgc3VnZ2VzdGlvbiBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9zdGVuY2lsL2lzc3Vlcy8zNzcyI2lzc3VlY29tbWVudC0xMjkyNTk5NjA5XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldEZvY3VzKCkpXG4gICAgICAgICAgLy8gRm9ybWF0IGFuZCBpbnRlcnBvbGF0ZSByZXN1bHQgc2luY2UgcmV0dXJuIHR5cGUgY2FuIGJlIG90aGVyIHRoYW4gc3RyaW5nIGZyb20gdGhlIGZvcm1hdHRlclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gYCR7dGhpcy5mb3JtYXRTZWxlY3RlZCh0aGlzLmhvc3RDb21wb25lbnQuc3RhdGUpfWBcbiAgICAgICAgICB0aGlzLnNldElucHV0KGZvcm1hdHRlZFZhbHVlLCBmYWxzZSlcbiAgICAgICAgfSBlbHNlIHRoaXMuc2V0SW5wdXQoJycsIHRydWUpXG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBGb3JtYXRzIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gZGlzcGxheSBpbiB0aGUgaW5wdXQuIEludGVycG9sYXRlIHRoZSByZXR1cm5lZCB2YWx1ZVxuICAgKiBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZSByZXR1cm4gdHlwZSBvciBsYWJlbCB0eXBlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHNlbGVjdGVkIHZhbHVlXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U2VsZWN0ZWQodmFsdWU6IE9wdGlvbkJhc2U8YW55Pikge1xuICAgIGlmICh2YWx1ZT8ua2V5ID09IG51bGwpIHJldHVybiAnJ1xuICAgIC8vIElmIG5vIGZvcm1hdHRlciBleGlzdHMsIHJldHVybiB0aGUgbGFiZWwgb3IgZW1wdHkgc3RyaW5nXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRm9ybWF0dGVyKSByZXR1cm4gdmFsdWUubGFiZWwgPz8gJydcbiAgICAvLyBJZiBhIGZvcm1hdHRlciBleGlzdHMsIHVzZSBpdFxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9ybWF0dGVyKHZhbHVlKSA/PyAnJ1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGlucHV0IHByb2dyYW1tYXRpY2FsbHkgaW5zdGVhZCBvZiBuYXRpdmUgSFRNTCBpbnB1dCBldmVudC5cbiAgICogQHBhcmFtIGlucHV0XG4gICAqL1xuICBwcml2YXRlIHNldElucHV0KGlucHV0OiBzdHJpbmcsIHRyaWdnZXJGaWx0ZXI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0YXRlID0gaW5wdXRcbiAgICBpZiAodHJpZ2dlckZpbHRlcikge1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnN0YXRlKVxuICAgICAgdGhpcy5pbnB1dENoYW5nZSQubmV4dCh0aGlzLnN0YXRlKVxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiXG4gICAgW25nQ2xhc3NdPVwieyBleHBhbmRlZDogZXhwYW5kZWQsIGNvbGxhcHNlZDogIWV4cGFuZGVkIH1cIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2hlaWdodC5weCc6IGJ1dHRvbkhlaWdodCB9XCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDwhLS0gSU5QVVQgRklFTEQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIFtpZF09XCJpZCArICctaW5wdXQnXCJcbiAgICAgICAgY2xhc3M9XCJnZHMtZmllbGRcIlxuICAgICAgICBbYXR0ci50eXBlXT1cInR5cGVcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICBbYXR0ci5yZXF1aXJlZF09XCJyZXF1aXJlZCB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuZW1haWxdPVwiZW1haWxcIlxuICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxuICAgICAgICBbYXR0ci5taW5sZW5ndGhdPVwibWlubGVuZ3RoXCJcbiAgICAgICAgW3BhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICBhcmlhLW93bnM9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgICBhcmlhLWNvbnRyb2xzPVwibGlzdGJveFwiXG4gICAgICAgIFt2YWx1ZV09XCJzdGF0ZVwiXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip';\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component';\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component';\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component';\nimport * as i0 from \"@angular/core\";\nexport class NggvTypeaheadModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadModule, declarations: [NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent], imports: [CommonModule, NggvTooltipModule], exports: [NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadModule, imports: [CommonModule, NggvTooltipModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDZEQUE2RCxDQUFBO0FBQ2hILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFBO0FBQ3JHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFBOztBQWV6RixNQUFNLE9BQU8sbUJBQW1COzhHQUFuQixtQkFBbUI7K0dBQW5CLG1CQUFtQixpQkFYNUIsK0JBQStCO1lBQy9CLDJCQUEyQjtZQUMzQixrQ0FBa0MsYUFFMUIsWUFBWSxFQUFFLGlCQUFpQixhQUV2QywrQkFBK0I7WUFDL0IsMkJBQTJCO1lBQzNCLGtDQUFrQzsrR0FHekIsbUJBQW1CLFlBUHBCLFlBQVksRUFBRSxpQkFBaUI7OzJGQU85QixtQkFBbUI7a0JBYi9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLCtCQUErQjt3QkFDL0IsMkJBQTJCO3dCQUMzQixrQ0FBa0M7cUJBQ25DO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQztvQkFDMUMsT0FBTyxFQUFFO3dCQUNQLCtCQUErQjt3QkFDL0IsMkJBQTJCO3dCQUMzQixrQ0FBa0M7cUJBQ25DO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBOZ2d2VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdG9vbHRpcCdcbmltcG9ydCB7IE5nZ3ZUeXBlYWhlYWREcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuL3R5cGVhaGVhZC1kcm9wZG93bi1saXN0L3R5cGVhaGVhZC1kcm9wZG93bi1saXN0LmNvbXBvbmVudCdcbmltcG9ydCB7IE5nZ3ZUeXBlYWhlYWRIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuL3R5cGVhaGVhZC1oaWdobGlnaHQvdHlwZWFoZWFkLWhpZ2hsaWdodC5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ2d2VHlwZWFoZWFkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3R5cGVhaGVhZC1pbnB1dC90eXBlYWhlYWQtaW5wdXQuY29tcG9uZW50J1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBOZ2d2VHlwZWFoZWFkSGlnaGxpZ2h0Q29tcG9uZW50LFxuICAgIE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCxcbiAgICBOZ2d2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ2d2VG9vbHRpcE1vZHVsZV0sXG4gIGV4cG9ydHM6IFtcbiAgICBOZ2d2VHlwZWFoZWFkSGlnaGxpZ2h0Q29tcG9uZW50LFxuICAgIE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCxcbiAgICBOZ2d2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2d2VHlwZWFoZWFkTW9kdWxlIHt9XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared';\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n';\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip';\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component';\nimport { NggvDropdownComponent } from './dropdown.component';\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module';\nimport * as i0 from \"@angular/core\";\nexport class NggvDropdownModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownModule, declarations: [NggvDropdownComponent, NggvDropdownListComponent], imports: [CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule], exports: [NggvDropdownComponent, NggvDropdownListComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownModule, imports: [CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvDropdownModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWhFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7QUFjbEUsTUFBTSxPQUFPLGtCQUFrQjs4R0FBbEIsa0JBQWtCOytHQUFsQixrQkFBa0IsaUJBWGQscUJBQXFCLEVBQUUseUJBQXlCLGFBRTdELFlBQVk7WUFDWixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ25CLGlCQUFpQjtZQUNqQixjQUFjLGFBRU4scUJBQXFCLEVBQUUseUJBQXlCOytHQUcvQyxrQkFBa0IsWUFUM0IsWUFBWTtZQUNaLG9CQUFvQjtZQUNwQixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLGNBQWM7OzJGQUtMLGtCQUFrQjtrQkFaOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDaEUsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDM0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBOZ2dDb3JlV3JhcHBlck1vZHVsZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy9saWIvc2hhcmVkJ1xuaW1wb3J0IHsgTmdndkkxOG5Nb2R1bGUgfSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2kxOG4nXG5pbXBvcnQgeyBOZ2d2VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdG9vbHRpcCdcbmltcG9ydCB7IE5nZ3ZEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ2d2RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCdcbmltcG9ydCB7IE5nZ3ZUeXBlYWhlYWRNb2R1bGUgfSBmcm9tICcuL3R5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlJ1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtOZ2d2RHJvcGRvd25Db21wb25lbnQsIE5nZ3ZEcm9wZG93bkxpc3RDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nZ0NvcmVXcmFwcGVyTW9kdWxlLFxuICAgIE5nZ3ZUeXBlYWhlYWRNb2R1bGUsXG4gICAgTmdndlRvb2x0aXBNb2R1bGUsXG4gICAgTmdndkkxOG5Nb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtOZ2d2RHJvcGRvd25Db21wb25lbnQsIE5nZ3ZEcm9wZG93bkxpc3RDb21wb25lbnRdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5nZ3ZEcm9wZG93bk1vZHVsZSB7fVxuIl19","import { Directive, ElementRef, EventEmitter, Host, HostListener, Input, Optional, Output, ViewContainerRef, } from '@angular/core';\nimport { distinctUntilChanged, from, Subject, takeUntil, tap, withLatestFrom, } from 'rxjs';\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input';\nimport { NggvDropdownComponent } from '../dropdown.component';\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component';\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../dropdown.component\";\nimport * as i2 from \"@sebgroup/green-angular/src/v-angular/input\";\nexport class NggvTypeaheadDirective {\n /** Function that filter the inputvalue */\n set nggvTypeahead(value) {\n this.typeaheadFunction = value;\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe();\n this.inputSubscription$ = undefined;\n this.handleInputChanges();\n }\n }\n /** Forward text inputs to apply the filter function*/\n onNggvInput(event) {\n this.inputValue$.next(event);\n }\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown;\n }\n /** Predefined options */\n get defaultNullishOption() {\n return { key: null, label: this.unselectLabel || '\\u00A0' };\n }\n get emptyOption() {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n };\n }\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName;\n }\n constructor(viewContainerRef, element, hostDropdown, hostInput) {\n this.viewContainerRef = viewContainerRef;\n this.element = element;\n this.hostDropdown = hostDropdown;\n this.hostInput = hostInput;\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n this.allowUnselect = true;\n /** Emits the entered string the user has written in the input */\n this.filterPhraseChange = new EventEmitter();\n this.inputValue$ = new Subject();\n this.onDestroy$ = new Subject();\n }\n ngOnInit() {\n this.handleInputChanges();\n if (this.hostIsDropdown)\n this.createInput();\n else\n this.createDropdownList();\n }\n ngOnDestroy() {\n this.onDestroy$.next(true);\n this.onDestroy$.complete();\n }\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(takeUntil(this.onDestroy$), distinctUntilChanged(), tap((inputValue) => this.filterPhraseChange.emit(inputValue)), this.typeaheadFunction ? this.typeaheadFunction : () => from([]), withLatestFrom(this.inputValue$))\n .subscribe(([filteredValues, input]) => this.setOptions(filteredValues, input));\n // Trigger the pipe when this function have been called\n this.inputValue$.next('');\n }\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(NggvTypeaheadInputComponent);\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown);\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter);\n this.inputComponent.setInput('resultFormatter', this.resultFormatter);\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue));\n }\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(NggvTypeaheadDropdownListComponent);\n this.dropdownListComponent.setInput('hostComponent', this.hostInput);\n }\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n setOptions(filteredValues, input) {\n if (!filteredValues)\n return;\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish = this.allowUnselect &&\n !input &&\n !(Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null);\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption];\n }\n else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues);\n }\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false;\n this.hostDropdown.options = this.formatOptions(filteredValues);\n this.hostDropdown.textToHighlight = `${input || ''}`;\n this.hostDropdown.onlyHandleDistinctChanges = false;\n this.hostDropdown.selectWithSpace = false;\n this.hostDropdown.detectChanges();\n return;\n }\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput('options', this.formatOptions(filteredValues));\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`);\n }\n }\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n formatOptions(options) {\n if (!options)\n return [];\n if (!this.resultFormatter)\n return options;\n return options.map((value) => value?.label ? this.resultFormatter?.(value) : value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1.NggvDropdownComponent, host: true, optional: true }, { token: i2.NggvInputComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.9\", type: NggvTypeaheadDirective, isStandalone: true, selector: \"nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]\", inputs: { nggvTypeahead: \"nggvTypeahead\", resultFormatter: \"resultFormatter\", selectedFormatter: \"selectedFormatter\", allowUnselect: \"allowUnselect\", unselectLabel: \"unselectLabel\", emptyOptionLabel: \"emptyOptionLabel\" }, outputs: { filterPhraseChange: \"filterPhraseChange\" }, host: { listeners: { \"nggvInput\": \"onNggvInput($event)\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: NggvTypeaheadDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n }]\n }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i1.NggvDropdownComponent, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }, { type: i2.NggvInputComponent, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }], propDecorators: { nggvTypeahead: [{\n type: Input\n }], resultFormatter: [{\n type: Input\n }], selectedFormatter: [{\n type: Input\n }], allowUnselect: [{\n type: Input\n }], unselectLabel: [{\n type: Input\n }], emptyOptionLabel: [{\n type: Input\n }], filterPhraseChange: [{\n type: Output\n }], onNggvInput: [{\n type: HostListener,\n args: ['nggvInput', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLElBQUksRUFFSixPQUFPLEVBRVAsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUE7QUFHYixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQTtBQUMzSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTs7OztBQU16RixNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLDBDQUEwQztJQUMxQyxJQUFhLGFBQWEsQ0FBQyxLQUFnRDtRQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO1FBRTlCLHVFQUF1RTtRQUN2RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQTtZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFBO1lBQ25DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBb0JELHNEQUFzRDtJQUNmLFdBQVcs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QUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLE9BQU8sQ0FBQTtRQUN6QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUMzQixLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDckQsQ0FBQTtJQUNILENBQUM7OEdBdE1VLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5REFBeUQ7b0JBQ25FLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBNkVJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxJQUFJOztzQkFyRWxCLEtBQUs7O3NCQVlMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLE1BQU07O3NCQUdOLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZnJvbSxcbiAgT3BlcmF0b3JGdW5jdGlvbixcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnXG5cbmltcG9ydCB7IE9wdGlvbiwgT3B0aW9uQmFzZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nZ3ZJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvaW5wdXQnXG5pbXBvcnQgeyBOZ2d2RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ2d2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vdHlwZWFoZWFkL3R5cGVhaGVhZC1kcm9wZG93bi1saXN0L3R5cGVhaGVhZC1kcm9wZG93bi1saXN0LmNvbXBvbmVudCdcbmltcG9ydCB7IE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vdHlwZWFoZWFkLWlucHV0L3R5cGVhaGVhZC1pbnB1dC5jb21wb25lbnQnXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ25nZ3YtaW5wdXRbbmdndlR5cGVhaGVhZF0sIG5nZ3YtZHJvcGRvd25bbmdndlR5cGVhaGVhZF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2d2VHlwZWFoZWFkRGlyZWN0aXZlPFxuICAgIEsgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFYgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFQgZXh0ZW5kcyBPcHRpb248SywgVj4gPSBPcHRpb248SywgVj4sXG4gID5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKiogRnVuY3Rpb24gdGhhdCBmaWx0ZXIgdGhlIGlucHV0dmFsdWUgKi9cbiAgQElucHV0KCkgc2V0IG5nZ3ZUeXBlYWhlYWQodmFsdWU6IE9wZXJhdG9yRnVuY3Rpb248c3RyaW5nLCBUW10+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50eXBlYWhlYWRGdW5jdGlvbiA9IHZhbHVlXG5cbiAgICAvLyBJZiBpbnB1dHN1YnNjcmlwdGlvbiBhbHJlYWR5IGV4aXN0cywgdW5zdWJzY3JpYmUgYW5kIHN1YnNjcmliZSBhZ2FpblxuICAgIGlmICh0aGlzLmlucHV0U3Vic2NyaXB0aW9uJCkge1xuICAgICAgdGhpcy5pbnB1dFN1YnNjcmlwdGlvbiQ/LnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMuaW5wdXRTdWJzY3JpcHRpb24kID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlcygpXG4gICAgfVxuICB9XG5cbiAgLyoqIEZvcm1hdHMgZWFjaCBpdGVtIHRoYXQgaXMgZGlzcGxheWVkIGFzIGFuIG9wdGlvbi4gT25seSBhcHBsaWVzIGZvcm1hdCBpZiB0aGUgb3B0aW9uIGlmIGl0IGltcGxlbWVudCBPcHRpb24gaW50ZXJmYWNlLiAqL1xuICBASW5wdXQoKSByZXN1bHRGb3JtYXR0ZXI/OiAob3B0aW9uOiBPcHRpb25CYXNlPGFueT4pID0+IHN0cmluZ1xuXG4gIC8qKiBGb3JtYXRzIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBpbnB1dCB3aGVuIGRyb3Bkb3duIGlzIG9wZW5lZC4gSWYgbm8gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IHdpbGwgZGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIG9iamVjdHMgbGFiZWwgcHJvcGVydHkgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRGb3JtYXR0ZXI/OiAoc2VsZWN0ZWQ6IE9wdGlvbkJhc2U8YW55PikgPT4gc3RyaW5nXG5cbiAgLyoqIEFsbG93IG9wdGlvbiB0byBiZSB1bnNlbGVjdGVkIGluIHRoZSBkcm9wZG93biBldmVuIGlmIGl0IGlzIHJlcXVpcmVkLiBEZWZhdWx0cyB0byB0cnVlICovXG4gIEBJbnB1dCgpIGFsbG93VW5zZWxlY3QgPSB0cnVlXG5cbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlIHVuc2VsZWN0IG9wdGlvbiAqL1xuICBASW5wdXQoKSB1bnNlbGVjdExhYmVsPzogc3RyaW5nXG5cbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlIGVtcHR5IG9wdGlvbiAqL1xuICBASW5wdXQoKSBlbXB0eU9wdGlvbkxhYmVsPzogc3RyaW5nXG5cbiAgLyoqIEVtaXRzIHRoZSBlbnRlcmVkIHN0cmluZyB0aGUgdXNlciBoYXMgd3JpdHRlbiBpbiB0aGUgaW5wdXQgKi9cbiAgQE91dHB1dCgpIGZpbHRlclBocmFzZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpXG5cbiAgLyoqIEZvcndhcmQgdGV4dCBpbnB1dHMgdG8gYXBwbHkgdGhlIGZpbHRlciBmdW5jdGlvbiovXG4gIEBIb3N0TGlzdGVuZXIoJ25nZ3ZJbnB1dCcsIFsnJGV2ZW50J10pIG9uTmdndklucHV0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUkLm5leHQoZXZlbnQpXG4gIH1cblxuICAvKiogSGVscGVyIHRvIHRoZSBkZXRlcm1pbmUgaWYgdGhlIGhvc3QgaXMgbmdndi1kcm9kcG93biBvciBuZ2d2LWlucHV0Ki9cbiAgZ2V0IGhvc3RJc0Ryb3Bkb3duKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG9zdERyb3Bkb3duXG4gIH1cblxuICAvKiogUHJlZGVmaW5lZCBvcHRpb25zICovXG4gIGdldCBkZWZhdWx0TnVsbGlzaE9wdGlvbigpOiBPcHRpb25CYXNlPGFueT4ge1xuICAgIHJldHVybiB7IGtleTogbnVsbCwgbGFiZWw6IHRoaXMudW5zZWxlY3RMYWJlbCB8fCAnXFx1MDBBMCcgfVxuICB9XG5cbiAgZ2V0IGVtcHR5T3B0aW9uKCk6IE9wdGlvbkJhc2U8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogbnVsbCxcbiAgICAgIGxhYmVsOiB0aGlzLmVtcHR5T3B0aW9uTGFiZWwgfHwgJ2xhYmVsLm5vbWF0Y2hpbmdvcHRpb25zJyxcbiAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgIH1cbiAgfVxuXG4gIC8qKiBOYW1lIG9mIHRoZSBjb21wb25lbnQuIG5nZ3YtZHJvcGRvd24gaWYgTmdndkRyb3Bkb3duQ29tcG9uZW50IG9yIG5nZ3YtaW5wdXQgaWYgTmdndklucHV0Q29tcG9uZW50ICovXG4gIGdldCBsb2NhbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmxvY2FsTmFtZVxuICB9XG5cbiAgZHJvcGRvd25MaXN0Q29tcG9uZW50ITogQ29tcG9uZW50UmVmPE5nZ3ZUeXBlYWhlYWREcm9wZG93bkxpc3RDb21wb25lbnQ+XG4gIGlucHV0Q29tcG9uZW50ITogQ29tcG9uZW50UmVmPE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudD5cblxuICBwcml2YXRlIHR5cGVhaGVhZEZ1bmN0aW9uPzogT3BlcmF0b3JGdW5jdGlvbjxzdHJpbmcsIFRbXT5cbiAgcHJpdmF0ZSBpbnB1dFZhbHVlJCA9IG5ldyBTdWJqZWN0PGFueT4oKVxuICBwcml2YXRlIGlucHV0U3Vic2NyaXB0aW9uJD86IFN1YnNjcmlwdGlvblxuICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgaG9zdERyb3Bkb3duOiBOZ2d2RHJvcGRvd25Db21wb25lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIGhvc3RJbnB1dDogTmdndklucHV0Q29tcG9uZW50LFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZXMoKVxuXG4gICAgaWYgKHRoaXMuaG9zdElzRHJvcGRvd24pIHRoaXMuY3JlYXRlSW5wdXQoKVxuICAgIGVsc2UgdGhpcy5jcmVhdGVEcm9wZG93bkxpc3QoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQodHJ1ZSlcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBDb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdHlwZWFoZWFkLiBFbWl0cyBpbnB1dCwgdGhlbiBmaWx0ZXJzIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uXG4gICAqIElmIGRpcmVjdGl2ZSBpcyBhcHBsaWVkIG9uIG5nZ3YtaW5wdXQsIG1hbnVhbGx5IHNob3cgb3IgaGlkZSBvcHRpb25zIGluIHRoZSBsaXN0LlxuICAgKiBJZiBkaXJlY3RpdmUgaXMgYXBwbGllZCBvbiBuZ2d2LWRyb3Bkb3duLCBsZXQgdGhlIGRyb3Bkb3duIGl0c2VsZiBjaG9vc2Ugd2hlbiB0byBvcGVuIG9yIGNsb3NlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUlucHV0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmlucHV0U3Vic2NyaXB0aW9uJCA9IHRoaXMuaW5wdXRWYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKChpbnB1dFZhbHVlKSA9PiB0aGlzLmZpbHRlclBocmFzZUNoYW5nZS5lbWl0KGlucHV0VmFsdWUpKSxcbiAgICAgICAgdGhpcy50eXBlYWhlYWRGdW5jdGlvbiA/IHRoaXMudHlwZWFoZWFkRnVuY3Rpb24gOiAoKSA9PiBmcm9tKFtdKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5pbnB1dFZhbHVlJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbZmlsdGVyZWRWYWx1ZXMsIGlucHV0XSkgPT5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKGZpbHRlcmVkVmFsdWVzLCBpbnB1dCksXG4gICAgICApXG5cbiAgICAvLyBUcmlnZ2VyIHRoZSBwaXBlIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXZlIGJlZW4gY2FsbGVkXG4gICAgdGhpcy5pbnB1dFZhbHVlJC5uZXh0KCcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBDcmVhdGVzIGEgbmdndi1pbnB1dCBpZiB0aGUgaG9zdCBpdHNlbGYgaXMgbm90IGEgdGV4dC1pbnB1dFxuICAgKiBTZXQgc3R5bGVzIHRvIG5vdCBkaXNwbGF5IHRoZSBpbnB1dCB3aGVuIGNsb3NlZFxuICAgKiBUcmlnZ2VyIGZpbHRlcmluZyB3aGVuIGNoYW5nZXMgb2NjdXIgaW4gdGhlIGZpZWxkXG4gICAqICovXG4gIHByaXZhdGUgY3JlYXRlSW5wdXQoKSB7XG4gICAgLy8gQ3JlYXRlIHRoZSBpbnB1dCBjb21wb25lbnRcbiAgICB0aGlzLmlucHV0Q29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIE5nZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCxcbiAgICApXG4gICAgLy8gRm9yd2FyZCBuZWNlc3NhcnkgaW5mbyB0byBjb21wb25lbnRcbiAgICB0aGlzLmlucHV0Q29tcG9uZW50LnNldElucHV0KCdob3N0Q29tcG9uZW50JywgdGhpcy5ob3N0RHJvcGRvd24pXG4gICAgdGhpcy5pbnB1dENvbXBvbmVudC5zZXRJbnB1dCgnc2VsZWN0ZWRGb3JtYXR0ZXInLCB0aGlzLnNlbGVjdGVkRm9ybWF0dGVyKVxuICAgIHRoaXMuaW5wdXRDb21wb25lbnQuc2V0SW5wdXQoJ3Jlc3VsdEZvcm1hdHRlcicsIHRoaXMucmVzdWx0Rm9ybWF0dGVyKVxuICAgIC8vIExpc3RlbiB0byB2YWx1ZSBjaGFuZ2VzXG4gICAgdGhpcy5pbnB1dENvbXBvbmVudC5pbnN0YW5jZS5uZ2d2SW5wdXRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoaW5wdXRWYWx1ZSkgPT4gdGhpcy5pbnB1dFZhbHVlJC5uZXh0KGlucHV0VmFsdWUpKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBDcmVhdGVzIGEgbmdndi1kcm9wZG93bi1saXN0IGlmIHRoZSBob3N0IGl0c2VsZiBpcyBhIG5nZ3YtaW5wdXQgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bkxpc3QoKSB7XG4gICAgdGhpcy5kcm9wZG93bkxpc3RDb21wb25lbnQgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgTmdndlR5cGVhaGVhZERyb3Bkb3duTGlzdENvbXBvbmVudCxcbiAgICApXG4gICAgdGhpcy5kcm9wZG93bkxpc3RDb21wb25lbnQuc2V0SW5wdXQoJ2hvc3RDb21wb25lbnQnLCB0aGlzLmhvc3RJbnB1dClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgU2V0cyB0aGUgb3B0aW9ucyB0aGUgdXNlciBjYW4gc2VsZWN0LlxuICAgKiBJZiB0aGUgaG9zdCBpcyBhIG5nZ3YtZHJvcGRvd24sIHV0aWxpemUgdGhlIGRyb3Bkb3duIGl0c2VsZiB0byBkaXNwbGF5IHRoZSBvcHRpb25zXG4gICAqIElmIHRoZSBob3N0IGlzIGEgbmdndi1pbnB1dCwgdXNlIHRoZSBjcmVhdGVkIG5nZ3YtZHJvcGRvd24tbGlzdCB0byBkaXNwbGF5ZSB0aGUgb3B0aW9uc1xuICAgKiBAcGFyYW0gZmlsdGVyZWRWYWx1ZXMgVGhlIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd25cbiAgICogQHBhcmFtIGVtcHR5SW5wdXQgSWYgdGhlIGlucHV0IGlzIGVtcHR5XG4gICAqL1xuICBwcml2YXRlIHNldE9wdGlvbnMoZmlsdGVyZWRWYWx1ZXM6IFRbXSwgaW5wdXQ6IHN0cmluZykge1xuICAgIGlmICghZmlsdGVyZWRWYWx1ZXMpIHJldHVyblxuICAgIC8vIENvbmRpdGlvbmFsbHkgYWRkIGVtcHR5IG9yIG51bGxpc2ggb3B0aW9uIGlmIGl0J3MgYWxsb3dlZCwgdGhlIGlucHV0IGlzIGVtcHR5IGFuZCBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gbnVsbGlzaFxuICAgIGNvbnN0IGFsbG93TnVsbGlzaCA9XG4gICAgICB0aGlzLmFsbG93VW5zZWxlY3QgJiZcbiAgICAgICFpbnB1dCAmJlxuICAgICAgIShcbiAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVyZWRWYWx1ZXNbMF0gPz8ge30pLmluY2x1ZGVzKCdrZXknKSAmJlxuICAgICAgICBmaWx0ZXJlZFZhbHVlc1swXT8ua2V5ID09IG51bGxcbiAgICAgIClcbiAgICBpZiAoZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBmaWx0ZXJlZFZhbHVlcyA9IFt0aGlzLmVtcHR5T3B0aW9uXVxuICAgIH0gZWxzZSBpZiAoYWxsb3dOdWxsaXNoKSB7XG4gICAgICBmaWx0ZXJlZFZhbHVlcyA9IFt0aGlzLmRlZmF1bHROdWxsaXNoT3B0aW9uXS5jb25jYXQoZmlsdGVyZWRWYWx1ZXMpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdElzRHJvcGRvd24pIHtcbiAgICAgIC8vIEFkZCBudWxsaXNoIG9wdGlvbiB3aGVuIG5vIGlucHV0IGlzIHdyaXR0ZW4gKG9yIHdoZW4gZHJvcGRvd24gaXMgZXBhbmRlZCBhbmQgaGFzIGEgc2VsZWN0aW9uKVxuICAgICAgdGhpcy5ob3N0RHJvcGRvd24uYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbiA9IGZhbHNlXG4gICAgICB0aGlzLmhvc3REcm9wZG93bi5vcHRpb25zID0gdGhpcy5mb3JtYXRPcHRpb25zKGZpbHRlcmVkVmFsdWVzKVxuICAgICAgdGhpcy5ob3N0RHJvcGRvd24udGV4dFRvSGlnaGxpZ2h0ID0gYCR7aW5wdXQgfHwgJyd9YFxuICAgICAgdGhpcy5ob3N0RHJvcGRvd24ub25seUhhbmRsZURpc3RpbmN0Q2hhbmdlcyA9IGZhbHNlXG4gICAgICB0aGlzLmhvc3REcm9wZG93bi5zZWxlY3RXaXRoU3BhY2UgPSBmYWxzZVxuICAgICAgdGhpcy5ob3N0RHJvcGRvd24uZGV0ZWN0Q2hhbmdlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaG9zdElzRHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd25MaXN0Q29tcG9uZW50LnNldElucHV0KFxuICAgICAgICAnb3B0aW9ucycsXG4gICAgICAgIHRoaXMuZm9ybWF0T3B0aW9ucyhmaWx0ZXJlZFZhbHVlcyksXG4gICAgICApXG4gICAgICB0aGlzLmRyb3Bkb3duTGlzdENvbXBvbmVudC5zZXRJbnB1dCgndGV4dFRvSGlnaGxpZ2h0JywgYCR7aW5wdXQgfHwgJyd9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIEZvcm1hdHMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIGRpc3BsYXkgaW4gdGhlIGRyb3Bkb3duIGxpc3RcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIHNlbGVjdGVkIHZhbHVlXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0T3B0aW9ucyhvcHRpb25zOiBUW10pOiBPcHRpb25CYXNlPGFueT5bXSB7XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gW11cbiAgICBpZiAoIXRoaXMucmVzdWx0Rm9ybWF0dGVyKSByZXR1cm4gb3B0aW9uc1xuICAgIHJldHVybiBvcHRpb25zLm1hcCgodmFsdWUpID0+XG4gICAgICB2YWx1ZT8ubGFiZWwgPyB0aGlzLnJlc3VsdEZvcm1hdHRlcj8uKHZhbHVlKSA6IHZhbHVlLFxuICAgIClcbiAgfVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ViZ3JvdXAtZ3JlZW4tYW5ndWxhci1zcmMtdi1hbmd1bGFyLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vc2ViZ3JvdXAtZ3JlZW4tYW5ndWxhci1zcmMtdi1hbmd1bGFyLWRyb3Bkb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2.NggvTypeaheadHighlightComponent","i1","i3","i4","i5","i6.NggvDropdownListComponent","i2","i3.NggvTypeaheadHighlightComponent","i1.NggvDropdownComponent"],"mappings":"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"}