@norwegian/core-components 7.13.4 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) 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 +13107 -13022
  54. package/fesm2022/norwegian-core-components.mjs.map +1 -1
  55. package/index.d.ts +9116 -5
  56. package/package.json +14 -8
  57. package/styles/1__settings/_colors.scss +9 -9
  58. package/styles/1__settings/_mixins.scss +29 -25
  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 +6 -4
  64. package/styles/3__base/_fixes.scss +1 -1
  65. package/styles/3__base/_form.scss +5 -2
  66. package/styles/3__base/_heading.scss +22 -18
  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 +11 -7
  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/esm2022/lib/components/accordion/accordion.component.mjs +0 -145
  78. package/esm2022/lib/components/accordion/accordion.module.mjs +0 -20
  79. package/esm2022/lib/components/accordion/index.mjs +0 -3
  80. package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +0 -618
  81. package/esm2022/lib/components/airport-select/airport-select.component.mjs +0 -487
  82. package/esm2022/lib/components/airport-select/airport-select.module.mjs +0 -42
  83. package/esm2022/lib/components/airport-select/index.mjs +0 -7
  84. package/esm2022/lib/components/airport-select/models/airport-select-event.model.mjs +0 -2
  85. package/esm2022/lib/components/airport-select/models/airport-select-state.model.mjs +0 -2
  86. package/esm2022/lib/components/airport-select/models/airport.model.mjs +0 -2
  87. package/esm2022/lib/components/airport-select/models/results-labels.model.mjs +0 -3
  88. package/esm2022/lib/components/airport-select/services/airport-select-dropdown.service.mjs +0 -35
  89. package/esm2022/lib/components/airport-select/services/airport-select.service.mjs +0 -38
  90. package/esm2022/lib/components/alert/alert.component.mjs +0 -169
  91. package/esm2022/lib/components/alert/alert.module.mjs +0 -22
  92. package/esm2022/lib/components/alert/index.mjs +0 -3
  93. package/esm2022/lib/components/alert/models/alert.model.mjs +0 -2
  94. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +0 -318
  95. package/esm2022/lib/components/autocomplete/autocomplete.module.mjs +0 -43
  96. package/esm2022/lib/components/autocomplete/index.mjs +0 -4
  97. package/esm2022/lib/components/autocomplete/models/autocomplete.model.mjs +0 -2
  98. package/esm2022/lib/components/backdrop/backdrop.component.mjs +0 -58
  99. package/esm2022/lib/components/backdrop/backdrop.module.mjs +0 -19
  100. package/esm2022/lib/components/backdrop/index.mjs +0 -3
  101. package/esm2022/lib/components/box/box.component.mjs +0 -66
  102. package/esm2022/lib/components/box/box.module.mjs +0 -19
  103. package/esm2022/lib/components/box/index.mjs +0 -3
  104. package/esm2022/lib/components/button/button.component.mjs +0 -192
  105. package/esm2022/lib/components/button/button.module.mjs +0 -21
  106. package/esm2022/lib/components/button/index.mjs +0 -3
  107. package/esm2022/lib/components/campaign-header/campaign-header.component.mjs +0 -51
  108. package/esm2022/lib/components/campaign-header/campaign-header.module.mjs +0 -20
  109. package/esm2022/lib/components/campaign-header/index.mjs +0 -3
  110. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -163
  111. package/esm2022/lib/components/checkbox/checkbox.module.mjs +0 -20
  112. package/esm2022/lib/components/checkbox/index.mjs +0 -3
  113. package/esm2022/lib/components/chip/chip.component.mjs +0 -48
  114. package/esm2022/lib/components/chip/chip.module.mjs +0 -19
  115. package/esm2022/lib/components/chip/index.mjs +0 -3
  116. package/esm2022/lib/components/container/container.component.mjs +0 -50
  117. package/esm2022/lib/components/container/container.module.mjs +0 -19
  118. package/esm2022/lib/components/container/index.mjs +0 -3
  119. package/esm2022/lib/components/continue/continue.component.mjs +0 -199
  120. package/esm2022/lib/components/continue/continue.module.mjs +0 -23
  121. package/esm2022/lib/components/continue/index.mjs +0 -3
  122. package/esm2022/lib/components/cover/cover.component.mjs +0 -75
  123. package/esm2022/lib/components/cover/cover.module.mjs +0 -21
  124. package/esm2022/lib/components/cover/index.mjs +0 -3
  125. package/esm2022/lib/components/datepicker/calendar/calendar-date.model.mjs +0 -2
  126. package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +0 -607
  127. package/esm2022/lib/components/datepicker/calendar/enums/week-start.enum.mjs +0 -6
  128. package/esm2022/lib/components/datepicker/calendar/models/day.model.mjs +0 -2
  129. package/esm2022/lib/components/datepicker/calendar/models/select-option.model.mjs +0 -2
  130. package/esm2022/lib/components/datepicker/calendar/models/week.model.mjs +0 -2
  131. package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -613
  132. package/esm2022/lib/components/datepicker/datepicker.module.mjs +0 -55
  133. package/esm2022/lib/components/datepicker/index.mjs +0 -5
  134. package/esm2022/lib/components/datepicker/services/calendar.service.mjs +0 -215
  135. package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +0 -401
  136. package/esm2022/lib/components/datepicker-combo/datepicker-combo.module.mjs +0 -31
  137. package/esm2022/lib/components/datepicker-combo/index.mjs +0 -3
  138. package/esm2022/lib/components/divider/divider.component.mjs +0 -59
  139. package/esm2022/lib/components/divider/divider.module.mjs +0 -28
  140. package/esm2022/lib/components/divider/index.mjs +0 -3
  141. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -170
  142. package/esm2022/lib/components/dropdown/dropdown.module.mjs +0 -21
  143. package/esm2022/lib/components/dropdown/index.mjs +0 -3
  144. package/esm2022/lib/components/filter/enums/trip-type.enum.mjs +0 -8
  145. package/esm2022/lib/components/filter/filter.component.mjs +0 -1307
  146. package/esm2022/lib/components/filter/filter.module.mjs +0 -81
  147. package/esm2022/lib/components/filter/index.mjs +0 -4
  148. package/esm2022/lib/components/grid/col/col.component.mjs +0 -49
  149. package/esm2022/lib/components/grid/grid.component.mjs +0 -72
  150. package/esm2022/lib/components/grid/grid.module.mjs +0 -20
  151. package/esm2022/lib/components/grid/index.mjs +0 -4
  152. package/esm2022/lib/components/icon/icon.component.mjs +0 -44
  153. package/esm2022/lib/components/icon/icon.module.mjs +0 -19
  154. package/esm2022/lib/components/icon/index.mjs +0 -3
  155. package/esm2022/lib/components/icon-list/icon-list.component.mjs +0 -50
  156. package/esm2022/lib/components/icon-list/icon-list.model.mjs +0 -2
  157. package/esm2022/lib/components/icon-list/icon-list.module.mjs +0 -20
  158. package/esm2022/lib/components/icon-list/index.mjs +0 -4
  159. package/esm2022/lib/components/index.mjs +0 -67
  160. package/esm2022/lib/components/info/index.mjs +0 -4
  161. package/esm2022/lib/components/info/info.component.mjs +0 -116
  162. package/esm2022/lib/components/info/info.module.mjs +0 -36
  163. package/esm2022/lib/components/info/models/info.model.mjs +0 -2
  164. package/esm2022/lib/components/input/index.mjs +0 -3
  165. package/esm2022/lib/components/input/input.component.mjs +0 -228
  166. package/esm2022/lib/components/input/input.module.mjs +0 -35
  167. package/esm2022/lib/components/journey/index.mjs +0 -3
  168. package/esm2022/lib/components/journey/journey.component.mjs +0 -137
  169. package/esm2022/lib/components/journey/journey.module.mjs +0 -21
  170. package/esm2022/lib/components/journey/models/journey-flight.model.mjs +0 -2
  171. package/esm2022/lib/components/journey/models/journey.model.mjs +0 -2
  172. package/esm2022/lib/components/journey/models/marketing-carrier.enum.mjs +0 -8
  173. package/esm2022/lib/components/journey-availability/index.mjs +0 -3
  174. package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +0 -128
  175. package/esm2022/lib/components/journey-availability/journey-availability.module.mjs +0 -39
  176. package/esm2022/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs +0 -7
  177. package/esm2022/lib/components/journey-availability-list/index.mjs +0 -3
  178. package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +0 -182
  179. package/esm2022/lib/components/journey-availability-list/journey-availability-list.module.mjs +0 -36
  180. package/esm2022/lib/components/journey-selection/index.mjs +0 -6
  181. package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +0 -120
  182. package/esm2022/lib/components/journey-selection/journey-selection.module.mjs +0 -24
  183. package/esm2022/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs +0 -2
  184. package/esm2022/lib/components/journey-selection/models/journey-selection-common.model.mjs +0 -2
  185. package/esm2022/lib/components/journey-selection/models/journey-selection-expanded.model.mjs +0 -2
  186. package/esm2022/lib/components/journey-selection/models/journey-selection.model.mjs +0 -2
  187. package/esm2022/lib/components/journey-stopover/index.mjs +0 -3
  188. package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +0 -150
  189. package/esm2022/lib/components/journey-stopover/journey-stopover.module.mjs +0 -21
  190. package/esm2022/lib/components/journey-stopover/models/stopover-time.model.mjs +0 -2
  191. package/esm2022/lib/components/list/index.mjs +0 -4
  192. package/esm2022/lib/components/list/list-item/list-item.component.mjs +0 -52
  193. package/esm2022/lib/components/list/list.component.mjs +0 -78
  194. package/esm2022/lib/components/list/list.module.mjs +0 -20
  195. package/esm2022/lib/components/micro-button/index.mjs +0 -3
  196. package/esm2022/lib/components/micro-button/micro-button.component.mjs +0 -101
  197. package/esm2022/lib/components/micro-button/micro-button.module.mjs +0 -20
  198. package/esm2022/lib/components/modal/index.mjs +0 -3
  199. package/esm2022/lib/components/modal/modal.component.mjs +0 -156
  200. package/esm2022/lib/components/modal/modal.module.mjs +0 -38
  201. package/esm2022/lib/components/number-field/index.mjs +0 -3
  202. package/esm2022/lib/components/number-field/models/number-field.model.mjs +0 -2
  203. package/esm2022/lib/components/number-field/number-field.component.mjs +0 -162
  204. package/esm2022/lib/components/number-field/number-field.module.mjs +0 -39
  205. package/esm2022/lib/components/page-footer/index.mjs +0 -3
  206. package/esm2022/lib/components/page-footer/page-footer.component.mjs +0 -52
  207. package/esm2022/lib/components/page-footer/page-footer.module.mjs +0 -21
  208. package/esm2022/lib/components/page-header/hamburger/hamburger.component.mjs +0 -22
  209. package/esm2022/lib/components/page-header/index.mjs +0 -5
  210. package/esm2022/lib/components/page-header/models/wallet.model.mjs +0 -2
  211. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -171
  212. package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
  213. package/esm2022/lib/components/page-header/search/search.component.mjs +0 -49
  214. package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +0 -57
  215. package/esm2022/lib/components/passenger-select/enums/passenger-type.enum.mjs +0 -9
  216. package/esm2022/lib/components/passenger-select/index.mjs +0 -5
  217. package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +0 -2
  218. package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +0 -423
  219. package/esm2022/lib/components/passenger-select/passenger-select.module.mjs +0 -28
  220. package/esm2022/lib/components/phone-number/index.mjs +0 -3
  221. package/esm2022/lib/components/phone-number/phone-number.component.mjs +0 -182
  222. package/esm2022/lib/components/phone-number/phone-number.module.mjs +0 -44
  223. package/esm2022/lib/components/premium-toggle/index.mjs +0 -3
  224. package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +0 -68
  225. package/esm2022/lib/components/premium-toggle/premium-toggle.module.mjs +0 -20
  226. package/esm2022/lib/components/radio/index.mjs +0 -3
  227. package/esm2022/lib/components/radio/radio.component.mjs +0 -109
  228. package/esm2022/lib/components/radio/radio.module.mjs +0 -20
  229. package/esm2022/lib/components/ribbon-banner/index.mjs +0 -3
  230. package/esm2022/lib/components/ribbon-banner/ribbon-banner.component.mjs +0 -89
  231. package/esm2022/lib/components/ribbon-banner/ribbon-banner.module.mjs +0 -40
  232. package/esm2022/lib/components/select/index.mjs +0 -6
  233. package/esm2022/lib/components/select/models/select-option.model.mjs +0 -2
  234. package/esm2022/lib/components/select/optgroup/optgroup.component.mjs +0 -29
  235. package/esm2022/lib/components/select/option/option.component.mjs +0 -26
  236. package/esm2022/lib/components/select/select.component.mjs +0 -404
  237. package/esm2022/lib/components/select/select.module.mjs +0 -23
  238. package/esm2022/lib/components/simple-list/index.mjs +0 -3
  239. package/esm2022/lib/components/simple-list/simple-list.component.mjs +0 -48
  240. package/esm2022/lib/components/simple-list/simple-list.module.mjs +0 -19
  241. package/esm2022/lib/components/slide-toggle/index.mjs +0 -3
  242. package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -121
  243. package/esm2022/lib/components/slide-toggle/slide-toggle.module.mjs +0 -20
  244. package/esm2022/lib/components/slider/index.mjs +0 -3
  245. package/esm2022/lib/components/slider/slider.component.mjs +0 -515
  246. package/esm2022/lib/components/slider/slider.module.mjs +0 -20
  247. package/esm2022/lib/components/sort/index.mjs +0 -3
  248. package/esm2022/lib/components/sort/sort.component.mjs +0 -98
  249. package/esm2022/lib/components/sort/sort.module.mjs +0 -36
  250. package/esm2022/lib/components/spinner/index.mjs +0 -3
  251. package/esm2022/lib/components/spinner/spinner.component.mjs +0 -127
  252. package/esm2022/lib/components/spinner/spinner.module.mjs +0 -19
  253. package/esm2022/lib/components/status-box/index.mjs +0 -3
  254. package/esm2022/lib/components/status-box/models/status-box.model.mjs +0 -2
  255. package/esm2022/lib/components/status-box/status-box.component.mjs +0 -109
  256. package/esm2022/lib/components/status-box/status-box.module.mjs +0 -21
  257. package/esm2022/lib/components/suggestions/index.mjs +0 -3
  258. package/esm2022/lib/components/suggestions/suggestions.component.mjs +0 -44
  259. package/esm2022/lib/components/suggestions/suggestions.module.mjs +0 -20
  260. package/esm2022/lib/components/tab-group/index.mjs +0 -4
  261. package/esm2022/lib/components/tab-group/tab/tab.component.mjs +0 -140
  262. package/esm2022/lib/components/tab-group/tab-group.component.mjs +0 -91
  263. package/esm2022/lib/components/tab-group/tab-group.module.mjs +0 -21
  264. package/esm2022/lib/components/table/column/column.component.mjs +0 -16
  265. package/esm2022/lib/components/table/column-group/column-group.component.mjs +0 -30
  266. package/esm2022/lib/components/table/index.mjs +0 -11
  267. package/esm2022/lib/components/table/services/table.service.mjs +0 -24
  268. package/esm2022/lib/components/table/table-body/table-body.component.mjs +0 -23
  269. package/esm2022/lib/components/table/table-foot/table-foot.component.mjs +0 -23
  270. package/esm2022/lib/components/table/table-head/table-head.component.mjs +0 -23
  271. package/esm2022/lib/components/table/table-row/table-data/table-data.component.mjs +0 -15
  272. package/esm2022/lib/components/table/table-row/table-header/table-header.component.mjs +0 -15
  273. package/esm2022/lib/components/table/table-row/table-row.component.mjs +0 -23
  274. package/esm2022/lib/components/table/table.component.mjs +0 -27
  275. package/esm2022/lib/components/table/table.module.mjs +0 -63
  276. package/esm2022/lib/components/tag/index.mjs +0 -3
  277. package/esm2022/lib/components/tag/tag.component.mjs +0 -71
  278. package/esm2022/lib/components/tag/tag.module.mjs +0 -28
  279. package/esm2022/lib/components/textarea/index.mjs +0 -3
  280. package/esm2022/lib/components/textarea/textarea.component.mjs +0 -139
  281. package/esm2022/lib/components/textarea/textarea.module.mjs +0 -21
  282. package/esm2022/lib/components/toggle/index.mjs +0 -3
  283. package/esm2022/lib/components/toggle/models/options.model.mjs +0 -3
  284. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -102
  285. package/esm2022/lib/components/toggle/toggle.module.mjs +0 -35
  286. package/esm2022/lib/components/tooltip/index.mjs +0 -3
  287. package/esm2022/lib/components/tooltip/tooltip.component.mjs +0 -170
  288. package/esm2022/lib/components/tooltip/tooltip.module.mjs +0 -30
  289. package/esm2022/lib/components/trip-summary/index.mjs +0 -3
  290. package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +0 -167
  291. package/esm2022/lib/components/trip-summary/trip-summary.module.mjs +0 -36
  292. package/esm2022/lib/core/base/nas-component.base.mjs +0 -48
  293. package/esm2022/lib/core/decorators/debounce.decorator.mjs +0 -12
  294. package/esm2022/lib/core/directives/index.mjs +0 -3
  295. package/esm2022/lib/core/directives/nas-class/nas-class.directive.mjs +0 -80
  296. package/esm2022/lib/core/directives/nas-class/nas-class.module.mjs +0 -20
  297. package/esm2022/lib/core/extensions/html-element.extension.mjs +0 -31
  298. package/esm2022/lib/core/index.mjs +0 -5
  299. package/esm2022/lib/core/models/abandoned-basket-item.model.mjs +0 -2
  300. package/esm2022/lib/core/models/animate.model.mjs +0 -2
  301. package/esm2022/lib/core/models/class.model.mjs +0 -2
  302. package/esm2022/lib/core/models/index.mjs +0 -7
  303. package/esm2022/lib/core/models/link.model.mjs +0 -2
  304. package/esm2022/lib/core/models/position.model.mjs +0 -2
  305. package/esm2022/lib/core/models/utc-date.model.mjs +0 -40
  306. package/esm2022/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +0 -61
  307. package/esm2022/lib/core/services/animate-helper/animate-helper.service.mjs +0 -49
  308. package/esm2022/lib/core/services/bem-helper/bem-helper.service.mjs +0 -44
  309. package/esm2022/lib/core/services/date/date-compare.enum.mjs +0 -7
  310. package/esm2022/lib/core/services/date/date-helper.service.mjs +0 -199
  311. package/esm2022/lib/core/services/device/device-helper.service.mjs +0 -46
  312. package/esm2022/lib/core/services/geolocation/geolocation-state.enum.mjs +0 -8
  313. package/esm2022/lib/core/services/geolocation/geolocation.service.mjs +0 -66
  314. package/esm2022/lib/core/services/index.mjs +0 -10
  315. package/esm2022/lib/core/services/language/language-helper.service.mjs +0 -114
  316. package/esm2022/lib/core/services/sort/sort.service.mjs +0 -25
  317. package/esm2022/lib/core/services/viewport/viewport.service.mjs +0 -36
  318. package/esm2022/lib/index.mjs +0 -5
  319. package/esm2022/lib/services/get-position.service.mjs +0 -23
  320. package/esm2022/lib/services/index.mjs +0 -2
  321. package/esm2022/lib/shared/index.mjs +0 -2
  322. package/esm2022/lib/shared/models/flight-details.mjs +0 -3
  323. package/esm2022/lib/shared/models/index.mjs +0 -6
  324. package/esm2022/lib/shared/models/journey-availability-sort.model.mjs +0 -2
  325. package/esm2022/lib/shared/models/journey-availability.model.mjs +0 -2
  326. package/esm2022/lib/shared/models/journey-details.model.mjs +0 -2
  327. package/esm2022/lib/shared/models/journey-duration.model.mjs +0 -2
  328. package/esm2022/lib/shared/models/journey-stopover.model.mjs +0 -2
  329. package/esm2022/lib/shared/models/journey-transit-info.model.mjs +0 -2
  330. package/esm2022/lib/shared/models/operating-carrier.model.mjs +0 -2
  331. package/esm2022/lib/shared/models/sort-option.model.mjs +0 -2
  332. package/esm2022/lib/shared/models/sort.model.mjs +0 -2
  333. package/esm2022/lib/shared/models/trip-item-details.model.mjs +0 -2
  334. package/esm2022/lib/shared/models/trip-summary-details.model.mjs +0 -2
  335. package/esm2022/lib/shared/models/trip-summary.model.mjs +0 -2
  336. package/esm2022/norwegian-core-components.mjs +0 -5
  337. package/esm2022/public_api.mjs +0 -2
  338. package/lib/components/accordion/accordion.component.d.ts +0 -215
  339. package/lib/components/accordion/accordion.module.d.ts +0 -10
  340. package/lib/components/accordion/index.d.ts +0 -2
  341. package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -99
  342. package/lib/components/airport-select/airport-select.component.d.ts +0 -323
  343. package/lib/components/airport-select/airport-select.module.d.ts +0 -13
  344. package/lib/components/airport-select/index.d.ts +0 -6
  345. package/lib/components/airport-select/models/airport-select-event.model.d.ts +0 -4
  346. package/lib/components/airport-select/models/airport-select-state.model.d.ts +0 -5
  347. package/lib/components/airport-select/models/airport.model.d.ts +0 -11
  348. package/lib/components/airport-select/models/results-labels.model.d.ts +0 -7
  349. package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +0 -10
  350. package/lib/components/airport-select/services/airport-select.service.d.ts +0 -8
  351. package/lib/components/alert/alert.component.d.ts +0 -129
  352. package/lib/components/alert/alert.module.d.ts +0 -12
  353. package/lib/components/alert/index.d.ts +0 -2
  354. package/lib/components/alert/models/alert.model.d.ts +0 -10
  355. package/lib/components/autocomplete/autocomplete.component.d.ts +0 -135
  356. package/lib/components/autocomplete/autocomplete.module.d.ts +0 -13
  357. package/lib/components/autocomplete/index.d.ts +0 -3
  358. package/lib/components/autocomplete/models/autocomplete.model.d.ts +0 -5
  359. package/lib/components/backdrop/backdrop.component.d.ts +0 -38
  360. package/lib/components/backdrop/backdrop.module.d.ts +0 -9
  361. package/lib/components/backdrop/index.d.ts +0 -2
  362. package/lib/components/box/box.component.d.ts +0 -78
  363. package/lib/components/box/box.module.d.ts +0 -9
  364. package/lib/components/box/index.d.ts +0 -2
  365. package/lib/components/button/button.component.d.ts +0 -294
  366. package/lib/components/button/button.module.d.ts +0 -11
  367. package/lib/components/button/index.d.ts +0 -2
  368. package/lib/components/campaign-header/campaign-header.component.d.ts +0 -58
  369. package/lib/components/campaign-header/campaign-header.module.d.ts +0 -10
  370. package/lib/components/campaign-header/index.d.ts +0 -2
  371. package/lib/components/checkbox/checkbox.component.d.ts +0 -151
  372. package/lib/components/checkbox/checkbox.module.d.ts +0 -10
  373. package/lib/components/checkbox/index.d.ts +0 -2
  374. package/lib/components/chip/chip.component.d.ts +0 -48
  375. package/lib/components/chip/chip.module.d.ts +0 -9
  376. package/lib/components/chip/index.d.ts +0 -2
  377. package/lib/components/container/container.component.d.ts +0 -52
  378. package/lib/components/container/container.module.d.ts +0 -9
  379. package/lib/components/container/index.d.ts +0 -2
  380. package/lib/components/continue/continue.component.d.ts +0 -171
  381. package/lib/components/continue/continue.module.d.ts +0 -11
  382. package/lib/components/continue/index.d.ts +0 -2
  383. package/lib/components/cover/cover.component.d.ts +0 -125
  384. package/lib/components/cover/cover.module.d.ts +0 -11
  385. package/lib/components/cover/index.d.ts +0 -2
  386. package/lib/components/datepicker/calendar/calendar-date.model.d.ts +0 -5
  387. package/lib/components/datepicker/calendar/calendar.component.d.ts +0 -169
  388. package/lib/components/datepicker/calendar/enums/week-start.enum.d.ts +0 -4
  389. package/lib/components/datepicker/calendar/models/day.model.d.ts +0 -10
  390. package/lib/components/datepicker/calendar/models/select-option.model.d.ts +0 -4
  391. package/lib/components/datepicker/calendar/models/week.model.d.ts +0 -5
  392. package/lib/components/datepicker/datepicker.component.d.ts +0 -289
  393. package/lib/components/datepicker/datepicker.module.d.ts +0 -16
  394. package/lib/components/datepicker/index.d.ts +0 -4
  395. package/lib/components/datepicker/services/calendar.service.d.ts +0 -27
  396. package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +0 -322
  397. package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +0 -10
  398. package/lib/components/datepicker-combo/index.d.ts +0 -2
  399. package/lib/components/divider/divider.component.d.ts +0 -68
  400. package/lib/components/divider/divider.module.d.ts +0 -10
  401. package/lib/components/divider/index.d.ts +0 -2
  402. package/lib/components/dropdown/dropdown.component.d.ts +0 -80
  403. package/lib/components/dropdown/dropdown.module.d.ts +0 -11
  404. package/lib/components/dropdown/index.d.ts +0 -2
  405. package/lib/components/filter/enums/trip-type.enum.d.ts +0 -6
  406. package/lib/components/filter/filter.component.d.ts +0 -862
  407. package/lib/components/filter/filter.module.d.ts +0 -22
  408. package/lib/components/filter/index.d.ts +0 -3
  409. package/lib/components/grid/col/col.component.d.ts +0 -45
  410. package/lib/components/grid/grid.component.d.ts +0 -92
  411. package/lib/components/grid/grid.module.d.ts +0 -10
  412. package/lib/components/grid/index.d.ts +0 -3
  413. package/lib/components/icon/icon.component.d.ts +0 -53
  414. package/lib/components/icon/icon.module.d.ts +0 -9
  415. package/lib/components/icon/index.d.ts +0 -2
  416. package/lib/components/icon-list/icon-list.component.d.ts +0 -49
  417. package/lib/components/icon-list/icon-list.model.d.ts +0 -8
  418. package/lib/components/icon-list/icon-list.module.d.ts +0 -10
  419. package/lib/components/icon-list/index.d.ts +0 -3
  420. package/lib/components/index.d.ts +0 -66
  421. package/lib/components/info/index.d.ts +0 -3
  422. package/lib/components/info/info.component.d.ts +0 -108
  423. package/lib/components/info/info.module.d.ts +0 -12
  424. package/lib/components/info/models/info.model.d.ts +0 -9
  425. package/lib/components/input/index.d.ts +0 -2
  426. package/lib/components/input/input.component.d.ts +0 -214
  427. package/lib/components/input/input.module.d.ts +0 -11
  428. package/lib/components/journey/index.d.ts +0 -2
  429. package/lib/components/journey/journey.component.d.ts +0 -102
  430. package/lib/components/journey/journey.module.d.ts +0 -11
  431. package/lib/components/journey/models/journey-flight.model.d.ts +0 -13
  432. package/lib/components/journey/models/journey.model.d.ts +0 -5
  433. package/lib/components/journey/models/marketing-carrier.enum.d.ts +0 -6
  434. package/lib/components/journey-availability/index.d.ts +0 -2
  435. package/lib/components/journey-availability/journey-availability.component.d.ts +0 -93
  436. package/lib/components/journey-availability/journey-availability.module.d.ts +0 -12
  437. package/lib/components/journey-availability-list/enums/availability-sort-option.enum.d.ts +0 -5
  438. package/lib/components/journey-availability-list/index.d.ts +0 -2
  439. package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +0 -114
  440. package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +0 -12
  441. package/lib/components/journey-selection/index.d.ts +0 -5
  442. package/lib/components/journey-selection/journey-selection.component.d.ts +0 -84
  443. package/lib/components/journey-selection/journey-selection.module.d.ts +0 -11
  444. package/lib/components/journey-selection/models/journey-selection-collapsed.model.d.ts +0 -11
  445. package/lib/components/journey-selection/models/journey-selection-common.model.d.ts +0 -7
  446. package/lib/components/journey-selection/models/journey-selection-expanded.model.d.ts +0 -5
  447. package/lib/components/journey-selection/models/journey-selection.model.d.ts +0 -14
  448. package/lib/components/journey-stopover/index.d.ts +0 -2
  449. package/lib/components/journey-stopover/journey-stopover.component.d.ts +0 -131
  450. package/lib/components/journey-stopover/journey-stopover.module.d.ts +0 -11
  451. package/lib/components/journey-stopover/models/stopover-time.model.d.ts +0 -4
  452. package/lib/components/list/index.d.ts +0 -3
  453. package/lib/components/list/list-item/list-item.component.d.ts +0 -35
  454. package/lib/components/list/list.component.d.ts +0 -76
  455. package/lib/components/list/list.module.d.ts +0 -10
  456. package/lib/components/micro-button/index.d.ts +0 -2
  457. package/lib/components/micro-button/micro-button.component.d.ts +0 -139
  458. package/lib/components/micro-button/micro-button.module.d.ts +0 -10
  459. package/lib/components/modal/index.d.ts +0 -2
  460. package/lib/components/modal/modal.component.d.ts +0 -119
  461. package/lib/components/modal/modal.module.d.ts +0 -12
  462. package/lib/components/number-field/index.d.ts +0 -2
  463. package/lib/components/number-field/models/number-field.model.d.ts +0 -5
  464. package/lib/components/number-field/number-field.component.d.ts +0 -124
  465. package/lib/components/number-field/number-field.module.d.ts +0 -12
  466. package/lib/components/page-footer/index.d.ts +0 -2
  467. package/lib/components/page-footer/page-footer.component.d.ts +0 -53
  468. package/lib/components/page-footer/page-footer.module.d.ts +0 -11
  469. package/lib/components/page-header/hamburger/hamburger.component.d.ts +0 -12
  470. package/lib/components/page-header/index.d.ts +0 -4
  471. package/lib/components/page-header/models/wallet.model.d.ts +0 -21
  472. package/lib/components/page-header/page-header.component.d.ts +0 -127
  473. package/lib/components/page-header/page-header.module.d.ts +0 -17
  474. package/lib/components/page-header/search/search.component.d.ts +0 -26
  475. package/lib/components/page-header/wallet/wallet.component.d.ts +0 -23
  476. package/lib/components/passenger-select/enums/passenger-type.enum.d.ts +0 -7
  477. package/lib/components/passenger-select/index.d.ts +0 -4
  478. package/lib/components/passenger-select/models/passengers.model.d.ts +0 -11
  479. package/lib/components/passenger-select/passenger-select.component.d.ts +0 -141
  480. package/lib/components/passenger-select/passenger-select.module.d.ts +0 -10
  481. package/lib/components/phone-number/index.d.ts +0 -2
  482. package/lib/components/phone-number/phone-number.component.d.ts +0 -263
  483. package/lib/components/phone-number/phone-number.module.d.ts +0 -13
  484. package/lib/components/premium-toggle/index.d.ts +0 -2
  485. package/lib/components/premium-toggle/premium-toggle.component.d.ts +0 -50
  486. package/lib/components/premium-toggle/premium-toggle.module.d.ts +0 -10
  487. package/lib/components/radio/index.d.ts +0 -2
  488. package/lib/components/radio/radio.component.d.ts +0 -137
  489. package/lib/components/radio/radio.module.d.ts +0 -10
  490. package/lib/components/ribbon-banner/index.d.ts +0 -2
  491. package/lib/components/ribbon-banner/ribbon-banner.component.d.ts +0 -66
  492. package/lib/components/ribbon-banner/ribbon-banner.module.d.ts +0 -13
  493. package/lib/components/select/index.d.ts +0 -5
  494. package/lib/components/select/models/select-option.model.d.ts +0 -4
  495. package/lib/components/select/optgroup/optgroup.component.d.ts +0 -25
  496. package/lib/components/select/option/option.component.d.ts +0 -24
  497. package/lib/components/select/select.component.d.ts +0 -197
  498. package/lib/components/select/select.module.d.ts +0 -13
  499. package/lib/components/simple-list/index.d.ts +0 -2
  500. package/lib/components/simple-list/simple-list.component.d.ts +0 -60
  501. package/lib/components/simple-list/simple-list.module.d.ts +0 -9
  502. package/lib/components/slide-toggle/index.d.ts +0 -2
  503. package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -70
  504. package/lib/components/slide-toggle/slide-toggle.module.d.ts +0 -10
  505. package/lib/components/slider/index.d.ts +0 -2
  506. package/lib/components/slider/slider.component.d.ts +0 -216
  507. package/lib/components/slider/slider.module.d.ts +0 -10
  508. package/lib/components/sort/index.d.ts +0 -2
  509. package/lib/components/sort/sort.component.d.ts +0 -55
  510. package/lib/components/sort/sort.module.d.ts +0 -12
  511. package/lib/components/spinner/index.d.ts +0 -2
  512. package/lib/components/spinner/spinner.component.d.ts +0 -104
  513. package/lib/components/spinner/spinner.module.d.ts +0 -9
  514. package/lib/components/status-box/index.d.ts +0 -2
  515. package/lib/components/status-box/models/status-box.model.d.ts +0 -5
  516. package/lib/components/status-box/status-box.component.d.ts +0 -92
  517. package/lib/components/status-box/status-box.module.d.ts +0 -11
  518. package/lib/components/suggestions/index.d.ts +0 -2
  519. package/lib/components/suggestions/suggestions.component.d.ts +0 -36
  520. package/lib/components/suggestions/suggestions.module.d.ts +0 -10
  521. package/lib/components/tab-group/index.d.ts +0 -3
  522. package/lib/components/tab-group/tab/tab.component.d.ts +0 -97
  523. package/lib/components/tab-group/tab-group.component.d.ts +0 -42
  524. package/lib/components/tab-group/tab-group.module.d.ts +0 -11
  525. package/lib/components/table/column/column.component.d.ts +0 -6
  526. package/lib/components/table/column-group/column-group.component.d.ts +0 -15
  527. package/lib/components/table/index.d.ts +0 -10
  528. package/lib/components/table/services/table.service.d.ts +0 -8
  529. package/lib/components/table/table-body/table-body.component.d.ts +0 -15
  530. package/lib/components/table/table-foot/table-foot.component.d.ts +0 -15
  531. package/lib/components/table/table-head/table-head.component.d.ts +0 -15
  532. package/lib/components/table/table-row/table-data/table-data.component.d.ts +0 -5
  533. package/lib/components/table/table-row/table-header/table-header.component.d.ts +0 -5
  534. package/lib/components/table/table-row/table-row.component.d.ts +0 -15
  535. package/lib/components/table/table.component.d.ts +0 -19
  536. package/lib/components/table/table.module.d.ts +0 -17
  537. package/lib/components/tag/index.d.ts +0 -2
  538. package/lib/components/tag/tag.component.d.ts +0 -71
  539. package/lib/components/tag/tag.module.d.ts +0 -10
  540. package/lib/components/textarea/index.d.ts +0 -2
  541. package/lib/components/textarea/textarea.component.d.ts +0 -156
  542. package/lib/components/textarea/textarea.module.d.ts +0 -11
  543. package/lib/components/toggle/index.d.ts +0 -2
  544. package/lib/components/toggle/models/options.model.d.ts +0 -7
  545. package/lib/components/toggle/toggle.component.d.ts +0 -159
  546. package/lib/components/toggle/toggle.module.d.ts +0 -11
  547. package/lib/components/tooltip/index.d.ts +0 -2
  548. package/lib/components/tooltip/tooltip.component.d.ts +0 -63
  549. package/lib/components/tooltip/tooltip.module.d.ts +0 -10
  550. package/lib/components/trip-summary/index.d.ts +0 -2
  551. package/lib/components/trip-summary/trip-summary.component.d.ts +0 -162
  552. package/lib/components/trip-summary/trip-summary.module.d.ts +0 -12
  553. package/lib/core/base/nas-component.base.d.ts +0 -11
  554. package/lib/core/decorators/debounce.decorator.d.ts +0 -1
  555. package/lib/core/directives/index.d.ts +0 -2
  556. package/lib/core/directives/nas-class/nas-class.directive.d.ts +0 -14
  557. package/lib/core/directives/nas-class/nas-class.module.d.ts +0 -8
  558. package/lib/core/extensions/html-element.extension.d.ts +0 -6
  559. package/lib/core/index.d.ts +0 -4
  560. package/lib/core/models/abandoned-basket-item.model.d.ts +0 -14
  561. package/lib/core/models/animate.model.d.ts +0 -6
  562. package/lib/core/models/class.model.d.ts +0 -7
  563. package/lib/core/models/index.d.ts +0 -6
  564. package/lib/core/models/link.model.d.ts +0 -5
  565. package/lib/core/models/position.model.d.ts +0 -4
  566. package/lib/core/models/utc-date.model.d.ts +0 -13
  567. package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +0 -10
  568. package/lib/core/services/animate-helper/animate-helper.service.d.ts +0 -9
  569. package/lib/core/services/bem-helper/bem-helper.service.d.ts +0 -7
  570. package/lib/core/services/date/date-compare.enum.d.ts +0 -5
  571. package/lib/core/services/date/date-helper.service.d.ts +0 -22
  572. package/lib/core/services/device/device-helper.service.d.ts +0 -16
  573. package/lib/core/services/geolocation/geolocation-state.enum.d.ts +0 -6
  574. package/lib/core/services/geolocation/geolocation.service.d.ts +0 -9
  575. package/lib/core/services/index.d.ts +0 -9
  576. package/lib/core/services/language/language-helper.service.d.ts +0 -12
  577. package/lib/core/services/sort/sort.service.d.ts +0 -6
  578. package/lib/core/services/viewport/viewport.service.d.ts +0 -11
  579. package/lib/index.d.ts +0 -4
  580. package/lib/services/get-position.service.d.ts +0 -9
  581. package/lib/services/index.d.ts +0 -1
  582. package/lib/shared/index.d.ts +0 -1
  583. package/lib/shared/models/flight-details.d.ts +0 -22
  584. package/lib/shared/models/index.d.ts +0 -5
  585. package/lib/shared/models/journey-availability-sort.model.d.ts +0 -8
  586. package/lib/shared/models/journey-availability.model.d.ts +0 -25
  587. package/lib/shared/models/journey-details.model.d.ts +0 -8
  588. package/lib/shared/models/journey-duration.model.d.ts +0 -7
  589. package/lib/shared/models/journey-stopover.model.d.ts +0 -15
  590. package/lib/shared/models/journey-transit-info.model.d.ts +0 -5
  591. package/lib/shared/models/operating-carrier.model.d.ts +0 -4
  592. package/lib/shared/models/sort-option.model.d.ts +0 -11
  593. package/lib/shared/models/sort.model.d.ts +0 -10
  594. package/lib/shared/models/trip-item-details.model.d.ts +0 -12
  595. package/lib/shared/models/trip-summary-details.model.d.ts +0 -5
  596. package/lib/shared/models/trip-summary.model.d.ts +0 -4
  597. package/public_api.d.ts +0 -1
