@norwegian/core-components 5.18.0 → 5.18.2
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.
- package/esm2020/lib/components/accordion/accordion.component.mjs +148 -0
- package/esm2020/lib/components/accordion/accordion.module.mjs +20 -0
- package/esm2020/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +610 -0
- package/esm2020/lib/components/airport-select/airport-select.component.mjs +438 -0
- package/esm2020/lib/components/airport-select/airport-select.module.mjs +42 -0
- package/esm2020/lib/components/airport-select/services/airport-select-dropdown.service.mjs +35 -0
- package/esm2020/lib/components/airport-select/services/airport-select.service.mjs +38 -0
- package/esm2020/lib/components/autocomplete/autocomplete.component.mjs +287 -0
- package/esm2020/lib/components/autocomplete/autocomplete.module.mjs +43 -0
- package/esm2020/lib/components/backdrop/backdrop.component.mjs +56 -0
- package/esm2020/lib/components/backdrop/backdrop.module.mjs +24 -0
- package/esm2020/lib/components/box/box.component.mjs +68 -0
- package/esm2020/lib/components/box/box.module.mjs +19 -0
- package/esm2020/lib/components/button/button.component.mjs +167 -0
- package/esm2020/lib/components/button/button.module.mjs +20 -0
- package/esm2020/lib/components/checkbox/checkbox.component.mjs +148 -0
- package/esm2020/lib/components/checkbox/checkbox.module.mjs +20 -0
- package/esm2020/lib/components/chip/chip.component.mjs +53 -0
- package/esm2020/lib/components/chip/chip.module.mjs +24 -0
- package/esm2020/lib/components/container/container.component.mjs +50 -0
- package/esm2020/lib/components/container/container.module.mjs +19 -0
- package/esm2020/lib/components/continue/continue.component.mjs +194 -0
- package/esm2020/lib/components/continue/continue.module.mjs +34 -0
- package/esm2020/lib/components/cover/cover.component.mjs +75 -0
- package/esm2020/lib/components/cover/cover.module.mjs +21 -0
- package/esm2020/lib/components/datepicker/calendar/calendar.component.mjs +583 -0
- package/esm2020/lib/components/datepicker/datepicker.component.mjs +550 -0
- package/esm2020/lib/components/datepicker/datepicker.module.mjs +55 -0
- package/esm2020/lib/components/datepicker/services/calendar.service.mjs +213 -0
- package/esm2020/lib/components/datepicker-combo/datepicker-combo.component.mjs +355 -0
- package/esm2020/lib/components/datepicker-combo/datepicker-combo.module.mjs +31 -0
- package/esm2020/lib/components/divider/divider.component.mjs +61 -0
- package/esm2020/lib/components/divider/divider.module.mjs +20 -0
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +169 -0
- package/esm2020/lib/components/dropdown/dropdown.module.mjs +32 -0
- package/esm2020/lib/components/filter/filter.component.mjs +1253 -0
- package/esm2020/lib/components/filter/filter.module.mjs +73 -0
- package/esm2020/lib/components/grid/col/col.component.mjs +49 -0
- package/esm2020/lib/components/grid/grid.component.mjs +72 -0
- package/esm2020/lib/components/grid/grid.module.mjs +20 -0
- package/esm2020/lib/components/icon/icon.component.mjs +44 -0
- package/esm2020/lib/components/icon/icon.module.mjs +24 -0
- package/esm2020/lib/components/icon-list/icon-list.component.mjs +50 -0
- package/esm2020/lib/components/icon-list/icon-list.module.mjs +20 -0
- package/esm2020/lib/components/info/info.component.mjs +106 -0
- package/esm2020/lib/components/info/info.module.mjs +36 -0
- package/esm2020/lib/components/input/input.component.mjs +179 -0
- package/esm2020/lib/components/input/input.module.mjs +21 -0
- package/esm2020/lib/components/journey/journey.component.mjs +126 -0
- package/esm2020/lib/components/journey/journey.module.mjs +28 -0
- package/esm2020/lib/components/journey-availability/journey-availability.component.mjs +126 -0
- package/esm2020/lib/components/journey-availability/journey-availability.module.mjs +39 -0
- package/esm2020/lib/components/journey-availability-list/journey-availability-list.component.mjs +185 -0
- package/{esm2015/lib/components/journey-availability-list/journey-availability-list.module.js → esm2020/lib/components/journey-availability-list/journey-availability-list.module.mjs} +27 -14
- package/esm2020/lib/components/journey-selection/journey-selection.component.mjs +112 -0
- package/esm2020/lib/components/journey-selection/journey-selection.module.mjs +35 -0
- package/esm2020/lib/components/journey-stopover/journey-stopover.component.mjs +125 -0
- package/esm2020/lib/components/journey-stopover/journey-stopover.module.mjs +28 -0
- package/esm2020/lib/components/list/list-item/list-item.component.mjs +52 -0
- package/esm2020/lib/components/list/list.component.mjs +78 -0
- package/esm2020/lib/components/list/list.module.mjs +20 -0
- package/esm2020/lib/components/modal/modal.component.mjs +141 -0
- package/esm2020/lib/components/modal/modal.module.mjs +38 -0
- package/esm2020/lib/components/number-field/number-field.component.mjs +135 -0
- package/esm2020/lib/components/number-field/number-field.module.mjs +39 -0
- package/esm2020/lib/components/page-footer/page-footer.component.mjs +54 -0
- package/esm2020/lib/components/page-footer/page-footer.module.mjs +21 -0
- package/esm2020/lib/components/page-header/hamburger/hamburger.component.mjs +22 -0
- package/esm2020/lib/components/page-header/page-header.component.mjs +142 -0
- package/esm2020/lib/components/page-header/page-header.module.mjs +23 -0
- package/esm2020/lib/components/page-header/search/search.component.mjs +49 -0
- package/{esm2015/lib/components/passenger-select/models/passengers.model.js → esm2020/lib/components/passenger-select/models/passengers.model.mjs} +1 -1
- package/esm2020/lib/components/passenger-select/passenger-select.component.mjs +225 -0
- package/esm2020/lib/components/passenger-select/passenger-select.module.mjs +28 -0
- package/esm2020/lib/components/phone-number/phone-number.component.mjs +148 -0
- package/esm2020/lib/components/phone-number/phone-number.module.mjs +44 -0
- package/esm2020/lib/components/premium-toggle/premium-toggle.component.mjs +69 -0
- package/esm2020/lib/components/premium-toggle/premium-toggle.module.mjs +28 -0
- package/esm2020/lib/components/radio/radio.component.mjs +98 -0
- package/esm2020/lib/components/radio/radio.module.mjs +20 -0
- package/esm2020/lib/components/select/optgroup/optgroup.component.mjs +29 -0
- package/esm2020/lib/components/select/option/option.component.mjs +26 -0
- package/esm2020/lib/components/select/select.component.mjs +354 -0
- package/esm2020/lib/components/select/select.module.mjs +30 -0
- package/esm2020/lib/components/simple-list/simple-list.component.mjs +48 -0
- package/esm2020/lib/components/simple-list/simple-list.module.mjs +19 -0
- package/esm2020/lib/components/slide-toggle/slide-toggle.component.mjs +111 -0
- package/esm2020/lib/components/slide-toggle/slide-toggle.module.mjs +31 -0
- package/esm2020/lib/components/slider/slider.component.mjs +501 -0
- package/esm2020/lib/components/slider/slider.module.mjs +28 -0
- package/esm2020/lib/components/sort/sort.component.mjs +93 -0
- package/esm2020/lib/components/sort/sort.module.mjs +36 -0
- package/esm2020/lib/components/spinner/spinner.component.mjs +112 -0
- package/esm2020/lib/components/spinner/spinner.module.mjs +19 -0
- package/esm2020/lib/components/subsidy-discount/subsidy-discount.component.mjs +110 -0
- package/esm2020/lib/components/subsidy-discount/subsidy-discount.module.mjs +36 -0
- package/esm2020/lib/components/suggestions/suggestions.component.mjs +43 -0
- package/esm2020/lib/components/suggestions/suggestions.module.mjs +28 -0
- package/esm2020/lib/components/tab-group/tab/tab.component.mjs +131 -0
- package/esm2020/lib/components/tab-group/tab-group.component.mjs +87 -0
- package/esm2020/lib/components/tab-group/tab-group.module.mjs +29 -0
- package/esm2020/lib/components/table/column/column.component.mjs +16 -0
- package/esm2020/lib/components/table/column-group/column-group.component.mjs +30 -0
- package/esm2020/lib/components/table/services/table.service.mjs +21 -0
- package/esm2020/lib/components/table/table-body/table-body.component.mjs +23 -0
- package/esm2020/lib/components/table/table-foot/table-foot.component.mjs +23 -0
- package/esm2020/lib/components/table/table-head/table-head.component.mjs +23 -0
- package/esm2020/lib/components/table/table-row/table-data/table-data.component.mjs +15 -0
- package/esm2020/lib/components/table/table-row/table-header/table-header.component.mjs +15 -0
- package/esm2020/lib/components/table/table-row/table-row.component.mjs +23 -0
- package/esm2020/lib/components/table/table.component.mjs +29 -0
- package/esm2020/lib/components/table/table.module.mjs +68 -0
- package/esm2020/lib/components/textarea/textarea.component.mjs +93 -0
- package/esm2020/lib/components/textarea/textarea.module.mjs +31 -0
- package/esm2020/lib/components/toggle/toggle.component.mjs +103 -0
- package/esm2020/lib/components/toggle/toggle.module.mjs +35 -0
- package/esm2020/lib/components/trip-summary/trip-summary.component.mjs +170 -0
- package/esm2020/lib/components/trip-summary/trip-summary.module.mjs +36 -0
- package/esm2020/lib/components/weather-icon/weather-icon.component.mjs +60 -0
- package/esm2020/lib/components/weather-icon/weather-icon.module.mjs +19 -0
- package/esm2020/lib/core/base/nas-component.base.mjs +47 -0
- package/esm2020/lib/core/directives/nas-class/nas-class.directive.mjs +80 -0
- package/esm2020/lib/core/directives/nas-class/nas-class.module.mjs +22 -0
- package/{esm2015/lib/core/extensions/html-element.extension.js → esm2020/lib/core/extensions/html-element.extension.mjs} +1 -1
- package/esm2020/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +58 -0
- package/esm2020/lib/core/services/animate-helper/animate-helper.service.mjs +49 -0
- package/esm2020/lib/core/services/bem-helper/bem-helper.service.mjs +44 -0
- package/esm2020/lib/core/services/date/date-helper.service.mjs +199 -0
- package/esm2020/lib/core/services/device/device-helper.service.mjs +46 -0
- package/esm2020/lib/core/services/geolocation/geolocation.service.mjs +63 -0
- package/esm2020/lib/core/services/language/language-helper.service.mjs +129 -0
- package/esm2020/lib/core/services/sort/sort.service.mjs +22 -0
- package/esm2020/lib/core/services/viewport/viewport.service.mjs +32 -0
- package/esm2020/lib/services/get-position.service.mjs +23 -0
- package/esm2020/norwegian-core-components.mjs +5 -0
- package/fesm2015/norwegian-core-components.mjs +11843 -0
- package/fesm2015/norwegian-core-components.mjs.map +1 -0
- package/fesm2020/norwegian-core-components.mjs +11829 -0
- package/fesm2020/norwegian-core-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/accordion/accordion.component.d.ts +3 -0
- package/lib/components/accordion/accordion.module.d.ts +8 -0
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +5 -2
- package/lib/components/airport-select/airport-select.component.d.ts +5 -2
- package/lib/components/airport-select/airport-select.module.d.ts +11 -0
- package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +3 -0
- package/lib/components/airport-select/services/airport-select.service.d.ts +3 -0
- package/lib/components/autocomplete/autocomplete.component.d.ts +5 -2
- package/lib/components/autocomplete/autocomplete.module.d.ts +11 -0
- package/lib/components/backdrop/backdrop.component.d.ts +3 -0
- package/lib/components/backdrop/backdrop.module.d.ts +7 -0
- package/lib/components/box/box.component.d.ts +3 -4
- package/lib/components/box/box.module.d.ts +7 -0
- package/lib/components/button/button.component.d.ts +3 -0
- package/lib/components/button/button.module.d.ts +8 -0
- package/lib/components/checkbox/checkbox.component.d.ts +5 -2
- package/lib/components/checkbox/checkbox.module.d.ts +8 -0
- package/lib/components/chip/chip.component.d.ts +3 -0
- package/lib/components/chip/chip.module.d.ts +7 -0
- package/lib/components/container/container.component.d.ts +3 -4
- package/lib/components/container/container.module.d.ts +7 -0
- package/lib/components/continue/continue.component.d.ts +3 -0
- package/lib/components/continue/continue.module.d.ts +9 -0
- package/lib/components/cover/cover.component.d.ts +3 -0
- package/lib/components/cover/cover.module.d.ts +9 -0
- package/lib/components/datepicker/calendar/calendar.component.d.ts +5 -2
- package/lib/components/datepicker/datepicker.component.d.ts +5 -2
- package/lib/components/datepicker/datepicker.module.d.ts +14 -0
- package/lib/components/datepicker/services/calendar.service.d.ts +3 -0
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +3 -0
- package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +8 -0
- package/lib/components/divider/divider.component.d.ts +3 -4
- package/lib/components/divider/divider.module.d.ts +8 -0
- package/lib/components/dropdown/dropdown.component.d.ts +3 -0
- package/lib/components/dropdown/dropdown.module.d.ts +9 -0
- package/lib/components/filter/filter.component.d.ts +5 -2
- package/lib/components/filter/filter.module.d.ts +18 -0
- package/lib/components/grid/col/col.component.d.ts +4 -1
- package/lib/components/grid/grid.component.d.ts +3 -4
- package/lib/components/grid/grid.module.d.ts +8 -0
- package/lib/components/icon/icon.component.d.ts +3 -4
- package/lib/components/icon/icon.module.d.ts +7 -0
- package/lib/components/icon-list/icon-list.component.d.ts +3 -0
- package/lib/components/icon-list/icon-list.module.d.ts +8 -0
- package/lib/components/info/info.component.d.ts +3 -0
- package/lib/components/info/info.module.d.ts +10 -0
- package/lib/components/input/input.component.d.ts +5 -2
- package/lib/components/input/input.module.d.ts +9 -0
- package/lib/components/journey/journey.component.d.ts +3 -0
- package/lib/components/journey/journey.module.d.ts +8 -0
- package/lib/components/journey-availability/journey-availability.component.d.ts +3 -0
- package/lib/components/journey-availability/journey-availability.module.d.ts +10 -0
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +3 -0
- package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +10 -0
- package/lib/components/journey-selection/journey-selection.component.d.ts +3 -0
- package/lib/components/journey-selection/journey-selection.module.d.ts +9 -0
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +3 -0
- package/lib/components/journey-stopover/journey-stopover.module.d.ts +8 -0
- package/lib/components/list/list-item/list-item.component.d.ts +3 -0
- package/lib/components/list/list.component.d.ts +4 -1
- package/lib/components/list/list.module.d.ts +8 -0
- package/lib/components/modal/modal.component.d.ts +3 -0
- package/lib/components/modal/modal.module.d.ts +10 -0
- package/lib/components/number-field/number-field.component.d.ts +5 -2
- package/lib/components/number-field/number-field.module.d.ts +10 -0
- package/lib/components/page-footer/page-footer.component.d.ts +3 -0
- package/lib/components/page-footer/page-footer.module.d.ts +9 -0
- package/lib/components/page-header/hamburger/hamburger.component.d.ts +3 -0
- package/lib/components/page-header/page-header.component.d.ts +3 -0
- package/lib/components/page-header/page-header.module.d.ts +11 -0
- package/lib/components/page-header/search/search.component.d.ts +3 -0
- package/lib/components/passenger-select/models/passengers.model.d.ts +2 -2
- package/lib/components/passenger-select/passenger-select.component.d.ts +5 -2
- package/lib/components/passenger-select/passenger-select.module.d.ts +8 -0
- package/lib/components/phone-number/phone-number.component.d.ts +5 -2
- package/lib/components/phone-number/phone-number.module.d.ts +11 -0
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +3 -0
- package/lib/components/premium-toggle/premium-toggle.module.d.ts +8 -0
- package/lib/components/radio/radio.component.d.ts +5 -2
- package/lib/components/radio/radio.module.d.ts +8 -0
- package/lib/components/select/optgroup/optgroup.component.d.ts +3 -0
- package/lib/components/select/option/option.component.d.ts +3 -0
- package/lib/components/select/select.component.d.ts +6 -3
- package/lib/components/select/select.module.d.ts +10 -0
- package/lib/components/simple-list/simple-list.component.d.ts +4 -1
- package/lib/components/simple-list/simple-list.module.d.ts +7 -0
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +5 -2
- package/lib/components/slide-toggle/slide-toggle.module.d.ts +8 -0
- package/lib/components/slider/slider.component.d.ts +5 -2
- package/lib/components/slider/slider.module.d.ts +8 -0
- package/lib/components/sort/sort.component.d.ts +3 -0
- package/lib/components/sort/sort.module.d.ts +10 -0
- package/lib/components/spinner/spinner.component.d.ts +11 -4
- package/lib/components/spinner/spinner.module.d.ts +7 -0
- package/lib/components/subsidy-discount/subsidy-discount.component.d.ts +3 -0
- package/lib/components/subsidy-discount/subsidy-discount.module.d.ts +10 -0
- package/lib/components/suggestions/suggestions.component.d.ts +3 -0
- package/lib/components/suggestions/suggestions.module.d.ts +8 -0
- package/lib/components/tab-group/tab/tab.component.d.ts +3 -0
- package/lib/components/tab-group/tab-group.component.d.ts +3 -0
- package/lib/components/tab-group/tab-group.module.d.ts +9 -0
- package/lib/components/table/column/column.component.d.ts +3 -0
- package/lib/components/table/column-group/column-group.component.d.ts +3 -0
- package/lib/components/table/services/table.service.d.ts +3 -0
- package/lib/components/table/table-body/table-body.component.d.ts +3 -0
- package/lib/components/table/table-foot/table-foot.component.d.ts +3 -0
- package/lib/components/table/table-head/table-head.component.d.ts +3 -0
- package/lib/components/table/table-row/table-data/table-data.component.d.ts +3 -0
- package/lib/components/table/table-row/table-header/table-header.component.d.ts +3 -0
- package/lib/components/table/table-row/table-row.component.d.ts +3 -0
- package/lib/components/table/table.component.d.ts +3 -0
- package/lib/components/table/table.module.d.ts +15 -0
- package/lib/components/textarea/textarea.component.d.ts +5 -2
- package/lib/components/textarea/textarea.module.d.ts +8 -0
- package/lib/components/toggle/toggle.component.d.ts +6 -3
- package/lib/components/toggle/toggle.module.d.ts +9 -0
- package/lib/components/trip-summary/trip-summary.component.d.ts +3 -0
- package/lib/components/trip-summary/trip-summary.module.d.ts +10 -0
- package/lib/components/weather-icon/weather-icon.component.d.ts +3 -0
- package/lib/components/weather-icon/weather-icon.module.d.ts +7 -0
- package/lib/core/directives/nas-class/nas-class.directive.d.ts +3 -0
- package/lib/core/directives/nas-class/nas-class.module.d.ts +6 -0
- package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +3 -0
- package/lib/core/services/animate-helper/animate-helper.service.d.ts +3 -0
- package/lib/core/services/bem-helper/bem-helper.service.d.ts +3 -0
- package/lib/core/services/date/date-helper.service.d.ts +3 -0
- package/lib/core/services/device/device-helper.service.d.ts +3 -0
- package/lib/core/services/geolocation/geolocation.service.d.ts +3 -0
- package/lib/core/services/language/language-helper.service.d.ts +3 -0
- package/lib/core/services/sort/sort.service.d.ts +3 -0
- package/lib/core/services/viewport/viewport.service.d.ts +3 -0
- package/lib/services/get-position.service.d.ts +3 -0
- package/package.json +21 -9
- package/bundles/norwegian-core-components.umd.js +0 -12174
- package/bundles/norwegian-core-components.umd.js.map +0 -1
- package/esm2015/lib/components/accordion/accordion.component.js +0 -130
- package/esm2015/lib/components/accordion/accordion.module.js +0 -15
- package/esm2015/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.js +0 -583
- package/esm2015/lib/components/airport-select/airport-select.component.js +0 -400
- package/esm2015/lib/components/airport-select/airport-select.module.js +0 -27
- package/esm2015/lib/components/airport-select/services/airport-select-dropdown.service.js +0 -34
- package/esm2015/lib/components/airport-select/services/airport-select.service.js +0 -37
- package/esm2015/lib/components/autocomplete/autocomplete.component.js +0 -265
- package/esm2015/lib/components/autocomplete/autocomplete.module.js +0 -26
- package/esm2015/lib/components/backdrop/backdrop.component.js +0 -54
- package/esm2015/lib/components/backdrop/backdrop.module.js +0 -17
- package/esm2015/lib/components/box/box.component.js +0 -61
- package/esm2015/lib/components/box/box.module.js +0 -14
- package/esm2015/lib/components/button/button.component.js +0 -140
- package/esm2015/lib/components/button/button.module.js +0 -15
- package/esm2015/lib/components/checkbox/checkbox.component.js +0 -127
- package/esm2015/lib/components/checkbox/checkbox.module.js +0 -15
- package/esm2015/lib/components/chip/chip.component.js +0 -50
- package/esm2015/lib/components/chip/chip.module.js +0 -17
- package/esm2015/lib/components/container/container.component.js +0 -47
- package/esm2015/lib/components/container/container.module.js +0 -14
- package/esm2015/lib/components/continue/continue.component.js +0 -173
- package/esm2015/lib/components/continue/continue.module.js +0 -23
- package/esm2015/lib/components/cover/cover.component.js +0 -61
- package/esm2015/lib/components/cover/cover.module.js +0 -16
- package/esm2015/lib/components/datepicker/calendar/calendar.component.js +0 -560
- package/esm2015/lib/components/datepicker/datepicker.component.js +0 -515
- package/esm2015/lib/components/datepicker/datepicker.module.js +0 -34
- package/esm2015/lib/components/datepicker/services/calendar.service.js +0 -217
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.component.js +0 -317
- package/esm2015/lib/components/datepicker-combo/datepicker-combo.module.js +0 -22
- package/esm2015/lib/components/divider/divider.component.js +0 -53
- package/esm2015/lib/components/divider/divider.module.js +0 -15
- package/esm2015/lib/components/dropdown/dropdown.component.js +0 -150
- package/esm2015/lib/components/dropdown/dropdown.module.js +0 -21
- package/esm2015/lib/components/filter/filter.component.js +0 -1122
- package/esm2015/lib/components/filter/filter.module.js +0 -44
- package/esm2015/lib/components/grid/col/col.component.js +0 -49
- package/esm2015/lib/components/grid/grid.component.js +0 -63
- package/esm2015/lib/components/grid/grid.module.js +0 -15
- package/esm2015/lib/components/icon/icon.component.js +0 -42
- package/esm2015/lib/components/icon/icon.module.js +0 -17
- package/esm2015/lib/components/icon-list/icon-list.component.js +0 -46
- package/esm2015/lib/components/icon-list/icon-list.module.js +0 -15
- package/esm2015/lib/components/info/info.component.js +0 -94
- package/esm2015/lib/components/info/info.module.js +0 -23
- package/esm2015/lib/components/input/input.component.js +0 -148
- package/esm2015/lib/components/input/input.module.js +0 -16
- package/esm2015/lib/components/journey/journey.component.js +0 -122
- package/esm2015/lib/components/journey/journey.module.js +0 -19
- package/esm2015/lib/components/journey-availability/journey-availability.component.js +0 -125
- package/esm2015/lib/components/journey-availability/journey-availability.module.js +0 -26
- package/esm2015/lib/components/journey-availability-list/journey-availability-list.component.js +0 -175
- package/esm2015/lib/components/journey-selection/journey-selection.component.js +0 -110
- package/esm2015/lib/components/journey-selection/journey-selection.module.js +0 -24
- package/esm2015/lib/components/journey-stopover/journey-stopover.component.js +0 -121
- package/esm2015/lib/components/journey-stopover/journey-stopover.module.js +0 -19
- package/esm2015/lib/components/list/list-item/list-item.component.js +0 -56
- package/esm2015/lib/components/list/list.component.js +0 -75
- package/esm2015/lib/components/list/list.module.js +0 -15
- package/esm2015/lib/components/modal/modal.component.js +0 -131
- package/esm2015/lib/components/modal/modal.module.js +0 -25
- package/esm2015/lib/components/number-field/number-field.component.js +0 -118
- package/esm2015/lib/components/number-field/number-field.module.js +0 -24
- package/esm2015/lib/components/page-footer/page-footer.component.js +0 -49
- package/esm2015/lib/components/page-footer/page-footer.module.js +0 -16
- package/esm2015/lib/components/page-header/hamburger/hamburger.component.js +0 -24
- package/esm2015/lib/components/page-header/page-header.component.js +0 -126
- package/esm2015/lib/components/page-header/page-header.module.js +0 -18
- package/esm2015/lib/components/page-header/search/search.component.js +0 -47
- package/esm2015/lib/components/passenger-select/passenger-select.component.js +0 -207
- package/esm2015/lib/components/passenger-select/passenger-select.module.js +0 -19
- package/esm2015/lib/components/phone-number/phone-number.component.js +0 -115
- package/esm2015/lib/components/phone-number/phone-number.module.js +0 -27
- package/esm2015/lib/components/premium-toggle/premium-toggle.component.js +0 -66
- package/esm2015/lib/components/premium-toggle/premium-toggle.module.js +0 -19
- package/esm2015/lib/components/radio/radio.component.js +0 -79
- package/esm2015/lib/components/radio/radio.module.js +0 -15
- package/esm2015/lib/components/select/optgroup/optgroup.component.js +0 -31
- package/esm2015/lib/components/select/option/option.component.js +0 -29
- package/esm2015/lib/components/select/select.component.js +0 -325
- package/esm2015/lib/components/select/select.module.js +0 -21
- package/esm2015/lib/components/simple-list/simple-list.component.js +0 -42
- package/esm2015/lib/components/simple-list/simple-list.module.js +0 -14
- package/esm2015/lib/components/slide-toggle/slide-toggle.component.js +0 -105
- package/esm2015/lib/components/slide-toggle/slide-toggle.module.js +0 -20
- package/esm2015/lib/components/slider/slider.component.js +0 -475
- package/esm2015/lib/components/slider/slider.module.js +0 -19
- package/esm2015/lib/components/sort/sort.component.js +0 -87
- package/esm2015/lib/components/sort/sort.module.js +0 -23
- package/esm2015/lib/components/spinner/spinner.component.js +0 -84
- package/esm2015/lib/components/spinner/spinner.module.js +0 -14
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.component.js +0 -101
- package/esm2015/lib/components/subsidy-discount/subsidy-discount.module.js +0 -23
- package/esm2015/lib/components/suggestions/suggestions.component.js +0 -40
- package/esm2015/lib/components/suggestions/suggestions.module.js +0 -19
- package/esm2015/lib/components/tab-group/tab/tab.component.js +0 -123
- package/esm2015/lib/components/tab-group/tab-group.component.js +0 -85
- package/esm2015/lib/components/tab-group/tab-group.module.js +0 -20
- package/esm2015/lib/components/table/column/column.component.js +0 -17
- package/esm2015/lib/components/table/column-group/column-group.component.js +0 -34
- package/esm2015/lib/components/table/services/table.service.js +0 -20
- package/esm2015/lib/components/table/table-body/table-body.component.js +0 -27
- package/esm2015/lib/components/table/table-foot/table-foot.component.js +0 -27
- package/esm2015/lib/components/table/table-head/table-head.component.js +0 -27
- package/esm2015/lib/components/table/table-row/table-data/table-data.component.js +0 -15
- package/esm2015/lib/components/table/table-row/table-header/table-header.component.js +0 -15
- package/esm2015/lib/components/table/table-row/table-row.component.js +0 -27
- package/esm2015/lib/components/table/table.component.js +0 -29
- package/esm2015/lib/components/table/table.module.js +0 -45
- package/esm2015/lib/components/textarea/textarea.component.js +0 -73
- package/esm2015/lib/components/textarea/textarea.module.js +0 -20
- package/esm2015/lib/components/toggle/toggle.component.js +0 -86
- package/esm2015/lib/components/toggle/toggle.module.js +0 -22
- package/esm2015/lib/components/trip-summary/trip-summary.component.js +0 -152
- package/esm2015/lib/components/trip-summary/trip-summary.module.js +0 -23
- package/esm2015/lib/components/weather-icon/weather-icon.component.js +0 -56
- package/esm2015/lib/components/weather-icon/weather-icon.module.js +0 -14
- package/esm2015/lib/core/base/nas-component.base.js +0 -48
- package/esm2015/lib/core/directives/nas-class/nas-class.directive.js +0 -75
- package/esm2015/lib/core/directives/nas-class/nas-class.module.js +0 -17
- package/esm2015/lib/core/services/abandoned-basket/abandoned-basket.service.js +0 -55
- package/esm2015/lib/core/services/animate-helper/animate-helper.service.js +0 -47
- package/esm2015/lib/core/services/bem-helper/bem-helper.service.js +0 -41
- package/esm2015/lib/core/services/date/date-helper.service.js +0 -196
- package/esm2015/lib/core/services/device/device-helper.service.js +0 -43
- package/esm2015/lib/core/services/geolocation/geolocation.service.js +0 -60
- package/esm2015/lib/core/services/language/language-helper.service.js +0 -162
- package/esm2015/lib/core/services/sort/sort.service.js +0 -19
- package/esm2015/lib/core/services/viewport/viewport.service.js +0 -29
- package/esm2015/lib/services/get-position.service.js +0 -21
- package/esm2015/norwegian-core-components.js +0 -12
- package/fesm2015/norwegian-core-components.js +0 -10835
- package/fesm2015/norwegian-core-components.js.map +0 -1
- package/norwegian-core-components.d.ts +0 -11
- package/norwegian-core-components.metadata.json +0 -1
- /package/{esm2015/lib/components/accordion/index.js → esm2020/lib/components/accordion/index.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/index.js → esm2020/lib/components/airport-select/index.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/models/airport.model.js → esm2020/lib/components/airport-select/models/airport.model.mjs} +0 -0
- /package/{esm2015/lib/components/airport-select/models/results-labels.model.js → esm2020/lib/components/airport-select/models/results-labels.model.mjs} +0 -0
- /package/{esm2015/lib/components/autocomplete/index.js → esm2020/lib/components/autocomplete/index.mjs} +0 -0
- /package/{esm2015/lib/components/autocomplete/models/autocomplete.model.js → esm2020/lib/components/autocomplete/models/autocomplete.model.mjs} +0 -0
- /package/{esm2015/lib/components/backdrop/index.js → esm2020/lib/components/backdrop/index.mjs} +0 -0
- /package/{esm2015/lib/components/box/index.js → esm2020/lib/components/box/index.mjs} +0 -0
- /package/{esm2015/lib/components/button/index.js → esm2020/lib/components/button/index.mjs} +0 -0
- /package/{esm2015/lib/components/checkbox/index.js → esm2020/lib/components/checkbox/index.mjs} +0 -0
- /package/{esm2015/lib/components/chip/index.js → esm2020/lib/components/chip/index.mjs} +0 -0
- /package/{esm2015/lib/components/container/index.js → esm2020/lib/components/container/index.mjs} +0 -0
- /package/{esm2015/lib/components/continue/index.js → esm2020/lib/components/continue/index.mjs} +0 -0
- /package/{esm2015/lib/components/cover/index.js → esm2020/lib/components/cover/index.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/calendar-date.model.js → esm2020/lib/components/datepicker/calendar/calendar-date.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/enums/week-start.enum.js → esm2020/lib/components/datepicker/calendar/enums/week-start.enum.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/day.model.js → esm2020/lib/components/datepicker/calendar/models/day.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/select-option.model.js → esm2020/lib/components/datepicker/calendar/models/select-option.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/calendar/models/week.model.js → esm2020/lib/components/datepicker/calendar/models/week.model.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker/index.js → esm2020/lib/components/datepicker/index.mjs} +0 -0
- /package/{esm2015/lib/components/datepicker-combo/index.js → esm2020/lib/components/datepicker-combo/index.mjs} +0 -0
- /package/{esm2015/lib/components/divider/index.js → esm2020/lib/components/divider/index.mjs} +0 -0
- /package/{esm2015/lib/components/dropdown/index.js → esm2020/lib/components/dropdown/index.mjs} +0 -0
- /package/{esm2015/lib/components/filter/enums/trip-type.enum.js → esm2020/lib/components/filter/enums/trip-type.enum.mjs} +0 -0
- /package/{esm2015/lib/components/filter/index.js → esm2020/lib/components/filter/index.mjs} +0 -0
- /package/{esm2015/lib/components/grid/index.js → esm2020/lib/components/grid/index.mjs} +0 -0
- /package/{esm2015/lib/components/icon/index.js → esm2020/lib/components/icon/index.mjs} +0 -0
- /package/{esm2015/lib/components/icon-list/icon-list.model.js → esm2020/lib/components/icon-list/icon-list.model.mjs} +0 -0
- /package/{esm2015/lib/components/icon-list/index.js → esm2020/lib/components/icon-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
- /package/{esm2015/lib/components/info/index.js → esm2020/lib/components/info/index.mjs} +0 -0
- /package/{esm2015/lib/components/info/models/info.model.js → esm2020/lib/components/info/models/info.model.mjs} +0 -0
- /package/{esm2015/lib/components/input/index.js → esm2020/lib/components/input/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey/index.js → esm2020/lib/components/journey/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey/models/journey-flight.model.js → esm2020/lib/components/journey/models/journey-flight.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey/models/journey.model.js → esm2020/lib/components/journey/models/journey.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability/index.js → esm2020/lib/components/journey-availability/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability-list/enums/availability-sort-option.enum.js → esm2020/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs} +0 -0
- /package/{esm2015/lib/components/journey-availability-list/index.js → esm2020/lib/components/journey-availability-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/index.js → esm2020/lib/components/journey-selection/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-collapsed.model.js → esm2020/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-common.model.js → esm2020/lib/components/journey-selection/models/journey-selection-common.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection-expanded.model.js → esm2020/lib/components/journey-selection/models/journey-selection-expanded.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-selection/models/journey-selection.model.js → esm2020/lib/components/journey-selection/models/journey-selection.model.mjs} +0 -0
- /package/{esm2015/lib/components/journey-stopover/index.js → esm2020/lib/components/journey-stopover/index.mjs} +0 -0
- /package/{esm2015/lib/components/journey-stopover/models/stopover-time.model.js → esm2020/lib/components/journey-stopover/models/stopover-time.model.mjs} +0 -0
- /package/{esm2015/lib/components/list/index.js → esm2020/lib/components/list/index.mjs} +0 -0
- /package/{esm2015/lib/components/modal/index.js → esm2020/lib/components/modal/index.mjs} +0 -0
- /package/{esm2015/lib/components/number-field/index.js → esm2020/lib/components/number-field/index.mjs} +0 -0
- /package/{esm2015/lib/components/page-footer/index.js → esm2020/lib/components/page-footer/index.mjs} +0 -0
- /package/{esm2015/lib/components/page-header/index.js → esm2020/lib/components/page-header/index.mjs} +0 -0
- /package/{esm2015/lib/components/passenger-select/enums/passenger-type.enum.js → esm2020/lib/components/passenger-select/enums/passenger-type.enum.mjs} +0 -0
- /package/{esm2015/lib/components/passenger-select/index.js → esm2020/lib/components/passenger-select/index.mjs} +0 -0
- /package/{esm2015/lib/components/phone-number/index.js → esm2020/lib/components/phone-number/index.mjs} +0 -0
- /package/{esm2015/lib/components/premium-toggle/index.js → esm2020/lib/components/premium-toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/radio/index.js → esm2020/lib/components/radio/index.mjs} +0 -0
- /package/{esm2015/lib/components/select/index.js → esm2020/lib/components/select/index.mjs} +0 -0
- /package/{esm2015/lib/components/select/models/select-option.model.js → esm2020/lib/components/select/models/select-option.model.mjs} +0 -0
- /package/{esm2015/lib/components/simple-list/index.js → esm2020/lib/components/simple-list/index.mjs} +0 -0
- /package/{esm2015/lib/components/slide-toggle/index.js → esm2020/lib/components/slide-toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/slider/index.js → esm2020/lib/components/slider/index.mjs} +0 -0
- /package/{esm2015/lib/components/sort/index.js → esm2020/lib/components/sort/index.mjs} +0 -0
- /package/{esm2015/lib/components/spinner/index.js → esm2020/lib/components/spinner/index.mjs} +0 -0
- /package/{esm2015/lib/components/subsidy-discount/index.js → esm2020/lib/components/subsidy-discount/index.mjs} +0 -0
- /package/{esm2015/lib/components/subsidy-discount/models/subsidy-discount.model.js → esm2020/lib/components/subsidy-discount/models/subsidy-discount.model.mjs} +0 -0
- /package/{esm2015/lib/components/suggestions/index.js → esm2020/lib/components/suggestions/index.mjs} +0 -0
- /package/{esm2015/lib/components/tab-group/index.js → esm2020/lib/components/tab-group/index.mjs} +0 -0
- /package/{esm2015/lib/components/table/index.js → esm2020/lib/components/table/index.mjs} +0 -0
- /package/{esm2015/lib/components/textarea/index.js → esm2020/lib/components/textarea/index.mjs} +0 -0
- /package/{esm2015/lib/components/toggle/index.js → esm2020/lib/components/toggle/index.mjs} +0 -0
- /package/{esm2015/lib/components/toggle/models/options.model.js → esm2020/lib/components/toggle/models/options.model.mjs} +0 -0
- /package/{esm2015/lib/components/trip-summary/index.js → esm2020/lib/components/trip-summary/index.mjs} +0 -0
- /package/{esm2015/lib/components/weather-icon/index.js → esm2020/lib/components/weather-icon/index.mjs} +0 -0
- /package/{esm2015/lib/core/decorators/debounce.decorator.js → esm2020/lib/core/decorators/debounce.decorator.mjs} +0 -0
- /package/{esm2015/lib/core/directives/index.js → esm2020/lib/core/directives/index.mjs} +0 -0
- /package/{esm2015/lib/core/index.js → esm2020/lib/core/index.mjs} +0 -0
- /package/{esm2015/lib/core/models/abandoned-basket-item.model.js → esm2020/lib/core/models/abandoned-basket-item.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/animate.model.js → esm2020/lib/core/models/animate.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/class.model.js → esm2020/lib/core/models/class.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/index.js → esm2020/lib/core/models/index.mjs} +0 -0
- /package/{esm2015/lib/core/models/link.model.js → esm2020/lib/core/models/link.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/position.model.js → esm2020/lib/core/models/position.model.mjs} +0 -0
- /package/{esm2015/lib/core/models/utc-date.model.js → esm2020/lib/core/models/utc-date.model.mjs} +0 -0
- /package/{esm2015/lib/core/services/date/date-compare.enum.js → esm2020/lib/core/services/date/date-compare.enum.mjs} +0 -0
- /package/{esm2015/lib/core/services/geolocation/geolocation-state.enum.js → esm2020/lib/core/services/geolocation/geolocation-state.enum.mjs} +0 -0
- /package/{esm2015/lib/core/services/index.js → esm2020/lib/core/services/index.mjs} +0 -0
- /package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
- /package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
- /package/{esm2015/lib/shared/index.js → esm2020/lib/shared/index.mjs} +0 -0
- /package/{esm2015/lib/shared/models/flight-details.js → esm2020/lib/shared/models/flight-details.mjs} +0 -0
- /package/{esm2015/lib/shared/models/index.js → esm2020/lib/shared/models/index.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-availability-sort.model.js → esm2020/lib/shared/models/journey-availability-sort.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-availability.model.js → esm2020/lib/shared/models/journey-availability.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-details.model.js → esm2020/lib/shared/models/journey-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-duration.model.js → esm2020/lib/shared/models/journey-duration.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-stopover.model.js → esm2020/lib/shared/models/journey-stopover.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/journey-transit-info.model.js → esm2020/lib/shared/models/journey-transit-info.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/operating-carrier.model.js → esm2020/lib/shared/models/operating-carrier.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/sort-option.model.js → esm2020/lib/shared/models/sort-option.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/sort.model.js → esm2020/lib/shared/models/sort.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-item-details.model.js → esm2020/lib/shared/models/trip-item-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-summary-details.model.js → esm2020/lib/shared/models/trip-summary-details.model.mjs} +0 -0
- /package/{esm2015/lib/shared/models/trip-summary.model.js → esm2020/lib/shared/models/trip-summary.model.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
|
@@ -0,0 +1,583 @@
|
|
|
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
|
+
export class CalendarComponent extends NasComponentBase {
|
|
15
|
+
/**
|
|
16
|
+
* @description
|
|
17
|
+
* The lowest date allowed.
|
|
18
|
+
*/
|
|
19
|
+
get lowerLimitDate() {
|
|
20
|
+
return this.lowerLimitDateValue;
|
|
21
|
+
}
|
|
22
|
+
set lowerLimitDate(date) {
|
|
23
|
+
if (!date) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.lowerLimitDateValue = date;
|
|
27
|
+
if (!this.selectedDate) {
|
|
28
|
+
this.selectedDateValue = this.lowerLimitDateValue;
|
|
29
|
+
this.activeDate = this.lowerLimitDateValue;
|
|
30
|
+
}
|
|
31
|
+
else if (this.selectedDate && this.dateService.isGreaterThan(date, this.selectedDate, false, true, true)) {
|
|
32
|
+
this.selectedDateValue = this.lowerLimitDateValue;
|
|
33
|
+
this.activeDate = this.lowerLimitDateValue;
|
|
34
|
+
}
|
|
35
|
+
else if (this.activeDate && this.dateService.isGreaterThan(date, this.activeDate, false, true, true)) {
|
|
36
|
+
this.activeDate = this.lowerLimitDateValue;
|
|
37
|
+
}
|
|
38
|
+
this.applySelectedDateChanges();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @description
|
|
42
|
+
* An array with all the available dates of the month for seats.
|
|
43
|
+
*/
|
|
44
|
+
get availableDates() {
|
|
45
|
+
return this.availableDatesValue;
|
|
46
|
+
}
|
|
47
|
+
set availableDates(dates) {
|
|
48
|
+
if (!dates || !this.exists(this.availability)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (dates.length > 0) {
|
|
52
|
+
const firstDate = dates[0];
|
|
53
|
+
this.currentMonth = firstDate;
|
|
54
|
+
this.setPreviousMonthDisabled();
|
|
55
|
+
}
|
|
56
|
+
this.availableDatesValue = dates;
|
|
57
|
+
this.applySelectedDateChanges();
|
|
58
|
+
if (!this.shouldFocusCalendarOnAvailableDatesUpdate) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (document.activeElement === this.nextMonthRef.nativeElement ||
|
|
62
|
+
document.activeElement === this.previousMonthRef.nativeElement ||
|
|
63
|
+
this.monthSelectRef && document.activeElement === this.monthSelectRef.select.nativeElement) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
setTimeout(() => {
|
|
67
|
+
const elmementToFocus = this.activeDateCell;
|
|
68
|
+
if (elmementToFocus) {
|
|
69
|
+
elmementToFocus.focus();
|
|
70
|
+
}
|
|
71
|
+
this.shouldFocusCalendarOnAvailableDatesUpdate = false;
|
|
72
|
+
}, 100);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description
|
|
76
|
+
* Gets or sets the active date
|
|
77
|
+
*/
|
|
78
|
+
get activeDate() {
|
|
79
|
+
return this.activeDateValue;
|
|
80
|
+
}
|
|
81
|
+
set activeDate(date) {
|
|
82
|
+
if (!date || this.dateService.isSameDate(date, this.activeDate)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!this.currentMonth) {
|
|
86
|
+
this.currentMonth = date;
|
|
87
|
+
}
|
|
88
|
+
if (!this.dateService.isSameMonth(date, this.currentMonth)) {
|
|
89
|
+
this.currentMonth = date;
|
|
90
|
+
this.applySelectedDateChanges();
|
|
91
|
+
this.monthChange.emit(this.currentMonth);
|
|
92
|
+
this.setPreviousMonthDisabled();
|
|
93
|
+
const elmementToFocus = this.activeDateCell;
|
|
94
|
+
if (elmementToFocus) {
|
|
95
|
+
elmementToFocus.focus();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (this.weeks) {
|
|
99
|
+
this.calendarService.setActiveDate(date, this.weeks);
|
|
100
|
+
for (const day of this.calendarService.getDays(this.weeks)) {
|
|
101
|
+
if (!day) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (day.isActive) {
|
|
105
|
+
this.activeDateValue = date;
|
|
106
|
+
this.activeDateChange.emit(date);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
get selectedDate() {
|
|
112
|
+
return this.selectedDateValue;
|
|
113
|
+
}
|
|
114
|
+
set selectedDate(date) {
|
|
115
|
+
if (!date) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
this.selectedDateValue = date;
|
|
119
|
+
if (!this.dateService.isSameMonth(date, this.activeDate)
|
|
120
|
+
|| !this.dateService.isSameMonth(date, this.currentMonth)) {
|
|
121
|
+
this.currentMonth = date;
|
|
122
|
+
this.activeDateValue = date;
|
|
123
|
+
this.applySelectedDateChanges();
|
|
124
|
+
}
|
|
125
|
+
this.setSelectedDate(date);
|
|
126
|
+
}
|
|
127
|
+
get selectedMonth() {
|
|
128
|
+
return this.selectedValue;
|
|
129
|
+
}
|
|
130
|
+
set selectedMonth(option) {
|
|
131
|
+
if (!option) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.selectedValue = option;
|
|
135
|
+
const optionDate = this.dateService.utcDate(option.value);
|
|
136
|
+
if (!this.dateService.isSameMonth(optionDate, this.currentMonth)) {
|
|
137
|
+
this.currentMonth = optionDate;
|
|
138
|
+
this.applySelectedDateChanges();
|
|
139
|
+
this.monthChange.emit(this.currentMonth);
|
|
140
|
+
this.setPreviousMonthDisabled();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
get nextMonthDisabled() {
|
|
144
|
+
const nextMonthIndex = this.currentMonth
|
|
145
|
+
&& this.dateService.getUtcNumberOfMonthBetween(this.dateService.utcDate(), this.currentMonth);
|
|
146
|
+
return (nextMonthIndex + 2) >= this.maxMonthIndex;
|
|
147
|
+
}
|
|
148
|
+
get currentMonthModel() {
|
|
149
|
+
if (!this.currentMonth) {
|
|
150
|
+
return '';
|
|
151
|
+
}
|
|
152
|
+
return `${this.monthNames[this.currentMonth.toDate().getUTCMonth()]} - ${this.currentMonth.toDate().getUTCFullYear()}`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* @description
|
|
156
|
+
* Is in use by DatepickerComponent
|
|
157
|
+
*/
|
|
158
|
+
get activeDateCell() {
|
|
159
|
+
return document.querySelector('.nas-calendar__item--active');
|
|
160
|
+
}
|
|
161
|
+
constructor(dateService, datePipe, calendarService) {
|
|
162
|
+
super('nas-calendar');
|
|
163
|
+
this.dateService = dateService;
|
|
164
|
+
this.datePipe = datePipe;
|
|
165
|
+
this.calendarService = calendarService;
|
|
166
|
+
this.months = new Array();
|
|
167
|
+
this.weekdays = new Array();
|
|
168
|
+
/**
|
|
169
|
+
* @description
|
|
170
|
+
* Desides if the week should start on a monday or sunday. Defaults to monday.
|
|
171
|
+
*/
|
|
172
|
+
this.weekStart = WeekStart.monday;
|
|
173
|
+
/**
|
|
174
|
+
* @description
|
|
175
|
+
* 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.
|
|
176
|
+
* This requires that registerLocaleData is called with the respective locale.
|
|
177
|
+
*/
|
|
178
|
+
this.locale = 'en-US';
|
|
179
|
+
this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
|
|
180
|
+
/**
|
|
181
|
+
* @description
|
|
182
|
+
* Month selected by the user by clicking in drop down for month selection or month navigation buttons.
|
|
183
|
+
*/
|
|
184
|
+
this.monthChange = new EventEmitter();
|
|
185
|
+
/**
|
|
186
|
+
* @description
|
|
187
|
+
* When a user has actively changed the date.
|
|
188
|
+
*/
|
|
189
|
+
this.focusOnNextChange = new EventEmitter();
|
|
190
|
+
/**
|
|
191
|
+
* @description
|
|
192
|
+
* When selected date has been changed.
|
|
193
|
+
*/
|
|
194
|
+
this.selectedDateChange = new EventEmitter();
|
|
195
|
+
/**
|
|
196
|
+
* @description
|
|
197
|
+
* When active date has been changed.
|
|
198
|
+
*/
|
|
199
|
+
this.activeDateChange = new EventEmitter();
|
|
200
|
+
this.maxMonthIndex = 13;
|
|
201
|
+
this.monthNames = new Array();
|
|
202
|
+
this.shouldFocusCalendarOnAvailableDatesUpdate = false;
|
|
203
|
+
}
|
|
204
|
+
ngOnInit() {
|
|
205
|
+
if (!this.ariaLabelPreviousMonth) {
|
|
206
|
+
this.warnMissingAccessibiltyInput('ariaLabelPreviousMonth');
|
|
207
|
+
}
|
|
208
|
+
if (!this.ariaLabelNextMonth) {
|
|
209
|
+
this.warnMissingAccessibiltyInput('ariaLabelNextMonth');
|
|
210
|
+
}
|
|
211
|
+
if (this.nasFormGroup && this.nasFormControlName) {
|
|
212
|
+
const control = this.nasFormGroup.get(this.nasFormControlName);
|
|
213
|
+
if (control) {
|
|
214
|
+
const calendarDate = control.value;
|
|
215
|
+
if (calendarDate) {
|
|
216
|
+
this.selectedDate = calendarDate.date;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (this.date || !this.currentMonth) {
|
|
221
|
+
this.currentMonth = this.calendarService.getCurrentMonth(this.date);
|
|
222
|
+
}
|
|
223
|
+
this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
|
|
224
|
+
this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
|
|
225
|
+
this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
|
|
226
|
+
this.monthNames = this.calendarService.getMonthNames(this.locale);
|
|
227
|
+
this.months = this.calendarService.getMonthsSelectOptions(this.disablePastSelection, this.maxMonthIndex, this.monthNames);
|
|
228
|
+
this.selectedMonth = this.calendarService.getSelectedMonth(this.months, this.currentMonth);
|
|
229
|
+
this.weekdays = this.calendarService.getWeekdays(this.weekStart, this.locale);
|
|
230
|
+
this.setPreviousMonthDisabled();
|
|
231
|
+
}
|
|
232
|
+
dateKeyDown(event) {
|
|
233
|
+
let elementToFocus;
|
|
234
|
+
switch (event.key) {
|
|
235
|
+
case 'ArrowLeft':
|
|
236
|
+
case 'ArrowRight':
|
|
237
|
+
case 'ArrowUp':
|
|
238
|
+
case 'ArrowDown':
|
|
239
|
+
this.shouldFocusCalendarOnAvailableDatesUpdate = true;
|
|
240
|
+
break;
|
|
241
|
+
case 'Tab':
|
|
242
|
+
if (!event.shiftKey) {
|
|
243
|
+
if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
|
|
244
|
+
elementToFocus = this.previousMonthRef.nativeElement;
|
|
245
|
+
}
|
|
246
|
+
else if (this.monthSelectRef && this.months.length > 0) {
|
|
247
|
+
elementToFocus = this.monthSelectRef.select.nativeElement;
|
|
248
|
+
}
|
|
249
|
+
else if (this.nextMonthRef && !this.nextMonthDisabled) {
|
|
250
|
+
elementToFocus = this.nextMonthRef.nativeElement;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
if (this.nextMonthRef && !this.nextMonthDisabled) {
|
|
255
|
+
elementToFocus = this.nextMonthRef.nativeElement;
|
|
256
|
+
}
|
|
257
|
+
else if (this.monthSelectRef && this.months.length > 0) {
|
|
258
|
+
elementToFocus = this.monthSelectRef.select.nativeElement;
|
|
259
|
+
}
|
|
260
|
+
else if (this.previousMonthRef && !this.isPreviousMonthDisabled) {
|
|
261
|
+
elementToFocus = this.previousMonthRef.nativeElement;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
this.focusElement(event, elementToFocus);
|
|
265
|
+
break;
|
|
266
|
+
case 'Enter':
|
|
267
|
+
event.preventDefault();
|
|
268
|
+
const activeDay = this.calendarService
|
|
269
|
+
.getDays(this.weeks)
|
|
270
|
+
.find(x => x && this.dateService.isSameDate(this.dateService.utcDate(x.date), this.activeDate));
|
|
271
|
+
if (this.availability && activeDay?.isAvailable && !activeDay?.isDisabled || !this.availability) {
|
|
272
|
+
this.setSelectedDate(this.activeDate);
|
|
273
|
+
this.focusOnNextChange.emit(event);
|
|
274
|
+
}
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
onPreviousMonthKeydown(event) {
|
|
279
|
+
let elementToFocus;
|
|
280
|
+
switch (event.key) {
|
|
281
|
+
case 'Tab':
|
|
282
|
+
if (!event.shiftKey) {
|
|
283
|
+
if (this.monthSelectRef && this.months.length > 0) {
|
|
284
|
+
elementToFocus = this.monthSelectRef.select.nativeElement;
|
|
285
|
+
}
|
|
286
|
+
else if (this.nextMonthRef && !this.nextMonthDisabled) {
|
|
287
|
+
elementToFocus = this.nextMonthRef.nativeElement;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
elementToFocus = this.activeDateCell;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
elementToFocus = this.activeDateCell;
|
|
295
|
+
}
|
|
296
|
+
this.focusElement(event, elementToFocus);
|
|
297
|
+
break;
|
|
298
|
+
case 'Enter':
|
|
299
|
+
this.getPreviousMonth();
|
|
300
|
+
event.preventDefault();
|
|
301
|
+
break;
|
|
302
|
+
default:
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
onNextMonthKeydown(event) {
|
|
307
|
+
let elementToFocus;
|
|
308
|
+
switch (event.key) {
|
|
309
|
+
case 'Tab':
|
|
310
|
+
if (!event.shiftKey) {
|
|
311
|
+
elementToFocus = this.activeDateCell;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
if (this.monthSelectRef && this.months.length > 0) {
|
|
315
|
+
elementToFocus = this.monthSelectRef.select.nativeElement;
|
|
316
|
+
}
|
|
317
|
+
else if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
|
|
318
|
+
elementToFocus = this.previousMonthRef.nativeElement;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
elementToFocus = this.activeDateCell;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.focusElement(event, elementToFocus);
|
|
325
|
+
break;
|
|
326
|
+
case 'Enter':
|
|
327
|
+
event.preventDefault();
|
|
328
|
+
this.getNextMonth();
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
onNextMonthMousedown() {
|
|
333
|
+
this.getNextMonth();
|
|
334
|
+
}
|
|
335
|
+
onPreviousMonthMousedown() {
|
|
336
|
+
this.getPreviousMonth();
|
|
337
|
+
}
|
|
338
|
+
onMonthSelectKeydown(event) {
|
|
339
|
+
let elementToFocus;
|
|
340
|
+
switch (event.key) {
|
|
341
|
+
case 'Tab':
|
|
342
|
+
if (!event.shiftKey) {
|
|
343
|
+
if (this.nextMonthRef && !this.nextMonthDisabled) {
|
|
344
|
+
elementToFocus = this.nextMonthRef.nativeElement;
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
elementToFocus = this.activeDateCell;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
if (this.onPreviousMonthKeydown && !this.isPreviousMonthDisabled) {
|
|
352
|
+
elementToFocus = this.previousMonthRef.nativeElement;
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
elementToFocus = this.activeDateCell;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
this.focusElement(event, elementToFocus);
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
focusElement(event, elementToFocus) {
|
|
363
|
+
if (elementToFocus) {
|
|
364
|
+
elementToFocus.focus();
|
|
365
|
+
}
|
|
366
|
+
if (event) {
|
|
367
|
+
event.preventDefault();
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
setActiveDate() {
|
|
371
|
+
if (!this.currentMonth) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const today = this.dateService.utcDate();
|
|
375
|
+
const lastDay = new Date(this.currentMonth.year, this.currentMonth.month + 1, 0);
|
|
376
|
+
const newDate = this.activeDate?.date > lastDay.getDate() ? lastDay.getDate() : this.activeDate?.date;
|
|
377
|
+
if (this.currentMonth.month !== today.month || this.currentMonth.year !== today.year) {
|
|
378
|
+
const nextMonth = this.currentMonth.month;
|
|
379
|
+
const nextYear = this.currentMonth.year;
|
|
380
|
+
this.activeDate = new UtcDate(nextYear, nextMonth, newDate);
|
|
381
|
+
}
|
|
382
|
+
else if (this.activeDate && this.activeDate.month !== this.currentMonth.month) {
|
|
383
|
+
this.activeDate = new UtcDate(this.activeDateValue.year, this.currentMonth.month, newDate);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
this.activeDate = this.dateService.utcDate();
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
onMouseDown(date, event) {
|
|
390
|
+
this.setSelectedDate(this.dateService.utcDate(date));
|
|
391
|
+
this.focusOnNextChange.emit(event);
|
|
392
|
+
}
|
|
393
|
+
onDayFocus(day) {
|
|
394
|
+
this.activeDate = this.dateService.utcDate(day.date);
|
|
395
|
+
}
|
|
396
|
+
onDayClick(day) {
|
|
397
|
+
if (!day.isAvailable) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
this.setSelectedDate(this.dateService.utcDate(day.date));
|
|
401
|
+
}
|
|
402
|
+
setSelectedDate(date) {
|
|
403
|
+
if (!date) {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
if (this.nasFormGroup && this.nasFormControlName) {
|
|
407
|
+
const control = this.nasFormGroup.get(this.nasFormControlName);
|
|
408
|
+
const calendarDate = {
|
|
409
|
+
model: this.datePipe.transform(this.dateService.date(date), this.dateDisplayFormat, 'UTC', this.locale),
|
|
410
|
+
date: date
|
|
411
|
+
};
|
|
412
|
+
control.patchValue(calendarDate);
|
|
413
|
+
}
|
|
414
|
+
this.selectedDateChange.emit(date);
|
|
415
|
+
if (this.weeks && this.weeks.length > 0) {
|
|
416
|
+
for (const week of this.weeks) {
|
|
417
|
+
if (!week) {
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
for (const day of week.days) {
|
|
421
|
+
if (!day) {
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
day.isSelected = day.isAvailable
|
|
425
|
+
&& this.dateService.isSameDate(this.dateService.utcDate(day.date), date);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
getCellButtonClass(day) {
|
|
431
|
+
if (!day) {
|
|
432
|
+
return this.getClass('item');
|
|
433
|
+
}
|
|
434
|
+
return this.getClass('item', [
|
|
435
|
+
day.isDisabled && 'before',
|
|
436
|
+
day.isSelected && 'selected',
|
|
437
|
+
!this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth) && 'empty',
|
|
438
|
+
day.isAvailable && 'available',
|
|
439
|
+
'large',
|
|
440
|
+
day.isActive && 'active'
|
|
441
|
+
]);
|
|
442
|
+
}
|
|
443
|
+
getNextMonth() {
|
|
444
|
+
if (!this.weeks) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const firstWeek = this.weeks[0];
|
|
448
|
+
if (!firstWeek) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const firstValidDay = firstWeek.days
|
|
452
|
+
.find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
|
|
453
|
+
if (!firstValidDay) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const nextMonth = this.dateService.utcDate(firstValidDay.date);
|
|
457
|
+
const month = nextMonth.month + 1;
|
|
458
|
+
nextMonth.setMonth(month);
|
|
459
|
+
this.currentMonth = nextMonth;
|
|
460
|
+
this.applySelectedDateChanges();
|
|
461
|
+
this.monthChange.emit(this.currentMonth);
|
|
462
|
+
this.setPreviousMonthDisabled();
|
|
463
|
+
if (!this.availability) {
|
|
464
|
+
this.maxMonthIndex++;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
getPreviousMonth() {
|
|
468
|
+
if (!this.weeks) {
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
const firstWeek = this.weeks[0];
|
|
472
|
+
if (!firstWeek) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
const firstValidDay = firstWeek.days
|
|
476
|
+
.find(day => day && this.dateService.isSameMonth(this.dateService.utcDate(day.date), this.currentMonth));
|
|
477
|
+
const previousMonth = this.dateService.utcDate(firstValidDay.date);
|
|
478
|
+
const month = previousMonth.month - 1;
|
|
479
|
+
previousMonth.setMonth(month);
|
|
480
|
+
this.currentMonth = previousMonth;
|
|
481
|
+
this.applySelectedDateChanges();
|
|
482
|
+
this.monthChange.emit(this.currentMonth);
|
|
483
|
+
this.setPreviousMonthDisabled();
|
|
484
|
+
}
|
|
485
|
+
setPreviousMonthDisabled() {
|
|
486
|
+
if (this.currentMonth) {
|
|
487
|
+
const previousMonth = new UtcDate(this.currentMonth.year, this.currentMonth.month, this.currentMonth.date);
|
|
488
|
+
const month = previousMonth.month - 1;
|
|
489
|
+
previousMonth.setMonth(month);
|
|
490
|
+
if (this.disablePastSelection && this.dateService.isInThePast(previousMonth, true)) {
|
|
491
|
+
this.isPreviousMonthDisabled = true;
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
this.isPreviousMonthDisabled = false;
|
|
496
|
+
}
|
|
497
|
+
applySelectedDateChanges() {
|
|
498
|
+
this.availableDays = this.calendarService.getAvailableDays(this.currentMonth, this.availableDates, this.availability, this.disablePastSelection, this.lowerLimitDate, this.activeDate, this.selectedDate);
|
|
499
|
+
this.selectedMonth = this.months
|
|
500
|
+
.find(x => this.dateService.isSameMonth(this.dateService.utcDate(x.value), this.currentMonth));
|
|
501
|
+
this.calendarService.updateAvailableDaysWithSelectedDate(this.availableDays, this.selectedDate);
|
|
502
|
+
this.weeks = this.calendarService.getWeeks(this.availableDays, this.weekStart);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarComponent, deps: [{ token: i1.DateHelper }, { token: i2.DatePipe }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Component });
|
|
506
|
+
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CalendarComponent, selector: "nas-calendar", inputs: { 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 <span [nasClass]=\"getClass('arrow')\"></span>\n <div #calendarContent\n tabindex=\"0\"\n [nasClass]=\"getClass('content')\">\n <header [nasClass]=\"getClass('header')\">\n <button type=\"button\"\n #previousMonthRef\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelPreviousMonth\"\n [nasClass]=\"getClass('nav')\"\n [disabled]=\"isPreviousMonthDisabled === true\"\n (keydown)=\"onPreviousMonthKeydown($event)\"\n (mousedown)=\"onPreviousMonthMousedown()\">\n <nas-icon tabindex=\"-1\"\n [type]=\"'arrow-left--light'\"></nas-icon>\n </button>\n <ng-container *ngIf=\"months?.length > 0; else currentMonthTemplate\">\n <nas-select #monthSelect\n [cssClass]=\"getClass('month')\"\n [inline]=\"true\"\n [simple]=\"true\"\n [options]=\"months\"\n [(selected)]=\"selectedMonth\"\n (keydown)=\"onMonthSelectKeydown($event)\"></nas-select>\n </ng-container>\n <ng-template #currentMonthTemplate>\n {{currentMonthModel}}\n </ng-template>\n <button type=\"button\"\n tabindex=\"0\"\n #nextMonthRef\n [nasClass]=\"getClass('nav')\"\n [attr.aria-label]=\"ariaLabelNextMonth\"\n [disabled]=\"nextMonthDisabled\"\n (keydown)=\"onNextMonthKeydown($event)\"\n (mousedown)=\"onNextMonthMousedown()\">\n <nas-icon [type]=\"'arrow-right--light'\"></nas-icon>\n </button>\n </header>\n <table [nasClass]=\"getClass('table')\">\n <thead>\n <tr>\n <th *ngIf=\"exists(displayWeekNumbers)\"\n [nasClass]=\"getClass('week-number')\"></th>\n <th [nasClass]=\"getClass('cell')\"\n *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\"\n [nasClass]=\"getClass('row', 'animate')\">\n <td *ngIf=\"exists(displayWeekNumbers)\"\n [nasClass]=\"getClass('week-number')\">\n <span [nasClass]=\"getClass('date', 'week-number')\">{{week.weekNumber}}</span>\n </td>\n <td [nasClass]=\"getClass('cell')\"\n *ngFor=\"let day of week?.days\"\n #tableCells>\n <div [nasClass]=\"getClass('item', 'dummy')\"\n *ngIf=\"day === null; else dayTemplate\"></div>\n <ng-template #dayTemplate\n tabindex=\"0\">\n <button type=\"button\"\n #dateButton\n (keydown)=\"dateKeyDown($event)\"\n tabIndex=\"0\"\n [nasClass]=\"getCellButtonClass(day)\"\n (mousedown)=\"onMouseDown(day.date, $event)\"\n (click)=\"onDayClick(day)\"\n (focus)=\"onDayFocus(day)\">\n <div [nasClass]=\"getClass('date-wrapper')\">\n <span [nasClass]=\"getClass('date')\"\n [attr.aria-label]=\"day.date | date : 'dd':'UTC'\">{{day.date | date : 'dd':'UTC':locale}}</span>\n </div>\n </button>\n </ng-template>\n </td>\n </tr>\n </tbody>\n </table>\n <div [nasClass]=\"getClass('footer')\">\n <div *ngIf=\"availableDates?.length === 0 && noAvailableFlightsLabel\"\n [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>\n", 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{max-width:375px;float:right;border:3px solid #003251;padding:10px;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:flip-in .55s ease both;margin-top:3px;position:relative}.nas-calendar__content:active{outline:none;box-shadow:none}.nas-calendar__content:focus{outline:none;box-shadow:none}@media (min-width: 640px){.nas-calendar{margin-right:15px}}.nas-calendar__cover{margin-bottom:16px}.nas-calendar__header{position:relative;display:flex;justify-content:center;height:48px}.nas-calendar__month{max-width:200px;margin:0 auto 21px}.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}.nas-calendar__nav{position:absolute;margin:0 2px 12px;flex-shrink:0;width:24px;height:24px;border-radius:50%;background-color:#003251;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:first-child{left:0}.nas-calendar__nav:last-child{right:0}.nas-calendar__nav:hover,.nas-calendar__nav:focus{background-color:#002a3a;outline:none;border:3px solid #3b99fc}.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;cursor:pointer;overflow:hidden;width:100%;height:36px;text-align:left;outline:0;padding:2px;border:1px solid #fff;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:#002a3a}@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:36px}.nas-calendar__item--header{pointer-events:none;height:auto;background-color:transparent;border:0;opacity:1}@media (min-width: 640px){.nas-calendar__item--header{padding-left:11px}}.nas-calendar__item--dummy{visibility:hidden}.nas-calendar__item--today .nas-calendar__date{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:#002a3a}.nas-calendar__item--cheapest{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:#d81939}.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:#fff;background-color:#c3c3c3}.nas-calendar__item--available .nas-calendar__date{color:#002a3a}.nas-calendar__item--active{border-color:#003251;border-width:3px}.nas-calendar__item--before{pointer-events:none;color:#a1a1a1;opacity:.55}.nas-calendar__item:hover,.nas-calendar__item:focus{border-color:#003251;border-width:3px;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc}.nas-calendar__item:active{transform:translateY(3px)}.nas-calendar__item--selected,.nas-calendar__item:active{color:#fff;background-color:#d81939}.nas-calendar__item--selected:hover,.nas-calendar__item--selected:focus,.nas-calendar__item:active:hover,.nas-calendar__item:active:focus{border-color:#003251;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:#002a3a}.nas-calendar__item[disabled]{pointer-events:none}.nas-calendar__date{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:#626363}.nas-calendar__date--week-number{top:6px;right:6px}.nas-calendar__price{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:inherit;letter-spacing:-.04em}@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:Apercu,Helvetica Neue,Helvetica,Arial,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:#818282;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 #003251}.nas-calendar__footer--item{margin-top:12px}.nas-calendar__footer--label{flex-shrink:0;margin-right:12px;display:flex;flex-direction:column;justify-content:center;font-size:14px;line-height:20px}.nas-calendar__arrow{position:absolute;width:16px;height:16px;top:-10px;left:calc(50% - 8px);background-color:inherit;transform:rotate(45deg);border-top:3px solid #003251;border-left:3px solid #003251}@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", "keydown"] }, { 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 });
|
|
507
|
+
__decorate([
|
|
508
|
+
Debounce(150)
|
|
509
|
+
], CalendarComponent.prototype, "onPreviousMonthKeydown", null);
|
|
510
|
+
__decorate([
|
|
511
|
+
Debounce(150)
|
|
512
|
+
], CalendarComponent.prototype, "onNextMonthKeydown", null);
|
|
513
|
+
__decorate([
|
|
514
|
+
Debounce(200)
|
|
515
|
+
], CalendarComponent.prototype, "onNextMonthMousedown", null);
|
|
516
|
+
__decorate([
|
|
517
|
+
Debounce(200)
|
|
518
|
+
], CalendarComponent.prototype, "onPreviousMonthMousedown", null);
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
520
|
+
type: Component,
|
|
521
|
+
args: [{ selector: 'nas-calendar', encapsulation: ViewEncapsulation.None, template: "<div [nasClass]=\"getClass()\">\n <span [nasClass]=\"getClass('arrow')\"></span>\n <div #calendarContent\n tabindex=\"0\"\n [nasClass]=\"getClass('content')\">\n <header [nasClass]=\"getClass('header')\">\n <button type=\"button\"\n #previousMonthRef\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelPreviousMonth\"\n [nasClass]=\"getClass('nav')\"\n [disabled]=\"isPreviousMonthDisabled === true\"\n (keydown)=\"onPreviousMonthKeydown($event)\"\n (mousedown)=\"onPreviousMonthMousedown()\">\n <nas-icon tabindex=\"-1\"\n [type]=\"'arrow-left--light'\"></nas-icon>\n </button>\n <ng-container *ngIf=\"months?.length > 0; else currentMonthTemplate\">\n <nas-select #monthSelect\n [cssClass]=\"getClass('month')\"\n [inline]=\"true\"\n [simple]=\"true\"\n [options]=\"months\"\n [(selected)]=\"selectedMonth\"\n (keydown)=\"onMonthSelectKeydown($event)\"></nas-select>\n </ng-container>\n <ng-template #currentMonthTemplate>\n {{currentMonthModel}}\n </ng-template>\n <button type=\"button\"\n tabindex=\"0\"\n #nextMonthRef\n [nasClass]=\"getClass('nav')\"\n [attr.aria-label]=\"ariaLabelNextMonth\"\n [disabled]=\"nextMonthDisabled\"\n (keydown)=\"onNextMonthKeydown($event)\"\n (mousedown)=\"onNextMonthMousedown()\">\n <nas-icon [type]=\"'arrow-right--light'\"></nas-icon>\n </button>\n </header>\n <table [nasClass]=\"getClass('table')\">\n <thead>\n <tr>\n <th *ngIf=\"exists(displayWeekNumbers)\"\n [nasClass]=\"getClass('week-number')\"></th>\n <th [nasClass]=\"getClass('cell')\"\n *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\"\n [nasClass]=\"getClass('row', 'animate')\">\n <td *ngIf=\"exists(displayWeekNumbers)\"\n [nasClass]=\"getClass('week-number')\">\n <span [nasClass]=\"getClass('date', 'week-number')\">{{week.weekNumber}}</span>\n </td>\n <td [nasClass]=\"getClass('cell')\"\n *ngFor=\"let day of week?.days\"\n #tableCells>\n <div [nasClass]=\"getClass('item', 'dummy')\"\n *ngIf=\"day === null; else dayTemplate\"></div>\n <ng-template #dayTemplate\n tabindex=\"0\">\n <button type=\"button\"\n #dateButton\n (keydown)=\"dateKeyDown($event)\"\n tabIndex=\"0\"\n [nasClass]=\"getCellButtonClass(day)\"\n (mousedown)=\"onMouseDown(day.date, $event)\"\n (click)=\"onDayClick(day)\"\n (focus)=\"onDayFocus(day)\">\n <div [nasClass]=\"getClass('date-wrapper')\">\n <span [nasClass]=\"getClass('date')\"\n [attr.aria-label]=\"day.date | date : 'dd':'UTC'\">{{day.date | date : 'dd':'UTC':locale}}</span>\n </div>\n </button>\n </ng-template>\n </td>\n </tr>\n </tbody>\n </table>\n <div [nasClass]=\"getClass('footer')\">\n <div *ngIf=\"availableDates?.length === 0 && noAvailableFlightsLabel\"\n [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>\n", 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{max-width:375px;float:right;border:3px solid #003251;padding:10px;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:flip-in .55s ease both;margin-top:3px;position:relative}.nas-calendar__content:active{outline:none;box-shadow:none}.nas-calendar__content:focus{outline:none;box-shadow:none}@media (min-width: 640px){.nas-calendar{margin-right:15px}}.nas-calendar__cover{margin-bottom:16px}.nas-calendar__header{position:relative;display:flex;justify-content:center;height:48px}.nas-calendar__month{max-width:200px;margin:0 auto 21px}.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}.nas-calendar__nav{position:absolute;margin:0 2px 12px;flex-shrink:0;width:24px;height:24px;border-radius:50%;background-color:#003251;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:first-child{left:0}.nas-calendar__nav:last-child{right:0}.nas-calendar__nav:hover,.nas-calendar__nav:focus{background-color:#002a3a;outline:none;border:3px solid #3b99fc}.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;cursor:pointer;overflow:hidden;width:100%;height:36px;text-align:left;outline:0;padding:2px;border:1px solid #fff;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:#002a3a}@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:36px}.nas-calendar__item--header{pointer-events:none;height:auto;background-color:transparent;border:0;opacity:1}@media (min-width: 640px){.nas-calendar__item--header{padding-left:11px}}.nas-calendar__item--dummy{visibility:hidden}.nas-calendar__item--today .nas-calendar__date{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:#002a3a}.nas-calendar__item--cheapest{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:#d81939}.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:#fff;background-color:#c3c3c3}.nas-calendar__item--available .nas-calendar__date{color:#002a3a}.nas-calendar__item--active{border-color:#003251;border-width:3px}.nas-calendar__item--before{pointer-events:none;color:#a1a1a1;opacity:.55}.nas-calendar__item:hover,.nas-calendar__item:focus{border-color:#003251;border-width:3px;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc}.nas-calendar__item:active{transform:translateY(3px)}.nas-calendar__item--selected,.nas-calendar__item:active{color:#fff;background-color:#d81939}.nas-calendar__item--selected:hover,.nas-calendar__item--selected:focus,.nas-calendar__item:active:hover,.nas-calendar__item:active:focus{border-color:#003251;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:#002a3a}.nas-calendar__item[disabled]{pointer-events:none}.nas-calendar__date{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;color:#626363}.nas-calendar__date--week-number{top:6px;right:6px}.nas-calendar__price{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;color:inherit;letter-spacing:-.04em}@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:Apercu,Helvetica Neue,Helvetica,Arial,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:#818282;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 #003251}.nas-calendar__footer--item{margin-top:12px}.nas-calendar__footer--label{flex-shrink:0;margin-right:12px;display:flex;flex-direction:column;justify-content:center;font-size:14px;line-height:20px}.nas-calendar__arrow{position:absolute;width:16px;height:16px;top:-10px;left:calc(50% - 8px);background-color:inherit;transform:rotate(45deg);border-top:3px solid #003251;border-left:3px solid #003251}@keyframes lowfare-item-in{0%{opacity:0;transform:scale(0)}}\n"] }]
|
|
522
|
+
}], ctorParameters: function () { return [{ type: i1.DateHelper }, { type: i2.DatePipe }, { type: i3.CalendarService }]; }, propDecorators: { previousMonthRef: [{
|
|
523
|
+
type: ViewChild,
|
|
524
|
+
args: ['previousMonthRef']
|
|
525
|
+
}], nextMonthRef: [{
|
|
526
|
+
type: ViewChild,
|
|
527
|
+
args: ['nextMonthRef']
|
|
528
|
+
}], tableCells: [{
|
|
529
|
+
type: ViewChildren,
|
|
530
|
+
args: ['tableCells']
|
|
531
|
+
}], dateButtons: [{
|
|
532
|
+
type: ViewChildren,
|
|
533
|
+
args: ['dateButton']
|
|
534
|
+
}], calendarContent: [{
|
|
535
|
+
type: ViewChild,
|
|
536
|
+
args: ['calendarContent']
|
|
537
|
+
}], monthSelectRef: [{
|
|
538
|
+
type: ViewChild,
|
|
539
|
+
args: ['monthSelect']
|
|
540
|
+
}], noAvailableFlightsLabel: [{
|
|
541
|
+
type: Input
|
|
542
|
+
}], availableFlightsLabel: [{
|
|
543
|
+
type: Input
|
|
544
|
+
}], disablePastSelection: [{
|
|
545
|
+
type: Input
|
|
546
|
+
}], lowerLimitDate: [{
|
|
547
|
+
type: Input
|
|
548
|
+
}], date: [{
|
|
549
|
+
type: Input
|
|
550
|
+
}], weekStart: [{
|
|
551
|
+
type: Input
|
|
552
|
+
}], displayWeekNumbers: [{
|
|
553
|
+
type: Input
|
|
554
|
+
}], availability: [{
|
|
555
|
+
type: Input
|
|
556
|
+
}], locale: [{
|
|
557
|
+
type: Input
|
|
558
|
+
}], availableDates: [{
|
|
559
|
+
type: Input
|
|
560
|
+
}], activeDate: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], selectedDate: [{
|
|
563
|
+
type: Input
|
|
564
|
+
}], nasFormGroup: [{
|
|
565
|
+
type: Input
|
|
566
|
+
}], nasFormControlName: [{
|
|
567
|
+
type: Input
|
|
568
|
+
}], dateDisplayFormat: [{
|
|
569
|
+
type: Input
|
|
570
|
+
}], ariaLabelPreviousMonth: [{
|
|
571
|
+
type: Input
|
|
572
|
+
}], ariaLabelNextMonth: [{
|
|
573
|
+
type: Input
|
|
574
|
+
}], monthChange: [{
|
|
575
|
+
type: Output
|
|
576
|
+
}], focusOnNextChange: [{
|
|
577
|
+
type: Output
|
|
578
|
+
}], selectedDateChange: [{
|
|
579
|
+
type: Output
|
|
580
|
+
}], activeDateChange: [{
|
|
581
|
+
type: Output
|
|
582
|
+
}], onPreviousMonthKeydown: [], onNextMonthKeydown: [], onNextMonthMousedown: [], onPreviousMonthMousedown: [] } });
|
|
583
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGdCQUFnQjtJQStCckQ7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFhO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFD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LGlCQUFpQixDQUFDLElBQUk7c0pBUU4sZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNFLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBTWYsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0YsY0FBYztzQkFEakIsS0FBSztnQkE0QkcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBNkNGLFVBQVU7c0JBRGIsS0FBSztnQkEyQ0YsWUFBWTtzQkFEZixLQUFLO2dCQXFCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNSSxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQXlKUCxzQkFBc0IsTUE0QnRCLGtCQUFrQixNQTBCbEIsb0JBQW9CLE1BS3BCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBOb3J3ZWdpYW4gQWlyIFNodXR0bGUuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci1kYXRlLm1vZGVsJztcbmltcG9ydCB7IFdlZWtTdGFydCB9IGZyb20gJy4vZW51bXMvd2Vlay1zdGFydC5lbnVtJztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvZGF5Lm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0LW9wdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBXZWVrTW9kZWwgfSBmcm9tICcuL21vZGVscy93ZWVrLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmFzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB3ZWVrczogQXJyYXk8V2Vla01vZGVsPjtcbiAgbW9udGhzID0gbmV3IEFycmF5PFNlbGVjdE9wdGlvbk1vZGVsPigpO1xuICB3ZWVrZGF5cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpb3VzTW9udGhSZWYnKSBwcmV2aW91c01vbnRoUmVmOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnbmV4dE1vbnRoUmVmJykgbmV4dE1vbnRoUmVmOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbigndGFibGVDZWxscycpIHRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignZGF0ZUJ1dHRvbicpIGRhdGVCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyQ29udGVudCcpIGNhbGVuZGFyQ29udGVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbW9udGhTZWxlY3QnKSBtb250aFNlbGVjdFJlZjogU2VsZWN0Q29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG5vIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGF0ZXMgaW4gdGhlIHBhc3QuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbG93ZXN0IGRhdGUgYWxsb3dlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBsb3dlckxpbWl0RGF0ZSgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlO1xuICB9XG4gIHNldCBsb3dlckxpbWl0RGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb3dlckxpbWl0RGF0ZVZhbHVlID0gZGF0ZTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmxvd2VyTGltaXREYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzR3JlYXRlclRoYW4oZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUsIGZhbHNlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzR3JlYXRlclRoYW4oZGF0ZSwgdGhpcy5hY3RpdmVEYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICogQGRlc2NyaXB0aW9uXG4gICogQ3VycmVudCBtb250aCBkYXRlIHRvIGJlIGRpc3BsYXllZC4gSXQgd2lsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBzZWxlY3RlZCBkYXRlIGlucHV0LCBpZiBpdCBpcyBzZXQuXG4gICovXG4gIEBJbnB1dCgpIGRhdGU6IFV0Y0RhdGU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXNpZGVzIGlmIHRoZSB3ZWVrIHNob3VsZCBzdGFydCBvbiBhIG1vbmRheSBvciBzdW5kYXkuIERlZmF1bHRzIHRvIG1vbmRheS5cbiAgICovXG4gIEBJbnB1dCgpIHdlZWtTdGFydCA9IFdlZWtTdGFydC5tb25kYXk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNwbGF5IHdlZWsgbnVtYmVycy5cbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXIgaW4gYXZhaWxhYmlsaXR5IG1vZGUgd2hlcmUgYXZhaWxhYmxlIGRhdGVzIGNhbiBiZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJpbGl0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tVVMnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSBkYXRlcyBvZiB0aGUgbW9udGggZm9yIHNlYXRzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGF2YWlsYWJsZURhdGVzKCk6IEFycmF5PFV0Y0RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVEYXRlc1ZhbHVlO1xuICB9XG4gIHNldCBhdmFpbGFibGVEYXRlcyhkYXRlczogQXJyYXk8VXRjRGF0ZT4pIHtcbiAgICBpZiAoIWRhdGVzIHx8ICF0aGlzLmV4aXN0cyh0aGlzLmF2YWlsYWJpbGl0eSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3REYXRlID0gZGF0ZXNbMF07XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGZpcnN0RGF0ZTtcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVEYXRlc1ZhbHVlID0gZGF0ZXM7XG5cbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWREYXRlQ2hhbmdlcygpO1xuXG4gICAgaWYgKCF0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMucHJldmlvdXNNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLm1vbnRoU2VsZWN0UmVmICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsbWVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG5cbiAgICAgIGlmIChlbG1lbWVudFRvRm9jdXMpIHtcbiAgICAgICAgZWxtZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2hvdWxkRm9jdXNDYWxlbmRhck9uQXZhaWxhYmxlRGF0ZXNVcGRhdGUgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGFjdGl2ZSBkYXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWN0aXZlRGF0ZSgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGFjdGl2ZURhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSB8fCB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUoZGF0ZSwgdGhpcy5hY3RpdmVEYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgoZGF0ZSwgdGhpcy5jdXJyZW50TW9udGgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGU7XG5cbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcblxuICAgICAgY29uc3QgZWxtZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgIGlmIChlbG1lbWVudFRvRm9jdXMpIHtcbiAgICAgICAgZWxtZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2Vla3MpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnNldEFjdGl2ZURhdGUoZGF0ZSwgdGhpcy53ZWVrcyk7XG5cbiAgICAgIGZvciAoY29uc3QgZGF5IG9mIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldERheXModGhpcy53ZWVrcykpIHtcbiAgICAgICAgaWYgKCFkYXkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXkuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuYWN0aXZlRGF0ZSlcbiAgICAgIHx8ICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKGRhdGUsIHRoaXMuY3VycmVudE1vbnRoKSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZShkYXRlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcbiAgQElucHV0KCkgYXJpYUxhYmVsUHJldmlvdXNNb250aDogc3RyaW5nO1xuICBASW5wdXQoKSBhcmlhTGFiZWxOZXh0TW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vbnRoIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIGJ5IGNsaWNraW5nIGluIGRyb3AgZG93biBmb3IgbW9udGggc2VsZWN0aW9uIG9yIG1vbnRoIG5hdmlnYXRpb24gYnV0dG9ucy5cbiAgICovXG4gIEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGFjdGl2ZSBkYXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBTZWxlY3RPcHRpb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRNb250aChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKSB7XG4gICAgaWYgKCFvcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uO1xuICAgIGNvbnN0IG9wdGlvbkRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcblxuICAgIGlmICghdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChvcHRpb25EYXRlLCB0aGlzLmN1cnJlbnRNb250aCkpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gb3B0aW9uRGF0ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmV4dE1vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dE1vbnRoSW5kZXggPSB0aGlzLmN1cnJlbnRNb250aFxuICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5nZXRVdGNOdW1iZXJPZk1vbnRoQmV0d2Vlbih0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoKSwgdGhpcy5jdXJyZW50TW9udGgpO1xuXG4gICAgcmV0dXJuIChuZXh0TW9udGhJbmRleCArIDIpID49IHRoaXMubWF4TW9udGhJbmRleDtcbiAgfVxuXG4gIGdldCBjdXJyZW50TW9udGhNb2RlbCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5tb250aE5hbWVzW3RoaXMuY3VycmVudE1vbnRoLnRvRGF0ZSgpLmdldFVUQ01vbnRoKCldfSAtICR7dGhpcy5jdXJyZW50TW9udGgudG9EYXRlKCkuZ2V0VVRDRnVsbFllYXIoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJcyBpbiB1c2UgYnkgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0IGFjdGl2ZURhdGVDZWxsKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1jYWxlbmRhcl9faXRlbS0tYWN0aXZlJyk7XG4gIH1cblxuICBwcml2YXRlIG1heE1vbnRoSW5kZXggPSAxMztcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYXZhaWxhYmxlRGF0ZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkVmFsdWU6IFNlbGVjdE9wdGlvbk1vZGVsO1xuICBwcml2YXRlIGF2YWlsYWJsZURheXM6IEFycmF5PERheU1vZGVsPjtcbiAgcHJpdmF0ZSBtb250aE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIHNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSkge1xuICAgIHN1cGVyKCduYXMtY2FsZW5kYXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hcmlhTGFiZWxQcmV2aW91c01vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbFByZXZpb3VzTW9udGgnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsTmV4dE1vbnRoKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbE5leHRNb250aCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXRlOiBDYWxlbmRhckRhdGVNb2RlbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyRGF0ZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gY2FsZW5kYXJEYXRlLmRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlIHx8ICF0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRDdXJyZW50TW9udGgodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZURheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRBdmFpbGFibGVEYXlzKFxuICAgICAgdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICB0aGlzLmF2YWlsYWJsZURhdGVzLFxuICAgICAgdGhpcy5hdmFpbGFiaWxpdHksXG4gICAgICB0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLFxuICAgICAgdGhpcy5sb3dlckxpbWl0RGF0ZSxcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKTtcblxuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnVwZGF0ZUF2YWlsYWJsZURheXNXaXRoU2VsZWN0ZWREYXRlKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy53ZWVrcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldFdlZWtzKHRoaXMuYXZhaWxhYmxlRGF5cywgdGhpcy53ZWVrU3RhcnQpO1xuICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldE1vbnRoTmFtZXModGhpcy5sb2NhbGUpO1xuICAgIHRoaXMubW9udGhzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0TW9udGhzU2VsZWN0T3B0aW9ucyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uLCB0aGlzLm1heE1vbnRoSW5kZXgsIHRoaXMubW9udGhOYW1lcyk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0U2VsZWN0ZWRNb250aCh0aGlzLm1vbnRocywgdGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMud2Vla2RheXMgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRXZWVrZGF5cyh0aGlzLndlZWtTdGFydCwgdGhpcy5sb2NhbGUpO1xuXG4gICAgdGhpcy5zZXRQcmV2aW91c01vbnRoRGlzYWJsZWQoKTtcbiAgfVxuXG4gIGRhdGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudDtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLnNob3VsZEZvY3VzQ2FsZW5kYXJPbkF2YWlsYWJsZURhdGVzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhTZWxlY3RSZWYgJiYgdGhpcy5tb250aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm1vbnRoU2VsZWN0UmVmLnNlbGVjdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5uZXh0TW9udGhSZWYgJiYgIXRoaXMubmV4dE1vbnRoRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldmlvdXNNb250aFJlZiAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWxlbWVudChldmVudCwgZWxlbWVudFRvRm9jdXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVEYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZVxuICAgICAgICAgIC5nZXREYXlzKHRoaXMud2Vla3MpXG4gICAgICAgICAgLmZpbmQoeCA9PiB4ICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC5kYXRlKSwgdGhpcy5hY3RpdmVEYXRlKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmlsaXR5ICYmIGFjdGl2ZURheT8uaXNBdmFpbGFibGUgJiYgIWFjdGl2ZURheT8uaXNEaXNhYmxlZCB8fCAhdGhpcy5hdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQERlYm91bmNlKDE1MClcbiAgb25QcmV2aW91c01vbnRoS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5tb250aFNlbGVjdFJlZiAmJiB0aGlzLm1vbnRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aFJlZiAmJiAhdGhpcy5uZXh0TW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLm5leHRNb250aFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMTUwKVxuICBvbk5leHRNb250aEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vbnRoU2VsZWN0UmVmICYmIHRoaXMubW9udGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBARGVib3VuY2UoMjAwKVxuICBvbk5leHRNb250aE1vdXNlZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmdldE5leHRNb250aCgpO1xuICB9XG5cbiAgQERlYm91bmNlKDIwMClcbiAgb25QcmV2aW91c01vbnRoTW91c2Vkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJldmlvdXNNb250aCgpO1xuICB9XG5cbiAgb25Nb250aFNlbGVjdEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50O1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dE1vbnRoUmVmICYmICF0aGlzLm5leHRNb250aERpc2FibGVkKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyA9IHRoaXMubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdGhpcy5hY3RpdmVEYXRlQ2VsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub25QcmV2aW91c01vbnRoS2V5ZG93biAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLnByZXZpb3VzTW9udGhSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0aGlzLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGV2ZW50LCBlbGVtZW50VG9Gb2N1cyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRWxlbWVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEYXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZSgpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRNb250aC55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCArIDEsIDApO1xuICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmFjdGl2ZURhdGU/LmRhdGUgPiBsYXN0RGF5LmdldERhdGUoKSA/IGxhc3REYXkuZ2V0RGF0ZSgpIDogdGhpcy5hY3RpdmVEYXRlPy5kYXRlO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoLm1vbnRoICE9PSB0b2RheS5tb250aCB8fCB0aGlzLmN1cnJlbnRNb250aC55ZWFyICE9PSB0b2RheS55ZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmN1cnJlbnRNb250aC5tb250aDtcbiAgICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5jdXJyZW50TW9udGgueWVhcjtcblxuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IFV0Y0RhdGUobmV4dFllYXIsIG5leHRNb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGUubW9udGggIT09IHRoaXMuY3VycmVudE1vbnRoLm1vbnRoKSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgVXRjRGF0ZSh0aGlzLmFjdGl2ZURhdGVWYWx1ZS55ZWFyLCB0aGlzLmN1cnJlbnRNb250aC5tb250aCwgbmV3RGF0ZSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZURvd24oZGF0ZTogc3RyaW5nLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXRlKSk7XG4gICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRGF5Rm9jdXMoZGF5OiBEYXlNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSk7XG4gIH1cblxuICBvbkRheUNsaWNrKGRheTogRGF5TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIWRheS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSkpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgICBjb25zdCBjYWxlbmRhckRhdGU6IENhbGVuZGFyRGF0ZU1vZGVsID0ge1xuICAgICAgICBtb2RlbDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpLFxuICAgICAgICBkYXRlOiBkYXRlXG4gICAgICB9O1xuXG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUoY2FsZW5kYXJEYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuXG4gICAgaWYgKHRoaXMud2Vla3MgJiYgdGhpcy53ZWVrcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHdlZWsgb2YgdGhpcy53ZWVrcykge1xuICAgICAgICBpZiAoIXdlZWspIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGF5IG9mIHdlZWsuZGF5cykge1xuICAgICAgICAgIGlmICghZGF5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXkuaXNTZWxlY3RlZCA9IGRheS5pc0F2YWlsYWJsZVxuICAgICAgICAgICAgJiYgdGhpcy5kYXRlU2VydmljZS5pc1NhbWVEYXRlKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VsbEJ1dHRvbkNsYXNzKGRheTogRGF5TW9kZWwpOiBDbGFzc01vZGVsIHtcbiAgICBpZiAoIWRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2l0ZW0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygnaXRlbScsIFtcbiAgICAgIGRheS5pc0Rpc2FibGVkICYmICdiZWZvcmUnLFxuICAgICAgZGF5LmlzU2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJyxcbiAgICAgICF0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSAmJiAnZW1wdHknLFxuICAgICAgZGF5LmlzQXZhaWxhYmxlICYmICdhdmFpbGFibGUnLFxuICAgICAgJ2xhcmdlJyxcbiAgICAgIGRheS5pc0FjdGl2ZSAmJiAnYWN0aXZlJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBpZiAoIWZpcnN0VmFsaWREYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoZmlyc3RWYWxpZERheS5kYXRlKTtcbiAgICBjb25zdCBtb250aCA9IG5leHRNb250aC5tb250aCArIDE7XG4gICAgbmV4dE1vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV4dE1vbnRoO1xuXG4gICAgdGhpcy5hcHBseVNlbGVjdGVkRGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50TW9udGgpO1xuICAgIHRoaXMuc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk7XG5cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmlsaXR5KSB7XG4gICAgICB0aGlzLm1heE1vbnRoSW5kZXgrKztcbiAgICB9XG4gIH1cblxuICBnZXRQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53ZWVrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0V2VlayA9IHRoaXMud2Vla3NbMF07XG5cbiAgICBpZiAoIWZpcnN0V2Vlaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0VmFsaWREYXkgPSBmaXJzdFdlZWsuZGF5c1xuICAgICAgLmZpbmQoZGF5ID0+IGRheSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShkYXkuZGF0ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c01vbnRoID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKGZpcnN0VmFsaWREYXkuZGF0ZSk7XG4gICAgY29uc3QgbW9udGggPSBwcmV2aW91c01vbnRoLm1vbnRoIC0gMTtcbiAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gcHJldmlvdXNNb250aDtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY3VycmVudE1vbnRoKTtcbiAgICB0aGlzLnNldFByZXZpb3VzTW9udGhEaXNhYmxlZCgpO1xuICB9XG5cbiAgc2V0UHJldmlvdXNNb250aERpc2FibGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCkge1xuICAgICAgY29uc3QgcHJldmlvdXNNb250aCA9IG5ldyBVdGNEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoLCB0aGlzLmN1cnJlbnRNb250aC5kYXRlKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcHJldmlvdXNNb250aC5tb250aCAtIDE7XG4gICAgICBwcmV2aW91c01vbnRoLnNldE1vbnRoKG1vbnRoKTtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24gJiYgdGhpcy5kYXRlU2VydmljZS5pc0luVGhlUGFzdChwcmV2aW91c01vbnRoLCB0cnVlKSkge1xuICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZERhdGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuYXZhaWxhYmxlRGF5cyA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmdldEF2YWlsYWJsZURheXMoXG4gICAgICB0aGlzLmN1cnJlbnRNb250aCxcbiAgICAgIHRoaXMuYXZhaWxhYmxlRGF0ZXMsXG4gICAgICB0aGlzLmF2YWlsYWJpbGl0eSxcbiAgICAgIHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24sXG4gICAgICB0aGlzLmxvd2VyTGltaXREYXRlLFxuICAgICAgdGhpcy5hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aHNcbiAgICAgIC5maW5kKHggPT4gdGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aCh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC52YWx1ZSksIHRoaXMuY3VycmVudE1vbnRoKSk7XG5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS51cGRhdGVBdmFpbGFibGVEYXlzV2l0aFNlbGVjdGVkRGF0ZSh0aGlzLmF2YWlsYWJsZURheXMsIHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLndlZWtzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0V2Vla3ModGhpcy5hdmFpbGFibGVEYXlzLCB0aGlzLndlZWtTdGFydCk7XG4gIH1cbn1cbiIsIjxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKClcIj5cbiAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdhcnJvdycpXCI+PC9zcGFuPlxuICA8ZGl2ICNjYWxlbmRhckNvbnRlbnRcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udGVudCcpXCI+XG4gICAgPGhlYWRlciBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2hlYWRlcicpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAjcHJldmlvdXNNb250aFJlZlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFByZXZpb3VzTW9udGhcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hdicpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzUHJldmlvdXNNb250aERpc2FibGVkID09PSB0cnVlXCJcbiAgICAgICAgKGtleWRvd24pPVwib25QcmV2aW91c01vbnRoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblByZXZpb3VzTW9udGhNb3VzZWRvd24oKVwiPlxuICAgICAgICA8bmFzLWljb24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgW3R5cGVdPVwiJ2Fycm93LWxlZnQtLWxpZ2h0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aHM/Lmxlbmd0aCA+IDA7IGVsc2UgY3VycmVudE1vbnRoVGVtcGxhdGVcIj5cbiAgICAgICAgPG5hcy1zZWxlY3QgI21vbnRoU2VsZWN0XG4gICAgICAgICAgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdtb250aCcpXCJcbiAgICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtzaW1wbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICBbKHNlbGVjdGVkKV09XCJzZWxlY3RlZE1vbnRoXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbk1vbnRoU2VsZWN0S2V5ZG93bigkZXZlbnQpXCI+PC9uYXMtc2VsZWN0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbnRNb250aFRlbXBsYXRlPlxuICAgICAgICB7e2N1cnJlbnRNb250aE1vZGVsfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAjbmV4dE1vbnRoUmVmXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbmF2JylcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJuZXh0TW9udGhEaXNhYmxlZFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uTmV4dE1vbnRoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk5leHRNb250aE1vdXNlZG93bigpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCInYXJyb3ctcmlnaHQtLWxpZ2h0J1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cbiAgICA8dGFibGUgW25hc0NsYXNzXT1cImdldENsYXNzKCd0YWJsZScpXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggKm5nSWY9XCJleGlzdHMoZGlzcGxheVdlZWtOdW1iZXJzKVwiXG4gICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3dlZWstbnVtYmVyJylcIj48L3RoPlxuICAgICAgICAgIDx0aCBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NlbGwnKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiB3ZWVrZGF5c1wiPlxuICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCAnaGVhZGVyJylcIj57e3dlZWtkYXl9fTwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygncm93JywgJ2FuaW1hdGUnKVwiPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cImV4aXN0cyhkaXNwbGF5V2Vla051bWJlcnMpXCJcbiAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnd2Vlay1udW1iZXInKVwiPlxuICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlJywgJ3dlZWstbnVtYmVyJylcIj57e3dlZWsud2Vla051bWJlcn19PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY2VsbCcpXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vlaz8uZGF5c1wiXG4gICAgICAgICAgICAjdGFibGVDZWxscz5cbiAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2R1bW15JylcIlxuICAgICAgICAgICAgICAqbmdJZj1cImRheSA9PT0gbnVsbDsgZWxzZSBkYXlUZW1wbGF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXlUZW1wbGF0ZVxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAjZGF0ZUJ1dHRvblxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImRhdGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldENlbGxCdXR0b25DbGFzcyhkYXkpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKGRheS5kYXRlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EYXlDbGljayhkYXkpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25EYXlGb2N1cyhkYXkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtd3JhcHBlcicpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5LmRhdGUgfCBkYXRlIDogJ2RkJzonVVRDJ1wiPnt7ZGF5LmRhdGUgfCBkYXRlIDogJ2RkJzonVVRDJzpsb2NhbGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2Zvb3RlcicpXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXZhaWxhYmxlRGF0ZXM/Lmxlbmd0aCA9PT0gMCAmJiBub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZm9vdGVyJywgJ2l0ZW0nKVwiPlxuICAgICAgICA8bmFzLWljb24gW2ljb25dPVwiJ2FsZXJ0J1wiPjwvbmFzLWljb24+XG4gICAgICAgIHt7bm9BdmFpbGFibGVGbGlnaHRzTGFiZWx9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYXZhaWxhYmxlRGF0ZXM/Lmxlbmd0aCA+IDAgJiYgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWwgJiYgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnaXRlbScpXCI+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ2F2YWlsYWJsZScpXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnbGFiZWwnKVwiPnt7YXZhaWxhYmxlRmxpZ2h0c0xhYmVsfX08L2Rpdj5cbiAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgJ3VuYXZhaWxhYmxlJylcIj48L3NwYW4+XG4gICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdmb290ZXInLCAnbGFiZWwnKVwiPnt7bm9BdmFpbGFibGVGbGlnaHRzTGFiZWx9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|