@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,606 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
3
- import { WeekStart } from './enums/week-start.enum';
4
- import { NasComponentBase } from '../../../core/base/nas-component.base';
5
- import { UtcDate } from '../../../core/models/utc-date.model';
6
- import { Debounce } from '../../../core/decorators/debounce.decorator';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../../core/services/date/date-helper.service";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "../services/calendar.service";
11
- import * as i4 from "../../select/select.component";
12
- import * as i5 from "../../icon/icon.component";
13
- import * as i6 from "../../../core/directives/nas-class/nas-class.directive";
14
- let nextId = 0;
15
- export class CalendarComponent extends NasComponentBase {
16
- /**
17
- * @description
18
- * The lowest date allowed.
19
- */
20
- get lowerLimitDate() {
21
- return this.lowerLimitDateValue;
22
- }
23
- set lowerLimitDate(date) {
24
- if (!date) {
25
- return;
26
- }
27
- this.lowerLimitDateValue = date;
28
- if (!this.selectedDate) {
29
- this.selectedDateValue = this.lowerLimitDateValue;
30
- this.activeDate = this.lowerLimitDateValue;
31
- }
32
- else if (this.selectedDate && this.dateService.isGreaterThan(date, this.selectedDate, false, true, true)) {
33
- this.selectedDateValue = this.lowerLimitDateValue;
34
- this.activeDate = this.lowerLimitDateValue;
35
- }
36
- else if (this.activeDate && this.dateService.isGreaterThan(date, this.activeDate, false, true, true)) {
37
- this.activeDate = this.lowerLimitDateValue;
38
- }
39
- this.applySelectedDateChanges();
40
- }
41
- /**
42
- * @description
43
- * An array with all the available dates of the month for seats.
44
- */
45
- get availableDates() {
46
- return this.availableDatesValue;
47
- }
48
- set availableDates(dates) {
49
- if (!dates || !this.exists(this.availability)) {
50
- return;
51
- }
52
- if (dates.length > 0) {
53
- const firstDate = dates[0];
54
- this.currentMonth = firstDate;
55
- this.setPreviousMonthDisabled();
56
- }
57
- this.availableDatesValue = dates;
58
- this.applySelectedDateChanges();
59
- if (!this.shouldFocusCalendarOnAvailableDatesUpdate) {
60
- return;
61
- }
62
- if (document.activeElement === this.nextMonthRef.nativeElement ||
63
- document.activeElement === this.previousMonthRef.nativeElement ||
64
- this.monthSelectRef && document.activeElement === this.monthSelectRef.select.nativeElement) {
65
- return;
66
- }
67
- setTimeout(() => {
68
- const elmementToFocus = this.activeDateCell;
69
- if (elmementToFocus) {
70
- elmementToFocus.focus();
71
- }
72
- this.shouldFocusCalendarOnAvailableDatesUpdate = false;
73
- }, 100);
74
- }
75
- /**
76
- * @description
77
- * Gets or sets the active date
78
- */
79
- get activeDate() {
80
- return this.activeDateValue;
81
- }
82
- set activeDate(date) {
83
- if (!date || this.dateService.isSameDate(date, this.activeDate)) {
84
- return;
85
- }
86
- if (!this.currentMonth) {
87
- this.currentMonth = date;
88
- }
89
- if (!this.dateService.isSameMonth(date, this.currentMonth)) {
90
- this.currentMonth = date;
91
- this.applySelectedDateChanges();
92
- this.setPreviousMonthDisabled();
93
- const elmementToFocus = this.activeDateCell;
94
- if (elmementToFocus) {
95
- elmementToFocus.focus();
96
- }
97
- }
98
- if (this.weeks) {
99
- this.calendarService.setActiveDate(date, this.weeks);
100
- for (const day of this.calendarService.getDays(this.weeks)) {
101
- if (!day) {
102
- continue;
103
- }
104
- if (day.isActive) {
105
- this.activeDateValue = date;
106
- this.activeDateChange.emit(date);
107
- }
108
- }
109
- }
110
- }
111
- get selectedDate() {
112
- return this.selectedDateValue;
113
- }
114
- set selectedDate(date) {
115
- if (!date) {
116
- return;
117
- }
118
- this.selectedDateValue = date;
119
- if (!this.dateService.isSameMonth(date, this.activeDate)
120
- || !this.dateService.isSameMonth(date, this.currentMonth)) {
121
- this.currentMonth = date;
122
- this.activeDateValue = date;
123
- this.applySelectedDateChanges();
124
- }
125
- this.setSelectedDate(date);
126
- }
127
- get selectedMonth() {
128
- return this.selectedValue;
129
- }
130
- set selectedMonth(option) {
131
- if (!option) {
132
- return;
133
- }
134
- this.selectedValue = option;
135
- const optionDate = this.dateService.utcDate(option.value);
136
- if (!this.dateService.isSameMonth(optionDate, this.currentMonth)) {
137
- this.currentMonth = optionDate;
138
- this.applySelectedDateChanges();
139
- this.monthChange.emit(this.currentMonth);
140
- this.setPreviousMonthDisabled();
141
- }
142
- }
143
- get nextMonthDisabled() {
144
- const nextMonthIndex = this.currentMonth
145
- && this.dateService.getUtcNumberOfMonthBetween(this.dateService.utcDate(), this.currentMonth);
146
- return (nextMonthIndex + 2) >= this.maxMonthIndex;
147
- }
148
- get currentMonthModel() {
149
- if (!this.currentMonth) {
150
- return '';
151
- }
152
- return `${this.monthNames[this.currentMonth.toDate().getUTCMonth()]} ${this.currentMonth.toDate().getUTCFullYear()}`;
153
- }
154
- /**
155
- * @description
156
- * Is in use by DatepickerComponent
157
- */
158
- get activeDateCell() {
159
- return document.querySelector('.nas-calendar__item--active');
160
- }
161
- get inputId() {
162
- return this.id ? this.id : `nas-calendar-${this.componentId}`;
163
- }
164
- get prevMonthId() {
165
- return `${this.inputId}__prev-month`;
166
- }
167
- get nextMonthId() {
168
- return `${this.inputId}__next-month`;
169
- }
170
- constructor(dateService, datePipe, calendarService) {
171
- super('nas-calendar');
172
- this.dateService = dateService;
173
- this.datePipe = datePipe;
174
- this.calendarService = calendarService;
175
- this.months = new Array();
176
- this.weekdays = new Array();
177
- /**
178
- * @description
179
- * Desides if the week should start on a monday or sunday. Defaults to monday.
180
- */
181
- this.weekStart = WeekStart.monday;
182
- /**
183
- * @description
184
- * A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
185
- * This requires that registerLocaleData is called with the respective locale.
186
- */
187
- this.locale = 'en-US';
188
- this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
189
- /**
190
- * @description
191
- * Month selected by the user by clicking in drop down for month selection or month navigation buttons.
192
- */
193
- this.monthChange = new EventEmitter();
194
- /**
195
- * @description
196
- * When a user has actively changed the date.
197
- */
198
- this.focusOnNextChange = new EventEmitter();
199
- /**
200
- * @description
201
- * When selected date has been changed.
202
- */
203
- this.selectedDateChange = new EventEmitter();
204
- /**
205
- * @description
206
- * When active date has been changed.
207
- */
208
- this.activeDateChange = new EventEmitter();
209
- this.maxMonthIndex = 13;
210
- this.monthNames = new Array();
211
- this.shouldFocusCalendarOnAvailableDatesUpdate = false;
212
- this.componentId = nextId++;
213
- }
214
- ngOnInit() {
215
- if (!this.ariaLabelPreviousMonth) {
216
- this.warnMissingAccessibiltyInput('ariaLabelPreviousMonth');
217
- }
218
- if (!this.ariaLabelNextMonth) {
219
- this.warnMissingAccessibiltyInput('ariaLabelNextMonth');
220
- }
221
- if (this.nasFormGroup && this.nasFormControlName) {
222
- const control = this.nasFormGroup.get(this.nasFormControlName);
223
- if (control) {
224
- const calendarDate = control.value;
225
- if (calendarDate) {
226
- this.selectedDate = calendarDate.date;
227
- }
228
- }
229
- }
230
- if (this.date || !this.currentMonth) {
231
- this.currentMonth = this.calendarService.getCurrentMonth(this.date);
232
- }
233
- this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
234
- this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
235
- this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
236
- this.monthNames = this.calendarService.getMonthNames(this.locale);
237
- this.months = this.calendarService.getMonthsSelectOptions(this.disablePastSelection, this.maxMonthIndex, this.monthNames);
238
- this.selectedMonth = this.calendarService.getSelectedMonth(this.months, this.currentMonth);
239
- this.weekdays = this.calendarService.getWeekdays(this.weekStart, this.locale);
240
- this.setPreviousMonthDisabled();
241
- }
242
- dateKeyDown(event) {
243
- let elementToFocus;
244
- switch (event.key) {
245
- case 'ArrowLeft':
246
- case 'ArrowRight':
247
- case 'ArrowUp':
248
- case 'ArrowDown':
249
- this.shouldFocusCalendarOnAvailableDatesUpdate = true;
250
- break;
251
- case 'Tab':
252
- if (!event.shiftKey) {
253
- if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
254
- elementToFocus = this.previousMonthRef.nativeElement;
255
- }
256
- else if (this.monthSelectRef && this.months.length > 0) {
257
- elementToFocus = this.monthSelectRef.select.nativeElement;
258
- }
259
- else if (this.nextMonthRef && !this.nextMonthDisabled) {
260
- elementToFocus = this.nextMonthRef.nativeElement;
261
- }
262
- }
263
- else {
264
- if (this.nextMonthRef && !this.nextMonthDisabled) {
265
- elementToFocus = this.nextMonthRef.nativeElement;
266
- }
267
- else if (this.monthSelectRef && this.months.length > 0) {
268
- elementToFocus = this.monthSelectRef.select.nativeElement;
269
- }
270
- else if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
271
- elementToFocus = this.previousMonthRef.nativeElement;
272
- }
273
- }
274
- this.focusElement(event, elementToFocus);
275
- break;
276
- case 'Enter':
277
- event.preventDefault();
278
- const activeDay = this.calendarService
279
- .getDays(this.weeks)
280
- .find(x => x && this.dateService.isSameDate(this.dateService.utcDate(x.date), this.activeDate));
281
- if (this.availability && activeDay?.isAvailable && !activeDay?.isDisabled || !this.availability) {
282
- this.setSelectedDate(this.activeDate);
283
- this.focusOnNextChange.emit(event);
284
- }
285
- break;
286
- }
287
- }
288
- onPreviousMonthKeydown(event) {
289
- let elementToFocus;
290
- switch (event.key) {
291
- case 'Tab':
292
- if (!event.shiftKey) {
293
- if (this.monthSelectRef && this.months.length > 0) {
294
- elementToFocus = this.monthSelectRef.select.nativeElement;
295
- }
296
- else if (this.nextMonthRef && !this.nextMonthDisabled) {
297
- elementToFocus = this.nextMonthRef.nativeElement;
298
- }
299
- else {
300
- elementToFocus = this.activeDateCell;
301
- }
302
- }
303
- else {
304
- elementToFocus = this.activeDateCell;
305
- }
306
- this.focusElement(event, elementToFocus);
307
- break;
308
- case 'Enter':
309
- this.getPreviousMonth();
310
- event.preventDefault();
311
- break;
312
- default:
313
- break;
314
- }
315
- }
316
- onNextMonthKeydown(event) {
317
- let elementToFocus;
318
- switch (event.key) {
319
- case 'Tab':
320
- if (!event.shiftKey) {
321
- elementToFocus = this.activeDateCell;
322
- }
323
- else {
324
- if (this.monthSelectRef && this.months.length > 0) {
325
- elementToFocus = this.monthSelectRef.select.nativeElement;
326
- }
327
- else if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
328
- elementToFocus = this.previousMonthRef.nativeElement;
329
- }
330
- else {
331
- elementToFocus = this.activeDateCell;
332
- }
333
- }
334
- this.focusElement(event, elementToFocus);
335
- break;
336
- case 'Enter':
337
- event.preventDefault();
338
- this.getNextMonth();
339
- break;
340
- }
341
- }
342
- onNextMonthMousedown() {
343
- this.getNextMonth();
344
- }
345
- onPreviousMonthMousedown() {
346
- this.getPreviousMonth();
347
- }
348
- onMonthSelectKeydown(event) {
349
- let elementToFocus;
350
- switch (event.key) {
351
- case 'Tab':
352
- if (!event.shiftKey) {
353
- if (this.nextMonthRef && !this.nextMonthDisabled) {
354
- elementToFocus = this.nextMonthRef.nativeElement;
355
- }
356
- else {
357
- elementToFocus = this.activeDateCell;
358
- }
359
- }
360
- else {
361
- if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
362
- elementToFocus = this.previousMonthRef.nativeElement;
363
- }
364
- else {
365
- elementToFocus = this.activeDateCell;
366
- }
367
- }
368
- this.focusElement(event, elementToFocus);
369
- break;
370
- }
371
- }
372
- focusElement(event, elementToFocus) {
373
- if (elementToFocus) {
374
- elementToFocus.focus();
375
- }
376
- if (event) {
377
- event.preventDefault();
378
- }
379
- }
380
- setActiveDate() {
381
- if (!this.currentMonth) {
382
- return;
383
- }
384
- const today = this.dateService.utcDate();
385
- const lastDay = new Date(this.currentMonth.year, this.currentMonth.month + 1, 0);
386
- const newDate = this.activeDate?.date > lastDay.getDate() ? lastDay.getDate() : this.activeDate?.date;
387
- if (this.currentMonth.month !== today.month || this.currentMonth.year !== today.year) {
388
- const nextMonth = this.currentMonth.month;
389
- const nextYear = this.currentMonth.year;
390
- this.activeDate = new UtcDate(nextYear, nextMonth, newDate);
391
- }
392
- else if (this.activeDate && this.activeDate.month !== this.currentMonth.month) {
393
- this.activeDate = new UtcDate(this.activeDateValue.year, this.currentMonth.month, newDate);
394
- }
395
- else {
396
- this.activeDate = this.dateService.utcDate();
397
- }
398
- }
399
- onMouseDown(date, event) {
400
- this.setSelectedDate(this.dateService.utcDate(date));
401
- this.focusOnNextChange.emit(event);
402
- }
403
- onDayFocus(day) {
404
- this.activeDate = this.dateService.utcDate(day.date);
405
- }
406
- onDayClick(day) {
407
- if (this.dateService.isGreaterThan(this.dateService.utcDate(day.date), this.activeDate)) {
408
- }
409
- if (!day.isAvailable) {
410
- return;
411
- }
412
- this.setSelectedDate(this.dateService.utcDate(day.date));
413
- this.availableDays.forEach(date => {
414
- if (this.activeDate && this.selectedDate) {
415
- const utcDate = this.dateService.utcDate(day.date);
416
- const withinRange = this.dateService.isGreaterThan(utcDate, this.selectedDate) &&
417
- this.dateService.isLessThan(utcDate, this.activeDate);
418
- date.isWithinRange = withinRange;
419
- }
420
- });
421
- }
422
- setSelectedDate(date) {
423
- if (!date) {
424
- return;
425
- }
426
- if (this.nasFormGroup && this.nasFormControlName) {
427
- const control = this.nasFormGroup.get(this.nasFormControlName);
428
- const calendarDate = {
429
- model: this.datePipe.transform(this.dateService.date(date), this.dateDisplayFormat, 'UTC', this.locale),
430
- date: date
431
- };
432
- control.patchValue(calendarDate);
433
- }
434
- this.selectedDateChange.emit(date);
435
- if (this.weeks && this.weeks.length > 0) {
436
- for (const week of this.weeks) {
437
- if (!week) {
438
- continue;
439
- }
440
- for (const day of week.days) {
441
- if (!day) {
442
- continue;
443
- }
444
- day.isSelected = day.isAvailable
445
- && this.dateService.isSameDate(this.dateService.utcDate(day.date), date);
446
- }
447
- }
448
- }
449
- }
450
- getCellButtonClass(day) {
451
- if (!day) {
452
- return this.getClass('item');
453
- }
454
- return this.getClass('item', [
455
- day.isDisabled && 'before',
456
- day.isSelected && 'selected',
457
- !this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth) && 'empty',
458
- day.isAvailable && 'available',
459
- 'large',
460
- day.isActive && 'active',
461
- day.isWithinRange && 'within-range'
462
- ]);
463
- }
464
- getNextMonth() {
465
- if (!this.weeks) {
466
- return;
467
- }
468
- const firstWeek = this.weeks[0];
469
- if (!firstWeek) {
470
- return;
471
- }
472
- const firstValidDay = firstWeek.days
473
- .find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
474
- if (!firstValidDay) {
475
- return;
476
- }
477
- const nextMonth = this.dateService.utcDate(firstValidDay.date);
478
- const month = nextMonth.month + 1;
479
- nextMonth.setMonth(month);
480
- this.currentMonth = nextMonth;
481
- this.applySelectedDateChanges();
482
- this.monthChange.emit(this.currentMonth);
483
- this.setPreviousMonthDisabled();
484
- if (!this.availability) {
485
- this.maxMonthIndex++;
486
- }
487
- }
488
- getPreviousMonth() {
489
- if (!this.weeks) {
490
- return;
491
- }
492
- const firstWeek = this.weeks[0];
493
- if (!firstWeek) {
494
- return;
495
- }
496
- const firstValidDay = firstWeek.days
497
- .find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
498
- const previousMonth = this.dateService.utcDate(firstValidDay.date);
499
- const month = previousMonth.month - 1;
500
- previousMonth.setMonth(month);
501
- this.currentMonth = previousMonth;
502
- this.applySelectedDateChanges();
503
- this.monthChange.emit(this.currentMonth);
504
- this.setPreviousMonthDisabled();
505
- }
506
- setPreviousMonthDisabled() {
507
- if (this.currentMonth) {
508
- const previousMonth = new UtcDate(this.currentMonth.year, this.currentMonth.month, this.currentMonth.date);
509
- const month = previousMonth.month - 1;
510
- previousMonth.setMonth(month);
511
- if (this.disablePastSelection && this.dateService.isInThePast(previousMonth, true)) {
512
- this.isPreviousMonthDisabled = true;
513
- return;
514
- }
515
- }
516
- this.isPreviousMonthDisabled = false;
517
- }
518
- applySelectedDateChanges() {
519
- this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
520
- this.selectedMonth = this.months
521
- .find(x => this.dateService.isSameMonth(this.dateService.utcDate(x.value), this.currentMonth));
522
- this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
523
- this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
524
- }
525
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarComponent, deps: [{ token: i1.DateHelper }, { token: i2.DatePipe }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Component }); }
526
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CalendarComponent, selector: "nas-calendar", inputs: { id: "id", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", lowerLimitDate: "lowerLimitDate", date: "date", weekStart: "weekStart", displayWeekNumbers: "displayWeekNumbers", availability: "availability", locale: "locale", availableDates: "availableDates", activeDate: "activeDate", selectedDate: "selectedDate", nasFormGroup: "nasFormGroup", nasFormControlName: "nasFormControlName", dateDisplayFormat: "dateDisplayFormat", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth" }, outputs: { monthChange: "monthChange", focusOnNextChange: "focusOnNextChange", selectedDateChange: "selectedDateChange", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "previousMonthRef", first: true, predicate: ["previousMonthRef"], descendants: true }, { propertyName: "nextMonthRef", first: true, predicate: ["nextMonthRef"], descendants: true }, { propertyName: "calendarContent", first: true, predicate: ["calendarContent"], descendants: true }, { propertyName: "monthSelectRef", first: true, predicate: ["monthSelect"], descendants: true }, { propertyName: "tableCells", predicate: ["tableCells"], descendants: true }, { propertyName: "dateButtons", predicate: ["dateButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [nasClass]=\"getClass()\">\n <div #calendarContent tabindex=\"0\" [nasClass]=\"getClass('content')\">\n <header [nasClass]=\"getClass('header')\">\n <button [id]=\"prevMonthId\" type=\"button\" #previousMonthRef tabindex=\"0\" [attr.aria-label]=\"ariaLabelPreviousMonth\"\n [nasClass]=\"getClass('nav')\" [disabled]=\"isPreviousMonthDisabled === true\"\n (keydown)=\"onPreviousMonthKeydown($event)\" (mousedown)=\"onPreviousMonthMousedown()\">\n <nas-icon tabindex=\"-1\" [type]=\"'arrow-left'\"></nas-icon>\n </button>\n <ng-container *ngIf=\"months?.length > 0; else currentMonthTemplate\">\n <nas-select #monthSelect [cssClass]=\"getClass('month')\" [inline]=\"true\" [simple]=\"true\" [options]=\"months\"\n [(selected)]=\"selectedMonth\" (keydown)=\"onMonthSelectKeydown($event)\"></nas-select>\n </ng-container>\n <ng-template #currentMonthTemplate>\n {{currentMonthModel}}\n </ng-template>\n <button [id]=\"nextMonthId\" type=\"button\" tabindex=\"0\" #nextMonthRef [nasClass]=\"getClass('nav')\"\n [attr.aria-label]=\"ariaLabelNextMonth\" [disabled]=\"nextMonthDisabled\" (keydown)=\"onNextMonthKeydown($event)\"\n (mousedown)=\"onNextMonthMousedown()\">\n <nas-icon [type]=\"'arrow-right'\"></nas-icon>\n </button>\n </header>\n\n <!-- Weekdays + Dates -->\n <table [nasClass]=\"getClass('table')\">\n <thead>\n <tr [nasClass]=\"getClass('week')\">\n <th *ngIf=\"exists(displayWeekNumbers)\" [nasClass]=\"getClass('week-number')\"></th>\n <th [nasClass]=\"getClass('cell')\" *ngFor=\"let weekday of weekdays\">\n <div [nasClass]=\"getClass('item', 'header')\">{{weekday}}</div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of weeks\" [nasClass]=\"getClass('row', 'animate')\">\n <td *ngIf=\"exists(displayWeekNumbers)\" [nasClass]=\"getClass('week-number')\">\n <span [nasClass]=\"getClass('date', 'week-number')\">{{week.weekNumber}}</span>\n </td>\n <td [nasClass]=\"getClass('cell')\" *ngFor=\"let day of week?.days\" #tableCells>\n <div [nasClass]=\"getClass('item', 'dummy')\" *ngIf=\"day === null; else dayTemplate\"></div>\n <ng-template #dayTemplate tabindex=\"0\">\n <button id=\"day-{{day.date | date : 'd':'UTC':locale}}\" type=\"button\" #dateButton (keydown)=\"dateKeyDown($event)\" tabIndex=\"0\"\n [nasClass]=\"getCellButtonClass(day)\" (mousedown)=\"onMouseDown(day.date, $event)\"\n (click)=\"onDayClick(day)\" (focus)=\"onDayFocus(day)\">\n <div [nasClass]=\"getClass('date-wrapper')\">\n <span [nasClass]=\"getClass('date')\" [attr.aria-label]=\"day.date | date : 'd':'UTC'\">{{ day.date | date\n : 'd':'UTC':locale }}</span>\n </div>\n </button>\n </ng-template>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div [nasClass]=\"getClass('footer')\">\n <div *ngIf=\"availableDates?.length === 0 && noAvailableFlightsLabel\" [nasClass]=\"getClass('footer', 'item')\">\n <nas-icon [icon]=\"'alert'\"></nas-icon>\n {{noAvailableFlightsLabel}}\n </div>\n <div *ngIf=\"availableDates?.length > 0 && noAvailableFlightsLabel && availableFlightsLabel\"\n [nasClass]=\"getClass('footer', 'item')\">\n <div [nasClass]=\"getClass('item', 'available')\"></div>\n <div [nasClass]=\"getClass('footer', 'label')\">{{availableFlightsLabel}}</div>\n <span [nasClass]=\"getClass('item', 'unavailable')\"></span>\n <div [nasClass]=\"getClass('footer', 'label')\">{{noAvailableFlightsLabel}}</div>\n </div>\n </div>\n </div>\n</div>", 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-calendar{z-index:3;width:100%;min-width:300px;float:right;padding:16px 8px;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:flip-in .55s ease both;position:relative;border:2px solid #15273F;z-index:4}@media (min-width: 640px){.nas-calendar{max-width:350px}}@media (min-width: 380px){.nas-calendar{min-width:325px}}.nas-calendar__content:active{outline:none;box-shadow:none}.nas-calendar__content:focus{outline:none;box-shadow:none}.nas-calendar__cover{margin-bottom:16px}.nas-calendar__header{height:30px;font-size:16px;line-height:24px;font-weight:700;display:flex;justify-content:space-between}.nas-calendar__month{margin:0 auto 21px}.nas-calendar__months{background-color:#fff;max-width:350px;display:flex;flex-wrap:wrap;gap:15px}.nas-calendar__months--item{text-transform:uppercase}.nas-calendar__table{table-layout:fixed;width:100%}.nas-calendar__week-number{font-size:14px;line-height:20px;position:relative;width:20px;display:none}@media (min-width: 640px){.nas-calendar__week-number{display:table-cell}}.nas-calendar__cell{padding:0;font-weight:400;color:#15273f}.nas-calendar__nav{margin:-3px 2px 12px;width:24px;height:24px;border-radius:50%;transition:transform .2s cubic-bezier(0,0,.1,1),opacity .2s ease-out}.nas-calendar__nav .nas-icon-arrow-left--light,.nas-calendar__nav .nas-icon-arrow-right--light{position:absolute;top:50%;left:50%}.nas-calendar__nav .nas-icon-arrow-left--light{transform:translate(-60%,-50%)}.nas-calendar__nav .nas-icon-arrow-right--light{transform:translate(-40%,-50%)}.nas-calendar__nav:active{transform:translateY(2px)}.nas-calendar__nav[disabled]{pointer-events:none;opacity:.5}.nas-calendar__item{font-size:14px;line-height:20px;display:flex;flex-direction:column;margin-left:5px;cursor:pointer;overflow:hidden;width:100%;height:40px;text-align:left;outline:0;padding:2px;border:1px solid #FFFFFF;transition:transform .17s cubic-bezier(0,0,.1,1);border-radius:0;align-items:center;justify-content:center;pointer-events:none;opacity:.5;background-color:#fff}.nas-calendar__item .nas-calendar__date{color:#0a2033}@media (min-width: 640px){.nas-calendar__item{padding:2px 6px}}@media (min-width: 1000px){.nas-calendar__item{padding:2px 3px}}@media (min-width: 1180px){.nas-calendar__item{padding:2px 6px}}.nas-calendar__item--large{height:40px;width:37px;height:37px;margin-top:8px;margin-left:2px}@media (min-width: 400px){.nas-calendar__item--large{width:39px;height:39px}}@media (min-width: 415px){.nas-calendar__item--large{width:40px;margin-top:8px;margin-left:6px}}.nas-calendar__item--header{pointer-events:none;background-color:transparent;border:0;opacity:1;padding-bottom:9px;margin-left:0!important}.nas-calendar__item--dummy{visibility:hidden}.nas-calendar__item--today .nas-calendar__date{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#15273f}.nas-calendar__item--cheapest{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#b12a0b}.nas-calendar__item--empty{pointer-events:none;opacity:.3;border-color:#fff;background-color:#fff}.nas-calendar__item--empty .nas-calendar__date{color:inherit}.nas-calendar__item--available{pointer-events:all;opacity:1;border-color:#e9e7e4;background-color:#f8f8f8;border-radius:2px}.nas-calendar__item--available .nas-calendar__date{color:#0a2033}.nas-calendar__item--active{border:2px solid #15273F;background-color:#15273f}.nas-calendar__item--active .nas-calendar__date{color:#fff}.nas-calendar__item--within-range{background-color:#ebf4ff}.nas-calendar__item--before{pointer-events:none;color:#a9a9a9;opacity:.55}.nas-calendar__item:hover,.nas-calendar__item:focus{border-color:#e9e7e4;border-width:2px}.nas-calendar__item:hover .nas-calendar__date,.nas-calendar__item:focus .nas-calendar__date{font-weight:700}.nas-calendar__item:active{transform:translateY(3px)}.nas-calendar__item--selected,.nas-calendar__item:active{color:#fff;background-color:#15273f;height:37px;width:37px;margin-left:5px}@media (min-width: 380px){.nas-calendar__item--selected,.nas-calendar__item:active{height:40px;width:40px}}.nas-calendar__item--selected:hover,.nas-calendar__item--selected:focus,.nas-calendar__item:active:hover,.nas-calendar__item:active:focus{border-color:#15273f;border-width:3px}.nas-calendar__item--selected .nas-calendar__date,.nas-calendar__item:active .nas-calendar__date{color:inherit}.nas-calendar__item--sold-out{pointer-events:none;opacity:.8;border-color:#fff;background-color:#fff}.nas-calendar__item--sold-out .nas-calendar__date{color:#0a2033}.nas-calendar__item[disabled]{pointer-events:none}.nas-calendar__week{border-bottom:1px solid #E9E7E4}.nas-calendar__date{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;color:#6f6f6f}.nas-calendar__date--week-number{top:6px;right:6px}.nas-calendar__date:hover,.nas-calendar__date:focus{font-weight:700}.nas-calendar__price{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:inherit;letter-spacing:-.04em;font-size:14px}@media (min-width: 640px){.nas-calendar__price{font-size:14px;line-height:1.1}}@media (min-width: 1280px){.nas-calendar__price{font-size:16px}}.nas-calendar__price--before{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;text-decoration:line-through;font-size:.8em;line-height:1}@media (min-width: 1000px){.nas-calendar__price--before{margin-bottom:2px}}.nas-calendar__sold-out{position:absolute;bottom:2px;left:2px;line-height:1;overflow-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;letter-spacing:-.015em;color:#8c8c8c;font-size:.75em}@media (min-width: 640px){.nas-calendar__sold-out{font-size:.9em;bottom:6px;left:6px}}@media (min-width: 1000px){.nas-calendar__sold-out{left:3px}}@media (min-width: 1180px){.nas-calendar__sold-out{left:6px}}.nas-calendar__transit{position:relative;display:flex;max-width:3.8em;width:calc(100% - 12px);padding:0 .5em 0 .3em;height:8px;justify-content:space-around;margin-bottom:2px;transform:scale(.85);transform-origin:left;background-color:inherit}@media (min-width: 640px){.nas-calendar__transit{transform:none;padding:0 .5em 0 .3em;margin-bottom:3px}}.nas-calendar__transit:before,.nas-calendar__transit:after{content:\"\";position:absolute}.nas-calendar__transit:before{top:calc(50% - 1px);width:100%;left:0;height:2px;background-color:currentColor}.nas-calendar__transit:after{width:8px;height:8px;right:0;border-right:2px solid currentColor;border-top:2px solid currentColor;transform:rotate(45deg)}.nas-calendar__transit-indicator{position:relative;width:8px;height:8px;flex-shrink:0;border-radius:50%;border:2px solid currentColor;background-color:#fff}.nas-calendar__asterisk{font-size:.67em;top:-.36em;margin-left:.1em}.nas-calendar__footer{display:flex;justify-content:center}.nas-calendar__footer .nas-calendar__item{width:25px;height:25px;margin-right:3px}.nas-calendar__footer .nas-calendar__item--unavailable{border:1px solid #15273F}.nas-calendar__footer--item{margin-bottom:6px}.nas-calendar__footer--label{flex-shrink:0;margin-right:12px;display:flex;flex-direction:column;justify-content:center;font-size:14px;line-height:20px}@keyframes lowfare-item-in{0%{opacity:0;transform:scale(0)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.SelectComponent, selector: "nas-select", inputs: ["id", "inline", "label", "block", "spaceless", "stretch", "compact", "simple", "light", "fill", "error", "errorMessage", "disabled", "autogrow", "presentValue", "cssClass", "nasFormControlName", "nasFormGroup", "options", "selectedValue", "selected"], outputs: ["selectedChange", "keyDownEvent"] }, { kind: "component", type: i5.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None }); }
527
- }
528
- __decorate([
529
- Debounce(150)
530
- ], CalendarComponent.prototype, "onPreviousMonthKeydown", null);
531
- __decorate([
532
- Debounce(150)
533
- ], CalendarComponent.prototype, "onNextMonthKeydown", null);
534
- __decorate([
535
- Debounce(200)
536
- ], CalendarComponent.prototype, "onNextMonthMousedown", null);
537
- __decorate([
538
- Debounce(200)
539
- ], CalendarComponent.prototype, "onPreviousMonthMousedown", null);
540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarComponent, decorators: [{
541
- type: Component,
542
- args: [{ selector: 'nas-calendar', encapsulation: ViewEncapsulation.None, template: "<div [nasClass]=\"getClass()\">\n <div #calendarContent tabindex=\"0\" [nasClass]=\"getClass('content')\">\n <header [nasClass]=\"getClass('header')\">\n <button [id]=\"prevMonthId\" type=\"button\" #previousMonthRef tabindex=\"0\" [attr.aria-label]=\"ariaLabelPreviousMonth\"\n [nasClass]=\"getClass('nav')\" [disabled]=\"isPreviousMonthDisabled === true\"\n (keydown)=\"onPreviousMonthKeydown($event)\" (mousedown)=\"onPreviousMonthMousedown()\">\n <nas-icon tabindex=\"-1\" [type]=\"'arrow-left'\"></nas-icon>\n </button>\n <ng-container *ngIf=\"months?.length > 0; else currentMonthTemplate\">\n <nas-select #monthSelect [cssClass]=\"getClass('month')\" [inline]=\"true\" [simple]=\"true\" [options]=\"months\"\n [(selected)]=\"selectedMonth\" (keydown)=\"onMonthSelectKeydown($event)\"></nas-select>\n </ng-container>\n <ng-template #currentMonthTemplate>\n {{currentMonthModel}}\n </ng-template>\n <button [id]=\"nextMonthId\" type=\"button\" tabindex=\"0\" #nextMonthRef [nasClass]=\"getClass('nav')\"\n [attr.aria-label]=\"ariaLabelNextMonth\" [disabled]=\"nextMonthDisabled\" (keydown)=\"onNextMonthKeydown($event)\"\n (mousedown)=\"onNextMonthMousedown()\">\n <nas-icon [type]=\"'arrow-right'\"></nas-icon>\n </button>\n </header>\n\n <!-- Weekdays + Dates -->\n <table [nasClass]=\"getClass('table')\">\n <thead>\n <tr [nasClass]=\"getClass('week')\">\n <th *ngIf=\"exists(displayWeekNumbers)\" [nasClass]=\"getClass('week-number')\"></th>\n <th [nasClass]=\"getClass('cell')\" *ngFor=\"let weekday of weekdays\">\n <div [nasClass]=\"getClass('item', 'header')\">{{weekday}}</div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of weeks\" [nasClass]=\"getClass('row', 'animate')\">\n <td *ngIf=\"exists(displayWeekNumbers)\" [nasClass]=\"getClass('week-number')\">\n <span [nasClass]=\"getClass('date', 'week-number')\">{{week.weekNumber}}</span>\n </td>\n <td [nasClass]=\"getClass('cell')\" *ngFor=\"let day of week?.days\" #tableCells>\n <div [nasClass]=\"getClass('item', 'dummy')\" *ngIf=\"day === null; else dayTemplate\"></div>\n <ng-template #dayTemplate tabindex=\"0\">\n <button id=\"day-{{day.date | date : 'd':'UTC':locale}}\" type=\"button\" #dateButton (keydown)=\"dateKeyDown($event)\" tabIndex=\"0\"\n [nasClass]=\"getCellButtonClass(day)\" (mousedown)=\"onMouseDown(day.date, $event)\"\n (click)=\"onDayClick(day)\" (focus)=\"onDayFocus(day)\">\n <div [nasClass]=\"getClass('date-wrapper')\">\n <span [nasClass]=\"getClass('date')\" [attr.aria-label]=\"day.date | date : 'd':'UTC'\">{{ day.date | date\n : 'd':'UTC':locale }}</span>\n </div>\n </button>\n </ng-template>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div [nasClass]=\"getClass('footer')\">\n <div *ngIf=\"availableDates?.length === 0 && noAvailableFlightsLabel\" [nasClass]=\"getClass('footer', 'item')\">\n <nas-icon [icon]=\"'alert'\"></nas-icon>\n {{noAvailableFlightsLabel}}\n </div>\n <div *ngIf=\"availableDates?.length > 0 && noAvailableFlightsLabel && availableFlightsLabel\"\n [nasClass]=\"getClass('footer', 'item')\">\n <div [nasClass]=\"getClass('item', 'available')\"></div>\n <div [nasClass]=\"getClass('footer', 'label')\">{{availableFlightsLabel}}</div>\n <span [nasClass]=\"getClass('item', 'unavailable')\"></span>\n <div [nasClass]=\"getClass('footer', 'label')\">{{noAvailableFlightsLabel}}</div>\n </div>\n </div>\n </div>\n</div>", 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-calendar{z-index:3;width:100%;min-width:300px;float:right;padding:16px 8px;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:flip-in .55s ease both;position:relative;border:2px solid #15273F;z-index:4}@media (min-width: 640px){.nas-calendar{max-width:350px}}@media (min-width: 380px){.nas-calendar{min-width:325px}}.nas-calendar__content:active{outline:none;box-shadow:none}.nas-calendar__content:focus{outline:none;box-shadow:none}.nas-calendar__cover{margin-bottom:16px}.nas-calendar__header{height:30px;font-size:16px;line-height:24px;font-weight:700;display:flex;justify-content:space-between}.nas-calendar__month{margin:0 auto 21px}.nas-calendar__months{background-color:#fff;max-width:350px;display:flex;flex-wrap:wrap;gap:15px}.nas-calendar__months--item{text-transform:uppercase}.nas-calendar__table{table-layout:fixed;width:100%}.nas-calendar__week-number{font-size:14px;line-height:20px;position:relative;width:20px;display:none}@media (min-width: 640px){.nas-calendar__week-number{display:table-cell}}.nas-calendar__cell{padding:0;font-weight:400;color:#15273f}.nas-calendar__nav{margin:-3px 2px 12px;width:24px;height:24px;border-radius:50%;transition:transform .2s cubic-bezier(0,0,.1,1),opacity .2s ease-out}.nas-calendar__nav .nas-icon-arrow-left--light,.nas-calendar__nav .nas-icon-arrow-right--light{position:absolute;top:50%;left:50%}.nas-calendar__nav .nas-icon-arrow-left--light{transform:translate(-60%,-50%)}.nas-calendar__nav .nas-icon-arrow-right--light{transform:translate(-40%,-50%)}.nas-calendar__nav:active{transform:translateY(2px)}.nas-calendar__nav[disabled]{pointer-events:none;opacity:.5}.nas-calendar__item{font-size:14px;line-height:20px;display:flex;flex-direction:column;margin-left:5px;cursor:pointer;overflow:hidden;width:100%;height:40px;text-align:left;outline:0;padding:2px;border:1px solid #FFFFFF;transition:transform .17s cubic-bezier(0,0,.1,1);border-radius:0;align-items:center;justify-content:center;pointer-events:none;opacity:.5;background-color:#fff}.nas-calendar__item .nas-calendar__date{color:#0a2033}@media (min-width: 640px){.nas-calendar__item{padding:2px 6px}}@media (min-width: 1000px){.nas-calendar__item{padding:2px 3px}}@media (min-width: 1180px){.nas-calendar__item{padding:2px 6px}}.nas-calendar__item--large{height:40px;width:37px;height:37px;margin-top:8px;margin-left:2px}@media (min-width: 400px){.nas-calendar__item--large{width:39px;height:39px}}@media (min-width: 415px){.nas-calendar__item--large{width:40px;margin-top:8px;margin-left:6px}}.nas-calendar__item--header{pointer-events:none;background-color:transparent;border:0;opacity:1;padding-bottom:9px;margin-left:0!important}.nas-calendar__item--dummy{visibility:hidden}.nas-calendar__item--today .nas-calendar__date{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#15273f}.nas-calendar__item--cheapest{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#b12a0b}.nas-calendar__item--empty{pointer-events:none;opacity:.3;border-color:#fff;background-color:#fff}.nas-calendar__item--empty .nas-calendar__date{color:inherit}.nas-calendar__item--available{pointer-events:all;opacity:1;border-color:#e9e7e4;background-color:#f8f8f8;border-radius:2px}.nas-calendar__item--available .nas-calendar__date{color:#0a2033}.nas-calendar__item--active{border:2px solid #15273F;background-color:#15273f}.nas-calendar__item--active .nas-calendar__date{color:#fff}.nas-calendar__item--within-range{background-color:#ebf4ff}.nas-calendar__item--before{pointer-events:none;color:#a9a9a9;opacity:.55}.nas-calendar__item:hover,.nas-calendar__item:focus{border-color:#e9e7e4;border-width:2px}.nas-calendar__item:hover .nas-calendar__date,.nas-calendar__item:focus .nas-calendar__date{font-weight:700}.nas-calendar__item:active{transform:translateY(3px)}.nas-calendar__item--selected,.nas-calendar__item:active{color:#fff;background-color:#15273f;height:37px;width:37px;margin-left:5px}@media (min-width: 380px){.nas-calendar__item--selected,.nas-calendar__item:active{height:40px;width:40px}}.nas-calendar__item--selected:hover,.nas-calendar__item--selected:focus,.nas-calendar__item:active:hover,.nas-calendar__item:active:focus{border-color:#15273f;border-width:3px}.nas-calendar__item--selected .nas-calendar__date,.nas-calendar__item:active .nas-calendar__date{color:inherit}.nas-calendar__item--sold-out{pointer-events:none;opacity:.8;border-color:#fff;background-color:#fff}.nas-calendar__item--sold-out .nas-calendar__date{color:#0a2033}.nas-calendar__item[disabled]{pointer-events:none}.nas-calendar__week{border-bottom:1px solid #E9E7E4}.nas-calendar__date{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;color:#6f6f6f}.nas-calendar__date--week-number{top:6px;right:6px}.nas-calendar__date:hover,.nas-calendar__date:focus{font-weight:700}.nas-calendar__price{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:inherit;letter-spacing:-.04em;font-size:14px}@media (min-width: 640px){.nas-calendar__price{font-size:14px;line-height:1.1}}@media (min-width: 1280px){.nas-calendar__price{font-size:16px}}.nas-calendar__price--before{font-family:NorwegianTextPro,Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:400;text-decoration:line-through;font-size:.8em;line-height:1}@media (min-width: 1000px){.nas-calendar__price--before{margin-bottom:2px}}.nas-calendar__sold-out{position:absolute;bottom:2px;left:2px;line-height:1;overflow-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto;letter-spacing:-.015em;color:#8c8c8c;font-size:.75em}@media (min-width: 640px){.nas-calendar__sold-out{font-size:.9em;bottom:6px;left:6px}}@media (min-width: 1000px){.nas-calendar__sold-out{left:3px}}@media (min-width: 1180px){.nas-calendar__sold-out{left:6px}}.nas-calendar__transit{position:relative;display:flex;max-width:3.8em;width:calc(100% - 12px);padding:0 .5em 0 .3em;height:8px;justify-content:space-around;margin-bottom:2px;transform:scale(.85);transform-origin:left;background-color:inherit}@media (min-width: 640px){.nas-calendar__transit{transform:none;padding:0 .5em 0 .3em;margin-bottom:3px}}.nas-calendar__transit:before,.nas-calendar__transit:after{content:\"\";position:absolute}.nas-calendar__transit:before{top:calc(50% - 1px);width:100%;left:0;height:2px;background-color:currentColor}.nas-calendar__transit:after{width:8px;height:8px;right:0;border-right:2px solid currentColor;border-top:2px solid currentColor;transform:rotate(45deg)}.nas-calendar__transit-indicator{position:relative;width:8px;height:8px;flex-shrink:0;border-radius:50%;border:2px solid currentColor;background-color:#fff}.nas-calendar__asterisk{font-size:.67em;top:-.36em;margin-left:.1em}.nas-calendar__footer{display:flex;justify-content:center}.nas-calendar__footer .nas-calendar__item{width:25px;height:25px;margin-right:3px}.nas-calendar__footer .nas-calendar__item--unavailable{border:1px solid #15273F}.nas-calendar__footer--item{margin-bottom:6px}.nas-calendar__footer--label{flex-shrink:0;margin-right:12px;display:flex;flex-direction:column;justify-content:center;font-size:14px;line-height:20px}@keyframes lowfare-item-in{0%{opacity:0;transform:scale(0)}}\n"] }]
543
- }], ctorParameters: function () { return [{ type: i1.DateHelper }, { type: i2.DatePipe }, { type: i3.CalendarService }]; }, propDecorators: { previousMonthRef: [{
544
- type: ViewChild,
545
- args: ['previousMonthRef']
546
- }], nextMonthRef: [{
547
- type: ViewChild,
548
- args: ['nextMonthRef']
549
- }], tableCells: [{
550
- type: ViewChildren,
551
- args: ['tableCells']
552
- }], dateButtons: [{
553
- type: ViewChildren,
554
- args: ['dateButton']
555
- }], calendarContent: [{
556
- type: ViewChild,
557
- args: ['calendarContent']
558
- }], monthSelectRef: [{
559
- type: ViewChild,
560
- args: ['monthSelect']
561
- }], id: [{
562
- type: Input
563
- }], noAvailableFlightsLabel: [{
564
- type: Input
565
- }], availableFlightsLabel: [{
566
- type: Input
567
- }], disablePastSelection: [{
568
- type: Input
569
- }], lowerLimitDate: [{
570
- type: Input
571
- }], date: [{
572
- type: Input
573
- }], weekStart: [{
574
- type: Input
575
- }], displayWeekNumbers: [{
576
- type: Input
577
- }], availability: [{
578
- type: Input
579
- }], locale: [{
580
- type: Input
581
- }], availableDates: [{
582
- type: Input
583
- }], activeDate: [{
584
- type: Input
585
- }], selectedDate: [{
586
- type: Input
587
- }], nasFormGroup: [{
588
- type: Input
589
- }], nasFormControlName: [{
590
- type: Input
591
- }], dateDisplayFormat: [{
592
- type: Input
593
- }], ariaLabelPreviousMonth: [{
594
- type: Input
595
- }], ariaLabelNextMonth: [{
596
- type: Input
597
- }], monthChange: [{
598
- type: Output
599
- }], focusOnNextChange: [{
600
- type: Output
601
- }], selectedDateChange: [{
602
- type: Output
603
- }], activeDateChange: [{
604
- type: Output
605
- }], onPreviousMonthKeydown: [], onNextMonthKeydown: [], onNextMonthMousedown: [], onPreviousMonthMousedown: [] } });
606
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7QUFHdkUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUFnQjtJQXNDckQ7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIs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O3VCQUFDLGNBQWM7Z0JBQ0csVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNFLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBT2YsRUFBRTtzQkFBVixLQUFLO2dCQU1HLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBNEJHLElBQUk7c0JBQVosS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLE1BQU07c0JBQWQsS0FBSztnQkFPRixjQUFjO3NCQURqQixLQUFLO2dCQTZDRixVQUFVO3NCQURiLEtBQUs7Z0JBMENGLFlBQVk7c0JBRGYsS0FBSztnQkFxQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUksV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQU1HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkF1S1Asc0JBQXNCLE1BNEJ0QixrQkFBa0IsTUEwQmxCLG9CQUFvQixNQUtwQix3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTm9yd2VnaWFuIEFpciBTaHV0dGxlLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFdlZWtTdGFydCB9IGZyb20gJy4vZW51bXMvd2Vlay1zdGFydC5lbnVtJztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvZGF5Lm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0LW9wdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBXZWVrTW9kZWwgfSBmcm9tICcuL21vZGVscy93ZWVrLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9yJztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvY2FsZW5kYXItZGF0ZS5tb2RlbCc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduYXMtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHdlZWtzOiBBcnJheTxXZWVrTW9kZWw+O1xuICBtb250aHMgPSBuZXcgQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+KCk7XG4gIHdlZWtkYXlzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgncHJldmlvdXNNb250aFJlZicpIHByZXZpb3VzTW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCduZXh0TW9udGhSZWYnKSBuZXh0TW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKCd0YWJsZUNlbGxzJykgdGFibGVDZWxsczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdkYXRlQnV0dG9uJykgZGF0ZUJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJDb250ZW50JykgY2FsZW5kYXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtb250aFNlbGVjdCcpIG1vbnRoU2VsZWN0UmVmOiBTZWxlY3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudFxuICAgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBubyBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgdGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXNjcmlwdGlvblxuICAqIEN1cnJlbnQgbW9udGggZGF0ZSB0byBiZSBkaXNwbGF5ZWQuIEl0IHdpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0ZWQgZGF0ZSBpbnB1dCwgaWYgaXQgaXMgc2V0LlxuICAqL1xuICBASW5wdXQoKSBkYXRlOiBVdGNEYXRlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGVzaWRlcyBpZiB0aGUgd2VlayBzaG91bGQgc3RhcnQgb24gYSBtb25kYXkgb3Igc3VuZGF5LiBEZWZhdWx0cyB0byBtb25kYXkuXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrU3RhcnQgPSBXZWVrU3RhcnQubW9uZGF5O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSB3ZWVrIG51bWJlcnMuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5V2Vla051bWJlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VyIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxvY2FsZSBjb2RlIGZvciB0aGUgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuIFdoZW4gbm90IHN1cHBsaWVkLCB1c2VzIHRoZSB2YWx1ZSBvZiBMT0NBTEVfSUQsIHdoaWNoIGlzIGVuLVVTIGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhhdCByZWdpc3RlckxvY2FsZURhdGEgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3BlY3RpdmUgbG9jYWxlLlxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlID0gJ2VuLVVTJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IHdpdGggYWxsIHRoZSBhdmFpbGFibGUgZGF0ZXMgb2YgdGhlIG1vbnRoIGZvciBzZWF0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhdmFpbGFibGVEYXRlcygpOiBBcnJheTxVdGNEYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlRGF0ZXNWYWx1ZTtcbiAgfVxuICBzZXQgYXZhaWxhYmxlRGF0ZXMoZGF0ZXM6IEFycmF5PFV0Y0RhdGU+KSB7XG4gICAgaWYgKCFkYXRlcyB8fCAhdGhpcy5leGlzdHModGhpcy5hdmFpbGFiaWxpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0RGF0ZSA9IGRhdGVzWzBdO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBmaXJzdERhdGU7XG4gICAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIHRoaXMuYXZhaWxhYmxlRGF0ZXNWYWx1ZSA9IGRhdGVzO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcblxuICAgIGlmICghdGhpcy5zaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5tb250aFNlbGVjdFJlZiAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuXG4gICAgICBpZiAoZWxtZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgIGVsbWVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gZmFsc2U7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBvciBzZXRzIHRoZSBhY3RpdmUgZGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGFjdGl2ZURhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUgfHwgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuXG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcblxuICAgICAgY29uc3QgZWxtZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgIGlmIChlbG1lbWVudFRvRm9jdXMpIHtcbiAgICAgICAgZWxtZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2Vla3MpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnNldEFjdGl2ZURhdGUoZGF0ZSwgdGhpcy53ZWVrcyk7XG5cbiAgICAgIGZvciAoY29uc3QgZGF5IG9mIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldERheXModGhpcy53ZWVrcykpIHtcbiAgICAgICAgaWYgKCFkYXkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXkuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSlcbiAgICAgIHx8ICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZShkYXRlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgZGF0ZURpc3BsYXlGb3JtYXQgPSAnRUVFRSBkLCBNTU1NIHl5eXknO1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbE5leHRNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTW9udGggc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZHJvcCBkb3duIGZvciBtb250aCBzZWxlY3Rpb24gb3IgbW9udGggbmF2aWdhdGlvbiBidXR0b25zLlxuICAgKi9cbiAgQE91dHB1dCgpIG1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIGFjdGl2ZWx5IGNoYW5nZWQgdGhlIGRhdGUuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9jdXNPbk5leHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50IHwgbnVsbD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYWN0aXZlIGRhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBhY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIGdldCBzZWxlY3RlZE1vbnRoKCk6IFNlbGVjdE9wdGlvbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZE1vbnRoKG9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWwpIHtcbiAgICBpZiAoIW9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb247XG4gICAgY29uc3Qgb3B0aW9uRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShvcHRpb24udmFsdWUpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKG9wdGlvbkRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBvcHRpb25EYXRlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRNb250aCk7XG4gICAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBuZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuZXh0TW9udGhJbmRleCA9IHRoaXMuY3VycmVudE1vbnRoXG4gICAgICAmJiB0aGlzLmRhdGVTZXJ2aWNlLmdldFV0Y051bWJlck9mTW9udGhCZXR3ZWVuKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpLCB0aGlzLmN1cnJlbnRNb250aCk7XG5cbiAgICByZXR1cm4gKG5leHRNb250aEluZGV4ICsgMikgPj0gdGhpcy5tYXhNb250aEluZGV4O1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRNb250aE1vZGVsKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLm1vbnRoTmFtZXNbdGhpcy5jdXJyZW50TW9udGgudG9EYXRlKCkuZ2V0VVRDTW9udGgoKV19ICR7dGhpcy5jdXJyZW50TW9udGgudG9EYXRlKCkuZ2V0VVRDRnVsbFllYXIoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJcyBpbiB1c2UgYnkgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0IGFjdGl2ZURhdGVDZWxsKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1jYWxlbmRhcl9faXRlbS0tYWN0aXZlJyk7XG4gIH1cblxuICBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkID8gdGhpcy5pZCA6IGBuYXMtY2FsZW5kYXItJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgcHJldk1vbnRoSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pbnB1dElkfV9fcHJldi1tb250aGA7XG4gIH1cblxuICBnZXQgbmV4dE1vbnRoSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pbnB1dElkfV9fbmV4dC1tb250aGA7XG4gIH1cblxuICBwcml2YXRlIG1heE1vbnRoSW5kZXggPSAxMztcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYXZhaWxhYmxlRGF0ZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkVmFsdWU6IFNlbGVjdE9wdGlvbk1vZGVsO1xuICBwcml2YXRlIGF2YWlsYWJsZURheXM6IEFycmF5PERheU1vZGVsPjtcbiAgcHJpdmF0ZSBtb250aE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gZmFsc2U7XG4gIHByaXZhdGUgY29tcG9uZW50SWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIsXG4gICAgcHVibGljIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlKSB7XG4gICAgc3VwZXIoJ25hcy1jYWxlbmRhcicpO1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSBuZXh0SWQrKztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcmlhTGFiZWxQcmV2aW91c01vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbFByZXZpb3VzTW9udGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsTmV4dE1vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbE5leHRNb250aCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyRGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gY2FsZW5kYXJEYXRlLmRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlIHx8ICF0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRDdXJyZW50TW9udGgodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZURheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRBdmFpbGFibGVEYXlzKFxuICAgICAgdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICB0aGlzLmF2YWlsYWJsZURhdGVzLFxuICAgICAgdGhpcy5hdmFpbGFiaWxpdHksXG4gICAgICB0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLFxuICAgICAgdGhpcy5sb3dlckxpbWl0RGF0ZSxcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnVwZGF0ZUF2YWlsYWJsZURheXNXaXRoU2VsZWN0ZWREYXRlKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy53ZWVrcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFdlZWtzKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy53ZWVrU3RhcnQpO1xuICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldE1vbnRoTmFtZXModGhpcy5sb2NhbGUpO1xuICAgIHRoaXMubW9udGhzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0TW9udGhzU2VsZWN0T3B0aW9ucyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLCB0aGlzLm1heE1vbnRoSW5kZXgsIHRoaXMubW9udGhOYW1lcyk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0U2VsZWN0ZWRNb250aCh0aGlzLm1vbnRocywgdGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMud2Vla2RheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrZGF5cyh0aGlzLndlZWtTdGFydCwgdGhpcy5sb2NhbGUpO1xuXG4gICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgfVxuXG4gIGRhdGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhTZWxlY3RSZWYgJiYgdGhpcy5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW9udGhSZWYgJiYgIXRoaXMubmV4dE1vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVEYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZVxuICAgICAgICAgIC5nZXREYXlzKHRoaXMud2Vla3MpXG4gICAgICAgICAgLmZpbmQoeCA9PiB4ICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC5kYXRlKSwgdGhpcy5hY3RpdmVEYXRlKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmlsaXR5ICYmIGFjdGl2ZURheT8uaXNBdmFpbGFibGUgJiYgIWFjdGl2ZURheT8uaXNEaXNhYmxlZCB8fCAhdGhpcy5hdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDE1MClcbiAgb25QcmV2aW91c01vbnRoS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMTUwKVxuICBvbk5leHRNb250aEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMjAwKVxuICBvbk5leHRNb250aE1vdXNlZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICB9XG5cbiAgQERlYm91bmNlKDIwMClcbiAgb25QcmV2aW91c01vbnRoTW91c2Vkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJldmlvdXNNb250aCgpO1xuICB9XG5cbiAgb25Nb250aFNlbGVjdEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRWxlbWVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRNb250aC55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCArIDEsIDApO1xuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmFjdGl2ZURhdGU/LmRhdGUgPiBsYXN0RGF5LmdldERhdGUoKSA/IGxhc3REYXkuZ2V0RGF0ZSgpIDogdGhpcy5hY3RpdmVEYXRlPy5kYXRlO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoLm1vbnRoICE9PSB0b2RheS5tb250aCB8fCB0aGlzLmN1cnJlbnRNb250aC55ZWFyICE9PSB0b2RheS55ZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmN1cnJlbnRNb250aC5tb250aDtcbiAgICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5jdXJyZW50TW9udGgueWVhcjtcblxuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IFV0Y0RhdGUobmV4dFllYXIsIG5leHRNb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGUubW9udGggIT09IHRoaXMuY3VycmVudE1vbnRoLm1vbnRoKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgVXRjRGF0ZSh0aGlzLmFjdGl2ZURhdGVWYWx1ZS55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZURvd24oZGF0ZTogc3RyaW5nLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXRlKSk7XG4gICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRGF5Rm9jdXMoZGF5OiBEYXlNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSk7XG4gIH1cblxuICBvbkRheUNsaWNrKGRheTogRGF5TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuYWN0aXZlRGF0ZSkpIHtcblxuICAgIH1cbiAgICBpZiAoIWRheS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSkpO1xuICAgIHRoaXMuYXZhaWxhYmxlRGF5cy5mb3JFYWNoKGRhdGUgPT4ge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgICBjb25zdCB1dGNEYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGRheS5kYXRlKTtcbiAgICAgICAgY29uc3Qgd2l0aGluUmFuZ2UgPSB0aGlzLmRhdGVTZXJ2aWNlLmlzR3JlYXRlclRoYW4odXRjRGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUpICYmXG4gICAgICAgICAgdGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHV0Y0RhdGUsIHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGRhdGUuaXNXaXRoaW5SYW5nZSA9IHdpdGhpblJhbmdlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgICBjb25zdCBjYWxlbmRhckRhdGU6IENhbGVuZGFyRGF0ZU1vZGVsID0ge1xuICAgICAgICBtb2RlbDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpLFxuICAgICAgICBkYXRlOiBkYXRlXG4gICAgICB9O1xuXG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUoY2FsZW5kYXJEYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuXG4gICAgaWYgKHRoaXMud2Vla3MgJiYgdGhpcy53ZWVrcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHdlZWsgb2YgdGhpcy53ZWVrcykge1xuICAgICAgICBpZiAoIXdlZWspIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGF5IG9mIHdlZWsuZGF5cykge1xuICAgICAgICAgIGlmICghZGF5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXkuaXNTZWxlY3RlZCA9IGRheS5pc0F2YWlsYWJsZVxuICAgICAgICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VsbEJ1dHRvbkNsYXNzKGRheTogRGF5TW9kZWwpOiBDbGFzc01vZGVsIHtcbiAgICBpZiAoIWRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2l0ZW0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygnaXRlbScsIFtcbiAgICAgIGRheS5pc0Rpc2FibGVkICYmICdiZWZvcmUnLFxuICAgICAgZGF5LmlzU2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJyxcbiAgICAgICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSAmJiAnZW1wdHknLFxuICAgICAgZGF5LmlzQXZhaWxhYmxlICYmICdhdmFpbGFibGUnLFxuICAgICAgJ2xhcmdlJyxcbiAgICAgIGRheS5pc0FjdGl2ZSAmJiAnYWN0aXZlJyxcbiAgICAgIGRheS5pc1dpdGhpblJhbmdlICYmICd3aXRoaW4tcmFuZ2UnXG4gICAgXSk7XG4gIH1cblxuICBnZXROZXh0TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLndlZWtzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RXZWVrID0gdGhpcy53ZWVrc1swXTtcblxuICAgIGlmICghZmlyc3RXZWVrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RWYWxpZERheSA9IGZpcnN0V2Vlay5kYXlzXG4gICAgICAuZmluZChkYXkgPT4gZGF5ICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGRheS5kYXRlKSwgdGhpcy5jdXJyZW50TW9udGgpKTtcblxuICAgIGlmICghZmlyc3RWYWxpZERheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShmaXJzdFZhbGlkRGF5LmRhdGUpO1xuICAgIGNvbnN0IG1vbnRoID0gbmV4dE1vbnRoLm1vbnRoICsgMTtcbiAgICBuZXh0TW9udGguc2V0TW9udGgobW9udGgpO1xuXG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBuZXh0TW9udGg7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRNb250aCk7XG4gICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcblxuICAgIGlmICghdGhpcy5hdmFpbGFiaWxpdHkpIHtcbiAgICAgIHRoaXMubWF4TW9udGhJbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIGdldFByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLndlZWtzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RXZWVrID0gdGhpcy53ZWVrc1swXTtcblxuICAgIGlmICghZmlyc3RXZWVrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RWYWxpZERheSA9IGZpcnN0V2Vlay5kYXlzXG4gICAgICAuZmluZChkYXkgPT4gZGF5ICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGRheS5kYXRlKSwgdGhpcy5jdXJyZW50TW9udGgpKTtcblxuICAgIGNvbnN0IHByZXZpb3VzTW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZmlyc3RWYWxpZERheS5kYXRlKTtcbiAgICBjb25zdCBtb250aCA9IHByZXZpb3VzTW9udGgubW9udGggLSAxO1xuICAgIHByZXZpb3VzTW9udGguc2V0TW9udGgobW9udGgpO1xuXG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBwcmV2aW91c01vbnRoO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gIH1cblxuICBzZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICBjb25zdCBwcmV2aW91c01vbnRoID0gbmV3IFV0Y0RhdGUodGhpcy5jdXJyZW50TW9udGgueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGgsIHRoaXMuY3VycmVudE1vbnRoLmRhdGUpO1xuICAgICAgY29uc3QgbW9udGggPSBwcmV2aW91c01vbnRoLm1vbnRoIC0gMTtcbiAgICAgIHByZXZpb3VzTW9udGguc2V0TW9udGgobW9udGgpO1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbiAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzSW5UaGVQYXN0KHByZXZpb3VzTW9udGgsIHRydWUpKSB7XG4gICAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5hdmFpbGFibGVEYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0QXZhaWxhYmxlRGF5cyhcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgdGhpcy5hdmFpbGFibGVEYXRlcyxcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5LFxuICAgICAgdGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbixcbiAgICAgIHRoaXMubG93ZXJMaW1pdERhdGUsXG4gICAgICB0aGlzLmFjdGl2ZURhdGUsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLm1vbnRoc1xuICAgICAgLmZpbmQoeCA9PiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSh4LnZhbHVlKSwgdGhpcy5jdXJyZW50TW9udGgpKTtcblxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnVwZGF0ZUF2YWlsYWJsZURheXNXaXRoU2VsZWN0ZWREYXRlKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIHRoaXMud2Vla3MgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrcyh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMud2Vla1N0YXJ0KTtcbiAgfVxufVxuIiwiPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoKVwiPlxuICA8ZGl2ICNjYWxlbmRhckNvbnRlbnQgdGFiaW5kZXg9XCIwXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdjb250ZW50JylcIj5cbiAgICA8aGVhZGVyIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaGVhZGVyJylcIj5cbiAgICAgIDxidXR0b24gW2lkXT1cInByZXZNb250aElkXCIgdHlwZT1cImJ1dHRvblwiICNwcmV2aW91c01vbnRoUmVmIHRhYmluZGV4PVwiMFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbmF2JylcIiBbZGlzYWJsZWRdPVwiaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPT09IHRydWVcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblByZXZpb3VzTW9udGhLZXlkb3duKCRldmVudClcIiAobW91c2Vkb3duKT1cIm9uUHJldmlvdXNNb250aE1vdXNlZG93bigpXCI+XG4gICAgICAgIDxuYXMtaWNvbiB0YWJpbmRleD1cIi0xXCIgW3R5cGVdPVwiJ2Fycm93LWxlZnQnXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vbnRocz8ubGVuZ3RoID4gMDsgZWxzZSBjdXJyZW50TW9udGhUZW1wbGF0ZVwiPlxuICAgICAgICA8bmFzLXNlbGVjdCAjbW9udGhTZWxlY3QgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdtb250aCcpXCIgW2lubGluZV09XCJ0cnVlXCIgW3NpbXBsZV09XCJ0cnVlXCIgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICBbKHNlbGVjdGVkKV09XCJzZWxlY3RlZE1vbnRoXCIgKGtleWRvd24pPVwib25Nb250aFNlbGVjdEtleWRvd24oJGV2ZW50KVwiPjwvbmFzLXNlbGVjdD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW50TW9udGhUZW1wbGF0ZT5cbiAgICAgICAge3tjdXJyZW50TW9udGhNb2RlbH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGJ1dHRvbiBbaWRdPVwibmV4dE1vbnRoSWRcIiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgI25leHRNb250aFJlZiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hdicpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxOZXh0TW9udGhcIiBbZGlzYWJsZWRdPVwibmV4dE1vbnRoRGlzYWJsZWRcIiAoa2V5ZG93bik9XCJvbk5leHRNb250aEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25OZXh0TW9udGhNb3VzZWRvd24oKVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ2Fycm93LXJpZ2h0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDwhLS0gV2Vla2RheXMgKyBEYXRlcyAtLT5cbiAgICA8dGFibGUgW25hc0NsYXNzXT1cImdldENsYXNzKCd0YWJsZScpXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dlZWsnKVwiPlxuICAgICAgICAgIDx0aCAqbmdJZj1cImV4aXN0cyhkaXNwbGF5V2Vla051bWJlcnMpXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCd3ZWVrLW51bWJlcicpXCI+PC90aD5cbiAgICAgICAgICA8dGggW25hc0NsYXNzXT1cImdldENsYXNzKCdjZWxsJylcIiAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiB3ZWVrZGF5c1wiPlxuICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAnaGVhZGVyJylcIj57e3dlZWtkYXl9fTwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3JvdycsICdhbmltYXRlJylcIj5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJleGlzdHMoZGlzcGxheVdlZWtOdW1iZXJzKVwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd2Vlay1udW1iZXInKVwiPlxuICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlJywgJ3dlZWstbnVtYmVyJylcIj57e3dlZWsud2Vla051bWJlcn19PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY2VsbCcpXCIgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrPy5kYXlzXCIgI3RhYmxlQ2VsbHM+XG4gICAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICdkdW1teScpXCIgKm5nSWY9XCJkYXkgPT09IG51bGw7IGVsc2UgZGF5VGVtcGxhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF5VGVtcGxhdGUgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJkYXkte3tkYXkuZGF0ZSB8IGRhdGUgOiAnZCc6J1VUQyc6bG9jYWxlfX1cIiB0eXBlPVwiYnV0dG9uXCIgI2RhdGVCdXR0b24gKGtleWRvd24pPVwiZGF0ZUtleURvd24oJGV2ZW50KVwiIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENlbGxCdXR0b25DbGFzcyhkYXkpXCIgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bihkYXkuZGF0ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGF5Q2xpY2soZGF5KVwiIChmb2N1cyk9XCJvbkRheUZvY3VzKGRheSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZS13cmFwcGVyJylcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZScpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXkuZGF0ZSB8IGRhdGUgOiAnZCc6J1VUQydcIj57eyBkYXkuZGF0ZSB8IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgOiAnZCc6J1VUQyc6bG9jYWxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cblxuICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInKVwiPlxuICAgICAgPGRpdiAqbmdJZj1cImF2YWlsYWJsZURhdGVzPy5sZW5ndGggPT09IDAgJiYgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicsICdpdGVtJylcIj5cbiAgICAgICAgPG5hcy1pY29uIFtpY29uXT1cIidhbGVydCdcIj48L25hcy1pY29uPlxuICAgICAgICB7e25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImF2YWlsYWJsZURhdGVzPy5sZW5ndGggPiAwICYmIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsICYmIGF2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2l0ZW0nKVwiPlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICdhdmFpbGFibGUnKVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2xhYmVsJylcIj57e2F2YWlsYWJsZUZsaWdodHNMYWJlbH19PC9kaXY+XG4gICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsICd1bmF2YWlsYWJsZScpXCI+PC9zcGFuPlxuICAgICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2xhYmVsJylcIj57e25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==