@norwegian/core-components 7.17.2 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/README.md +3 -3
  2. package/assets/documentation/accordion/accordion.md +1 -1
  3. package/assets/documentation/airport-select/airport-select.md +1 -0
  4. package/assets/documentation/alert/alert.md +1 -0
  5. package/assets/documentation/autocomplete/autocomplete.md +1 -1
  6. package/assets/documentation/backdrop/backdrop.md +1 -0
  7. package/assets/documentation/box/box.md +1 -1
  8. package/assets/documentation/button/button.md +1 -10
  9. package/assets/documentation/checkbox/checkbox.md +1 -7
  10. package/assets/documentation/container/container.md +1 -1
  11. package/assets/documentation/continue/continue.md +2 -1
  12. package/assets/documentation/cover/cover.md +1 -1
  13. package/assets/documentation/datepicker/datepicker.md +1 -3
  14. package/assets/documentation/datepicker-combo/datepicker-combo.md +2 -1
  15. package/assets/documentation/divider/divider.md +1 -1
  16. package/assets/documentation/dropdown/dropdown.md +1 -3
  17. package/assets/documentation/filter/filter.md +1 -0
  18. package/assets/documentation/grid/grid.md +1 -1
  19. package/assets/documentation/icon/icon.md +1 -1
  20. package/assets/documentation/icon-list/icon-list.md +1 -1
  21. package/assets/documentation/input/input.md +1 -1
  22. package/assets/documentation/journey/journey.md +2 -1
  23. package/assets/documentation/journey-availability/journey-availability.md +1 -3
  24. package/assets/documentation/journey-availability-list/journey-availability-list.md +1 -9
  25. package/assets/documentation/journey-selection/journey-selection.md +1 -1
  26. package/assets/documentation/journey-stopover/journey-stopover.md +2 -1
  27. package/assets/documentation/list/list.md +1 -1
  28. package/assets/documentation/micro-button/micro-button.md +2 -0
  29. package/assets/documentation/modal/modal.md +1 -0
  30. package/assets/documentation/number-field/number-field.md +1 -1
  31. package/assets/documentation/page-footer/page-footer.md +1 -1
  32. package/assets/documentation/page-header/page-header.md +1 -1
  33. package/assets/documentation/passenger-select/passenger-select.md +1 -1
  34. package/assets/documentation/phone-number/phone-number.md +1 -2
  35. package/assets/documentation/premium-toggle/premium-toggle.md +1 -9
  36. package/assets/documentation/radio/radio.md +1 -7
  37. package/assets/documentation/ribbon-banner/ribbon-banner.md +2 -1
  38. package/assets/documentation/select/select.md +1 -1
  39. package/assets/documentation/simple-list/simple-list.md +1 -1
  40. package/assets/documentation/slide-toggle/slide-toggle.md +1 -1
  41. package/assets/documentation/slider/slider.md +1 -1
  42. package/assets/documentation/sort/sort.md +1 -1
  43. package/assets/documentation/spinner/spinner.md +1 -1
  44. package/assets/documentation/status-box/status-box.md +2 -1
  45. package/assets/documentation/suggestions/suggestions.md +2 -1
  46. package/assets/documentation/tab-group/tab-group.md +1 -1
  47. package/assets/documentation/table/table.md +1 -8
  48. package/assets/documentation/tag/tag.md +1 -0
  49. package/assets/documentation/textarea/textarea.md +1 -1
  50. package/assets/documentation/toggle/toggle.md +1 -5
  51. package/assets/documentation/tooltip/tooltip.md +1 -0
  52. package/assets/documentation/trip-summary/trip-summary.md +1 -2
  53. package/fesm2022/norwegian-core-components.mjs +13636 -13565
  54. package/fesm2022/norwegian-core-components.mjs.map +1 -1
  55. package/index.d.ts +9449 -5
  56. package/package.json +14 -8
  57. package/styles/1__settings/_colors.scss +9 -9
  58. package/styles/1__settings/_mixins.scss +67 -40
  59. package/styles/1__settings/_type.scss +18 -6
  60. package/styles/1__settings/_vars.scss +7 -4
  61. package/styles/2__generic/_fonts.scss +7 -5
  62. package/styles/3__base/_animations.scss +84 -84
  63. package/styles/3__base/_body.scss +10 -8
  64. package/styles/3__base/_fixes.scss +1 -1
  65. package/styles/3__base/_form.scss +5 -3
  66. package/styles/3__base/_heading.scss +21 -12
  67. package/styles/3__base/_hr.scss +4 -0
  68. package/styles/3__base/_input.scss +5 -1
  69. package/styles/3__base/_link.scss +3 -0
  70. package/styles/3__base/_table.scss +8 -4
  71. package/styles/3__base/_type.scss +17 -13
  72. package/styles/_helpers.scss +4 -4
  73. package/styles/_index.scss +13 -13
  74. package/assets/documentation/campaign-header/campaign-header.md +0 -0
  75. package/assets/documentation/chip/chip.md +0 -1
  76. package/assets/documentation/info/info.md +0 -1
  77. package/assets/icons/small/info--light--light.svg +0 -4
  78. package/assets/images/logo--mobile.svg +0 -50
  79. package/assets/images/logo-reward.svg +0 -140
  80. package/assets/images/logo.svg +0 -135
  81. package/esm2022/lib/components/accordion/accordion.component.mjs +0 -163
  82. package/esm2022/lib/components/accordion/accordion.module.mjs +0 -20
  83. package/esm2022/lib/components/accordion/index.mjs +0 -3
  84. package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +0 -622
  85. package/esm2022/lib/components/airport-select/airport-select.component.mjs +0 -498
  86. package/esm2022/lib/components/airport-select/airport-select.module.mjs +0 -42
  87. package/esm2022/lib/components/airport-select/index.mjs +0 -7
  88. package/esm2022/lib/components/airport-select/models/airport-select-event.model.mjs +0 -2
  89. package/esm2022/lib/components/airport-select/models/airport-select-state.model.mjs +0 -2
  90. package/esm2022/lib/components/airport-select/models/airport.model.mjs +0 -2
  91. package/esm2022/lib/components/airport-select/models/results-labels.model.mjs +0 -3
  92. package/esm2022/lib/components/airport-select/services/airport-select-dropdown.service.mjs +0 -35
  93. package/esm2022/lib/components/airport-select/services/airport-select.service.mjs +0 -38
  94. package/esm2022/lib/components/alert/alert.component.mjs +0 -169
  95. package/esm2022/lib/components/alert/alert.module.mjs +0 -22
  96. package/esm2022/lib/components/alert/index.mjs +0 -4
  97. package/esm2022/lib/components/alert/models/alert.model.mjs +0 -2
  98. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +0 -318
  99. package/esm2022/lib/components/autocomplete/autocomplete.module.mjs +0 -43
  100. package/esm2022/lib/components/autocomplete/index.mjs +0 -4
  101. package/esm2022/lib/components/autocomplete/models/autocomplete.model.mjs +0 -2
  102. package/esm2022/lib/components/backdrop/backdrop.component.mjs +0 -58
  103. package/esm2022/lib/components/backdrop/backdrop.module.mjs +0 -19
  104. package/esm2022/lib/components/backdrop/index.mjs +0 -3
  105. package/esm2022/lib/components/box/box.component.mjs +0 -66
  106. package/esm2022/lib/components/box/box.module.mjs +0 -19
  107. package/esm2022/lib/components/box/index.mjs +0 -3
  108. package/esm2022/lib/components/button/button.component.mjs +0 -192
  109. package/esm2022/lib/components/button/button.module.mjs +0 -21
  110. package/esm2022/lib/components/button/index.mjs +0 -3
  111. package/esm2022/lib/components/campaign-header/campaign-header.component.mjs +0 -51
  112. package/esm2022/lib/components/campaign-header/campaign-header.module.mjs +0 -20
  113. package/esm2022/lib/components/campaign-header/index.mjs +0 -3
  114. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -163
  115. package/esm2022/lib/components/checkbox/checkbox.module.mjs +0 -20
  116. package/esm2022/lib/components/checkbox/index.mjs +0 -3
  117. package/esm2022/lib/components/chip/chip.component.mjs +0 -48
  118. package/esm2022/lib/components/chip/chip.module.mjs +0 -19
  119. package/esm2022/lib/components/chip/index.mjs +0 -3
  120. package/esm2022/lib/components/container/container.component.mjs +0 -50
  121. package/esm2022/lib/components/container/container.module.mjs +0 -19
  122. package/esm2022/lib/components/container/index.mjs +0 -3
  123. package/esm2022/lib/components/continue/continue.component.mjs +0 -199
  124. package/esm2022/lib/components/continue/continue.module.mjs +0 -23
  125. package/esm2022/lib/components/continue/index.mjs +0 -3
  126. package/esm2022/lib/components/cover/cover.component.mjs +0 -75
  127. package/esm2022/lib/components/cover/cover.module.mjs +0 -21
  128. package/esm2022/lib/components/cover/index.mjs +0 -3
  129. package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +0 -606
  130. package/esm2022/lib/components/datepicker/calendar/enums/week-start.enum.mjs +0 -6
  131. package/esm2022/lib/components/datepicker/calendar/models/calendar-date.model.mjs +0 -2
  132. package/esm2022/lib/components/datepicker/calendar/models/calendar.model.mjs +0 -2
  133. package/esm2022/lib/components/datepicker/calendar/models/day.model.mjs +0 -2
  134. package/esm2022/lib/components/datepicker/calendar/models/select-option.model.mjs +0 -2
  135. package/esm2022/lib/components/datepicker/calendar/models/week.model.mjs +0 -2
  136. package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -613
  137. package/esm2022/lib/components/datepicker/datepicker.module.mjs +0 -55
  138. package/esm2022/lib/components/datepicker/index.mjs +0 -9
  139. package/esm2022/lib/components/datepicker/services/calendar.service.mjs +0 -215
  140. package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +0 -417
  141. package/esm2022/lib/components/datepicker-combo/datepicker-combo.module.mjs +0 -31
  142. package/esm2022/lib/components/datepicker-combo/index.mjs +0 -3
  143. package/esm2022/lib/components/divider/divider.component.mjs +0 -59
  144. package/esm2022/lib/components/divider/divider.module.mjs +0 -28
  145. package/esm2022/lib/components/divider/index.mjs +0 -3
  146. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -170
  147. package/esm2022/lib/components/dropdown/dropdown.module.mjs +0 -21
  148. package/esm2022/lib/components/dropdown/index.mjs +0 -3
  149. package/esm2022/lib/components/filter/enums/trip-type.enum.mjs +0 -8
  150. package/esm2022/lib/components/filter/filter.component.mjs +0 -1445
  151. package/esm2022/lib/components/filter/filter.module.mjs +0 -81
  152. package/esm2022/lib/components/filter/index.mjs +0 -4
  153. package/esm2022/lib/components/grid/col/col.component.mjs +0 -49
  154. package/esm2022/lib/components/grid/grid.component.mjs +0 -72
  155. package/esm2022/lib/components/grid/grid.module.mjs +0 -20
  156. package/esm2022/lib/components/grid/index.mjs +0 -4
  157. package/esm2022/lib/components/icon/icon.component.mjs +0 -44
  158. package/esm2022/lib/components/icon/icon.module.mjs +0 -19
  159. package/esm2022/lib/components/icon/index.mjs +0 -3
  160. package/esm2022/lib/components/icon-list/icon-list.component.mjs +0 -50
  161. package/esm2022/lib/components/icon-list/icon-list.module.mjs +0 -20
  162. package/esm2022/lib/components/icon-list/index.mjs +0 -4
  163. package/esm2022/lib/components/icon-list/models/icon-list.model.mjs +0 -2
  164. package/esm2022/lib/components/index.mjs +0 -68
  165. package/esm2022/lib/components/info/index.mjs +0 -4
  166. package/esm2022/lib/components/info/info.component.mjs +0 -116
  167. package/esm2022/lib/components/info/info.module.mjs +0 -36
  168. package/esm2022/lib/components/info/models/info.model.mjs +0 -2
  169. package/esm2022/lib/components/input/index.mjs +0 -3
  170. package/esm2022/lib/components/input/input.component.mjs +0 -228
  171. package/esm2022/lib/components/input/input.module.mjs +0 -35
  172. package/esm2022/lib/components/journey/index.mjs +0 -6
  173. package/esm2022/lib/components/journey/journey.component.mjs +0 -137
  174. package/esm2022/lib/components/journey/journey.module.mjs +0 -21
  175. package/esm2022/lib/components/journey/models/journey-flight.model.mjs +0 -2
  176. package/esm2022/lib/components/journey/models/journey.model.mjs +0 -2
  177. package/esm2022/lib/components/journey/models/marketing-carrier.enum.mjs +0 -8
  178. package/esm2022/lib/components/journey-availability/index.mjs +0 -3
  179. package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +0 -128
  180. package/esm2022/lib/components/journey-availability/journey-availability.module.mjs +0 -39
  181. package/esm2022/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs +0 -7
  182. package/esm2022/lib/components/journey-availability-list/index.mjs +0 -4
  183. package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +0 -182
  184. package/esm2022/lib/components/journey-availability-list/journey-availability-list.module.mjs +0 -36
  185. package/esm2022/lib/components/journey-selection/index.mjs +0 -7
  186. package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +0 -120
  187. package/esm2022/lib/components/journey-selection/journey-selection.module.mjs +0 -24
  188. package/esm2022/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs +0 -2
  189. package/esm2022/lib/components/journey-selection/models/journey-selection-common.model.mjs +0 -2
  190. package/esm2022/lib/components/journey-selection/models/journey-selection-expanded.model.mjs +0 -2
  191. package/esm2022/lib/components/journey-selection/models/journey-selection.model.mjs +0 -2
  192. package/esm2022/lib/components/journey-stopover/index.mjs +0 -4
  193. package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +0 -150
  194. package/esm2022/lib/components/journey-stopover/journey-stopover.module.mjs +0 -21
  195. package/esm2022/lib/components/journey-stopover/models/stopover-time.model.mjs +0 -2
  196. package/esm2022/lib/components/list/index.mjs +0 -4
  197. package/esm2022/lib/components/list/list-item/list-item.component.mjs +0 -52
  198. package/esm2022/lib/components/list/list.component.mjs +0 -78
  199. package/esm2022/lib/components/list/list.module.mjs +0 -20
  200. package/esm2022/lib/components/micro-button/index.mjs +0 -3
  201. package/esm2022/lib/components/micro-button/micro-button.component.mjs +0 -101
  202. package/esm2022/lib/components/micro-button/micro-button.module.mjs +0 -20
  203. package/esm2022/lib/components/modal/index.mjs +0 -3
  204. package/esm2022/lib/components/modal/modal.component.mjs +0 -156
  205. package/esm2022/lib/components/modal/modal.module.mjs +0 -38
  206. package/esm2022/lib/components/number-field/index.mjs +0 -4
  207. package/esm2022/lib/components/number-field/models/number-field.model.mjs +0 -2
  208. package/esm2022/lib/components/number-field/number-field.component.mjs +0 -162
  209. package/esm2022/lib/components/number-field/number-field.module.mjs +0 -39
  210. package/esm2022/lib/components/page-footer/index.mjs +0 -3
  211. package/esm2022/lib/components/page-footer/page-footer.component.mjs +0 -52
  212. package/esm2022/lib/components/page-footer/page-footer.module.mjs +0 -21
  213. package/esm2022/lib/components/page-header/hamburger/hamburger.component.mjs +0 -22
  214. package/esm2022/lib/components/page-header/index.mjs +0 -6
  215. package/esm2022/lib/components/page-header/models/wallet.model.mjs +0 -2
  216. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -171
  217. package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
  218. package/esm2022/lib/components/page-header/search/search.component.mjs +0 -49
  219. package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +0 -57
  220. package/esm2022/lib/components/passenger-select/enums/passenger-type.enum.mjs +0 -9
  221. package/esm2022/lib/components/passenger-select/index.mjs +0 -5
  222. package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +0 -2
  223. package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +0 -423
  224. package/esm2022/lib/components/passenger-select/passenger-select.module.mjs +0 -28
  225. package/esm2022/lib/components/phone-number/index.mjs +0 -3
  226. package/esm2022/lib/components/phone-number/phone-number.component.mjs +0 -182
  227. package/esm2022/lib/components/phone-number/phone-number.module.mjs +0 -44
  228. package/esm2022/lib/components/premium-toggle/index.mjs +0 -3
  229. package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +0 -68
  230. package/esm2022/lib/components/premium-toggle/premium-toggle.module.mjs +0 -20
  231. package/esm2022/lib/components/radio/index.mjs +0 -3
  232. package/esm2022/lib/components/radio/radio.component.mjs +0 -109
  233. package/esm2022/lib/components/radio/radio.module.mjs +0 -20
  234. package/esm2022/lib/components/ribbon-banner/index.mjs +0 -3
  235. package/esm2022/lib/components/ribbon-banner/ribbon-banner.component.mjs +0 -89
  236. package/esm2022/lib/components/ribbon-banner/ribbon-banner.module.mjs +0 -40
  237. package/esm2022/lib/components/select/index.mjs +0 -6
  238. package/esm2022/lib/components/select/models/select-option.model.mjs +0 -2
  239. package/esm2022/lib/components/select/optgroup/optgroup.component.mjs +0 -29
  240. package/esm2022/lib/components/select/option/option.component.mjs +0 -26
  241. package/esm2022/lib/components/select/select.component.mjs +0 -407
  242. package/esm2022/lib/components/select/select.module.mjs +0 -23
  243. package/esm2022/lib/components/select-new/index.mjs +0 -5
  244. package/esm2022/lib/components/select-new/models/select-option.model.mjs +0 -2
  245. package/esm2022/lib/components/select-new/optgroup/optgroup-new.component.mjs +0 -23
  246. package/esm2022/lib/components/select-new/option/option-new.component.mjs +0 -41
  247. package/esm2022/lib/components/select-new/select-new.component.mjs +0 -271
  248. package/esm2022/lib/components/select-new/select-new.module.mjs +0 -26
  249. package/esm2022/lib/components/select-new/services/select-new.service.mjs +0 -40
  250. package/esm2022/lib/components/simple-list/index.mjs +0 -3
  251. package/esm2022/lib/components/simple-list/simple-list.component.mjs +0 -48
  252. package/esm2022/lib/components/simple-list/simple-list.module.mjs +0 -19
  253. package/esm2022/lib/components/slide-toggle/index.mjs +0 -3
  254. package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -121
  255. package/esm2022/lib/components/slide-toggle/slide-toggle.module.mjs +0 -20
  256. package/esm2022/lib/components/slider/index.mjs +0 -3
  257. package/esm2022/lib/components/slider/slider.component.mjs +0 -515
  258. package/esm2022/lib/components/slider/slider.module.mjs +0 -20
  259. package/esm2022/lib/components/sort/index.mjs +0 -3
  260. package/esm2022/lib/components/sort/sort.component.mjs +0 -98
  261. package/esm2022/lib/components/sort/sort.module.mjs +0 -36
  262. package/esm2022/lib/components/spinner/index.mjs +0 -3
  263. package/esm2022/lib/components/spinner/spinner.component.mjs +0 -127
  264. package/esm2022/lib/components/spinner/spinner.module.mjs +0 -19
  265. package/esm2022/lib/components/status-box/index.mjs +0 -4
  266. package/esm2022/lib/components/status-box/models/status-box.model.mjs +0 -2
  267. package/esm2022/lib/components/status-box/status-box.component.mjs +0 -109
  268. package/esm2022/lib/components/status-box/status-box.module.mjs +0 -21
  269. package/esm2022/lib/components/suggestions/index.mjs +0 -3
  270. package/esm2022/lib/components/suggestions/suggestions.component.mjs +0 -44
  271. package/esm2022/lib/components/suggestions/suggestions.module.mjs +0 -20
  272. package/esm2022/lib/components/tab-group/index.mjs +0 -4
  273. package/esm2022/lib/components/tab-group/tab/tab.component.mjs +0 -140
  274. package/esm2022/lib/components/tab-group/tab-group.component.mjs +0 -91
  275. package/esm2022/lib/components/tab-group/tab-group.module.mjs +0 -21
  276. package/esm2022/lib/components/table/column/column.component.mjs +0 -16
  277. package/esm2022/lib/components/table/column-group/column-group.component.mjs +0 -30
  278. package/esm2022/lib/components/table/index.mjs +0 -11
  279. package/esm2022/lib/components/table/services/table.service.mjs +0 -24
  280. package/esm2022/lib/components/table/table-body/table-body.component.mjs +0 -23
  281. package/esm2022/lib/components/table/table-foot/table-foot.component.mjs +0 -23
  282. package/esm2022/lib/components/table/table-head/table-head.component.mjs +0 -23
  283. package/esm2022/lib/components/table/table-row/table-data/table-data.component.mjs +0 -15
  284. package/esm2022/lib/components/table/table-row/table-header/table-header.component.mjs +0 -15
  285. package/esm2022/lib/components/table/table-row/table-row.component.mjs +0 -23
  286. package/esm2022/lib/components/table/table.component.mjs +0 -27
  287. package/esm2022/lib/components/table/table.module.mjs +0 -63
  288. package/esm2022/lib/components/tag/index.mjs +0 -3
  289. package/esm2022/lib/components/tag/tag.component.mjs +0 -71
  290. package/esm2022/lib/components/tag/tag.module.mjs +0 -28
  291. package/esm2022/lib/components/textarea/index.mjs +0 -3
  292. package/esm2022/lib/components/textarea/textarea.component.mjs +0 -139
  293. package/esm2022/lib/components/textarea/textarea.module.mjs +0 -21
  294. package/esm2022/lib/components/toggle/index.mjs +0 -3
  295. package/esm2022/lib/components/toggle/models/options.model.mjs +0 -3
  296. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -102
  297. package/esm2022/lib/components/toggle/toggle.module.mjs +0 -35
  298. package/esm2022/lib/components/tooltip/index.mjs +0 -3
  299. package/esm2022/lib/components/tooltip/tooltip.component.mjs +0 -170
  300. package/esm2022/lib/components/tooltip/tooltip.module.mjs +0 -30
  301. package/esm2022/lib/components/trip-summary/index.mjs +0 -3
  302. package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +0 -167
  303. package/esm2022/lib/components/trip-summary/trip-summary.module.mjs +0 -36
  304. package/esm2022/lib/core/base/nas-component.base.mjs +0 -48
  305. package/esm2022/lib/core/decorators/debounce.decorator.mjs +0 -12
  306. package/esm2022/lib/core/directives/index.mjs +0 -3
  307. package/esm2022/lib/core/directives/nas-class/nas-class.directive.mjs +0 -80
  308. package/esm2022/lib/core/directives/nas-class/nas-class.module.mjs +0 -20
  309. package/esm2022/lib/core/extensions/html-element.extension.mjs +0 -31
  310. package/esm2022/lib/core/index.mjs +0 -5
  311. package/esm2022/lib/core/models/abandoned-basket-item.model.mjs +0 -2
  312. package/esm2022/lib/core/models/animate.model.mjs +0 -2
  313. package/esm2022/lib/core/models/class.model.mjs +0 -2
  314. package/esm2022/lib/core/models/index.mjs +0 -7
  315. package/esm2022/lib/core/models/link.model.mjs +0 -2
  316. package/esm2022/lib/core/models/position.model.mjs +0 -2
  317. package/esm2022/lib/core/models/utc-date.model.mjs +0 -40
  318. package/esm2022/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +0 -61
  319. package/esm2022/lib/core/services/animate-helper/animate-helper.service.mjs +0 -49
  320. package/esm2022/lib/core/services/bem-helper/bem-helper.service.mjs +0 -44
  321. package/esm2022/lib/core/services/date/date-compare.enum.mjs +0 -7
  322. package/esm2022/lib/core/services/date/date-helper.service.mjs +0 -199
  323. package/esm2022/lib/core/services/device/device-helper.service.mjs +0 -46
  324. package/esm2022/lib/core/services/geolocation/geolocation-state.enum.mjs +0 -8
  325. package/esm2022/lib/core/services/geolocation/geolocation.service.mjs +0 -66
  326. package/esm2022/lib/core/services/index.mjs +0 -10
  327. package/esm2022/lib/core/services/language/language-helper.service.mjs +0 -114
  328. package/esm2022/lib/core/services/sort/sort.service.mjs +0 -25
  329. package/esm2022/lib/core/services/viewport/viewport.service.mjs +0 -36
  330. package/esm2022/lib/index.mjs +0 -5
  331. package/esm2022/lib/services/get-position.service.mjs +0 -23
  332. package/esm2022/lib/services/index.mjs +0 -2
  333. package/esm2022/lib/shared/index.mjs +0 -2
  334. package/esm2022/lib/shared/models/flight-details.mjs +0 -3
  335. package/esm2022/lib/shared/models/index.mjs +0 -6
  336. package/esm2022/lib/shared/models/journey-availability-sort.model.mjs +0 -2
  337. package/esm2022/lib/shared/models/journey-availability.model.mjs +0 -2
  338. package/esm2022/lib/shared/models/journey-details.model.mjs +0 -2
  339. package/esm2022/lib/shared/models/journey-duration.model.mjs +0 -2
  340. package/esm2022/lib/shared/models/journey-stopover.model.mjs +0 -2
  341. package/esm2022/lib/shared/models/journey-transit-info.model.mjs +0 -2
  342. package/esm2022/lib/shared/models/operating-carrier.model.mjs +0 -2
  343. package/esm2022/lib/shared/models/sort-option.model.mjs +0 -2
  344. package/esm2022/lib/shared/models/sort.model.mjs +0 -2
  345. package/esm2022/lib/shared/models/trip-item-details.model.mjs +0 -2
  346. package/esm2022/lib/shared/models/trip-summary-details.model.mjs +0 -2
  347. package/esm2022/lib/shared/models/trip-summary.model.mjs +0 -2
  348. package/esm2022/norwegian-core-components.mjs +0 -5
  349. package/esm2022/public_api.mjs +0 -2
  350. package/lib/components/accordion/accordion.component.d.ts +0 -241
  351. package/lib/components/accordion/accordion.module.d.ts +0 -10
  352. package/lib/components/accordion/index.d.ts +0 -2
  353. package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -100
  354. package/lib/components/airport-select/airport-select.component.d.ts +0 -330
  355. package/lib/components/airport-select/airport-select.module.d.ts +0 -13
  356. package/lib/components/airport-select/index.d.ts +0 -6
  357. package/lib/components/airport-select/models/airport-select-event.model.d.ts +0 -4
  358. package/lib/components/airport-select/models/airport-select-state.model.d.ts +0 -5
  359. package/lib/components/airport-select/models/airport.model.d.ts +0 -11
  360. package/lib/components/airport-select/models/results-labels.model.d.ts +0 -8
  361. package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +0 -10
  362. package/lib/components/airport-select/services/airport-select.service.d.ts +0 -8
  363. package/lib/components/alert/alert.component.d.ts +0 -129
  364. package/lib/components/alert/alert.module.d.ts +0 -12
  365. package/lib/components/alert/index.d.ts +0 -3
  366. package/lib/components/alert/models/alert.model.d.ts +0 -10
  367. package/lib/components/autocomplete/autocomplete.component.d.ts +0 -135
  368. package/lib/components/autocomplete/autocomplete.module.d.ts +0 -13
  369. package/lib/components/autocomplete/index.d.ts +0 -3
  370. package/lib/components/autocomplete/models/autocomplete.model.d.ts +0 -5
  371. package/lib/components/backdrop/backdrop.component.d.ts +0 -38
  372. package/lib/components/backdrop/backdrop.module.d.ts +0 -9
  373. package/lib/components/backdrop/index.d.ts +0 -2
  374. package/lib/components/box/box.component.d.ts +0 -78
  375. package/lib/components/box/box.module.d.ts +0 -9
  376. package/lib/components/box/index.d.ts +0 -2
  377. package/lib/components/button/button.component.d.ts +0 -294
  378. package/lib/components/button/button.module.d.ts +0 -11
  379. package/lib/components/button/index.d.ts +0 -2
  380. package/lib/components/campaign-header/campaign-header.component.d.ts +0 -58
  381. package/lib/components/campaign-header/campaign-header.module.d.ts +0 -10
  382. package/lib/components/campaign-header/index.d.ts +0 -2
  383. package/lib/components/checkbox/checkbox.component.d.ts +0 -151
  384. package/lib/components/checkbox/checkbox.module.d.ts +0 -10
  385. package/lib/components/checkbox/index.d.ts +0 -2
  386. package/lib/components/chip/chip.component.d.ts +0 -48
  387. package/lib/components/chip/chip.module.d.ts +0 -9
  388. package/lib/components/chip/index.d.ts +0 -2
  389. package/lib/components/container/container.component.d.ts +0 -52
  390. package/lib/components/container/container.module.d.ts +0 -9
  391. package/lib/components/container/index.d.ts +0 -2
  392. package/lib/components/continue/continue.component.d.ts +0 -171
  393. package/lib/components/continue/continue.module.d.ts +0 -11
  394. package/lib/components/continue/index.d.ts +0 -2
  395. package/lib/components/cover/cover.component.d.ts +0 -125
  396. package/lib/components/cover/cover.module.d.ts +0 -11
  397. package/lib/components/cover/index.d.ts +0 -2
  398. package/lib/components/datepicker/calendar/calendar.component.d.ts +0 -169
  399. package/lib/components/datepicker/calendar/enums/week-start.enum.d.ts +0 -4
  400. package/lib/components/datepicker/calendar/models/calendar-date.model.d.ts +0 -5
  401. package/lib/components/datepicker/calendar/models/calendar.model.d.ts +0 -4
  402. package/lib/components/datepicker/calendar/models/day.model.d.ts +0 -10
  403. package/lib/components/datepicker/calendar/models/select-option.model.d.ts +0 -4
  404. package/lib/components/datepicker/calendar/models/week.model.d.ts +0 -5
  405. package/lib/components/datepicker/datepicker.component.d.ts +0 -289
  406. package/lib/components/datepicker/datepicker.module.d.ts +0 -16
  407. package/lib/components/datepicker/index.d.ts +0 -8
  408. package/lib/components/datepicker/services/calendar.service.d.ts +0 -27
  409. package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +0 -329
  410. package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +0 -10
  411. package/lib/components/datepicker-combo/index.d.ts +0 -2
  412. package/lib/components/divider/divider.component.d.ts +0 -68
  413. package/lib/components/divider/divider.module.d.ts +0 -10
  414. package/lib/components/divider/index.d.ts +0 -2
  415. package/lib/components/dropdown/dropdown.component.d.ts +0 -80
  416. package/lib/components/dropdown/dropdown.module.d.ts +0 -11
  417. package/lib/components/dropdown/index.d.ts +0 -2
  418. package/lib/components/filter/enums/trip-type.enum.d.ts +0 -6
  419. package/lib/components/filter/filter.component.d.ts +0 -942
  420. package/lib/components/filter/filter.module.d.ts +0 -22
  421. package/lib/components/filter/index.d.ts +0 -3
  422. package/lib/components/grid/col/col.component.d.ts +0 -45
  423. package/lib/components/grid/grid.component.d.ts +0 -92
  424. package/lib/components/grid/grid.module.d.ts +0 -10
  425. package/lib/components/grid/index.d.ts +0 -3
  426. package/lib/components/icon/icon.component.d.ts +0 -53
  427. package/lib/components/icon/icon.module.d.ts +0 -9
  428. package/lib/components/icon/index.d.ts +0 -2
  429. package/lib/components/icon-list/icon-list.component.d.ts +0 -49
  430. package/lib/components/icon-list/icon-list.module.d.ts +0 -10
  431. package/lib/components/icon-list/index.d.ts +0 -3
  432. package/lib/components/icon-list/models/icon-list.model.d.ts +0 -8
  433. package/lib/components/index.d.ts +0 -67
  434. package/lib/components/info/index.d.ts +0 -3
  435. package/lib/components/info/info.component.d.ts +0 -108
  436. package/lib/components/info/info.module.d.ts +0 -12
  437. package/lib/components/info/models/info.model.d.ts +0 -9
  438. package/lib/components/input/index.d.ts +0 -2
  439. package/lib/components/input/input.component.d.ts +0 -214
  440. package/lib/components/input/input.module.d.ts +0 -11
  441. package/lib/components/journey/index.d.ts +0 -5
  442. package/lib/components/journey/journey.component.d.ts +0 -102
  443. package/lib/components/journey/journey.module.d.ts +0 -11
  444. package/lib/components/journey/models/journey-flight.model.d.ts +0 -13
  445. package/lib/components/journey/models/journey.model.d.ts +0 -5
  446. package/lib/components/journey/models/marketing-carrier.enum.d.ts +0 -6
  447. package/lib/components/journey-availability/index.d.ts +0 -2
  448. package/lib/components/journey-availability/journey-availability.component.d.ts +0 -93
  449. package/lib/components/journey-availability/journey-availability.module.d.ts +0 -12
  450. package/lib/components/journey-availability-list/enums/availability-sort-option.enum.d.ts +0 -5
  451. package/lib/components/journey-availability-list/index.d.ts +0 -3
  452. package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +0 -114
  453. package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +0 -12
  454. package/lib/components/journey-selection/index.d.ts +0 -6
  455. package/lib/components/journey-selection/journey-selection.component.d.ts +0 -84
  456. package/lib/components/journey-selection/journey-selection.module.d.ts +0 -11
  457. package/lib/components/journey-selection/models/journey-selection-collapsed.model.d.ts +0 -11
  458. package/lib/components/journey-selection/models/journey-selection-common.model.d.ts +0 -7
  459. package/lib/components/journey-selection/models/journey-selection-expanded.model.d.ts +0 -5
  460. package/lib/components/journey-selection/models/journey-selection.model.d.ts +0 -14
  461. package/lib/components/journey-stopover/index.d.ts +0 -3
  462. package/lib/components/journey-stopover/journey-stopover.component.d.ts +0 -131
  463. package/lib/components/journey-stopover/journey-stopover.module.d.ts +0 -11
  464. package/lib/components/journey-stopover/models/stopover-time.model.d.ts +0 -4
  465. package/lib/components/list/index.d.ts +0 -3
  466. package/lib/components/list/list-item/list-item.component.d.ts +0 -35
  467. package/lib/components/list/list.component.d.ts +0 -76
  468. package/lib/components/list/list.module.d.ts +0 -10
  469. package/lib/components/micro-button/index.d.ts +0 -2
  470. package/lib/components/micro-button/micro-button.component.d.ts +0 -139
  471. package/lib/components/micro-button/micro-button.module.d.ts +0 -10
  472. package/lib/components/modal/index.d.ts +0 -2
  473. package/lib/components/modal/modal.component.d.ts +0 -119
  474. package/lib/components/modal/modal.module.d.ts +0 -12
  475. package/lib/components/number-field/index.d.ts +0 -3
  476. package/lib/components/number-field/models/number-field.model.d.ts +0 -5
  477. package/lib/components/number-field/number-field.component.d.ts +0 -124
  478. package/lib/components/number-field/number-field.module.d.ts +0 -12
  479. package/lib/components/page-footer/index.d.ts +0 -2
  480. package/lib/components/page-footer/page-footer.component.d.ts +0 -53
  481. package/lib/components/page-footer/page-footer.module.d.ts +0 -11
  482. package/lib/components/page-header/hamburger/hamburger.component.d.ts +0 -12
  483. package/lib/components/page-header/index.d.ts +0 -5
  484. package/lib/components/page-header/models/wallet.model.d.ts +0 -21
  485. package/lib/components/page-header/page-header.component.d.ts +0 -127
  486. package/lib/components/page-header/page-header.module.d.ts +0 -17
  487. package/lib/components/page-header/search/search.component.d.ts +0 -26
  488. package/lib/components/page-header/wallet/wallet.component.d.ts +0 -23
  489. package/lib/components/passenger-select/enums/passenger-type.enum.d.ts +0 -7
  490. package/lib/components/passenger-select/index.d.ts +0 -4
  491. package/lib/components/passenger-select/models/passengers.model.d.ts +0 -11
  492. package/lib/components/passenger-select/passenger-select.component.d.ts +0 -141
  493. package/lib/components/passenger-select/passenger-select.module.d.ts +0 -10
  494. package/lib/components/phone-number/index.d.ts +0 -2
  495. package/lib/components/phone-number/phone-number.component.d.ts +0 -263
  496. package/lib/components/phone-number/phone-number.module.d.ts +0 -13
  497. package/lib/components/premium-toggle/index.d.ts +0 -2
  498. package/lib/components/premium-toggle/premium-toggle.component.d.ts +0 -50
  499. package/lib/components/premium-toggle/premium-toggle.module.d.ts +0 -10
  500. package/lib/components/radio/index.d.ts +0 -2
  501. package/lib/components/radio/radio.component.d.ts +0 -137
  502. package/lib/components/radio/radio.module.d.ts +0 -10
  503. package/lib/components/ribbon-banner/index.d.ts +0 -2
  504. package/lib/components/ribbon-banner/ribbon-banner.component.d.ts +0 -66
  505. package/lib/components/ribbon-banner/ribbon-banner.module.d.ts +0 -13
  506. package/lib/components/select/index.d.ts +0 -5
  507. package/lib/components/select/models/select-option.model.d.ts +0 -4
  508. package/lib/components/select/optgroup/optgroup.component.d.ts +0 -25
  509. package/lib/components/select/option/option.component.d.ts +0 -24
  510. package/lib/components/select/select.component.d.ts +0 -204
  511. package/lib/components/select/select.module.d.ts +0 -13
  512. package/lib/components/select-new/index.d.ts +0 -4
  513. package/lib/components/select-new/models/select-option.model.d.ts +0 -6
  514. package/lib/components/select-new/optgroup/optgroup-new.component.d.ts +0 -8
  515. package/lib/components/select-new/option/option-new.component.d.ts +0 -16
  516. package/lib/components/select-new/select-new.component.d.ts +0 -173
  517. package/lib/components/select-new/select-new.module.d.ts +0 -14
  518. package/lib/components/select-new/services/select-new.service.d.ts +0 -10
  519. package/lib/components/simple-list/index.d.ts +0 -2
  520. package/lib/components/simple-list/simple-list.component.d.ts +0 -60
  521. package/lib/components/simple-list/simple-list.module.d.ts +0 -9
  522. package/lib/components/slide-toggle/index.d.ts +0 -2
  523. package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -70
  524. package/lib/components/slide-toggle/slide-toggle.module.d.ts +0 -10
  525. package/lib/components/slider/index.d.ts +0 -2
  526. package/lib/components/slider/slider.component.d.ts +0 -216
  527. package/lib/components/slider/slider.module.d.ts +0 -10
  528. package/lib/components/sort/index.d.ts +0 -2
  529. package/lib/components/sort/sort.component.d.ts +0 -55
  530. package/lib/components/sort/sort.module.d.ts +0 -12
  531. package/lib/components/spinner/index.d.ts +0 -2
  532. package/lib/components/spinner/spinner.component.d.ts +0 -104
  533. package/lib/components/spinner/spinner.module.d.ts +0 -9
  534. package/lib/components/status-box/index.d.ts +0 -3
  535. package/lib/components/status-box/models/status-box.model.d.ts +0 -5
  536. package/lib/components/status-box/status-box.component.d.ts +0 -92
  537. package/lib/components/status-box/status-box.module.d.ts +0 -11
  538. package/lib/components/suggestions/index.d.ts +0 -2
  539. package/lib/components/suggestions/suggestions.component.d.ts +0 -36
  540. package/lib/components/suggestions/suggestions.module.d.ts +0 -10
  541. package/lib/components/tab-group/index.d.ts +0 -3
  542. package/lib/components/tab-group/tab/tab.component.d.ts +0 -97
  543. package/lib/components/tab-group/tab-group.component.d.ts +0 -42
  544. package/lib/components/tab-group/tab-group.module.d.ts +0 -11
  545. package/lib/components/table/column/column.component.d.ts +0 -6
  546. package/lib/components/table/column-group/column-group.component.d.ts +0 -15
  547. package/lib/components/table/index.d.ts +0 -10
  548. package/lib/components/table/services/table.service.d.ts +0 -8
  549. package/lib/components/table/table-body/table-body.component.d.ts +0 -15
  550. package/lib/components/table/table-foot/table-foot.component.d.ts +0 -15
  551. package/lib/components/table/table-head/table-head.component.d.ts +0 -15
  552. package/lib/components/table/table-row/table-data/table-data.component.d.ts +0 -5
  553. package/lib/components/table/table-row/table-header/table-header.component.d.ts +0 -5
  554. package/lib/components/table/table-row/table-row.component.d.ts +0 -15
  555. package/lib/components/table/table.component.d.ts +0 -19
  556. package/lib/components/table/table.module.d.ts +0 -17
  557. package/lib/components/tag/index.d.ts +0 -2
  558. package/lib/components/tag/tag.component.d.ts +0 -71
  559. package/lib/components/tag/tag.module.d.ts +0 -10
  560. package/lib/components/textarea/index.d.ts +0 -2
  561. package/lib/components/textarea/textarea.component.d.ts +0 -156
  562. package/lib/components/textarea/textarea.module.d.ts +0 -11
  563. package/lib/components/toggle/index.d.ts +0 -2
  564. package/lib/components/toggle/models/options.model.d.ts +0 -7
  565. package/lib/components/toggle/toggle.component.d.ts +0 -159
  566. package/lib/components/toggle/toggle.module.d.ts +0 -11
  567. package/lib/components/tooltip/index.d.ts +0 -2
  568. package/lib/components/tooltip/tooltip.component.d.ts +0 -63
  569. package/lib/components/tooltip/tooltip.module.d.ts +0 -10
  570. package/lib/components/trip-summary/index.d.ts +0 -2
  571. package/lib/components/trip-summary/trip-summary.component.d.ts +0 -162
  572. package/lib/components/trip-summary/trip-summary.module.d.ts +0 -12
  573. package/lib/core/base/nas-component.base.d.ts +0 -11
  574. package/lib/core/decorators/debounce.decorator.d.ts +0 -1
  575. package/lib/core/directives/index.d.ts +0 -2
  576. package/lib/core/directives/nas-class/nas-class.directive.d.ts +0 -14
  577. package/lib/core/directives/nas-class/nas-class.module.d.ts +0 -8
  578. package/lib/core/extensions/html-element.extension.d.ts +0 -6
  579. package/lib/core/index.d.ts +0 -4
  580. package/lib/core/models/abandoned-basket-item.model.d.ts +0 -14
  581. package/lib/core/models/animate.model.d.ts +0 -6
  582. package/lib/core/models/class.model.d.ts +0 -7
  583. package/lib/core/models/index.d.ts +0 -6
  584. package/lib/core/models/link.model.d.ts +0 -5
  585. package/lib/core/models/position.model.d.ts +0 -4
  586. package/lib/core/models/utc-date.model.d.ts +0 -13
  587. package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +0 -10
  588. package/lib/core/services/animate-helper/animate-helper.service.d.ts +0 -9
  589. package/lib/core/services/bem-helper/bem-helper.service.d.ts +0 -7
  590. package/lib/core/services/date/date-compare.enum.d.ts +0 -5
  591. package/lib/core/services/date/date-helper.service.d.ts +0 -22
  592. package/lib/core/services/device/device-helper.service.d.ts +0 -16
  593. package/lib/core/services/geolocation/geolocation-state.enum.d.ts +0 -6
  594. package/lib/core/services/geolocation/geolocation.service.d.ts +0 -9
  595. package/lib/core/services/index.d.ts +0 -9
  596. package/lib/core/services/language/language-helper.service.d.ts +0 -12
  597. package/lib/core/services/sort/sort.service.d.ts +0 -6
  598. package/lib/core/services/viewport/viewport.service.d.ts +0 -11
  599. package/lib/index.d.ts +0 -4
  600. package/lib/services/get-position.service.d.ts +0 -9
  601. package/lib/services/index.d.ts +0 -1
  602. package/lib/shared/index.d.ts +0 -1
  603. package/lib/shared/models/flight-details.d.ts +0 -22
  604. package/lib/shared/models/index.d.ts +0 -5
  605. package/lib/shared/models/journey-availability-sort.model.d.ts +0 -8
  606. package/lib/shared/models/journey-availability.model.d.ts +0 -25
  607. package/lib/shared/models/journey-details.model.d.ts +0 -8
  608. package/lib/shared/models/journey-duration.model.d.ts +0 -7
  609. package/lib/shared/models/journey-stopover.model.d.ts +0 -15
  610. package/lib/shared/models/journey-transit-info.model.d.ts +0 -5
  611. package/lib/shared/models/operating-carrier.model.d.ts +0 -4
  612. package/lib/shared/models/sort-option.model.d.ts +0 -11
  613. package/lib/shared/models/sort.model.d.ts +0 -10
  614. package/lib/shared/models/trip-item-details.model.d.ts +0 -12
  615. package/lib/shared/models/trip-summary-details.model.d.ts +0 -5
  616. package/lib/shared/models/trip-summary.model.d.ts +0 -4
  617. package/public_api.d.ts +0 -1
  618. /package/assets/icons/{icon-chevron-left--light.svg → medium/chevron-left--light.svg} +0 -0
  619. /package/assets/icons/{icon-chevron-left.svg → medium/chevron-left.svg} +0 -0
  620. /package/assets/icons/{icon-chevron-right--light.svg → medium/chevron-right--light.svg} +0 -0
  621. /package/assets/icons/{icon-chevron-right.svg → medium/chevron-right.svg} +0 -0
  622. /package/assets/images/{cloud-1.svg → cloud.svg} +0 -0