@@ -1,607 +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.monthChange.emit(this.currentMonth);
93
- this.setPreviousMonthDisabled();
94
- const elmementToFocus = this.activeDateCell;
95
- if (elmementToFocus) {
96
- elmementToFocus.focus();
97
- }
98
- }
99
- if (this.weeks) {
100
- this.calendarService.setActiveDate(date, this.weeks);
101
- for (const day of this.calendarService.getDays(this.weeks)) {
102
- if (!day) {
103
- continue;
104
- }
105
- if (day.isActive) {
106
- this.activeDateValue = date;
107
- this.activeDateChange.emit(date);
108
- }
109
- }
110
- }
111
- }
112
- get selectedDate() {
113
- return this.selectedDateValue;
114
- }
115
- set selectedDate(date) {
116
- if (!date) {
117
- return;
118
- }
119
- this.selectedDateValue = date;
120
- if (!this.dateService.isSameMonth(date, this.activeDate)
121
- || !this.dateService.isSameMonth(date, this.currentMonth)) {
122
- this.currentMonth = date;
123
- this.activeDateValue = date;
124
- this.applySelectedDateChanges();
125
- }
126
- this.setSelectedDate(date);
127
- }
128
- get selectedMonth() {
129
- return this.selectedValue;
130
- }
131
- set selectedMonth(option) {
132
- if (!option) {
133
- return;
134
- }
135
- this.selectedValue = option;
136
- const optionDate = this.dateService.utcDate(option.value);
137
- if (!this.dateService.isSameMonth(optionDate, this.currentMonth)) {
138
- this.currentMonth = optionDate;
139
- this.applySelectedDateChanges();
140
- this.monthChange.emit(this.currentMonth);
141
- this.setPreviousMonthDisabled();
142
- }
143
- }
144
- get nextMonthDisabled() {
145
- const nextMonthIndex = this.currentMonth
146
- && this.dateService.getUtcNumberOfMonthBetween(this.dateService.utcDate(), this.currentMonth);
147
- return (nextMonthIndex + 2) >= this.maxMonthIndex;
148
- }
149
- get currentMonthModel() {
150
- if (!this.currentMonth) {
151
- return '';
152
- }
153
- return `${this.monthNames[this.currentMonth.toDate().getUTCMonth()]} ${this.currentMonth.toDate().getUTCFullYear()}`;
154
- }
155
- /**
156
- * @description
157
- * Is in use by DatepickerComponent
158
- */
159
- get activeDateCell() {
160
- return document.querySelector('.nas-calendar__item--active');
161
- }
162
- get inputId() {
163
- return this.id ? this.id : `nas-calendar-${this.componentId}`;
164
- }
165
- get prevMonthId() {
166
- return `${this.inputId}__prev-month`;
167
- }
168
- get nextMonthId() {
169
- return `${this.inputId}__next-month`;
170
- }
171
- constructor(dateService, datePipe, calendarService) {
172
- super('nas-calendar');
173
- this.dateService = dateService;
174
- this.datePipe = datePipe;
175
- this.calendarService = calendarService;
176
- this.months = new Array();
177
- this.weekdays = new Array();
178
- /**
179
- * @description
180
- * Desides if the week should start on a monday or sunday. Defaults to monday.
181
- */
182
- this.weekStart = WeekStart.monday;
183
- /**
184
- * @description
185
- * 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.
186
- * This requires that registerLocaleData is called with the respective locale.
187
- */
188
- this.locale = 'en-US';
189
- this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
190
- /**
191
- * @description
192
- * Month selected by the user by clicking in drop down for month selection or month navigation buttons.
193
- */
194
- this.monthChange = new EventEmitter();
195
- /**
196
- * @description
197
- * When a user has actively changed the date.
198
- */
199
- this.focusOnNextChange = new EventEmitter();
200
- /**
201
- * @description
202
- * When selected date has been changed.
203
- */
204
- this.selectedDateChange = new EventEmitter();
205
- /**
206
- * @description
207
- * When active date has been changed.
208
- */
209
- this.activeDateChange = new EventEmitter();
210
- this.maxMonthIndex = 13;
211
- this.monthNames = new Array();
212
- this.shouldFocusCalendarOnAvailableDatesUpdate = false;
213
- this.componentId = nextId++;
214
- }
215
- ngOnInit() {
216
- if (!this.ariaLabelPreviousMonth) {
217
- this.warnMissingAccessibiltyInput('ariaLabelPreviousMonth');
218
- }
219
- if (!this.ariaLabelNextMonth) {
220
- this.warnMissingAccessibiltyInput('ariaLabelNextMonth');
221
- }
222
- if (this.nasFormGroup && this.nasFormControlName) {
223
- const control = this.nasFormGroup.get(this.nasFormControlName);
224
- if (control) {
225
- const calendarDate = control.value;
226
- if (calendarDate) {
227
- this.selectedDate = calendarDate.date;
228
- }
229
- }
230
- }
231
- if (this.date || !this.currentMonth) {
232
- this.currentMonth = this.calendarService.getCurrentMonth(this.date);
233
- }
234
- this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
235
- this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
236
- this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
237
- this.monthNames = this.calendarService.getMonthNames(this.locale);
238
- this.months = this.calendarService.getMonthsSelectOptions(this.disablePastSelection, this.maxMonthIndex, this.monthNames);
239
- this.selectedMonth = this.calendarService.getSelectedMonth(this.months, this.currentMonth);
240
- this.weekdays = this.calendarService.getWeekdays(this.weekStart, this.locale);
241
- this.setPreviousMonthDisabled();
242
- }
243
- dateKeyDown(event) {
244
- let elementToFocus;
245
- switch (event.key) {
246
- case 'ArrowLeft':
247
- case 'ArrowRight':
248
- case 'ArrowUp':
249
- case 'ArrowDown':
250
- this.shouldFocusCalendarOnAvailableDatesUpdate = true;
251
- break;
252
- case 'Tab':
253
- if (!event.shiftKey) {
254
- if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
255
- elementToFocus = this.previousMonthRef.nativeElement;
256
- }
257
- else if (this.monthSelectRef && this.months.length > 0) {
258
- elementToFocus = this.monthSelectRef.select.nativeElement;
259
- }
260
- else if (this.nextMonthRef && !this.nextMonthDisabled) {
261
- elementToFocus = this.nextMonthRef.nativeElement;
262
- }
263
- }
264
- else {
265
- if (this.nextMonthRef && !this.nextMonthDisabled) {
266
- elementToFocus = this.nextMonthRef.nativeElement;
267
- }
268
- else if (this.monthSelectRef && this.months.length > 0) {
269
- elementToFocus = this.monthSelectRef.select.nativeElement;
270
- }
271
- else if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
272
- elementToFocus = this.previousMonthRef.nativeElement;
273
- }
274
- }
275
- this.focusElement(event, elementToFocus);
276
- break;
277
- case 'Enter':
278
- event.preventDefault();
279
- const activeDay = this.calendarService
280
- .getDays(this.weeks)
281
- .find(x => x && this.dateService.isSameDate(this.dateService.utcDate(x.date), this.activeDate));
282
- if (this.availability && activeDay?.isAvailable && !activeDay?.isDisabled || !this.availability) {
283
- this.setSelectedDate(this.activeDate);
284
- this.focusOnNextChange.emit(event);
285
- }
286
- break;
287
- }
288
- }
289
- onPreviousMonthKeydown(event) {
290
- let elementToFocus;
291
- switch (event.key) {
292
- case 'Tab':
293
- if (!event.shiftKey) {
294
- if (this.monthSelectRef && this.months.length > 0) {
295
- elementToFocus = this.monthSelectRef.select.nativeElement;
296
- }
297
- else if (this.nextMonthRef && !this.nextMonthDisabled) {
298
- elementToFocus = this.nextMonthRef.nativeElement;
299
- }
300
- else {
301
- elementToFocus = this.activeDateCell;
302
- }
303
- }
304
- else {
305
- elementToFocus = this.activeDateCell;
306
- }
307
- this.focusElement(event, elementToFocus);
308
- break;
309
- case 'Enter':
310
- this.getPreviousMonth();
311
- event.preventDefault();
312
- break;
313
- default:
314
- break;
315
- }
316
- }
317
- onNextMonthKeydown(event) {
318
- let elementToFocus;
319
- switch (event.key) {
320
- case 'Tab':
321
- if (!event.shiftKey) {
322
- elementToFocus = this.activeDateCell;
323
- }
324
- else {
325
- if (this.monthSelectRef && this.months.length > 0) {
326
- elementToFocus = this.monthSelectRef.select.nativeElement;
327
- }
328
- else if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
329
- elementToFocus = this.previousMonthRef.nativeElement;
330
- }
331
- else {
332
- elementToFocus = this.activeDateCell;
333
- }
334
- }
335
- this.focusElement(event, elementToFocus);
336
- break;
337
- case 'Enter':
338
- event.preventDefault();
339
- this.getNextMonth();
340
- break;
341
- }
342
- }
343
- onNextMonthMousedown() {
344
- this.getNextMonth();
345
- }
346
- onPreviousMonthMousedown() {
347
- this.getPreviousMonth();
348
- }
349
- onMonthSelectKeydown(event) {
350
- let elementToFocus;
351
- switch (event.key) {
352
- case 'Tab':
353
- if (!event.shiftKey) {
354
- if (this.nextMonthRef && !this.nextMonthDisabled) {
355
- elementToFocus = this.nextMonthRef.nativeElement;
356
- }
357
- else {
358
- elementToFocus = this.activeDateCell;
359
- }
360
- }
361
- else {
362
- if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
363
- elementToFocus = this.previousMonthRef.nativeElement;
364
- }
365
- else {
366
- elementToFocus = this.activeDateCell;
367
- }
368
- }
369
- this.focusElement(event, elementToFocus);
370
- break;
371
- }
372
- }
373
- focusElement(event, elementToFocus) {
374
- if (elementToFocus) {
375
- elementToFocus.focus();
376
- }
377
- if (event) {
378
- event.preventDefault();
379
- }
380
- }
381
- setActiveDate() {
382
- if (!this.currentMonth) {
383
- return;
384
- }
385
- const today = this.dateService.utcDate();
386
- const lastDay = new Date(this.currentMonth.year, this.currentMonth.month + 1, 0);
387
- const newDate = this.activeDate?.date > lastDay.getDate() ? lastDay.getDate() : this.activeDate?.date;
388
- if (this.currentMonth.month !== today.month || this.currentMonth.year !== today.year) {
389
- const nextMonth = this.currentMonth.month;
390
- const nextYear = this.currentMonth.year;
391
- this.activeDate = new UtcDate(nextYear, nextMonth, newDate);
392
- }
393
- else if (this.activeDate && this.activeDate.month !== this.currentMonth.month) {
394
- this.activeDate = new UtcDate(this.activeDateValue.year, this.currentMonth.month, newDate);
395
- }
396
- else {
397
- this.activeDate = this.dateService.utcDate();
398
- }
399
- }
400
- onMouseDown(date, event) {
401
- this.setSelectedDate(this.dateService.utcDate(date));
402
- this.focusOnNextChange.emit(event);
403
- }
404
- onDayFocus(day) {
405
- this.activeDate = this.dateService.utcDate(day.date);
406
- }
407
- onDayClick(day) {
408
- if (this.dateService.isGreaterThan(this.dateService.utcDate(day.date), this.activeDate)) {
409
- }
410
- if (!day.isAvailable) {
411
- return;
412
- }
413
- this.setSelectedDate(this.dateService.utcDate(day.date));
414
- this.availableDays.forEach(date => {
415
- if (this.activeDate && this.selectedDate) {
416
- const utcDate = this.dateService.utcDate(day.date);
417
- const withinRange = this.dateService.isGreaterThan(utcDate, this.selectedDate) &&
418
- this.dateService.isLessThan(utcDate, this.activeDate);
419
- date.isWithinRange = withinRange;
420
- }
421
- });
422
- }
423
- setSelectedDate(date) {
424
- if (!date) {
425
- return;
426
- }
427
- if (this.nasFormGroup && this.nasFormControlName) {
428
- const control = this.nasFormGroup.get(this.nasFormControlName);
429
- const calendarDate = {
430
- model: this.datePipe.transform(this.dateService.date(date), this.dateDisplayFormat, 'UTC', this.locale),
431
- date: date
432
- };
433
- control.patchValue(calendarDate);
434
- }
435
- this.selectedDateChange.emit(date);
436
- if (this.weeks && this.weeks.length > 0) {
437
- for (const week of this.weeks) {
438
- if (!week) {
439
- continue;
440
- }
441
- for (const day of week.days) {
442
- if (!day) {
443
- continue;
444
- }
445
- day.isSelected = day.isAvailable
446
- && this.dateService.isSameDate(this.dateService.utcDate(day.date), date);
447
- }
448
- }
449
- }
450
- }
451
- getCellButtonClass(day) {
452
- if (!day) {
453
- return this.getClass('item');
454
- }
455
- return this.getClass('item', [
456
- day.isDisabled && 'before',
457
- day.isSelected && 'selected',
458
- !this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth) && 'empty',
459
- day.isAvailable && 'available',
460
- 'large',
461
- day.isActive && 'active',
462
- day.isWithinRange && 'within-range'
463
- ]);
464
- }
465
- getNextMonth() {
466
- if (!this.weeks) {
467
- return;
468
- }
469
- const firstWeek = this.weeks[0];
470
- if (!firstWeek) {
471
- return;
472
- }
473
- const firstValidDay = firstWeek.days
474
- .find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
475
- if (!firstValidDay) {
476
- return;
477
- }
478
- const nextMonth = this.dateService.utcDate(firstValidDay.date);
479
- const month = nextMonth.month + 1;
480
- nextMonth.setMonth(month);
481
- this.currentMonth = nextMonth;
482
- this.applySelectedDateChanges();
483
- this.monthChange.emit(this.currentMonth);
484
- this.setPreviousMonthDisabled();
485
- if (!this.availability) {
486
- this.maxMonthIndex++;
487
- }
488
- }
489
- getPreviousMonth() {
490
- if (!this.weeks) {
491
- return;
492
- }
493
- const firstWeek = this.weeks[0];
494
- if (!firstWeek) {
495
- return;
496
- }
497
- const firstValidDay = firstWeek.days
498
- .find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
499
- const previousMonth = this.dateService.utcDate(firstValidDay.date);
500
- const month = previousMonth.month - 1;
501
- previousMonth.setMonth(month);
502
- this.currentMonth = previousMonth;
503
- this.applySelectedDateChanges();
504
- this.monthChange.emit(this.currentMonth);
505
- this.setPreviousMonthDisabled();
506
- }
507
- setPreviousMonthDisabled() {
508
- if (this.currentMonth) {
509
- const previousMonth = new UtcDate(this.currentMonth.year, this.currentMonth.month, this.currentMonth.date);
510
- const month = previousMonth.month - 1;
511
- previousMonth.setMonth(month);
512
- if (this.disablePastSelection && this.dateService.isInThePast(previousMonth, true)) {
513
- this.isPreviousMonthDisabled = true;
514
- return;
515
- }
516
- }
517
- this.isPreviousMonthDisabled = false;
518
- }
519
- applySelectedDateChanges() {
520
- this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
521
- this.selectedMonth = this.months
522
- .find(x => this.dateService.isSameMonth(this.dateService.utcDate(x.value), this.currentMonth));
523
- this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
524
- this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
525
- }
526
- 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 }); }
527
- 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:#ebf4ff}.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", "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 }); }
528
- }
529
- __decorate([
530
- Debounce(150)
531
- ], CalendarComponent.prototype, "onPreviousMonthKeydown", null);
532
- __decorate([
533
- Debounce(150)
534
- ], CalendarComponent.prototype, "onNextMonthKeydown", null);
535
- __decorate([
536
- Debounce(200)
537
- ], CalendarComponent.prototype, "onNextMonthMousedown", null);
538
- __decorate([
539
- Debounce(200)
540
- ], CalendarComponent.prototype, "onPreviousMonthMousedown", null);
541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CalendarComponent, decorators: [{
542
- type: Component,
543
- 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:#ebf4ff}.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"] }]
544
- }], ctorParameters: function () { return [{ type: i1.DateHelper }, { type: i2.DatePipe }, { type: i3.CalendarService }]; }, propDecorators: { previousMonthRef: [{
545
- type: ViewChild,
546
- args: ['previousMonthRef']
547
- }], nextMonthRef: [{
548
- type: ViewChild,
549
- args: ['nextMonthRef']
550
- }], tableCells: [{
551
- type: ViewChildren,
552
- args: ['tableCells']
553
- }], dateButtons: [{
554
- type: ViewChildren,
555
- args: ['dateButton']
556
- }], calendarContent: [{
557
- type: ViewChild,
558
- args: ['calendarContent']
559
- }], monthSelectRef: [{
560
- type: ViewChild,
561
- args: ['monthSelect']
562
- }], id: [{
563
- type: Input
564
- }], noAvailableFlightsLabel: [{
565
- type: Input
566
- }], availableFlightsLabel: [{
567
- type: Input
568
- }], disablePastSelection: [{
569
- type: Input
570
- }], lowerLimitDate: [{
571
- type: Input
572
- }], date: [{
573
- type: Input
574
- }], weekStart: [{
575
- type: Input
576
- }], displayWeekNumbers: [{
577
- type: Input
578
- }], availability: [{
579
- type: Input
580
- }], locale: [{
581
- type: Input
582
- }], availableDates: [{
583
- type: Input
584
- }], activeDate: [{
585
- type: Input
586
- }], selectedDate: [{
587
- type: Input
588
- }], nasFormGroup: [{
589
- type: Input
590
- }], nasFormControlName: [{
591
- type: Input
592
- }], dateDisplayFormat: [{
593
- type: Input
594
- }], ariaLabelPreviousMonth: [{
595
- type: Input
596
- }], ariaLabelNextMonth: [{
597
- type: Input
598
- }], monthChange: [{
599
- type: Output
600
- }], focusOnNextChange: [{
601
- type: Output
602
- }], selectedDateChange: [{
603
- type: Output
604
- }], activeDateChange: [{
605
- type: Output
606
- }], onPreviousMonthKeydown: [], onNextMonthKeydown: [], onNextMonthMousedown: [], onPreviousMonthMousedown: [] } });
607
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7QUFFdkUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUFnQjtJQXNDckQ7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIs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O3NKQVFOLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0YsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNHLFVBQVU7c0JBQXJDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRSxXQUFXO3NCQUF0QyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0ksZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0YsY0FBYztzQkFBdkMsU0FBUzt1QkFBQyxhQUFhO2dCQU9mLEVBQUU7c0JBQVYsS0FBSztnQkFNRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBTUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRixjQUFjO3NCQURqQixLQUFLO2dCQTRCRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxNQUFNO3NCQUFkLEtBQUs7Z0JBT0YsY0FBYztzQkFEakIsS0FBSztnQkE2Q0YsVUFBVTtzQkFEYixLQUFLO2dCQTJDRixZQUFZO3NCQURmLEtBQUs7Z0JBcUJHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU1JLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBdUtQLHNCQUFzQixNQTRCdEIsa0JBQWtCLE1BMEJsQixvQkFBb0IsTUFLcEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDYWxlbmRhckRhdGVNb2RlbCB9IGZyb20gJy4vY2FsZW5kYXItZGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBXZWVrU3RhcnQgfSBmcm9tICcuL2VudW1zL3dlZWstc3RhcnQuZW51bSc7XG5pbXBvcnQgeyBEYXlNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2RheS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3RPcHRpb25Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgV2Vla01vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2Vlay5tb2RlbCc7XG5pbXBvcnQgeyBOYXNDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9iYXNlL25hcy1jb21wb25lbnQuYmFzZSc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcic7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduYXMtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHdlZWtzOiBBcnJheTxXZWVrTW9kZWw+O1xuICBtb250aHMgPSBuZXcgQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+KCk7XG4gIHdlZWtkYXlzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgncHJldmlvdXNNb250aFJlZicpIHByZXZpb3VzTW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCduZXh0TW9udGhSZWYnKSBuZXh0TW9udGhSZWY6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkcmVuKCd0YWJsZUNlbGxzJykgdGFibGVDZWxsczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdkYXRlQnV0dG9uJykgZGF0ZUJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJDb250ZW50JykgY2FsZW5kYXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtb250aFNlbGVjdCcpIG1vbnRoU2VsZWN0UmVmOiBTZWxlY3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIElEIG9mIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudFxuICAgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBubyBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKGRhdGUsIHRoaXMuc2VsZWN0ZWREYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgdGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXNjcmlwdGlvblxuICAqIEN1cnJlbnQgbW9udGggZGF0ZSB0byBiZSBkaXNwbGF5ZWQuIEl0IHdpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0ZWQgZGF0ZSBpbnB1dCwgaWYgaXQgaXMgc2V0LlxuICAqL1xuICBASW5wdXQoKSBkYXRlOiBVdGNEYXRlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGVzaWRlcyBpZiB0aGUgd2VlayBzaG91bGQgc3RhcnQgb24gYSBtb25kYXkgb3Igc3VuZGF5LiBEZWZhdWx0cyB0byBtb25kYXkuXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrU3RhcnQgPSBXZWVrU3RhcnQubW9uZGF5O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSB3ZWVrIG51bWJlcnMuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5V2Vla051bWJlcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VyIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxvY2FsZSBjb2RlIGZvciB0aGUgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuIFdoZW4gbm90IHN1cHBsaWVkLCB1c2VzIHRoZSB2YWx1ZSBvZiBMT0NBTEVfSUQsIHdoaWNoIGlzIGVuLVVTIGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhhdCByZWdpc3RlckxvY2FsZURhdGEgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3BlY3RpdmUgbG9jYWxlLlxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlID0gJ2VuLVVTJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IHdpdGggYWxsIHRoZSBhdmFpbGFibGUgZGF0ZXMgb2YgdGhlIG1vbnRoIGZvciBzZWF0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhdmFpbGFibGVEYXRlcygpOiBBcnJheTxVdGNEYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlRGF0ZXNWYWx1ZTtcbiAgfVxuICBzZXQgYXZhaWxhYmxlRGF0ZXMoZGF0ZXM6IEFycmF5PFV0Y0RhdGU+KSB7XG4gICAgaWYgKCFkYXRlcyB8fCAhdGhpcy5leGlzdHModGhpcy5hdmFpbGFiaWxpdHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0RGF0ZSA9IGRhdGVzWzBdO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBmaXJzdERhdGU7XG4gICAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIHRoaXMuYXZhaWxhYmxlRGF0ZXNWYWx1ZSA9IGRhdGVzO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcblxuICAgIGlmICghdGhpcy5zaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudCB8fFxuICAgICAgdGhpcy5tb250aFNlbGVjdFJlZiAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuXG4gICAgICBpZiAoZWxtZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgIGVsbWVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gZmFsc2U7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBvciBzZXRzIHRoZSBhY3RpdmUgZGF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGFjdGl2ZURhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUgfHwgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuXG4gICAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG5cbiAgICAgIGNvbnN0IGVsbWVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICBpZiAoZWxtZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgIGVsbWVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLndlZWtzKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5zZXRBY3RpdmVEYXRlKGRhdGUsIHRoaXMud2Vla3MpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRheSBvZiB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXREYXlzKHRoaXMud2Vla3MpKSB7XG4gICAgICAgIGlmICghZGF5KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF5LmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlID0gZGF0ZTtcblxuICAgIGlmICghdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChkYXRlLCB0aGlzLmFjdGl2ZURhdGUpXG4gICAgICB8fCAhdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChkYXRlLCB0aGlzLmN1cnJlbnRNb250aCkpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF0ZTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3RlZERhdGUoZGF0ZSk7XG4gIH1cblxuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcbiAgQElucHV0KCkgYXJpYUxhYmVsUHJldmlvdXNNb250aDogc3RyaW5nO1xuICBASW5wdXQoKSBhcmlhTGFiZWxOZXh0TW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vbnRoIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGJ5IGNsaWNraW5nIGluIGRyb3AgZG93biBmb3IgbW9udGggc2VsZWN0aW9uIG9yIG1vbnRoIG5hdmlnYXRpb24gYnV0dG9ucy5cbiAgICovXG4gIEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGFjdGl2ZSBkYXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBTZWxlY3RPcHRpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRNb250aChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKSB7XG4gICAgaWYgKCFvcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uO1xuICAgIGNvbnN0IG9wdGlvbkRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcblxuICAgIGlmICghdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChvcHRpb25EYXRlLCB0aGlzLmN1cnJlbnRNb250aCkpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gb3B0aW9uRGF0ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmV4dE1vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dE1vbnRoSW5kZXggPSB0aGlzLmN1cnJlbnRNb250aFxuICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5nZXRVdGNOdW1iZXJPZk1vbnRoQmV0d2Vlbih0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoKSwgdGhpcy5jdXJyZW50TW9udGgpO1xuXG4gICAgcmV0dXJuIChuZXh0TW9udGhJbmRleCArIDIpID49IHRoaXMubWF4TW9udGhJbmRleDtcbiAgfVxuXG4gIGdldCBjdXJyZW50TW9udGhNb2RlbCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5tb250aE5hbWVzW3RoaXMuY3VycmVudE1vbnRoLnRvRGF0ZSgpLmdldFVUQ01vbnRoKCldfSAke3RoaXMuY3VycmVudE1vbnRoLnRvRGF0ZSgpLmdldFVUQ0Z1bGxZZWFyKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgaW4gdXNlIGJ5IERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIGdldCBhY3RpdmVEYXRlQ2VsbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXMtY2FsZW5kYXJfX2l0ZW0tLWFjdGl2ZScpO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCA/IHRoaXMuaWQgOiBgbmFzLWNhbGVuZGFyLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IHByZXZNb250aElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaW5wdXRJZH1fX3ByZXYtbW9udGhgO1xuICB9XG5cbiAgZ2V0IG5leHRNb250aElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaW5wdXRJZH1fX25leHQtbW9udGhgO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXhNb250aEluZGV4ID0gMTM7XG4gIHByaXZhdGUgYWN0aXZlRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGF2YWlsYWJsZURhdGVzVmFsdWU6IEFycmF5PFV0Y0RhdGU+O1xuICBwcml2YXRlIGN1cnJlbnRNb250aDogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlOiBTZWxlY3RPcHRpb25Nb2RlbDtcbiAgcHJpdmF0ZSBhdmFpbGFibGVEYXlzOiBBcnJheTxEYXlNb2RlbD47XG4gIHByaXZhdGUgbW9udGhOYW1lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgbG93ZXJMaW1pdERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBzaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSA9IGZhbHNlO1xuICBwcml2YXRlIGNvbXBvbmVudElkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSkge1xuICAgIHN1cGVyKCduYXMtY2FsZW5kYXInKTtcbiAgICB0aGlzLmNvbXBvbmVudElkID0gbmV4dElkKys7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsUHJldmlvdXNNb250aCkge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxQcmV2aW91c01vbnRoJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbE5leHRNb250aCkge1xuICAgICAgdGhpcy53YXJuTWlzc2luZ0FjY2Vzc2liaWx0eUlucHV0KCdhcmlhTGFiZWxOZXh0TW9udGgnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcblxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZTogQ2FsZW5kYXJEYXRlTW9kZWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjYWxlbmRhckRhdGUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGNhbGVuZGFyRGF0ZS5kYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZSB8fCAhdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0Q3VycmVudE1vbnRoKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVEYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0QXZhaWxhYmxlRGF5cyhcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgdGhpcy5hdmFpbGFibGVEYXRlcyxcbiAgICAgIHRoaXMuYXZhaWxhYmlsaXR5LFxuICAgICAgdGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbixcbiAgICAgIHRoaXMubG93ZXJMaW1pdERhdGUsXG4gICAgICB0aGlzLmFjdGl2ZURhdGUsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSk7XG5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS51cGRhdGVBdmFpbGFibGVEYXlzV2l0aFNlbGVjdGVkRGF0ZSh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMud2Vla3MgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrcyh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMud2Vla1N0YXJ0KTtcbiAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRNb250aE5hbWVzKHRoaXMubG9jYWxlKTtcbiAgICB0aGlzLm1vbnRocyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldE1vbnRoc1NlbGVjdE9wdGlvbnModGhpcy5kaXNhYmxlUGFzdFNlbGVjdGlvbiwgdGhpcy5tYXhNb250aEluZGV4LCB0aGlzLm1vbnRoTmFtZXMpO1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFNlbGVjdGVkTW9udGgodGhpcy5tb250aHMsIHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLndlZWtkYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0V2Vla2RheXModGhpcy53ZWVrU3RhcnQsIHRoaXMubG9jYWxlKTtcblxuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gIH1cblxuICBkYXRlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5zaG91bGRGb2N1c0NhbGVuZGFyT25BdmFpbGFibGVEYXRlc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzTW9udGhSZWYgJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXZpb3VzTW9udGhSZWYgJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoZXZlbnQsIGVsZW1lbnRUb0ZvY3VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlRGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2VcbiAgICAgICAgICAuZ2V0RGF5cyh0aGlzLndlZWtzKVxuICAgICAgICAgIC5maW5kKHggPT4geCAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHguZGF0ZSksIHRoaXMuYWN0aXZlRGF0ZSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmF2YWlsYWJpbGl0eSAmJiBhY3RpdmVEYXk/LmlzQXZhaWxhYmxlICYmICFhY3RpdmVEYXk/LmlzRGlzYWJsZWQgfHwgIXRoaXMuYXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBEZWJvdW5jZSgxNTApXG4gIG9uUHJldmlvdXNNb250aEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9udGhTZWxlY3RSZWYgJiYgdGhpcy5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW9udGhSZWYgJiYgIXRoaXMubmV4dE1vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5nZXRQcmV2aW91c01vbnRoKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDE1MClcbiAgb25OZXh0TW9udGhLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9uUHJldmlvdXNNb250aEtleWRvd24gJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5nZXROZXh0TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDIwMClcbiAgb25OZXh0TW9udGhNb3VzZWRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5nZXROZXh0TW9udGgoKTtcbiAgfVxuXG4gIEBEZWJvdW5jZSgyMDApXG4gIG9uUHJldmlvdXNNb250aE1vdXNlZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIG9uTW9udGhTZWxlY3RLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm9uUHJldmlvdXNNb250aEtleWRvd24gJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb2N1c0VsZW1lbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xuICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlRGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoKTtcbiAgICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUodGhpcy5jdXJyZW50TW9udGgueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGggKyAxLCAwKTtcbiAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5hY3RpdmVEYXRlPy5kYXRlID4gbGFzdERheS5nZXREYXRlKCkgPyBsYXN0RGF5LmdldERhdGUoKSA6IHRoaXMuYWN0aXZlRGF0ZT8uZGF0ZTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aC5tb250aCAhPT0gdG9kYXkubW9udGggfHwgdGhpcy5jdXJyZW50TW9udGgueWVhciAhPT0gdG9kYXkueWVhcikge1xuICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5jdXJyZW50TW9udGgubW9udGg7XG4gICAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuY3VycmVudE1vbnRoLnllYXI7XG5cbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ldyBVdGNEYXRlKG5leHRZZWFyLCBuZXh0TW9udGgsIG5ld0RhdGUpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgdGhpcy5hY3RpdmVEYXRlLm1vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aC5tb250aCkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IFV0Y0RhdGUodGhpcy5hY3RpdmVEYXRlVmFsdWUueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGgsIG5ld0RhdGUpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VEb3duKGRhdGU6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF0ZSkpO1xuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkRheUZvY3VzKGRheTogRGF5TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpO1xuICB9XG5cbiAgb25EYXlDbGljayhkYXk6IERheU1vZGVsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNHcmVhdGVyVGhhbih0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCB0aGlzLmFjdGl2ZURhdGUpKSB7XG5cbiAgICB9XG4gICAgaWYgKCFkYXkuaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpKTtcbiAgICB0aGlzLmF2YWlsYWJsZURheXMuZm9yRWFjaChkYXRlID0+IHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURhdGUgJiYgdGhpcy5zZWxlY3RlZERhdGUpIHtcbiAgICAgICAgY29uc3QgdXRjRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSk7XG4gICAgICAgIGNvbnN0IHdpdGhpblJhbmdlID0gdGhpcy5kYXRlU2VydmljZS5pc0dyZWF0ZXJUaGFuKHV0Y0RhdGUsIHRoaXMuc2VsZWN0ZWREYXRlKSAmJlxuICAgICAgICAgIHRoaXMuZGF0ZVNlcnZpY2UuaXNMZXNzVGhhbih1dGNEYXRlLCB0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICBkYXRlLmlzV2l0aGluUmFuZ2UgPSB3aXRoaW5SYW5nZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKTogdm9pZCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IHtcbiAgICAgICAgbW9kZWw6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZShkYXRlKSwgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgZGF0ZTogZGF0ZVxuICAgICAgfTtcblxuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNhbGVuZGFyRGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLndlZWtzICYmIHRoaXMud2Vla3MubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCB3ZWVrIG9mIHRoaXMud2Vla3MpIHtcbiAgICAgICAgaWYgKCF3ZWVrKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGRheSBvZiB3ZWVrLmRheXMpIHtcbiAgICAgICAgICBpZiAoIWRheSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF5LmlzU2VsZWN0ZWQgPSBkYXkuaXNBdmFpbGFibGVcbiAgICAgICAgICAgICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENlbGxCdXR0b25DbGFzcyhkYXk6IERheU1vZGVsKTogQ2xhc3NNb2RlbCB7XG4gICAgaWYgKCFkYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCdpdGVtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2l0ZW0nLCBbXG4gICAgICBkYXkuaXNEaXNhYmxlZCAmJiAnYmVmb3JlJyxcbiAgICAgIGRheS5pc1NlbGVjdGVkICYmICdzZWxlY3RlZCcsXG4gICAgICAhdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZGF5LmRhdGUpLCB0aGlzLmN1cnJlbnRNb250aCkgJiYgJ2VtcHR5JyxcbiAgICAgIGRheS5pc0F2YWlsYWJsZSAmJiAnYXZhaWxhYmxlJyxcbiAgICAgICdsYXJnZScsXG4gICAgICBkYXkuaXNBY3RpdmUgJiYgJ2FjdGl2ZScsXG4gICAgICBkYXkuaXNXaXRoaW5SYW5nZSAmJiAnd2l0aGluLXJhbmdlJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBpZiAoIWZpcnN0VmFsaWREYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZmlyc3RWYWxpZERheS5kYXRlKTtcbiAgICBjb25zdCBtb250aCA9IG5leHRNb250aC5tb250aCArIDE7XG4gICAgbmV4dE1vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV4dE1vbnRoO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG5cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmlsaXR5KSB7XG4gICAgICB0aGlzLm1heE1vbnRoSW5kZXgrKztcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGZpcnN0VmFsaWREYXkuZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBwcmV2aW91c01vbnRoLm1vbnRoIC0gMTtcbiAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gcHJldmlvdXNNb250aDtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICB9XG5cbiAgc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgY29uc3QgcHJldmlvdXNNb250aCA9IG5ldyBVdGNEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoLCB0aGlzLmN1cnJlbnRNb250aC5kYXRlKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcHJldmlvdXNNb250aC5tb250aCAtIDE7XG4gICAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24gJiYgdGhpcy5kYXRlU2VydmljZS5pc0luVGhlUGFzdChwcmV2aW91c01vbnRoLCB0cnVlKSkge1xuICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuYXZhaWxhYmxlRGF5cyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldEF2YWlsYWJsZURheXMoXG4gICAgICB0aGlzLmN1cnJlbnRNb250aCxcbiAgICAgIHRoaXMuYXZhaWxhYmxlRGF0ZXMsXG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eSxcbiAgICAgIHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24sXG4gICAgICB0aGlzLmxvd2VyTGltaXREYXRlLFxuICAgICAgdGhpcy5hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aHNcbiAgICAgIC5maW5kKHggPT4gdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC52YWx1ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS51cGRhdGVBdmFpbGFibGVEYXlzV2l0aFNlbGVjdGVkRGF0ZSh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLndlZWtzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0V2Vla3ModGhpcy5hdmFpbGFibGVEYXlzLCB0aGlzLndlZWtTdGFydCk7XG4gIH1cbn1cbiIsIjxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKClcIj5cbiAgPGRpdiAjY2FsZW5kYXJDb250ZW50IHRhYmluZGV4PVwiMFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udGVudCcpXCI+XG4gICAgPGhlYWRlciBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2hlYWRlcicpXCI+XG4gICAgICA8YnV0dG9uIFtpZF09XCJwcmV2TW9udGhJZFwiIHR5cGU9XCJidXR0b25cIiAjcHJldmlvdXNNb250aFJlZiB0YWJpbmRleD1cIjBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFByZXZpb3VzTW9udGhcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hdicpXCIgW2Rpc2FibGVkXT1cImlzUHJldmlvdXNNb250aERpc2FibGVkID09PSB0cnVlXCJcbiAgICAgICAgKGtleWRvd24pPVwib25QcmV2aW91c01vbnRoS2V5ZG93bigkZXZlbnQpXCIgKG1vdXNlZG93bik9XCJvblByZXZpb3VzTW9udGhNb3VzZWRvd24oKVwiPlxuICAgICAgICA8bmFzLWljb24gdGFiaW5kZXg9XCItMVwiIFt0eXBlXT1cIidhcnJvdy1sZWZ0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aHM/Lmxlbmd0aCA+IDA7IGVsc2UgY3VycmVudE1vbnRoVGVtcGxhdGVcIj5cbiAgICAgICAgPG5hcy1zZWxlY3QgI21vbnRoU2VsZWN0IFtjc3NDbGFzc109XCJnZXRDbGFzcygnbW9udGgnKVwiIFtpbmxpbmVdPVwidHJ1ZVwiIFtzaW1wbGVdPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm1vbnRoc1wiXG4gICAgICAgICAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRNb250aFwiIChrZXlkb3duKT1cIm9uTW9udGhTZWxlY3RLZXlkb3duKCRldmVudClcIj48L25hcy1zZWxlY3Q+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVudE1vbnRoVGVtcGxhdGU+XG4gICAgICAgIHt7Y3VycmVudE1vbnRoTW9kZWx9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxidXR0b24gW2lkXT1cIm5leHRNb250aElkXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiICNuZXh0TW9udGhSZWYgW25hc0NsYXNzXT1cImdldENsYXNzKCduYXYnKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCIgW2Rpc2FibGVkXT1cIm5leHRNb250aERpc2FibGVkXCIgKGtleWRvd24pPVwib25OZXh0TW9udGhLZXlkb3duKCRldmVudClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uTmV4dE1vbnRoTW91c2Vkb3duKClcIj5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cIidhcnJvdy1yaWdodCdcIj48L25hcy1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9oZWFkZXI+XG5cbiAgICA8IS0tIFdlZWtkYXlzICsgRGF0ZXMgLS0+XG4gICAgPHRhYmxlIFtuYXNDbGFzc109XCJnZXRDbGFzcygndGFibGUnKVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHIgW25hc0NsYXNzXT1cImdldENsYXNzKCd3ZWVrJylcIj5cbiAgICAgICAgICA8dGggKm5nSWY9XCJleGlzdHMoZGlzcGxheVdlZWtOdW1iZXJzKVwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd2Vlay1udW1iZXInKVwiPjwvdGg+XG4gICAgICAgICAgPHRoIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY2VsbCcpXCIgKm5nRm9yPVwibGV0IHdlZWtkYXkgb2Ygd2Vla2RheXNcIj5cbiAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2hlYWRlcicpXCI+e3t3ZWVrZGF5fX08L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIHdlZWtzXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdyb3cnLCAnYW5pbWF0ZScpXCI+XG4gICAgICAgICAgPHRkICpuZ0lmPVwiZXhpc3RzKGRpc3BsYXlXZWVrTnVtYmVycylcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dlZWstbnVtYmVyJylcIj5cbiAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZScsICd3ZWVrLW51bWJlcicpXCI+e3t3ZWVrLndlZWtOdW1iZXJ9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NlbGwnKVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vlaz8uZGF5c1wiICN0YWJsZUNlbGxzPlxuICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAnZHVtbXknKVwiICpuZ0lmPVwiZGF5ID09PSBudWxsOyBlbHNlIGRheVRlbXBsYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RheVRlbXBsYXRlIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiZGF5LXt7ZGF5LmRhdGUgfCBkYXRlIDogJ2QnOidVVEMnOmxvY2FsZX19XCIgdHlwZT1cImJ1dHRvblwiICNkYXRlQnV0dG9uIChrZXlkb3duKT1cImRhdGVLZXlEb3duKCRldmVudClcIiB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDZWxsQnV0dG9uQ2xhc3MoZGF5KVwiIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oZGF5LmRhdGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRheUNsaWNrKGRheSlcIiAoZm9jdXMpPVwib25EYXlGb2N1cyhkYXkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtd3JhcHBlcicpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUnKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5LmRhdGUgfCBkYXRlIDogJ2QnOidVVEMnXCI+e3sgZGF5LmRhdGUgfCBkYXRlXG4gICAgICAgICAgICAgICAgICAgIDogJ2QnOidVVEMnOmxvY2FsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJylcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhdmFpbGFibGVEYXRlcz8ubGVuZ3RoID09PSAwICYmIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnaXRlbScpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbaWNvbl09XCInYWxlcnQnXCI+PC9uYXMtaWNvbj5cbiAgICAgICAge3tub0F2YWlsYWJsZUZsaWdodHNMYWJlbH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhdmFpbGFibGVEYXRlcz8ubGVuZ3RoID4gMCAmJiBub0F2YWlsYWJsZUZsaWdodHNMYWJlbCAmJiBhdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicsICdpdGVtJylcIj5cbiAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAnYXZhaWxhYmxlJylcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicsICdsYWJlbCcpXCI+e3thdmFpbGFibGVGbGlnaHRzTGFiZWx9fTwvZGl2PlxuICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAndW5hdmFpbGFibGUnKVwiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicsICdsYWJlbCcpXCI+e3tub0F2YWlsYWJsZUZsaWdodHNMYWJlbH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=