@@ -1,498 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewEncapsulation, ViewChild, HostListener } from '@angular/core';
2
- import { NasComponentBase } from '../../core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../core/services/device/device-helper.service";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "../../core/directives/nas-class/nas-class.directive";
7
- import * as i4 from "../icon/icon.component";
8
- import * as i5 from "./airport-select-dropdown/airport-select-dropdown.component";
9
- /**
10
- * @description
11
- * Norwegian Airport Select Component | Functional | New design
12
- */
13
- export class AirportSelectComponent extends NasComponentBase {
14
- /**
15
- * @property Input
16
- * @description
17
- * The airport code of the origin airport. It will set the selected origin airport based on this value.
18
- */
19
- get originAirportCode() {
20
- return this.originAirportCodeValue;
21
- }
22
- set originAirportCode(code) {
23
- if (code) {
24
- if (code !== this.originAirportCodeValue) {
25
- this.originAirportCodeValue = code;
26
- this.setOrigin();
27
- }
28
- }
29
- else {
30
- this.originAirportCodeValue = '';
31
- this.clearOrigin();
32
- }
33
- }
34
- /**
35
- * @property Input
36
- * @description
37
- * The airport code of the destination airport. It will set the selected destination airport based on this value.
38
- */
39
- get destinationAirportCode() {
40
- return this.destinationAirportCodeValue;
41
- }
42
- set destinationAirportCode(code) {
43
- if (code) {
44
- if (code !== this.destinationAirportCodeValue) {
45
- this.destinationAirportCodeValue = code;
46
- this.setDestination();
47
- }
48
- }
49
- else {
50
- this.destinationAirportCodeValue = '';
51
- this.clearDestination();
52
- }
53
- }
54
- constructor(deviceHelper, cdr) {
55
- super('nas-airport-select');
56
- this.deviceHelper = deviceHelper;
57
- this.cdr = cdr;
58
- this.airportsDestination = new Array();
59
- this.focusDestination = false;
60
- this.focusedLatestSearchesIndexDestination = -1;
61
- this.focusedAirportIndexDestination = -1;
62
- this.switchType = 'switch';
63
- this.inlineFlex = false;
64
- this.resultsLabels = {
65
- allAirports: '',
66
- closestAirports: '',
67
- latestSearches: '',
68
- geolocation: '',
69
- geolocationDenied: '',
70
- noAirports: ''
71
- };
72
- this.originOpen = false;
73
- this.destinationOpen = false;
74
- this.cleared = false;
75
- /**
76
- * @property Input
77
- * @required
78
- * @description
79
- * A label that will appear on top of the origin airport input field.
80
- */
81
- this.labelOrigin = '';
82
- /**
83
- * @property Input
84
- * @description
85
- * A placeholder that will appear on the origin airport input field.
86
- */
87
- this.placeholderOrigin = '';
88
- /**
89
- * @property Input
90
- * @description
91
- * A label that will appear on top of the destination airport input field.
92
- */
93
- this.labelDestination = '';
94
- /**
95
- * @property Input
96
- * @description
97
- * A placeholder that will appear on the destination airport input field.
98
- */
99
- this.placeholderDestination = '';
100
- /**
101
- * @property Output
102
- * @description
103
- * An event that is fired every time the selected origin airport changes.
104
- */
105
- this.originChange = new EventEmitter();
106
- /**
107
- * @property Output
108
- * @description
109
- * An event that is fired every time the origin dropdown selector opens or closes.
110
- */
111
- this.originOpenChange = new EventEmitter();
112
- /**
113
- * @property Output
114
- * @description
115
- * An event that is fired every time the origin dropdown selector opens or closes.
116
- */
117
- this.destinationChange = new EventEmitter();
118
- /**
119
- * @property Output
120
- * @description
121
- * An event that is fired every time the destination dropdown selector opens or closes.
122
- */
123
- this.destinationOpenChange = new EventEmitter();
124
- /**
125
- * @property Output
126
- * @description
127
- * An event that is fired when the destination dropdown closes.
128
- */
129
- this.focusOnNext = new EventEmitter();
130
- /**
131
- * @property Output
132
- * @description
133
- * An event that is fired when geolocation position has changed.
134
- */
135
- this.positionChange = new EventEmitter();
136
- }
137
- onResize() {
138
- this.setInlineFlex();
139
- }
140
- ngOnInit() {
141
- if (!this.airports) {
142
- throw new Error('Missing input: [airports]');
143
- }
144
- this.resultsLabels = {
145
- allAirports: this.allAirportsLabel || '',
146
- closestAirports: this.closestAirportsLabel || '',
147
- latestSearches: this.latestSearchesLabel || '',
148
- geolocation: this.geolocationLabel || '',
149
- geolocationDenied: this.geolocationBlockedLabel || '',
150
- noAirports: this.noAirportsLabel || ''
151
- };
152
- this.textSelectOriginFirst = this.selectOriginFirstLabel;
153
- this.airportsOrigin = this.allowedOriginAiports && this.allowedOriginAiports.length > 0 ? this.allowedOriginAiports : this.airports;
154
- this.airportsDestination = this.getAirportsDestinations();
155
- if (this.nasFormGroup) {
156
- if (this.nasFormControlNameOrigin) {
157
- const originControl = this.nasFormGroup.get(this.nasFormControlNameOrigin);
158
- if (originControl) {
159
- const origin = this.airportsOrigin.find(x => x.name === originControl.value);
160
- if (origin) {
161
- this.originAirportCode = origin.code;
162
- }
163
- }
164
- }
165
- if (this.nasFormControlNameDestination) {
166
- const destinationControl = this.nasFormGroup.get(this.nasFormControlNameDestination);
167
- if (destinationControl) {
168
- const destination = this.airportsDestination.find(x => x.name === destinationControl.value);
169
- if (destination) {
170
- this.destinationAirportCode = destination.code;
171
- }
172
- }
173
- }
174
- }
175
- if (!this.destination) {
176
- this.clearDestination();
177
- return;
178
- }
179
- this.destinationChange.emit(this.destination);
180
- this.originChange.emit(this.origin);
181
- if (this.originAirportCode) {
182
- this.setOrigin();
183
- }
184
- if (this.destinationAirportCode) {
185
- this.setDestination();
186
- }
187
- }
188
- ngAfterViewInit() {
189
- this.setInlineFlex();
190
- this.cdr.detectChanges();
191
- }
192
- getAirportSelectComboClass(element, modifiersInput) {
193
- let modifiers = modifiersInput;
194
- if (typeof modifiersInput === 'string' || modifiersInput instanceof String) {
195
- modifiers = [modifiersInput];
196
- }
197
- return {
198
- block: 'nas-airport-select-combo',
199
- element: element,
200
- modifiers: modifiers
201
- };
202
- }
203
- onOriginOpen(open) {
204
- setTimeout(() => {
205
- this.originOpen = open;
206
- });
207
- this.destinationOpen = false;
208
- this.originOpenChange.emit(open);
209
- }
210
- onDestinationOpen(open) {
211
- this.destinationOpen = open;
212
- this.originOpen = false;
213
- if (this.originAirportCode && (this.airportsDestination && this.airportsDestination.length <= 0)) {
214
- this.noDestinationAirportsAvailable = true;
215
- this.clearDestination();
216
- }
217
- this.destinationOpenChange.emit(open);
218
- }
219
- onSelectionCleared() {
220
- this.cleared = true;
221
- }
222
- setSelectedOrigin(airport) {
223
- this.noDestinationAirportsAvailable = false;
224
- if (!airport) {
225
- return;
226
- }
227
- this.origin = airport;
228
- this.originAirportCodeValue = airport.code;
229
- this.isDestinationValid = airport.code ? true : false;
230
- if (this.airportRelations && this.hasValidDestinations(airport)) {
231
- this.updateValidAirportDestinations(airport);
232
- this.setCurrentLatestSearchesDestination();
233
- }
234
- else {
235
- this.airportsDestination = [];
236
- }
237
- this.cleared = false;
238
- this.originChange.emit(airport);
239
- }
240
- setSelectedDestination(airport) {
241
- if (!airport) {
242
- return;
243
- }
244
- this.destination = airport;
245
- this.destinationAirportCodeValue = airport.code;
246
- this.cleared = false;
247
- this.destinationChange.emit(airport);
248
- }
249
- setFocusOnNext(event) {
250
- this.focusOnNext.emit(event);
251
- }
252
- onOriginFocus() {
253
- if (this.airportSelectDropdownOrigin) {
254
- this.onOriginOpen(true);
255
- }
256
- }
257
- changeSwitchIcon() {
258
- this.switchType = this.switchType === 'switch' ? 'switch--secondary' : 'switch';
259
- }
260
- swapAirports() {
261
- const destination = { ...this.destination };
262
- const origin = { ...this.origin };
263
- this.destination = origin;
264
- this.origin = destination;
265
- this.setSelectedDestination(this.destination);
266
- this.setSelectedOrigin(this.origin);
267
- }
268
- swapKeyDown(event) {
269
- switch (event.key) {
270
- case 'Enter':
271
- this.swapAirports();
272
- break;
273
- }
274
- }
275
- setDestinationOpen(event) {
276
- if (this.exists(this.combo)) {
277
- this.onDestinationOpen(true);
278
- }
279
- else {
280
- this.setFocusOnNext(event);
281
- }
282
- }
283
- getClosestAirports(position) {
284
- this.positionChange.emit(position);
285
- }
286
- setInlineFlex() {
287
- if (!this.container && !this.container?.nativeElement) {
288
- return;
289
- }
290
- this.inlineFlex = !this.deviceHelper.isWidthMobile(this.container.nativeElement.offsetWidth);
291
- }
292
- getAirportsDestinations() {
293
- const allowedDestinationAirports = this.allowedDestinationAirports;
294
- return allowedDestinationAirports && allowedDestinationAirports.length > 0
295
- ? allowedDestinationAirports
296
- : this.airports;
297
- }
298
- setOrigin() {
299
- const airport = this.airports.find(x => x.code === this.originAirportCode);
300
- if (airport) {
301
- this.setSelectedOrigin(airport);
302
- }
303
- }
304
- setDestination() {
305
- const airport = this.airports.find(x => x.code === this.destinationAirportCode);
306
- if (airport) {
307
- this.setSelectedDestination(airport);
308
- }
309
- }
310
- updateValidAirportDestinations(airport) {
311
- if (!this.airportRelations) {
312
- this.airportsDestination = this.airportsOrigin;
313
- }
314
- else {
315
- const validDestinations = this.getAirportRelations(airport);
316
- if (!validDestinations) {
317
- return;
318
- }
319
- if (validDestinations.length === 0) {
320
- this.clearDestinations();
321
- }
322
- else {
323
- let isDestinationValid;
324
- if (this.destination && this.destination.code) {
325
- isDestinationValid = validDestinations.some(x => x && x.toLowerCase() === this.destination.code.toLowerCase());
326
- }
327
- if (!isDestinationValid) {
328
- this.clearDestination();
329
- this.destinationChange.emit(null);
330
- }
331
- if (this.airports) {
332
- this.airportsDestination = this.airports
333
- .filter(airportItem => airportItem
334
- && airportItem.code
335
- && validDestinations.some(x => x && airportItem.code.toLowerCase() === x.toLowerCase()));
336
- }
337
- }
338
- }
339
- }
340
- hasValidDestinations(origin) {
341
- if (!origin) {
342
- return;
343
- }
344
- const relations = this.getAirportRelations(origin);
345
- return relations && relations.length > 0;
346
- }
347
- getAirportRelations(airport) {
348
- if (!this.airports) {
349
- return new Array();
350
- }
351
- return this.airportRelations[airport.code.toLowerCase()] || this.airportRelations[airport.code.toUpperCase()];
352
- }
353
- clearOrigin() {
354
- this.setSelectedOrigin({
355
- code: '',
356
- countryName: '',
357
- name: '',
358
- airportName: '',
359
- displayName: '',
360
- normalizedAirportName: ''
361
- });
362
- }
363
- clearDestination() {
364
- this.setSelectedDestination({
365
- code: '',
366
- countryName: '',
367
- name: '',
368
- airportName: '',
369
- displayName: '',
370
- normalizedAirportName: ''
371
- });
372
- }
373
- clearDestinations() {
374
- this.airportsDestination = new Array();
375
- const model = {
376
- name: this.textSelectOriginFirst,
377
- countryName: '',
378
- code: '',
379
- airportName: '',
380
- displayName: '',
381
- normalizedAirportName: ''
382
- };
383
- this.airportsDestination.push(model);
384
- this.clearDestination();
385
- this.destinationChange.emit(model);
386
- }
387
- setCurrentLatestSearchesDestination() {
388
- if (this.airportsDestination) {
389
- this.currentLatestSearchesDestination = this.airportsDestination.filter(airport => {
390
- if (this.latestSearchesDestination) {
391
- return this.latestSearchesDestination.some(x => x.code && x.code.toLowerCase() === airport.code.toLowerCase());
392
- }
393
- });
394
- }
395
- }
396
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AirportSelectComponent, deps: [{ token: i1.DeviceHelper }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
397
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AirportSelectComponent, selector: "nas-airport-select", inputs: { outboundId: "outboundId", inboundId: "inboundId", airports: "airports", airportRelations: "airportRelations", latestSearchesOrigin: "latestSearchesOrigin", latestSearchesDestination: "latestSearchesDestination", closestAirports: "closestAirports", allowedOriginAiports: "allowedOriginAiports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", displayClosestAirports: "displayClosestAirports", combo: "combo", useSwitch: "useSwitch", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", selectOriginFirstLabel: "selectOriginFirstLabel", noAirportsLabel: "noAirportsLabel", invalidDestinationText: "invalidDestinationText", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", placeholderDestination: "placeholderDestination", labelOutside: "labelOutside", keepSelection: "keepSelection", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormGroup: "nasFormGroup", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", ariaLabelClear: "ariaLabelClear", ariaLabelBackdrop: "ariaLabelBackdrop" }, outputs: { originChange: "originChange", originOpenChange: "originOpenChange", destinationChange: "destinationChange", destinationOpenChange: "destinationOpenChange", focusOnNext: "focusOnNext", positionChange: "positionChange" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "switchButton", first: true, predicate: ["switchButton"], descendants: true }, { propertyName: "airportSelectDropdownOrigin", first: true, predicate: ["airportSelectDropdownOrigin"], descendants: true }, { propertyName: "airportSelectDropdownDestination", first: true, predicate: ["airportSelectDropdownDestination"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"exists(combo); else airportSelectTemplate\"\n [nasClass]=\"getAirportSelectComboClass('', [inlineFlex && 'inline'])\" #container>\n <ng-container *ngTemplateOutlet=\"airportSelectTemplate\"></ng-container>\n</div>\n<ng-template #airportSelectTemplate>\n <div [nasClass]=\"getClass('', exists(useSwitch) && 'padding-origin')\" *ngIf=\"airportsOrigin\">\n <nas-airport-select-dropdown #airportSelectDropdownOrigin displayLatestSearches [id]=\"outboundId\"\n [enableGeolocation]=\"displayClosestAirports\" [displayClosestAirports]=\"displayClosestAirports\"\n [airportSelectLabel]=\"labelOrigin\" [latestSearches]=\"latestSearchesOrigin\" [closestAirports]=\"closestAirports\"\n [airport]=\"origin\" [airports]=\"airportsOrigin\" [resultsLabels]=\"resultsLabels\"\n [airportSelectPlaceholder]=\"placeholderOrigin\" [open]=\"originOpen\" [keepSelection]=\"keepSelection\"\n [airportSelectIconModifier]=\"'flight-departure'\" [nasFormControlName]=\"nasFormControlNameOrigin\"\n [nasFormGroup]=\"nasFormGroup\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [labelOutside]=\"labelOutside\" (clearedSelection)=\"onSelectionCleared()\" (selected)=\"setSelectedOrigin($event)\"\n (openChange)=\"onOriginOpen($event)\" (focusOnNext)=\"setDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-dropdown>\n </div>\n <ng-container *ngIf=\"exists(combo)\">\n <div [nasClass]=\"getClass('', exists(useSwitch) && 'padding-destination')\">\n <nas-airport-select-dropdown #airportSelectDropdownDestination displayLatestSearches [id]=\"inboundId\"\n [airportSelectLabel]=\"labelDestination\" [displayClosestAirports]=\"false\"\n [latestSearches]=\"currentLatestSearchesDestination\" [airports]=\"airportsDestination\"\n [resultsLabels]=\"resultsLabels\" [airport]=\"destination\" [airportSelectPlaceholder]=\"placeholderDestination\"\n [open]=\"destinationOpen\" [keepSelection]=\"keepSelection\" [airportSelectIconModifier]=\"'flight-arrival'\"\n [nasFormControlName]=\"nasFormControlNameDestination\" [nasFormGroup]=\"nasFormGroup\"\n [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [isValid]=\"isDestinationValid\"\n [invalidText]=\"invalidDestinationText\" [labelOutside]=\"labelOutside\" (clearedSelection)=\"onSelectionCleared()\"\n (selected)=\"setSelectedDestination($event)\" (openChange)=\"onDestinationOpen($event)\"\n (focusOnNext)=\"setFocusOnNext($event)\" (focusOnPrevious)=\"onOriginFocus()\" [noAirportsAvailable]=\"noDestinationAirportsAvailable\"></nas-airport-select-dropdown>\n </div>\n <div *ngIf=\"exists(useSwitch) && !(originOpen || destinationOpen || cleared)\" #switchButton\n [nasClass]=\"getAirportSelectComboClass('switcher', (originAirportCodeValue && destinationAirportCodeValue) && 'filled')\"\n (mouseover)=\"changeSwitchIcon()\" (mouseleave)=\"changeSwitchIcon()\" (keydown)=\"swapKeyDown($event)\"\n (click)=\"swapAirports()\">\n <nas-icon\n [type]=\"(this.destinationAirportCodeValue && this.originAirportCodeValue) ? 'vector--secondary' : 'vector'\"></nas-icon>\n </div>\n </ng-container>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-airport-select{position:relative;width:100%;text-align:left}.nas-airport-select label{margin-bottom:0;height:67px}.nas-airport-select:first-child{margin-bottom:0}.nas-airport-select:only-child{max-width:360px}.nas-airport-select--expanded{z-index:30}.nas-airport-select__wrapper{position:relative;display:block;z-index:3;background-color:#fff;border:2px solid #6F6F6F}.nas-airport-select__wrapper--active{background-color:#ebf4ff;border:2px solid #15273F}.nas-airport-select__wrapper--filled{border:2px solid #15273F}.nas-airport-select__wrapper--label-outside{background-color:transparent;border:0}.nas-airport-select__wrapper--label-outside input{height:50px!important;border:2px solid #6F6F6F}.nas-airport-select__wrapper--label-outside .nas-airport-select__icon{bottom:6px}.nas-airport-select__wrapper--label-outside .nas-airport-select__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:16px;margin-bottom:6px;padding:0}.nas-airport-select__wrapper--label-outside .nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 16px;background-color:#fff}.nas-airport-select__wrapper--label-outside .nas-airport-select__input[type=text]:focus{background-color:#ebf4ff;border:2px solid #15273F}.nas-airport-select__list-section-label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:14px;line-height:20px;position:relative;z-index:2;text-align:center;padding:3px 12px;background-color:#e9e7e4}.nas-airport-select__list-section-label:not(:first-child){margin-top:-1px}.nas-airport-select__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:inherit}.nas-airport-select__input{height:64px;position:relative;z-index:3;line-height:1;margin:0;background-color:transparent}.nas-airport-select__input[type=text]{padding:0 16px 9px}.nas-airport-select__input[type=text]:focus{border-bottom:none}.nas-airport-select__label+.nas-airport-select__input{height:34px;position:relative;z-index:3;line-height:1;margin:0;background-color:transparent}.nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 16px 9px}.nas-airport-select__icon{position:absolute;z-index:4;right:18px;bottom:18px}.nas-airport-select__results-wrapper{position:relative;z-index:4;perspective:1000px;margin-top:-4px}.nas-airport-select__results-wrapper--label-outside{margin-top:9px}.nas-airport-select__results{position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:airport-select-results .65s ease both}.nas-airport-select__dummy{position:absolute;left:-100px}.nas-airport-select__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:airport-select-backdrop .7s ease-out both}.nas-airport-select__list-item{border-bottom:2px solid #E9E7E4}.nas-airport-select__list-item:last-child{border-bottom:0}.nas-airport-select__list-item:not(:last-of-type):after{content:\"\";display:block;width:100%;position:absolute;bottom:0;border-bottom:1px solid #E9E7E4}.nas-airport-select__geolocation--label{align-self:center;padding-left:4px}.nas-airport-select__geolocation--icon{margin:3px 3px 0}.nas-airport-select__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:16px;margin-top:-1px;display:flex;justify-content:space-between;outline:0}.nas-airport-select__item--focus,.nas-airport-select__item:hover,.nas-airport-select__item:focus{background-color:#15273f}.nas-airport-select__item--focus,.nas-airport-select__item--focus .nas-airport-select__name,.nas-airport-select__item--focus .nas-airport-select__code,.nas-airport-select__item:hover,.nas-airport-select__item:hover .nas-airport-select__name,.nas-airport-select__item:hover .nas-airport-select__code,.nas-airport-select__item:focus,.nas-airport-select__item:focus .nas-airport-select__name,.nas-airport-select__item:focus .nas-airport-select__code{color:#fff!important}.nas-airport-select__item--disabled{border-bottom-width:0}.nas-airport-select__item--disabled,.nas-airport-select__item--disabled .nas-airport-select__name,.nas-airport-select__item--disabled .nas-airport-select__code{color:#6f6f6f!important}.nas-airport-select__item--disabled:hover,.nas-airport-select__item--disabled:focus{background-color:#fff;cursor:auto}.nas-airport-select__item--disabled:hover,.nas-airport-select__item--disabled:hover .nas-airport-select__name,.nas-airport-select__item--disabled:hover .nas-airport-select__code,.nas-airport-select__item--disabled:focus,.nas-airport-select__item--disabled:focus .nas-airport-select__name,.nas-airport-select__item--disabled:focus .nas-airport-select__code{color:#6f6f6f!important}.nas-airport-select__item--geolocation{border-bottom:2px solid #E9E7E4}.nas-airport-select__name,.nas-airport-select__code{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-airport-select__name--invalid,.nas-airport-select__code--invalid{margin:12px}.nas-airport-select__code{margin-left:.12em}.nas-airport-select__country{display:block;font-size:14px}.nas-airport-select__empty{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:16px;line-height:1.4;color:#15273f;margin:0;padding:12px}.nas-airport-select__empty-list{display:block;margin:12px}.nas-icon-vector,.nas-icon-vector--secondary{margin-bottom:2px}.nas-filter .nas-airport-select-combo,.nas-search-filter .nas-airport-select-combo{margin:0 3px 0 0}.nas-airport-select-combo{position:relative;display:flex;flex-direction:column;width:100%;margin:8px auto;gap:8px}.nas-airport-select-combo--inline{flex-direction:row}.nas-airport-select-combo--inline .nas-airport-select-combo__switcher{left:48%;top:14px;transform:rotate(90deg)}.nas-airport-select-combo--inline .nas-airport-select--padding-destination .nas-airport-select__label{padding:12px 24px 0}.nas-airport-select-combo--inline .nas-airport-select--padding-destination .nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 24px 12px}.nas-airport-select-combo__switcher{position:absolute;top:48px;z-index:3;left:76%;cursor:pointer;border:2px solid #6F6F6F;border-radius:50%;width:40px;height:40px;background-color:#fff;justify-content:center;align-items:center;display:flex}.nas-airport-select-combo__switcher:focus{outline:none;box-shadow:0 0 1px 2px #e9e7e4,0 0 2px 3px #7ca4cd}.nas-airport-select-combo__switcher--filled{border:2px solid #15273F}@keyframes airport-select-backdrop{0%{opacity:0}}@keyframes airport-select-results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i4.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i5.AirportSelectDropdownComponent, selector: "nas-airport-select-dropdown", inputs: ["id", "displayLatestSearches", "displayClosestAirports", "latestSearches", "resultsLabels", "airportSelectLabel", "airportSelectPlaceholder", "airportSelectIconModifier", "labelOutside", "keepSelection", "nasFormControlName", "nasFormGroup", "enableGeolocation", "ariaLabelClear", "ariaLabelBackdrop", "isValid", "invalidText", "noAirportsAvailable", "closestAirports", "airport", "open", "airports"], outputs: ["selected", "openChange", "focusOnNext", "focusOnPrevious", "positionChange", "clearedSelection"] }], encapsulation: i0.ViewEncapsulation.None }); }
398
- }
399
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AirportSelectComponent, decorators: [{
400
- type: Component,
401
- args: [{ selector: 'nas-airport-select', encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"exists(combo); else airportSelectTemplate\"\n [nasClass]=\"getAirportSelectComboClass('', [inlineFlex && 'inline'])\" #container>\n <ng-container *ngTemplateOutlet=\"airportSelectTemplate\"></ng-container>\n</div>\n<ng-template #airportSelectTemplate>\n <div [nasClass]=\"getClass('', exists(useSwitch) && 'padding-origin')\" *ngIf=\"airportsOrigin\">\n <nas-airport-select-dropdown #airportSelectDropdownOrigin displayLatestSearches [id]=\"outboundId\"\n [enableGeolocation]=\"displayClosestAirports\" [displayClosestAirports]=\"displayClosestAirports\"\n [airportSelectLabel]=\"labelOrigin\" [latestSearches]=\"latestSearchesOrigin\" [closestAirports]=\"closestAirports\"\n [airport]=\"origin\" [airports]=\"airportsOrigin\" [resultsLabels]=\"resultsLabels\"\n [airportSelectPlaceholder]=\"placeholderOrigin\" [open]=\"originOpen\" [keepSelection]=\"keepSelection\"\n [airportSelectIconModifier]=\"'flight-departure'\" [nasFormControlName]=\"nasFormControlNameOrigin\"\n [nasFormGroup]=\"nasFormGroup\" [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [labelOutside]=\"labelOutside\" (clearedSelection)=\"onSelectionCleared()\" (selected)=\"setSelectedOrigin($event)\"\n (openChange)=\"onOriginOpen($event)\" (focusOnNext)=\"setDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select-dropdown>\n </div>\n <ng-container *ngIf=\"exists(combo)\">\n <div [nasClass]=\"getClass('', exists(useSwitch) && 'padding-destination')\">\n <nas-airport-select-dropdown #airportSelectDropdownDestination displayLatestSearches [id]=\"inboundId\"\n [airportSelectLabel]=\"labelDestination\" [displayClosestAirports]=\"false\"\n [latestSearches]=\"currentLatestSearchesDestination\" [airports]=\"airportsDestination\"\n [resultsLabels]=\"resultsLabels\" [airport]=\"destination\" [airportSelectPlaceholder]=\"placeholderDestination\"\n [open]=\"destinationOpen\" [keepSelection]=\"keepSelection\" [airportSelectIconModifier]=\"'flight-arrival'\"\n [nasFormControlName]=\"nasFormControlNameDestination\" [nasFormGroup]=\"nasFormGroup\"\n [ariaLabelClear]=\"ariaLabelClear\" [ariaLabelBackdrop]=\"ariaLabelBackdrop\" [isValid]=\"isDestinationValid\"\n [invalidText]=\"invalidDestinationText\" [labelOutside]=\"labelOutside\" (clearedSelection)=\"onSelectionCleared()\"\n (selected)=\"setSelectedDestination($event)\" (openChange)=\"onDestinationOpen($event)\"\n (focusOnNext)=\"setFocusOnNext($event)\" (focusOnPrevious)=\"onOriginFocus()\" [noAirportsAvailable]=\"noDestinationAirportsAvailable\"></nas-airport-select-dropdown>\n </div>\n <div *ngIf=\"exists(useSwitch) && !(originOpen || destinationOpen || cleared)\" #switchButton\n [nasClass]=\"getAirportSelectComboClass('switcher', (originAirportCodeValue && destinationAirportCodeValue) && 'filled')\"\n (mouseover)=\"changeSwitchIcon()\" (mouseleave)=\"changeSwitchIcon()\" (keydown)=\"swapKeyDown($event)\"\n (click)=\"swapAirports()\">\n <nas-icon\n [type]=\"(this.destinationAirportCodeValue && this.originAirportCodeValue) ? 'vector--secondary' : 'vector'\"></nas-icon>\n </div>\n </ng-container>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-airport-select{position:relative;width:100%;text-align:left}.nas-airport-select label{margin-bottom:0;height:67px}.nas-airport-select:first-child{margin-bottom:0}.nas-airport-select:only-child{max-width:360px}.nas-airport-select--expanded{z-index:30}.nas-airport-select__wrapper{position:relative;display:block;z-index:3;background-color:#fff;border:2px solid #6F6F6F}.nas-airport-select__wrapper--active{background-color:#ebf4ff;border:2px solid #15273F}.nas-airport-select__wrapper--filled{border:2px solid #15273F}.nas-airport-select__wrapper--label-outside{background-color:transparent;border:0}.nas-airport-select__wrapper--label-outside input{height:50px!important;border:2px solid #6F6F6F}.nas-airport-select__wrapper--label-outside .nas-airport-select__icon{bottom:6px}.nas-airport-select__wrapper--label-outside .nas-airport-select__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:16px;margin-bottom:6px;padding:0}.nas-airport-select__wrapper--label-outside .nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 16px;background-color:#fff}.nas-airport-select__wrapper--label-outside .nas-airport-select__input[type=text]:focus{background-color:#ebf4ff;border:2px solid #15273F}.nas-airport-select__list-section-label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:14px;line-height:20px;position:relative;z-index:2;text-align:center;padding:3px 12px;background-color:#e9e7e4}.nas-airport-select__list-section-label:not(:first-child){margin-top:-1px}.nas-airport-select__label{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:inherit}.nas-airport-select__input{height:64px;position:relative;z-index:3;line-height:1;margin:0;background-color:transparent}.nas-airport-select__input[type=text]{padding:0 16px 9px}.nas-airport-select__input[type=text]:focus{border-bottom:none}.nas-airport-select__label+.nas-airport-select__input{height:34px;position:relative;z-index:3;line-height:1;margin:0;background-color:transparent}.nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 16px 9px}.nas-airport-select__icon{position:absolute;z-index:4;right:18px;bottom:18px}.nas-airport-select__results-wrapper{position:relative;z-index:4;perspective:1000px;margin-top:-4px}.nas-airport-select__results-wrapper--label-outside{margin-top:9px}.nas-airport-select__results{position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;border:2px solid #15273F;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:airport-select-results .65s ease both}.nas-airport-select__dummy{position:absolute;left:-100px}.nas-airport-select__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:airport-select-backdrop .7s ease-out both}.nas-airport-select__list-item{border-bottom:2px solid #E9E7E4}.nas-airport-select__list-item:last-child{border-bottom:0}.nas-airport-select__list-item:not(:last-of-type):after{content:\"\";display:block;width:100%;position:absolute;bottom:0;border-bottom:1px solid #E9E7E4}.nas-airport-select__geolocation--label{align-self:center;padding-left:4px}.nas-airport-select__geolocation--icon{margin:3px 3px 0}.nas-airport-select__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:16px;margin-top:-1px;display:flex;justify-content:space-between;outline:0}.nas-airport-select__item--focus,.nas-airport-select__item:hover,.nas-airport-select__item:focus{background-color:#15273f}.nas-airport-select__item--focus,.nas-airport-select__item--focus .nas-airport-select__name,.nas-airport-select__item--focus .nas-airport-select__code,.nas-airport-select__item:hover,.nas-airport-select__item:hover .nas-airport-select__name,.nas-airport-select__item:hover .nas-airport-select__code,.nas-airport-select__item:focus,.nas-airport-select__item:focus .nas-airport-select__name,.nas-airport-select__item:focus .nas-airport-select__code{color:#fff!important}.nas-airport-select__item--disabled{border-bottom-width:0}.nas-airport-select__item--disabled,.nas-airport-select__item--disabled .nas-airport-select__name,.nas-airport-select__item--disabled .nas-airport-select__code{color:#6f6f6f!important}.nas-airport-select__item--disabled:hover,.nas-airport-select__item--disabled:focus{background-color:#fff;cursor:auto}.nas-airport-select__item--disabled:hover,.nas-airport-select__item--disabled:hover .nas-airport-select__name,.nas-airport-select__item--disabled:hover .nas-airport-select__code,.nas-airport-select__item--disabled:focus,.nas-airport-select__item--disabled:focus .nas-airport-select__name,.nas-airport-select__item--disabled:focus .nas-airport-select__code{color:#6f6f6f!important}.nas-airport-select__item--geolocation{border-bottom:2px solid #E9E7E4}.nas-airport-select__name,.nas-airport-select__code{display:inline-block;font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-airport-select__name--invalid,.nas-airport-select__code--invalid{margin:12px}.nas-airport-select__code{margin-left:.12em}.nas-airport-select__country{display:block;font-size:14px}.nas-airport-select__empty{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;font-size:16px;line-height:1.4;color:#15273f;margin:0;padding:12px}.nas-airport-select__empty-list{display:block;margin:12px}.nas-icon-vector,.nas-icon-vector--secondary{margin-bottom:2px}.nas-filter .nas-airport-select-combo,.nas-search-filter .nas-airport-select-combo{margin:0 3px 0 0}.nas-airport-select-combo{position:relative;display:flex;flex-direction:column;width:100%;margin:8px auto;gap:8px}.nas-airport-select-combo--inline{flex-direction:row}.nas-airport-select-combo--inline .nas-airport-select-combo__switcher{left:48%;top:14px;transform:rotate(90deg)}.nas-airport-select-combo--inline .nas-airport-select--padding-destination .nas-airport-select__label{padding:12px 24px 0}.nas-airport-select-combo--inline .nas-airport-select--padding-destination .nas-airport-select__label+.nas-airport-select__input[type=text]{padding:0 24px 12px}.nas-airport-select-combo__switcher{position:absolute;top:48px;z-index:3;left:76%;cursor:pointer;border:2px solid #6F6F6F;border-radius:50%;width:40px;height:40px;background-color:#fff;justify-content:center;align-items:center;display:flex}.nas-airport-select-combo__switcher:focus{outline:none;box-shadow:0 0 1px 2px #e9e7e4,0 0 2px 3px #7ca4cd}.nas-airport-select-combo__switcher--filled{border:2px solid #15273F}@keyframes airport-select-backdrop{0%{opacity:0}}@keyframes airport-select-results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}\n"] }]
402
- }], ctorParameters: function () { return [{ type: i1.DeviceHelper }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { container: [{
403
- type: ViewChild,
404
- args: ['container']
405
- }], switchButton: [{
406
- type: ViewChild,
407
- args: ['switchButton']
408
- }], airportSelectDropdownOrigin: [{
409
- type: ViewChild,
410
- args: ['airportSelectDropdownOrigin']
411
- }], airportSelectDropdownDestination: [{
412
- type: ViewChild,
413
- args: ['airportSelectDropdownDestination']
414
- }], outboundId: [{
415
- type: Input
416
- }], inboundId: [{
417
- type: Input
418
- }], airports: [{
419
- type: Input
420
- }], airportRelations: [{
421
- type: Input
422
- }], latestSearchesOrigin: [{
423
- type: Input
424
- }], latestSearchesDestination: [{
425
- type: Input
426
- }], closestAirports: [{
427
- type: Input
428
- }], allowedOriginAiports: [{
429
- type: Input
430
- }], allowedDestinationAirports: [{
431
- type: Input
432
- }], displayLatestSearches: [{
433
- type: Input
434
- }], displayClosestAirports: [{
435
- type: Input
436
- }], combo: [{
437
- type: Input
438
- }], useSwitch: [{
439
- type: Input
440
- }], allAirportsLabel: [{
441
- type: Input
442
- }], latestSearchesLabel: [{
443
- type: Input
444
- }], closestAirportsLabel: [{
445
- type: Input
446
- }], geolocationLabel: [{
447
- type: Input
448
- }], geolocationBlockedLabel: [{
449
- type: Input
450
- }], selectOriginFirstLabel: [{
451
- type: Input
452
- }], noAirportsLabel: [{
453
- type: Input
454
- }], invalidDestinationText: [{
455
- type: Input
456
- }], labelOrigin: [{
457
- type: Input
458
- }], placeholderOrigin: [{
459
- type: Input
460
- }], labelDestination: [{
461
- type: Input
462
- }], placeholderDestination: [{
463
- type: Input
464
- }], labelOutside: [{
465
- type: Input
466
- }], keepSelection: [{
467
- type: Input
468
- }], nasFormControlNameOrigin: [{
469
- type: Input
470
- }], nasFormControlNameDestination: [{
471
- type: Input
472
- }], nasFormGroup: [{
473
- type: Input
474
- }], originAirportCode: [{
475
- type: Input
476
- }], destinationAirportCode: [{
477
- type: Input
478
- }], ariaLabelClear: [{
479
- type: Input
480
- }], ariaLabelBackdrop: [{
481
- type: Input
482
- }], originChange: [{
483
- type: Output
484
- }], originOpenChange: [{
485
- type: Output
486
- }], destinationChange: [{
487
- type: Output
488
- }], destinationOpenChange: [{
489
- type: Output
490
- }], focusOnNext: [{
491
- type: Output
492
- }], positionChange: [{
493
- type: Output
494
- }], onResize: [{
495
- type: HostListener,
496
- args: ["window:resize", ["$event"]]
497
- }] } });
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWlycG9ydC1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2FpcnBvcnQtc2VsZWN0L2FpcnBvcnQtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFJVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7O0FBSzlDOzs7R0FHRztBQU9ILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFrUTFEOzs7O09BSUc7SUFDSCxJQUNJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ2hDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxD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O2dCQU9HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFRRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFPRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBUUcsYUFBYTtzQkFBckIsS0FBSztnQkFTRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBU0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQVNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBUUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQXNCRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBcUJHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9JLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNO2dCQVlQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm9yd2VnaWFuIEFpciBTaHV0dGxlLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEFpcnBvcnRNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2FpcnBvcnQubW9kZWwnO1xuaW1wb3J0IHsgQ2xhc3NNb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2NsYXNzLm1vZGVsJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOYXNDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBSZXN1bHRzTGFiZWxzTW9kZWwgfSBmcm9tICcuL21vZGVscy9yZXN1bHRzLWxhYmVscy5tb2RlbCc7XG5pbXBvcnQgeyBBaXJwb3J0U2VsZWN0RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEFpcnBvcnQgU2VsZWN0IENvbXBvbmVudCB8IEZ1bmN0aW9uYWwgfCBOZXcgZGVzaWduXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1haXJwb3J0LXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FpcnBvcnQtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQWlycG9ydFNlbGVjdENvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBhaXJwb3J0c09yaWdpbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgYWlycG9ydHNEZXN0aW5hdGlvbiA9IG5ldyBBcnJheTxBaXJwb3J0TW9kZWw+KCk7XG4gIGN1cnJlbnRMYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBjbG9zZXN0QWlycG9ydHNEZXN0aW5hdGlvbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgZm9jdXNEZXN0aW5hdGlvbiA9IGZhbHNlO1xuICB0ZXh0U2VsZWN0T3JpZ2luRmlyc3Q6IHN0cmluZztcbiAgZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGVEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBmb2N1c2VkQWlycG9ydENvZGVEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleERlc3RpbmF0aW9uID0gLTE7XG4gIGZvY3VzZWRBaXJwb3J0SW5kZXhEZXN0aW5hdGlvbiA9IC0xO1xuICBzd2l0Y2hUeXBlID0gJ3N3aXRjaCc7XG4gIGlzRGVzdGluYXRpb25WYWxpZDogYm9vbGVhbjtcbiAgaW5saW5lRmxleCA9IGZhbHNlO1xuICBub0Rlc3RpbmF0aW9uQWlycG9ydHNBdmFpbGFibGU6IGJvb2xlYW47XG5cbiAgcmVzdWx0c0xhYmVsczogUmVzdWx0c0xhYmVsc01vZGVsID0ge1xuICAgIGFsbEFpcnBvcnRzOiAnJyxcbiAgICBjbG9zZXN0QWlycG9ydHM6ICcnLFxuICAgIGxhdGVzdFNlYXJjaGVzOiAnJyxcbiAgICBnZW9sb2NhdGlvbjogJycsXG4gICAgZ2VvbG9jYXRpb25EZW5pZWQ6ICcnLFxuICAgIG5vQWlycG9ydHM6ICcnXG4gIH07XG5cbiAgb3JpZ2luT3BlbiA9IGZhbHNlO1xuICBkZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgY2xlYXJlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3dpdGNoQnV0dG9uJykgc3dpdGNoQnV0dG9uOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdhaXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4nKSBhaXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW46IEFpcnBvcnRTZWxlY3REcm9wZG93bkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24nKSBhaXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbjogQWlycG9ydFNlbGVjdERyb3Bkb3duQ29tcG9uZW50O1xuXG4gIG9yaWdpbjogQWlycG9ydE1vZGVsO1xuICBkZXN0aW5hdGlvbjogQWlycG9ydE1vZGVsO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBvdXRib3VuZCBhaXBvcnQgc2VsZWN0IElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudFxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAqIEBkZXNjcmlwdGlvblxuICAqIFRoZSBpbmJvdW5kIGFpcG9ydCBzZWxlY3QgSUQgb2YgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50XG4gICovXG4gIEBJbnB1dCgpIGluYm91bmRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbGwgYWlycG9ydHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZSBkcm9wZG93biBsaXN0cy5cbiAgICovXG4gIEBJbnB1dCgpIGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcmVjb3JkIGNvbnRhaW5pbmcga2V5cyB3aXRoIGFsbCBhaXJwb3J0IGNvZGVzIHdpdGggY29ycmVzcG9uZGluZyBhcnJheSBvZiBhaXJwb3J0IGNvZGVzIGNvbm5lY3RlZCB0byB0aGUga2V5LlxuICAgKi9cbiAgQElucHV0KCkgYWlycG9ydFJlbGF0aW9uczogUmVjb3JkPHN0cmluZywgQXJyYXk8c3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2Ygb3JpZ2luIGFpcnBvcnRzIHRoYXQgdGhlIHVzZXIgaGFzIGFsbHJlYWR5IHNlYXJjaCBmb3IuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc09yaWdpbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBkZXN0aW5hdGlvbiBhaXJwb3J0cyB0aGF0IHRoZSB1c2VyIGhhcyBhbGxyZWFkeSBzZWFyY2ggZm9yLlxuICAgKi9cbiAgQElucHV0KCkgbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbjogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBhaXJwb3J0cyB0aGF0IGFyZSBjbG9zZSB0byB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpIGNsb3Nlc3RBaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxpc3Qgb2YgYWlycG9ydHMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBvcmlnaW4gZHJvcGRvd24uXG4gICAqIElmIG5vdCBpbmNsdWRlZCwgYWxsIGFpcnBvcnRzIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dlZE9yaWdpbkFpcG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgYWlycG9ydHMgdGhhdCBhcmUgcmVzdHJpY3RlZCBmb3IgZGVzdGluYXRpb24gYWlycG9ydHMuIEl0IHdpbGwgZGVmYXVsdCB0byBhaXJwb3J0cyBpZiBub3Qgc2V0LlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCB0aGUgdXNlciBhbGxyZWFkeSBoYXMgc2VhcmggZm9yIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5TGF0ZXN0U2VhcmNoZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgYXJlIGNsb3NlIHRvIHRoZSB1c2VyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IGJvdGggb3JnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKSBjb21ibz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSBzd2l0Y2ggVUkgdG8gaW50ZXJjaGFuZ2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBhaXJwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgdXNlU3dpdGNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIGFsbCBhaXJwb3J0cyBpbiB0aGUgZHJvcCBkb3duIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKSBhbGxBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBkcm9wIGRvd24gbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpIGxhdGVzdFNlYXJjaGVzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBjbG9zZXN0IGFpcnBvcnRzIGluIHRoZSBkcm9wIGRvd24gbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpIGNsb3Nlc3RBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uIGluIHRoZSBkcm9wIGRvd24gbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpIGdlb2xvY2F0aW9uTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gbXkgbG9jYXRpb24sIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpZiB1c2VyIGhhcyBkZW5pZWQgZ2VvbG9jYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgaWYgdGhlXG4gICAqIHVzZXIgdHJpZXMgdG8gc2VsZWN0IGEgZGVzdGluYXRpb24gYWlycG9ydCB3aXRob3V0IHNlbGVjdGluZyBhbiBvcmlnaW4gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE9yaWdpbkZpcnN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgYXBwZWFyIGluIHRoZSBsaXN0IHRoYXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGFpcnBvcnRzXG4gICAqL1xuICBASW5wdXQoKSBub0FpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBkZXN0aW5hdGlvbnMgZHJvcGRvd24gbGlzdCB3aGVuIG9yaWdpbiBhaXJwb3J0IGlzIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkRGVzdGluYXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgdGhlIG9yaWdpbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxPcmlnaW4gPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIG9yaWdpbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJPcmlnaW4gPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxEZXN0aW5hdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGFwcGVhciBvbiB0aGUgZGVzdGluYXRpb24gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyRGVzdGluYXRpb24gPSAnJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZWNpZGVzIGlmIGEgbGFiZWwgc2hvdWxkIGJlIG91dHNpZGUgb2YgdGhlIGNvbnRhaW5lciBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE91dHNpZGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyB0aGUgcGFyZW50J3MgZm9ybSBncm91cC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgaXMgcmVxdWllcmVkIHRvIGJlIGZpbGxlZCBpZiBuYXNGb3JtQ29udHJvbE5hbWUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBvcmlnaW4gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3JpZ2luQWlycG9ydENvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luQWlycG9ydENvZGVWYWx1ZTtcbiAgfVxuICBzZXQgb3JpZ2luQWlycG9ydENvZGUoY29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVZhbHVlID0gY29kZTtcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVZhbHVlID0gJyc7XG4gICAgICB0aGlzLmNsZWFyT3JpZ2luKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIGRlc3RpbmF0aW9uIGFpcnBvcnQgYmFzZWQgb24gdGhpcyB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkZXN0aW5hdGlvbkFpcnBvcnRDb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uQWlycG9ydENvZGVWYWx1ZTtcbiAgfVxuICBzZXQgZGVzdGluYXRpb25BaXJwb3J0Q29kZShjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29kZSkge1xuICAgICAgaWYgKGNvZGUgIT09IHRoaXMuZGVzdGluYXRpb25BaXJwb3J0Q29kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb25BaXJwb3J0Q29kZVZhbHVlID0gY29kZTtcbiAgICAgICAgdGhpcy5zZXREZXN0aW5hdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uQWlycG9ydENvZGVWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5jbGVhckRlc3RpbmF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgb24gdGhlIGNsZWFyIGJ1dHRvbiBpbnNpZGUgdGhlIGFpcnBvcnQgc2VsZWN0IGlucHV0cy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbENsZWFyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgdG8gdGhlIGJhY2tkcm9wcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgb3JpZ2luIGFpcnBvcnQgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBvcmlnaW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIG9yaWdpbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICogQHByb3BlcnR5IE91dHB1dFxuICAqIEBkZXNjcmlwdGlvblxuICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgb3JpZ2luIGRyb3Bkb3duIHNlbGVjdG9yIG9wZW5zIG9yIGNsb3Nlcy5cbiAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgZGVzdGluYXRpb24gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGRlc3RpbmF0aW9uT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBkcm9wZG93biBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPbk5leHQgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgd2hlbiBnZW9sb2NhdGlvbiBwb3NpdGlvbiBoYXMgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwb3NpdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2VvbG9jYXRpb25Qb3NpdGlvbj4oKTtcblxuICBwcml2YXRlIG9yaWdpbkFpcnBvcnRDb2RlVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbkFpcnBvcnRDb2RlVmFsdWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldmljZUhlbHBlcjogRGV2aWNlSGVscGVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcignbmFzLWFpcnBvcnQtc2VsZWN0Jyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXCIkZXZlbnRcIl0pXG4gIG9uUmVzaXplKCkge1xuICAgIHRoaXMuc2V0SW5saW5lRmxleCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmFpcnBvcnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgaW5wdXQ6IFthaXJwb3J0c10nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3VsdHNMYWJlbHMgPSB7XG4gICAgICBhbGxBaXJwb3J0czogdGhpcy5hbGxBaXJwb3J0c0xhYmVsIHx8ICcnLFxuICAgICAgY2xvc2VzdEFpcnBvcnRzOiB0aGlzLmNsb3Nlc3RBaXJwb3J0c0xhYmVsIHx8ICcnLFxuICAgICAgbGF0ZXN0U2VhcmNoZXM6IHRoaXMubGF0ZXN0U2VhcmNoZXNMYWJlbCB8fCAnJyxcbiAgICAgIGdlb2xvY2F0aW9uOiB0aGlzLmdlb2xvY2F0aW9uTGFiZWwgfHwgJycsXG4gICAgICBnZW9sb2NhdGlvbkRlbmllZDogdGhpcy5nZW9sb2NhdGlvbkJsb2NrZWRMYWJlbCB8fCAnJyxcbiAgICAgIG5vQWlycG9ydHM6IHRoaXMubm9BaXJwb3J0c0xhYmVsIHx8ICcnXG4gICAgfTtcblxuICAgIHRoaXMudGV4dFNlbGVjdE9yaWdpbkZpcnN0ID0gdGhpcy5zZWxlY3RPcmlnaW5GaXJzdExhYmVsO1xuICAgIHRoaXMuYWlycG9ydHNPcmlnaW4gPSB0aGlzLmFsbG93ZWRPcmlnaW5BaXBvcnRzICYmIHRoaXMuYWxsb3dlZE9yaWdpbkFpcG9ydHMubGVuZ3RoID4gMCA/IHRoaXMuYWxsb3dlZE9yaWdpbkFpcG9ydHMgOiB0aGlzLmFpcnBvcnRzO1xuXG4gICAgdGhpcy5haXJwb3J0c0Rlc3RpbmF0aW9uID0gdGhpcy5nZXRBaXJwb3J0c0Rlc3RpbmF0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwKSB7XG4gICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVPcmlnaW4pIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpbik7XG5cbiAgICAgICAgaWYgKG9yaWdpbkNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmFpcnBvcnRzT3JpZ2luLmZpbmQoeCA9PiB4Lm5hbWUgPT09IG9yaWdpbkNvbnRyb2wudmFsdWUpO1xuXG4gICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IG9yaWdpbi5jb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvbikge1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbkNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEZXN0aW5hdGlvbik7XG5cbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5haXJwb3J0c0Rlc3RpbmF0aW9uLmZpbmQoeCA9PiB4Lm5hbWUgPT09IGRlc3RpbmF0aW9uQ29udHJvbC52YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25BaXJwb3J0Q29kZSA9IGRlc3RpbmF0aW9uLmNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlc3RpbmF0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyRGVzdGluYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5kZXN0aW5hdGlvbik7XG4gICAgdGhpcy5vcmlnaW5DaGFuZ2UuZW1pdCh0aGlzLm9yaWdpbik7XG5cblxuICAgIGlmICh0aGlzLm9yaWdpbkFpcnBvcnRDb2RlKSB7XG4gICAgICB0aGlzLnNldE9yaWdpbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlc3RpbmF0aW9uQWlycG9ydENvZGUpIHtcbiAgICAgIHRoaXMuc2V0RGVzdGluYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXRJbmxpbmVGbGV4KCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0QWlycG9ydFNlbGVjdENvbWJvQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIG1vZGlmaWVyc0lucHV0ID09PSAnc3RyaW5nJyB8fCBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2s6ICduYXMtYWlycG9ydC1zZWxlY3QtY29tYm8nLFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gICAgfTtcbiAgfVxuXG4gIG9uT3JpZ2luT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9yaWdpbk9wZW4gPSBvcGVuO1xuICAgIH0pO1xuICAgIHRoaXMuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcmlnaW5PcGVuQ2hhbmdlLmVtaXQob3Blbik7XG4gIH1cblxuICBvbkRlc3RpbmF0aW9uT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW4gPSBvcGVuO1xuICAgIHRoaXMub3JpZ2luT3BlbiA9IGZhbHNlOyAgICBcblxuICAgIGlmKHRoaXMub3JpZ2luQWlycG9ydENvZGUgJiYgKHRoaXMuYWlycG9ydHNEZXN0aW5hdGlvbiAmJiB0aGlzLmFpcnBvcnRzRGVzdGluYXRpb24ubGVuZ3RoIDw9IDApKSB7XG4gICAgICB0aGlzLm5vRGVzdGluYXRpb25BaXJwb3J0c0F2YWlsYWJsZSA9IHRydWU7XG4gICAgICB0aGlzLmNsZWFyRGVzdGluYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3RpbmF0aW9uT3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DbGVhcmVkKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJlZCA9IHRydWU7XG4gIH1cblxuICBzZXRTZWxlY3RlZE9yaWdpbihhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm5vRGVzdGluYXRpb25BaXJwb3J0c0F2YWlsYWJsZSA9IGZhbHNlO1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3JpZ2luID0gYWlycG9ydDtcbiAgICB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlVmFsdWUgPSBhaXJwb3J0LmNvZGU7XG4gICAgdGhpcy5pc0Rlc3RpbmF0aW9uVmFsaWQgPSBhaXJwb3J0LmNvZGUgPyB0cnVlIDogZmFsc2U7XG5cbiAgICBpZiAodGhpcy5haXJwb3J0UmVsYXRpb25zICYmIHRoaXMuaGFzVmFsaWREZXN0aW5hdGlvbnMoYWlycG9ydCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsaWRBaXJwb3J0RGVzdGluYXRpb25zKGFpcnBvcnQpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50TGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFpcnBvcnRzRGVzdGluYXRpb24gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jbGVhcmVkID0gZmFsc2U7XG4gICAgdGhpcy5vcmlnaW5DaGFuZ2UuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkRGVzdGluYXRpb24oYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCFhaXJwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IGFpcnBvcnQ7IFxuICAgIHRoaXMuZGVzdGluYXRpb25BaXJwb3J0Q29kZVZhbHVlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuY2xlYXJlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZXN0aW5hdGlvbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPbk5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzT25OZXh0LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25PcmlnaW5Gb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25PcmlnaW4pIHtcbiAgICAgIHRoaXMub25PcmlnaW5PcGVuKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN3aXRjaEljb24oKTogdm9pZCB7XG4gICAgdGhpcy5zd2l0Y2hUeXBlID0gdGhpcy5zd2l0Y2hUeXBlID09PSAnc3dpdGNoJyA/ICdzd2l0Y2gtLXNlY29uZGFyeScgOiAnc3dpdGNoJztcbiAgfVxuXG4gIHN3YXBBaXJwb3J0cygpOiB2b2lkIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHsgLi4udGhpcy5kZXN0aW5hdGlvbiB9O1xuICAgIGNvbnN0IG9yaWdpbiA9IHsgLi4udGhpcy5vcmlnaW4gfTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uID0gb3JpZ2luO1xuICAgIHRoaXMub3JpZ2luID0gZGVzdGluYXRpb247XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGVzdGluYXRpb24odGhpcy5kZXN0aW5hdGlvbik7XG4gICAgdGhpcy5zZXRTZWxlY3RlZE9yaWdpbih0aGlzLm9yaWdpbik7XG4gIH1cblxuICBzd2FwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHRoaXMuc3dhcEFpcnBvcnRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldERlc3RpbmF0aW9uT3BlbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmNvbWJvKSkge1xuICAgICAgdGhpcy5vbkRlc3RpbmF0aW9uT3Blbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRGb2N1c09uTmV4dChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xvc2VzdEFpcnBvcnRzKHBvc2l0aW9uOiBHZW9sb2NhdGlvblBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIHNldElubGluZUZsZXgoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lciAmJiAhdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbmxpbmVGbGV4ID0gIXRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhNb2JpbGUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFpcnBvcnRzRGVzdGluYXRpb25zKCk6IEFycmF5PEFpcnBvcnRNb2RlbD4ge1xuICAgIGNvbnN0IGFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzID0gdGhpcy5hbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0cztcblxuICAgIHJldHVybiBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0cyAmJiBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0cy5sZW5ndGggPiAwXG4gICAgICA/IGFsbG93ZWREZXN0aW5hdGlvbkFpcnBvcnRzXG4gICAgICA6IHRoaXMuYWlycG9ydHM7XG4gIH1cblxuICBwcml2YXRlIHNldE9yaWdpbigpOiB2b2lkIHtcbiAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5haXJwb3J0cy5maW5kKHggPT4geC5jb2RlID09PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlKTtcblxuICAgIGlmIChhaXJwb3J0KSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkT3JpZ2luKGFpcnBvcnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVzdGluYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgYWlycG9ydCA9IHRoaXMuYWlycG9ydHMuZmluZCh4ID0+IHguY29kZSA9PT0gdGhpcy5kZXN0aW5hdGlvbkFpcnBvcnRDb2RlKTtcblxuICAgIGlmIChhaXJwb3J0KSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkRGVzdGluYXRpb24oYWlycG9ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZEFpcnBvcnREZXN0aW5hdGlvbnMoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFpcnBvcnRSZWxhdGlvbnMpIHtcbiAgICAgIHRoaXMuYWlycG9ydHNEZXN0aW5hdGlvbiA9IHRoaXMuYWlycG9ydHNPcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbGlkRGVzdGluYXRpb25zID0gdGhpcy5nZXRBaXJwb3J0UmVsYXRpb25zKGFpcnBvcnQpO1xuXG4gICAgICBpZiAoIXZhbGlkRGVzdGluYXRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkRGVzdGluYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmNsZWFyRGVzdGluYXRpb25zKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaXNEZXN0aW5hdGlvblZhbGlkOiBib29sZWFuO1xuICAgICAgICBpZiAodGhpcy5kZXN0aW5hdGlvbiAmJiB0aGlzLmRlc3RpbmF0aW9uLmNvZGUpIHtcbiAgICAgICAgICBpc0Rlc3RpbmF0aW9uVmFsaWQgPSB2YWxpZERlc3RpbmF0aW9ucy5zb21lKHggPT4geCAmJiB4LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuZGVzdGluYXRpb24uY29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRGVzdGluYXRpb25WYWxpZCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJEZXN0aW5hdGlvbigpO1xuICAgICAgICAgIHRoaXMuZGVzdGluYXRpb25DaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFpcnBvcnRzKSB7XG4gICAgICAgICAgdGhpcy5haXJwb3J0c0Rlc3RpbmF0aW9uID0gdGhpcy5haXJwb3J0c1xuICAgICAgICAgICAgLmZpbHRlcihhaXJwb3J0SXRlbSA9PiBhaXJwb3J0SXRlbVxuICAgICAgICAgICAgICAmJiBhaXJwb3J0SXRlbS5jb2RlXG4gICAgICAgICAgICAgICYmIHZhbGlkRGVzdGluYXRpb25zLnNvbWUoeCA9PiB4ICYmIGFpcnBvcnRJdGVtLmNvZGUudG9Mb3dlckNhc2UoKSA9PT0geC50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc1ZhbGlkRGVzdGluYXRpb25zKG9yaWdpbjogQWlycG9ydE1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvcmlnaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRpb25zID0gdGhpcy5nZXRBaXJwb3J0UmVsYXRpb25zKG9yaWdpbik7XG5cbiAgICByZXR1cm4gcmVsYXRpb25zICYmIHJlbGF0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBaXJwb3J0UmVsYXRpb25zKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0cykge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydFJlbGF0aW9uc1thaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKV0gfHwgdGhpcy5haXJwb3J0UmVsYXRpb25zW2FpcnBvcnQuY29kZS50b1VwcGVyQ2FzZSgpXTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJPcmlnaW4oKSB7XG4gICAgdGhpcy5zZXRTZWxlY3RlZE9yaWdpbih7XG4gICAgICBjb2RlOiAnJyxcbiAgICAgIGNvdW50cnlOYW1lOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgYWlycG9ydE5hbWU6ICcnLFxuICAgICAgZGlzcGxheU5hbWU6ICcnLFxuICAgICAgbm9ybWFsaXplZEFpcnBvcnROYW1lOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJEZXN0aW5hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkRGVzdGluYXRpb24oe1xuICAgICAgY29kZTogJycsXG4gICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEZXN0aW5hdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5haXJwb3J0c0Rlc3RpbmF0aW9uID0gbmV3IEFycmF5PEFpcnBvcnRNb2RlbD4oKTtcblxuICAgIGNvbnN0IG1vZGVsID0ge1xuICAgICAgbmFtZTogdGhpcy50ZXh0U2VsZWN0T3JpZ2luRmlyc3QsXG4gICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICBjb2RlOiAnJyxcbiAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICB9O1xuXG4gICAgdGhpcy5haXJwb3J0c0Rlc3RpbmF0aW9uLnB1c2gobW9kZWwpO1xuICAgIHRoaXMuY2xlYXJEZXN0aW5hdGlvbigpO1xuICAgIHRoaXMuZGVzdGluYXRpb25DaGFuZ2UuZW1pdChtb2RlbCk7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnJlbnRMYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFpcnBvcnRzRGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudExhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLmFpcnBvcnRzRGVzdGluYXRpb24uZmlsdGVyKGFpcnBvcnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbi5zb21lKHggPT4geC5jb2RlICYmIHguY29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImV4aXN0cyhjb21ibyk7IGVsc2UgYWlycG9ydFNlbGVjdFRlbXBsYXRlXCJcbiAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDb21ib0NsYXNzKCcnLCBbaW5saW5lRmxleCAmJiAnaW5saW5lJ10pXCIgI2NvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFpcnBvcnRTZWxlY3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2FpcnBvcnRTZWxlY3RUZW1wbGF0ZT5cbiAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJycsIGV4aXN0cyh1c2VTd2l0Y2gpICYmICdwYWRkaW5nLW9yaWdpbicpXCIgKm5nSWY9XCJhaXJwb3J0c09yaWdpblwiPlxuICAgIDxuYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24gI2FpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgW2lkXT1cIm91dGJvdW5kSWRcIlxuICAgICAgW2VuYWJsZUdlb2xvY2F0aW9uXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIiBbZGlzcGxheUNsb3Nlc3RBaXJwb3J0c109XCJkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgIFthaXJwb3J0U2VsZWN0TGFiZWxdPVwibGFiZWxPcmlnaW5cIiBbbGF0ZXN0U2VhcmNoZXNdPVwibGF0ZXN0U2VhcmNoZXNPcmlnaW5cIiBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICBbYWlycG9ydF09XCJvcmlnaW5cIiBbYWlycG9ydHNdPVwiYWlycG9ydHNPcmlnaW5cIiBbcmVzdWx0c0xhYmVsc109XCJyZXN1bHRzTGFiZWxzXCJcbiAgICAgIFthaXJwb3J0U2VsZWN0UGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJPcmlnaW5cIiBbb3Blbl09XCJvcmlnaW5PcGVuXCIgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICBbYWlycG9ydFNlbGVjdEljb25Nb2RpZmllcl09XCInZmxpZ2h0LWRlcGFydHVyZSdcIiBbbmFzRm9ybUNvbnRyb2xOYW1lXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiXG4gICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICBbbGFiZWxPdXRzaWRlXT1cImxhYmVsT3V0c2lkZVwiIChjbGVhcmVkU2VsZWN0aW9uKT1cIm9uU2VsZWN0aW9uQ2xlYXJlZCgpXCIgKHNlbGVjdGVkKT1cInNldFNlbGVjdGVkT3JpZ2luKCRldmVudClcIlxuICAgICAgKG9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIiAoZm9jdXNPbk5leHQpPVwic2V0RGVzdGluYXRpb25PcGVuKCRldmVudClcIlxuICAgICAgKHBvc2l0aW9uQ2hhbmdlKT1cImdldENsb3Nlc3RBaXJwb3J0cygkZXZlbnQpXCI+PC9uYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhpc3RzKGNvbWJvKVwiPlxuICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCcnLCBleGlzdHModXNlU3dpdGNoKSAmJiAncGFkZGluZy1kZXN0aW5hdGlvbicpXCI+XG4gICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duICNhaXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgW2lkXT1cImluYm91bmRJZFwiXG4gICAgICAgIFthaXJwb3J0U2VsZWN0TGFiZWxdPVwibGFiZWxEZXN0aW5hdGlvblwiIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImZhbHNlXCJcbiAgICAgICAgW2xhdGVzdFNlYXJjaGVzXT1cImN1cnJlbnRMYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCIgW2FpcnBvcnRzXT1cImFpcnBvcnRzRGVzdGluYXRpb25cIlxuICAgICAgICBbcmVzdWx0c0xhYmVsc109XCJyZXN1bHRzTGFiZWxzXCIgW2FpcnBvcnRdPVwiZGVzdGluYXRpb25cIiBbYWlycG9ydFNlbGVjdFBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyRGVzdGluYXRpb25cIlxuICAgICAgICBbb3Blbl09XCJkZXN0aW5hdGlvbk9wZW5cIiBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCIgW2FpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXJdPVwiJ2ZsaWdodC1hcnJpdmFsJ1wiXG4gICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb25cIiBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiIFtpc1ZhbGlkXT1cImlzRGVzdGluYXRpb25WYWxpZFwiXG4gICAgICAgIFtpbnZhbGlkVGV4dF09XCJpbnZhbGlkRGVzdGluYXRpb25UZXh0XCIgW2xhYmVsT3V0c2lkZV09XCJsYWJlbE91dHNpZGVcIiAoY2xlYXJlZFNlbGVjdGlvbik9XCJvblNlbGVjdGlvbkNsZWFyZWQoKVwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJzZXRTZWxlY3RlZERlc3RpbmF0aW9uKCRldmVudClcIiAob3BlbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uT3BlbigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzT25OZXh0KT1cInNldEZvY3VzT25OZXh0KCRldmVudClcIiAoZm9jdXNPblByZXZpb3VzKT1cIm9uT3JpZ2luRm9jdXMoKVwiIFtub0FpcnBvcnRzQXZhaWxhYmxlXT1cIm5vRGVzdGluYXRpb25BaXJwb3J0c0F2YWlsYWJsZVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJleGlzdHModXNlU3dpdGNoKSAmJiAhKG9yaWdpbk9wZW4gfHwgZGVzdGluYXRpb25PcGVuIHx8IGNsZWFyZWQpXCIgI3N3aXRjaEJ1dHRvblxuICAgICAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDb21ib0NsYXNzKCdzd2l0Y2hlcicsIChvcmlnaW5BaXJwb3J0Q29kZVZhbHVlICYmIGRlc3RpbmF0aW9uQWlycG9ydENvZGVWYWx1ZSkgJiYgJ2ZpbGxlZCcpXCJcbiAgICAgIChtb3VzZW92ZXIpPVwiY2hhbmdlU3dpdGNoSWNvbigpXCIgKG1vdXNlbGVhdmUpPVwiY2hhbmdlU3dpdGNoSWNvbigpXCIgKGtleWRvd24pPVwic3dhcEtleURvd24oJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwic3dhcEFpcnBvcnRzKClcIj5cbiAgICAgIDxuYXMtaWNvblxuICAgICAgICBbdHlwZV09XCIodGhpcy5kZXN0aW5hdGlvbkFpcnBvcnRDb2RlVmFsdWUgJiYgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZVZhbHVlKSA/ICd2ZWN0b3ItLXNlY29uZGFyeScgOiAndmVjdG9yJ1wiPjwvbmFzLWljb24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=