@norwegian/core-components 7.17.2 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/assets/documentation/accordion/accordion.md +1 -1
- package/assets/documentation/airport-select/airport-select.md +1 -0
- package/assets/documentation/alert/alert.md +1 -0
- package/assets/documentation/autocomplete/autocomplete.md +1 -1
- package/assets/documentation/backdrop/backdrop.md +1 -0
- package/assets/documentation/box/box.md +1 -1
- package/assets/documentation/button/button.md +1 -10
- package/assets/documentation/checkbox/checkbox.md +1 -7
- package/assets/documentation/container/container.md +1 -1
- package/assets/documentation/continue/continue.md +2 -1
- package/assets/documentation/cover/cover.md +1 -1
- package/assets/documentation/datepicker/datepicker.md +1 -3
- package/assets/documentation/datepicker-combo/datepicker-combo.md +2 -1
- package/assets/documentation/divider/divider.md +1 -1
- package/assets/documentation/dropdown/dropdown.md +1 -3
- package/assets/documentation/filter/filter.md +1 -0
- package/assets/documentation/grid/grid.md +1 -1
- package/assets/documentation/icon/icon.md +1 -1
- package/assets/documentation/icon-list/icon-list.md +1 -1
- package/assets/documentation/input/input.md +1 -1
- package/assets/documentation/journey/journey.md +2 -1
- package/assets/documentation/journey-availability/journey-availability.md +1 -3
- package/assets/documentation/journey-availability-list/journey-availability-list.md +1 -9
- package/assets/documentation/journey-selection/journey-selection.md +1 -1
- package/assets/documentation/journey-stopover/journey-stopover.md +2 -1
- package/assets/documentation/list/list.md +1 -1
- package/assets/documentation/micro-button/micro-button.md +2 -0
- package/assets/documentation/modal/modal.md +1 -0
- package/assets/documentation/number-field/number-field.md +1 -1
- package/assets/documentation/page-footer/page-footer.md +1 -1
- package/assets/documentation/page-header/page-header.md +1 -1
- package/assets/documentation/passenger-select/passenger-select.md +1 -1
- package/assets/documentation/phone-number/phone-number.md +1 -2
- package/assets/documentation/premium-toggle/premium-toggle.md +1 -9
- package/assets/documentation/radio/radio.md +1 -7
- package/assets/documentation/ribbon-banner/ribbon-banner.md +2 -1
- package/assets/documentation/select/select.md +1 -1
- package/assets/documentation/simple-list/simple-list.md +1 -1
- package/assets/documentation/slide-toggle/slide-toggle.md +1 -1
- package/assets/documentation/slider/slider.md +1 -1
- package/assets/documentation/sort/sort.md +1 -1
- package/assets/documentation/spinner/spinner.md +1 -1
- package/assets/documentation/status-box/status-box.md +2 -1
- package/assets/documentation/suggestions/suggestions.md +2 -1
- package/assets/documentation/tab-group/tab-group.md +1 -1
- package/assets/documentation/table/table.md +1 -8
- package/assets/documentation/tag/tag.md +1 -0
- package/assets/documentation/textarea/textarea.md +1 -1
- package/assets/documentation/toggle/toggle.md +1 -5
- package/assets/documentation/tooltip/tooltip.md +1 -0
- package/assets/documentation/trip-summary/trip-summary.md +1 -2
- package/fesm2022/norwegian-core-components.mjs +13636 -13565
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/index.d.ts +9449 -5
- package/package.json +14 -8
- package/styles/1__settings/_colors.scss +9 -9
- package/styles/1__settings/_mixins.scss +67 -40
- package/styles/1__settings/_type.scss +18 -6
- package/styles/1__settings/_vars.scss +7 -4
- package/styles/2__generic/_fonts.scss +7 -5
- package/styles/3__base/_animations.scss +84 -84
- package/styles/3__base/_body.scss +10 -8
- package/styles/3__base/_fixes.scss +1 -1
- package/styles/3__base/_form.scss +5 -3
- package/styles/3__base/_heading.scss +21 -12
- package/styles/3__base/_hr.scss +4 -0
- package/styles/3__base/_input.scss +5 -1
- package/styles/3__base/_link.scss +3 -0
- package/styles/3__base/_table.scss +8 -4
- package/styles/3__base/_type.scss +17 -13
- package/styles/_helpers.scss +4 -4
- package/styles/_index.scss +13 -13
- package/assets/documentation/campaign-header/campaign-header.md +0 -0
- package/assets/documentation/chip/chip.md +0 -1
- package/assets/documentation/info/info.md +0 -1
- package/assets/icons/small/info--light--light.svg +0 -4
- package/assets/images/logo--mobile.svg +0 -50
- package/assets/images/logo-reward.svg +0 -140
- package/assets/images/logo.svg +0 -135
- package/esm2022/lib/components/accordion/accordion.component.mjs +0 -163
- package/esm2022/lib/components/accordion/accordion.module.mjs +0 -20
- package/esm2022/lib/components/accordion/index.mjs +0 -3
- package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +0 -622
- package/esm2022/lib/components/airport-select/airport-select.component.mjs +0 -498
- package/esm2022/lib/components/airport-select/airport-select.module.mjs +0 -42
- package/esm2022/lib/components/airport-select/index.mjs +0 -7
- package/esm2022/lib/components/airport-select/models/airport-select-event.model.mjs +0 -2
- package/esm2022/lib/components/airport-select/models/airport-select-state.model.mjs +0 -2
- package/esm2022/lib/components/airport-select/models/airport.model.mjs +0 -2
- package/esm2022/lib/components/airport-select/models/results-labels.model.mjs +0 -3
- package/esm2022/lib/components/airport-select/services/airport-select-dropdown.service.mjs +0 -35
- package/esm2022/lib/components/airport-select/services/airport-select.service.mjs +0 -38
- package/esm2022/lib/components/alert/alert.component.mjs +0 -169
- package/esm2022/lib/components/alert/alert.module.mjs +0 -22
- package/esm2022/lib/components/alert/index.mjs +0 -4
- package/esm2022/lib/components/alert/models/alert.model.mjs +0 -2
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +0 -318
- package/esm2022/lib/components/autocomplete/autocomplete.module.mjs +0 -43
- package/esm2022/lib/components/autocomplete/index.mjs +0 -4
- package/esm2022/lib/components/autocomplete/models/autocomplete.model.mjs +0 -2
- package/esm2022/lib/components/backdrop/backdrop.component.mjs +0 -58
- package/esm2022/lib/components/backdrop/backdrop.module.mjs +0 -19
- package/esm2022/lib/components/backdrop/index.mjs +0 -3
- package/esm2022/lib/components/box/box.component.mjs +0 -66
- package/esm2022/lib/components/box/box.module.mjs +0 -19
- package/esm2022/lib/components/box/index.mjs +0 -3
- package/esm2022/lib/components/button/button.component.mjs +0 -192
- package/esm2022/lib/components/button/button.module.mjs +0 -21
- package/esm2022/lib/components/button/index.mjs +0 -3
- package/esm2022/lib/components/campaign-header/campaign-header.component.mjs +0 -51
- package/esm2022/lib/components/campaign-header/campaign-header.module.mjs +0 -20
- package/esm2022/lib/components/campaign-header/index.mjs +0 -3
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -163
- package/esm2022/lib/components/checkbox/checkbox.module.mjs +0 -20
- package/esm2022/lib/components/checkbox/index.mjs +0 -3
- package/esm2022/lib/components/chip/chip.component.mjs +0 -48
- package/esm2022/lib/components/chip/chip.module.mjs +0 -19
- package/esm2022/lib/components/chip/index.mjs +0 -3
- package/esm2022/lib/components/container/container.component.mjs +0 -50
- package/esm2022/lib/components/container/container.module.mjs +0 -19
- package/esm2022/lib/components/container/index.mjs +0 -3
- package/esm2022/lib/components/continue/continue.component.mjs +0 -199
- package/esm2022/lib/components/continue/continue.module.mjs +0 -23
- package/esm2022/lib/components/continue/index.mjs +0 -3
- package/esm2022/lib/components/cover/cover.component.mjs +0 -75
- package/esm2022/lib/components/cover/cover.module.mjs +0 -21
- package/esm2022/lib/components/cover/index.mjs +0 -3
- package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +0 -606
- package/esm2022/lib/components/datepicker/calendar/enums/week-start.enum.mjs +0 -6
- package/esm2022/lib/components/datepicker/calendar/models/calendar-date.model.mjs +0 -2
- package/esm2022/lib/components/datepicker/calendar/models/calendar.model.mjs +0 -2
- package/esm2022/lib/components/datepicker/calendar/models/day.model.mjs +0 -2
- package/esm2022/lib/components/datepicker/calendar/models/select-option.model.mjs +0 -2
- package/esm2022/lib/components/datepicker/calendar/models/week.model.mjs +0 -2
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -613
- package/esm2022/lib/components/datepicker/datepicker.module.mjs +0 -55
- package/esm2022/lib/components/datepicker/index.mjs +0 -9
- package/esm2022/lib/components/datepicker/services/calendar.service.mjs +0 -215
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +0 -417
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.module.mjs +0 -31
- package/esm2022/lib/components/datepicker-combo/index.mjs +0 -3
- package/esm2022/lib/components/divider/divider.component.mjs +0 -59
- package/esm2022/lib/components/divider/divider.module.mjs +0 -28
- package/esm2022/lib/components/divider/index.mjs +0 -3
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -170
- package/esm2022/lib/components/dropdown/dropdown.module.mjs +0 -21
- package/esm2022/lib/components/dropdown/index.mjs +0 -3
- package/esm2022/lib/components/filter/enums/trip-type.enum.mjs +0 -8
- package/esm2022/lib/components/filter/filter.component.mjs +0 -1445
- package/esm2022/lib/components/filter/filter.module.mjs +0 -81
- package/esm2022/lib/components/filter/index.mjs +0 -4
- package/esm2022/lib/components/grid/col/col.component.mjs +0 -49
- package/esm2022/lib/components/grid/grid.component.mjs +0 -72
- package/esm2022/lib/components/grid/grid.module.mjs +0 -20
- package/esm2022/lib/components/grid/index.mjs +0 -4
- package/esm2022/lib/components/icon/icon.component.mjs +0 -44
- package/esm2022/lib/components/icon/icon.module.mjs +0 -19
- package/esm2022/lib/components/icon/index.mjs +0 -3
- package/esm2022/lib/components/icon-list/icon-list.component.mjs +0 -50
- package/esm2022/lib/components/icon-list/icon-list.module.mjs +0 -20
- package/esm2022/lib/components/icon-list/index.mjs +0 -4
- package/esm2022/lib/components/icon-list/models/icon-list.model.mjs +0 -2
- package/esm2022/lib/components/index.mjs +0 -68
- package/esm2022/lib/components/info/index.mjs +0 -4
- package/esm2022/lib/components/info/info.component.mjs +0 -116
- package/esm2022/lib/components/info/info.module.mjs +0 -36
- package/esm2022/lib/components/info/models/info.model.mjs +0 -2
- package/esm2022/lib/components/input/index.mjs +0 -3
- package/esm2022/lib/components/input/input.component.mjs +0 -228
- package/esm2022/lib/components/input/input.module.mjs +0 -35
- package/esm2022/lib/components/journey/index.mjs +0 -6
- package/esm2022/lib/components/journey/journey.component.mjs +0 -137
- package/esm2022/lib/components/journey/journey.module.mjs +0 -21
- package/esm2022/lib/components/journey/models/journey-flight.model.mjs +0 -2
- package/esm2022/lib/components/journey/models/journey.model.mjs +0 -2
- package/esm2022/lib/components/journey/models/marketing-carrier.enum.mjs +0 -8
- package/esm2022/lib/components/journey-availability/index.mjs +0 -3
- package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +0 -128
- package/esm2022/lib/components/journey-availability/journey-availability.module.mjs +0 -39
- package/esm2022/lib/components/journey-availability-list/enums/availability-sort-option.enum.mjs +0 -7
- package/esm2022/lib/components/journey-availability-list/index.mjs +0 -4
- package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +0 -182
- package/esm2022/lib/components/journey-availability-list/journey-availability-list.module.mjs +0 -36
- package/esm2022/lib/components/journey-selection/index.mjs +0 -7
- package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +0 -120
- package/esm2022/lib/components/journey-selection/journey-selection.module.mjs +0 -24
- package/esm2022/lib/components/journey-selection/models/journey-selection-collapsed.model.mjs +0 -2
- package/esm2022/lib/components/journey-selection/models/journey-selection-common.model.mjs +0 -2
- package/esm2022/lib/components/journey-selection/models/journey-selection-expanded.model.mjs +0 -2
- package/esm2022/lib/components/journey-selection/models/journey-selection.model.mjs +0 -2
- package/esm2022/lib/components/journey-stopover/index.mjs +0 -4
- package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +0 -150
- package/esm2022/lib/components/journey-stopover/journey-stopover.module.mjs +0 -21
- package/esm2022/lib/components/journey-stopover/models/stopover-time.model.mjs +0 -2
- package/esm2022/lib/components/list/index.mjs +0 -4
- package/esm2022/lib/components/list/list-item/list-item.component.mjs +0 -52
- package/esm2022/lib/components/list/list.component.mjs +0 -78
- package/esm2022/lib/components/list/list.module.mjs +0 -20
- package/esm2022/lib/components/micro-button/index.mjs +0 -3
- package/esm2022/lib/components/micro-button/micro-button.component.mjs +0 -101
- package/esm2022/lib/components/micro-button/micro-button.module.mjs +0 -20
- package/esm2022/lib/components/modal/index.mjs +0 -3
- package/esm2022/lib/components/modal/modal.component.mjs +0 -156
- package/esm2022/lib/components/modal/modal.module.mjs +0 -38
- package/esm2022/lib/components/number-field/index.mjs +0 -4
- package/esm2022/lib/components/number-field/models/number-field.model.mjs +0 -2
- package/esm2022/lib/components/number-field/number-field.component.mjs +0 -162
- package/esm2022/lib/components/number-field/number-field.module.mjs +0 -39
- package/esm2022/lib/components/page-footer/index.mjs +0 -3
- package/esm2022/lib/components/page-footer/page-footer.component.mjs +0 -52
- package/esm2022/lib/components/page-footer/page-footer.module.mjs +0 -21
- package/esm2022/lib/components/page-header/hamburger/hamburger.component.mjs +0 -22
- package/esm2022/lib/components/page-header/index.mjs +0 -6
- package/esm2022/lib/components/page-header/models/wallet.model.mjs +0 -2
- package/esm2022/lib/components/page-header/page-header.component.mjs +0 -171
- package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
- package/esm2022/lib/components/page-header/search/search.component.mjs +0 -49
- package/esm2022/lib/components/page-header/wallet/wallet.component.mjs +0 -57
- package/esm2022/lib/components/passenger-select/enums/passenger-type.enum.mjs +0 -9
- package/esm2022/lib/components/passenger-select/index.mjs +0 -5
- package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +0 -2
- package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +0 -423
- package/esm2022/lib/components/passenger-select/passenger-select.module.mjs +0 -28
- package/esm2022/lib/components/phone-number/index.mjs +0 -3
- package/esm2022/lib/components/phone-number/phone-number.component.mjs +0 -182
- package/esm2022/lib/components/phone-number/phone-number.module.mjs +0 -44
- package/esm2022/lib/components/premium-toggle/index.mjs +0 -3
- package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +0 -68
- package/esm2022/lib/components/premium-toggle/premium-toggle.module.mjs +0 -20
- package/esm2022/lib/components/radio/index.mjs +0 -3
- package/esm2022/lib/components/radio/radio.component.mjs +0 -109
- package/esm2022/lib/components/radio/radio.module.mjs +0 -20
- package/esm2022/lib/components/ribbon-banner/index.mjs +0 -3
- package/esm2022/lib/components/ribbon-banner/ribbon-banner.component.mjs +0 -89
- package/esm2022/lib/components/ribbon-banner/ribbon-banner.module.mjs +0 -40
- package/esm2022/lib/components/select/index.mjs +0 -6
- package/esm2022/lib/components/select/models/select-option.model.mjs +0 -2
- package/esm2022/lib/components/select/optgroup/optgroup.component.mjs +0 -29
- package/esm2022/lib/components/select/option/option.component.mjs +0 -26
- package/esm2022/lib/components/select/select.component.mjs +0 -407
- package/esm2022/lib/components/select/select.module.mjs +0 -23
- package/esm2022/lib/components/select-new/index.mjs +0 -5
- package/esm2022/lib/components/select-new/models/select-option.model.mjs +0 -2
- package/esm2022/lib/components/select-new/optgroup/optgroup-new.component.mjs +0 -23
- package/esm2022/lib/components/select-new/option/option-new.component.mjs +0 -41
- package/esm2022/lib/components/select-new/select-new.component.mjs +0 -271
- package/esm2022/lib/components/select-new/select-new.module.mjs +0 -26
- package/esm2022/lib/components/select-new/services/select-new.service.mjs +0 -40
- package/esm2022/lib/components/simple-list/index.mjs +0 -3
- package/esm2022/lib/components/simple-list/simple-list.component.mjs +0 -48
- package/esm2022/lib/components/simple-list/simple-list.module.mjs +0 -19
- package/esm2022/lib/components/slide-toggle/index.mjs +0 -3
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -121
- package/esm2022/lib/components/slide-toggle/slide-toggle.module.mjs +0 -20
- package/esm2022/lib/components/slider/index.mjs +0 -3
- package/esm2022/lib/components/slider/slider.component.mjs +0 -515
- package/esm2022/lib/components/slider/slider.module.mjs +0 -20
- package/esm2022/lib/components/sort/index.mjs +0 -3
- package/esm2022/lib/components/sort/sort.component.mjs +0 -98
- package/esm2022/lib/components/sort/sort.module.mjs +0 -36
- package/esm2022/lib/components/spinner/index.mjs +0 -3
- package/esm2022/lib/components/spinner/spinner.component.mjs +0 -127
- package/esm2022/lib/components/spinner/spinner.module.mjs +0 -19
- package/esm2022/lib/components/status-box/index.mjs +0 -4
- package/esm2022/lib/components/status-box/models/status-box.model.mjs +0 -2
- package/esm2022/lib/components/status-box/status-box.component.mjs +0 -109
- package/esm2022/lib/components/status-box/status-box.module.mjs +0 -21
- package/esm2022/lib/components/suggestions/index.mjs +0 -3
- package/esm2022/lib/components/suggestions/suggestions.component.mjs +0 -44
- package/esm2022/lib/components/suggestions/suggestions.module.mjs +0 -20
- package/esm2022/lib/components/tab-group/index.mjs +0 -4
- package/esm2022/lib/components/tab-group/tab/tab.component.mjs +0 -140
- package/esm2022/lib/components/tab-group/tab-group.component.mjs +0 -91
- package/esm2022/lib/components/tab-group/tab-group.module.mjs +0 -21
- package/esm2022/lib/components/table/column/column.component.mjs +0 -16
- package/esm2022/lib/components/table/column-group/column-group.component.mjs +0 -30
- package/esm2022/lib/components/table/index.mjs +0 -11
- package/esm2022/lib/components/table/services/table.service.mjs +0 -24
- package/esm2022/lib/components/table/table-body/table-body.component.mjs +0 -23
- package/esm2022/lib/components/table/table-foot/table-foot.component.mjs +0 -23
- package/esm2022/lib/components/table/table-head/table-head.component.mjs +0 -23
- package/esm2022/lib/components/table/table-row/table-data/table-data.component.mjs +0 -15
- package/esm2022/lib/components/table/table-row/table-header/table-header.component.mjs +0 -15
- package/esm2022/lib/components/table/table-row/table-row.component.mjs +0 -23
- package/esm2022/lib/components/table/table.component.mjs +0 -27
- package/esm2022/lib/components/table/table.module.mjs +0 -63
- package/esm2022/lib/components/tag/index.mjs +0 -3
- package/esm2022/lib/components/tag/tag.component.mjs +0 -71
- package/esm2022/lib/components/tag/tag.module.mjs +0 -28
- package/esm2022/lib/components/textarea/index.mjs +0 -3
- package/esm2022/lib/components/textarea/textarea.component.mjs +0 -139
- package/esm2022/lib/components/textarea/textarea.module.mjs +0 -21
- package/esm2022/lib/components/toggle/index.mjs +0 -3
- package/esm2022/lib/components/toggle/models/options.model.mjs +0 -3
- package/esm2022/lib/components/toggle/toggle.component.mjs +0 -102
- package/esm2022/lib/components/toggle/toggle.module.mjs +0 -35
- package/esm2022/lib/components/tooltip/index.mjs +0 -3
- package/esm2022/lib/components/tooltip/tooltip.component.mjs +0 -170
- package/esm2022/lib/components/tooltip/tooltip.module.mjs +0 -30
- package/esm2022/lib/components/trip-summary/index.mjs +0 -3
- package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +0 -167
- package/esm2022/lib/components/trip-summary/trip-summary.module.mjs +0 -36
- package/esm2022/lib/core/base/nas-component.base.mjs +0 -48
- package/esm2022/lib/core/decorators/debounce.decorator.mjs +0 -12
- package/esm2022/lib/core/directives/index.mjs +0 -3
- package/esm2022/lib/core/directives/nas-class/nas-class.directive.mjs +0 -80
- package/esm2022/lib/core/directives/nas-class/nas-class.module.mjs +0 -20
- package/esm2022/lib/core/extensions/html-element.extension.mjs +0 -31
- package/esm2022/lib/core/index.mjs +0 -5
- package/esm2022/lib/core/models/abandoned-basket-item.model.mjs +0 -2
- package/esm2022/lib/core/models/animate.model.mjs +0 -2
- package/esm2022/lib/core/models/class.model.mjs +0 -2
- package/esm2022/lib/core/models/index.mjs +0 -7
- package/esm2022/lib/core/models/link.model.mjs +0 -2
- package/esm2022/lib/core/models/position.model.mjs +0 -2
- package/esm2022/lib/core/models/utc-date.model.mjs +0 -40
- package/esm2022/lib/core/services/abandoned-basket/abandoned-basket.service.mjs +0 -61
- package/esm2022/lib/core/services/animate-helper/animate-helper.service.mjs +0 -49
- package/esm2022/lib/core/services/bem-helper/bem-helper.service.mjs +0 -44
- package/esm2022/lib/core/services/date/date-compare.enum.mjs +0 -7
- package/esm2022/lib/core/services/date/date-helper.service.mjs +0 -199
- package/esm2022/lib/core/services/device/device-helper.service.mjs +0 -46
- package/esm2022/lib/core/services/geolocation/geolocation-state.enum.mjs +0 -8
- package/esm2022/lib/core/services/geolocation/geolocation.service.mjs +0 -66
- package/esm2022/lib/core/services/index.mjs +0 -10
- package/esm2022/lib/core/services/language/language-helper.service.mjs +0 -114
- package/esm2022/lib/core/services/sort/sort.service.mjs +0 -25
- package/esm2022/lib/core/services/viewport/viewport.service.mjs +0 -36
- package/esm2022/lib/index.mjs +0 -5
- package/esm2022/lib/services/get-position.service.mjs +0 -23
- package/esm2022/lib/services/index.mjs +0 -2
- package/esm2022/lib/shared/index.mjs +0 -2
- package/esm2022/lib/shared/models/flight-details.mjs +0 -3
- package/esm2022/lib/shared/models/index.mjs +0 -6
- package/esm2022/lib/shared/models/journey-availability-sort.model.mjs +0 -2
- package/esm2022/lib/shared/models/journey-availability.model.mjs +0 -2
- package/esm2022/lib/shared/models/journey-details.model.mjs +0 -2
- package/esm2022/lib/shared/models/journey-duration.model.mjs +0 -2
- package/esm2022/lib/shared/models/journey-stopover.model.mjs +0 -2
- package/esm2022/lib/shared/models/journey-transit-info.model.mjs +0 -2
- package/esm2022/lib/shared/models/operating-carrier.model.mjs +0 -2
- package/esm2022/lib/shared/models/sort-option.model.mjs +0 -2
- package/esm2022/lib/shared/models/sort.model.mjs +0 -2
- package/esm2022/lib/shared/models/trip-item-details.model.mjs +0 -2
- package/esm2022/lib/shared/models/trip-summary-details.model.mjs +0 -2
- package/esm2022/lib/shared/models/trip-summary.model.mjs +0 -2
- package/esm2022/norwegian-core-components.mjs +0 -5
- package/esm2022/public_api.mjs +0 -2
- package/lib/components/accordion/accordion.component.d.ts +0 -241
- package/lib/components/accordion/accordion.module.d.ts +0 -10
- package/lib/components/accordion/index.d.ts +0 -2
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +0 -100
- package/lib/components/airport-select/airport-select.component.d.ts +0 -330
- package/lib/components/airport-select/airport-select.module.d.ts +0 -13
- package/lib/components/airport-select/index.d.ts +0 -6
- package/lib/components/airport-select/models/airport-select-event.model.d.ts +0 -4
- package/lib/components/airport-select/models/airport-select-state.model.d.ts +0 -5
- package/lib/components/airport-select/models/airport.model.d.ts +0 -11
- package/lib/components/airport-select/models/results-labels.model.d.ts +0 -8
- package/lib/components/airport-select/services/airport-select-dropdown.service.d.ts +0 -10
- package/lib/components/airport-select/services/airport-select.service.d.ts +0 -8
- package/lib/components/alert/alert.component.d.ts +0 -129
- package/lib/components/alert/alert.module.d.ts +0 -12
- package/lib/components/alert/index.d.ts +0 -3
- package/lib/components/alert/models/alert.model.d.ts +0 -10
- package/lib/components/autocomplete/autocomplete.component.d.ts +0 -135
- package/lib/components/autocomplete/autocomplete.module.d.ts +0 -13
- package/lib/components/autocomplete/index.d.ts +0 -3
- package/lib/components/autocomplete/models/autocomplete.model.d.ts +0 -5
- package/lib/components/backdrop/backdrop.component.d.ts +0 -38
- package/lib/components/backdrop/backdrop.module.d.ts +0 -9
- package/lib/components/backdrop/index.d.ts +0 -2
- package/lib/components/box/box.component.d.ts +0 -78
- package/lib/components/box/box.module.d.ts +0 -9
- package/lib/components/box/index.d.ts +0 -2
- package/lib/components/button/button.component.d.ts +0 -294
- package/lib/components/button/button.module.d.ts +0 -11
- package/lib/components/button/index.d.ts +0 -2
- package/lib/components/campaign-header/campaign-header.component.d.ts +0 -58
- package/lib/components/campaign-header/campaign-header.module.d.ts +0 -10
- package/lib/components/campaign-header/index.d.ts +0 -2
- package/lib/components/checkbox/checkbox.component.d.ts +0 -151
- package/lib/components/checkbox/checkbox.module.d.ts +0 -10
- package/lib/components/checkbox/index.d.ts +0 -2
- package/lib/components/chip/chip.component.d.ts +0 -48
- package/lib/components/chip/chip.module.d.ts +0 -9
- package/lib/components/chip/index.d.ts +0 -2
- package/lib/components/container/container.component.d.ts +0 -52
- package/lib/components/container/container.module.d.ts +0 -9
- package/lib/components/container/index.d.ts +0 -2
- package/lib/components/continue/continue.component.d.ts +0 -171
- package/lib/components/continue/continue.module.d.ts +0 -11
- package/lib/components/continue/index.d.ts +0 -2
- package/lib/components/cover/cover.component.d.ts +0 -125
- package/lib/components/cover/cover.module.d.ts +0 -11
- package/lib/components/cover/index.d.ts +0 -2
- package/lib/components/datepicker/calendar/calendar.component.d.ts +0 -169
- package/lib/components/datepicker/calendar/enums/week-start.enum.d.ts +0 -4
- package/lib/components/datepicker/calendar/models/calendar-date.model.d.ts +0 -5
- package/lib/components/datepicker/calendar/models/calendar.model.d.ts +0 -4
- package/lib/components/datepicker/calendar/models/day.model.d.ts +0 -10
- package/lib/components/datepicker/calendar/models/select-option.model.d.ts +0 -4
- package/lib/components/datepicker/calendar/models/week.model.d.ts +0 -5
- package/lib/components/datepicker/datepicker.component.d.ts +0 -289
- package/lib/components/datepicker/datepicker.module.d.ts +0 -16
- package/lib/components/datepicker/index.d.ts +0 -8
- package/lib/components/datepicker/services/calendar.service.d.ts +0 -27
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +0 -329
- package/lib/components/datepicker-combo/datepicker-combo.module.d.ts +0 -10
- package/lib/components/datepicker-combo/index.d.ts +0 -2
- package/lib/components/divider/divider.component.d.ts +0 -68
- package/lib/components/divider/divider.module.d.ts +0 -10
- package/lib/components/divider/index.d.ts +0 -2
- package/lib/components/dropdown/dropdown.component.d.ts +0 -80
- package/lib/components/dropdown/dropdown.module.d.ts +0 -11
- package/lib/components/dropdown/index.d.ts +0 -2
- package/lib/components/filter/enums/trip-type.enum.d.ts +0 -6
- package/lib/components/filter/filter.component.d.ts +0 -942
- package/lib/components/filter/filter.module.d.ts +0 -22
- package/lib/components/filter/index.d.ts +0 -3
- package/lib/components/grid/col/col.component.d.ts +0 -45
- package/lib/components/grid/grid.component.d.ts +0 -92
- package/lib/components/grid/grid.module.d.ts +0 -10
- package/lib/components/grid/index.d.ts +0 -3
- package/lib/components/icon/icon.component.d.ts +0 -53
- package/lib/components/icon/icon.module.d.ts +0 -9
- package/lib/components/icon/index.d.ts +0 -2
- package/lib/components/icon-list/icon-list.component.d.ts +0 -49
- package/lib/components/icon-list/icon-list.module.d.ts +0 -10
- package/lib/components/icon-list/index.d.ts +0 -3
- package/lib/components/icon-list/models/icon-list.model.d.ts +0 -8
- package/lib/components/index.d.ts +0 -67
- package/lib/components/info/index.d.ts +0 -3
- package/lib/components/info/info.component.d.ts +0 -108
- package/lib/components/info/info.module.d.ts +0 -12
- package/lib/components/info/models/info.model.d.ts +0 -9
- package/lib/components/input/index.d.ts +0 -2
- package/lib/components/input/input.component.d.ts +0 -214
- package/lib/components/input/input.module.d.ts +0 -11
- package/lib/components/journey/index.d.ts +0 -5
- package/lib/components/journey/journey.component.d.ts +0 -102
- package/lib/components/journey/journey.module.d.ts +0 -11
- package/lib/components/journey/models/journey-flight.model.d.ts +0 -13
- package/lib/components/journey/models/journey.model.d.ts +0 -5
- package/lib/components/journey/models/marketing-carrier.enum.d.ts +0 -6
- package/lib/components/journey-availability/index.d.ts +0 -2
- package/lib/components/journey-availability/journey-availability.component.d.ts +0 -93
- package/lib/components/journey-availability/journey-availability.module.d.ts +0 -12
- package/lib/components/journey-availability-list/enums/availability-sort-option.enum.d.ts +0 -5
- package/lib/components/journey-availability-list/index.d.ts +0 -3
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +0 -114
- package/lib/components/journey-availability-list/journey-availability-list.module.d.ts +0 -12
- package/lib/components/journey-selection/index.d.ts +0 -6
- package/lib/components/journey-selection/journey-selection.component.d.ts +0 -84
- package/lib/components/journey-selection/journey-selection.module.d.ts +0 -11
- package/lib/components/journey-selection/models/journey-selection-collapsed.model.d.ts +0 -11
- package/lib/components/journey-selection/models/journey-selection-common.model.d.ts +0 -7
- package/lib/components/journey-selection/models/journey-selection-expanded.model.d.ts +0 -5
- package/lib/components/journey-selection/models/journey-selection.model.d.ts +0 -14
- package/lib/components/journey-stopover/index.d.ts +0 -3
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +0 -131
- package/lib/components/journey-stopover/journey-stopover.module.d.ts +0 -11
- package/lib/components/journey-stopover/models/stopover-time.model.d.ts +0 -4
- package/lib/components/list/index.d.ts +0 -3
- package/lib/components/list/list-item/list-item.component.d.ts +0 -35
- package/lib/components/list/list.component.d.ts +0 -76
- package/lib/components/list/list.module.d.ts +0 -10
- package/lib/components/micro-button/index.d.ts +0 -2
- package/lib/components/micro-button/micro-button.component.d.ts +0 -139
- package/lib/components/micro-button/micro-button.module.d.ts +0 -10
- package/lib/components/modal/index.d.ts +0 -2
- package/lib/components/modal/modal.component.d.ts +0 -119
- package/lib/components/modal/modal.module.d.ts +0 -12
- package/lib/components/number-field/index.d.ts +0 -3
- package/lib/components/number-field/models/number-field.model.d.ts +0 -5
- package/lib/components/number-field/number-field.component.d.ts +0 -124
- package/lib/components/number-field/number-field.module.d.ts +0 -12
- package/lib/components/page-footer/index.d.ts +0 -2
- package/lib/components/page-footer/page-footer.component.d.ts +0 -53
- package/lib/components/page-footer/page-footer.module.d.ts +0 -11
- package/lib/components/page-header/hamburger/hamburger.component.d.ts +0 -12
- package/lib/components/page-header/index.d.ts +0 -5
- package/lib/components/page-header/models/wallet.model.d.ts +0 -21
- package/lib/components/page-header/page-header.component.d.ts +0 -127
- package/lib/components/page-header/page-header.module.d.ts +0 -17
- package/lib/components/page-header/search/search.component.d.ts +0 -26
- package/lib/components/page-header/wallet/wallet.component.d.ts +0 -23
- package/lib/components/passenger-select/enums/passenger-type.enum.d.ts +0 -7
- package/lib/components/passenger-select/index.d.ts +0 -4
- package/lib/components/passenger-select/models/passengers.model.d.ts +0 -11
- package/lib/components/passenger-select/passenger-select.component.d.ts +0 -141
- package/lib/components/passenger-select/passenger-select.module.d.ts +0 -10
- package/lib/components/phone-number/index.d.ts +0 -2
- package/lib/components/phone-number/phone-number.component.d.ts +0 -263
- package/lib/components/phone-number/phone-number.module.d.ts +0 -13
- package/lib/components/premium-toggle/index.d.ts +0 -2
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +0 -50
- package/lib/components/premium-toggle/premium-toggle.module.d.ts +0 -10
- package/lib/components/radio/index.d.ts +0 -2
- package/lib/components/radio/radio.component.d.ts +0 -137
- package/lib/components/radio/radio.module.d.ts +0 -10
- package/lib/components/ribbon-banner/index.d.ts +0 -2
- package/lib/components/ribbon-banner/ribbon-banner.component.d.ts +0 -66
- package/lib/components/ribbon-banner/ribbon-banner.module.d.ts +0 -13
- package/lib/components/select/index.d.ts +0 -5
- package/lib/components/select/models/select-option.model.d.ts +0 -4
- package/lib/components/select/optgroup/optgroup.component.d.ts +0 -25
- package/lib/components/select/option/option.component.d.ts +0 -24
- package/lib/components/select/select.component.d.ts +0 -204
- package/lib/components/select/select.module.d.ts +0 -13
- package/lib/components/select-new/index.d.ts +0 -4
- package/lib/components/select-new/models/select-option.model.d.ts +0 -6
- package/lib/components/select-new/optgroup/optgroup-new.component.d.ts +0 -8
- package/lib/components/select-new/option/option-new.component.d.ts +0 -16
- package/lib/components/select-new/select-new.component.d.ts +0 -173
- package/lib/components/select-new/select-new.module.d.ts +0 -14
- package/lib/components/select-new/services/select-new.service.d.ts +0 -10
- package/lib/components/simple-list/index.d.ts +0 -2
- package/lib/components/simple-list/simple-list.component.d.ts +0 -60
- package/lib/components/simple-list/simple-list.module.d.ts +0 -9
- package/lib/components/slide-toggle/index.d.ts +0 -2
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -70
- package/lib/components/slide-toggle/slide-toggle.module.d.ts +0 -10
- package/lib/components/slider/index.d.ts +0 -2
- package/lib/components/slider/slider.component.d.ts +0 -216
- package/lib/components/slider/slider.module.d.ts +0 -10
- package/lib/components/sort/index.d.ts +0 -2
- package/lib/components/sort/sort.component.d.ts +0 -55
- package/lib/components/sort/sort.module.d.ts +0 -12
- package/lib/components/spinner/index.d.ts +0 -2
- package/lib/components/spinner/spinner.component.d.ts +0 -104
- package/lib/components/spinner/spinner.module.d.ts +0 -9
- package/lib/components/status-box/index.d.ts +0 -3
- package/lib/components/status-box/models/status-box.model.d.ts +0 -5
- package/lib/components/status-box/status-box.component.d.ts +0 -92
- package/lib/components/status-box/status-box.module.d.ts +0 -11
- package/lib/components/suggestions/index.d.ts +0 -2
- package/lib/components/suggestions/suggestions.component.d.ts +0 -36
- package/lib/components/suggestions/suggestions.module.d.ts +0 -10
- package/lib/components/tab-group/index.d.ts +0 -3
- package/lib/components/tab-group/tab/tab.component.d.ts +0 -97
- package/lib/components/tab-group/tab-group.component.d.ts +0 -42
- package/lib/components/tab-group/tab-group.module.d.ts +0 -11
- package/lib/components/table/column/column.component.d.ts +0 -6
- package/lib/components/table/column-group/column-group.component.d.ts +0 -15
- package/lib/components/table/index.d.ts +0 -10
- package/lib/components/table/services/table.service.d.ts +0 -8
- package/lib/components/table/table-body/table-body.component.d.ts +0 -15
- package/lib/components/table/table-foot/table-foot.component.d.ts +0 -15
- package/lib/components/table/table-head/table-head.component.d.ts +0 -15
- package/lib/components/table/table-row/table-data/table-data.component.d.ts +0 -5
- package/lib/components/table/table-row/table-header/table-header.component.d.ts +0 -5
- package/lib/components/table/table-row/table-row.component.d.ts +0 -15
- package/lib/components/table/table.component.d.ts +0 -19
- package/lib/components/table/table.module.d.ts +0 -17
- package/lib/components/tag/index.d.ts +0 -2
- package/lib/components/tag/tag.component.d.ts +0 -71
- package/lib/components/tag/tag.module.d.ts +0 -10
- package/lib/components/textarea/index.d.ts +0 -2
- package/lib/components/textarea/textarea.component.d.ts +0 -156
- package/lib/components/textarea/textarea.module.d.ts +0 -11
- package/lib/components/toggle/index.d.ts +0 -2
- package/lib/components/toggle/models/options.model.d.ts +0 -7
- package/lib/components/toggle/toggle.component.d.ts +0 -159
- package/lib/components/toggle/toggle.module.d.ts +0 -11
- package/lib/components/tooltip/index.d.ts +0 -2
- package/lib/components/tooltip/tooltip.component.d.ts +0 -63
- package/lib/components/tooltip/tooltip.module.d.ts +0 -10
- package/lib/components/trip-summary/index.d.ts +0 -2
- package/lib/components/trip-summary/trip-summary.component.d.ts +0 -162
- package/lib/components/trip-summary/trip-summary.module.d.ts +0 -12
- package/lib/core/base/nas-component.base.d.ts +0 -11
- package/lib/core/decorators/debounce.decorator.d.ts +0 -1
- package/lib/core/directives/index.d.ts +0 -2
- package/lib/core/directives/nas-class/nas-class.directive.d.ts +0 -14
- package/lib/core/directives/nas-class/nas-class.module.d.ts +0 -8
- package/lib/core/extensions/html-element.extension.d.ts +0 -6
- package/lib/core/index.d.ts +0 -4
- package/lib/core/models/abandoned-basket-item.model.d.ts +0 -14
- package/lib/core/models/animate.model.d.ts +0 -6
- package/lib/core/models/class.model.d.ts +0 -7
- package/lib/core/models/index.d.ts +0 -6
- package/lib/core/models/link.model.d.ts +0 -5
- package/lib/core/models/position.model.d.ts +0 -4
- package/lib/core/models/utc-date.model.d.ts +0 -13
- package/lib/core/services/abandoned-basket/abandoned-basket.service.d.ts +0 -10
- package/lib/core/services/animate-helper/animate-helper.service.d.ts +0 -9
- package/lib/core/services/bem-helper/bem-helper.service.d.ts +0 -7
- package/lib/core/services/date/date-compare.enum.d.ts +0 -5
- package/lib/core/services/date/date-helper.service.d.ts +0 -22
- package/lib/core/services/device/device-helper.service.d.ts +0 -16
- package/lib/core/services/geolocation/geolocation-state.enum.d.ts +0 -6
- package/lib/core/services/geolocation/geolocation.service.d.ts +0 -9
- package/lib/core/services/index.d.ts +0 -9
- package/lib/core/services/language/language-helper.service.d.ts +0 -12
- package/lib/core/services/sort/sort.service.d.ts +0 -6
- package/lib/core/services/viewport/viewport.service.d.ts +0 -11
- package/lib/index.d.ts +0 -4
- package/lib/services/get-position.service.d.ts +0 -9
- package/lib/services/index.d.ts +0 -1
- package/lib/shared/index.d.ts +0 -1
- package/lib/shared/models/flight-details.d.ts +0 -22
- package/lib/shared/models/index.d.ts +0 -5
- package/lib/shared/models/journey-availability-sort.model.d.ts +0 -8
- package/lib/shared/models/journey-availability.model.d.ts +0 -25
- package/lib/shared/models/journey-details.model.d.ts +0 -8
- package/lib/shared/models/journey-duration.model.d.ts +0 -7
- package/lib/shared/models/journey-stopover.model.d.ts +0 -15
- package/lib/shared/models/journey-transit-info.model.d.ts +0 -5
- package/lib/shared/models/operating-carrier.model.d.ts +0 -4
- package/lib/shared/models/sort-option.model.d.ts +0 -11
- package/lib/shared/models/sort.model.d.ts +0 -10
- package/lib/shared/models/trip-item-details.model.d.ts +0 -12
- package/lib/shared/models/trip-summary-details.model.d.ts +0 -5
- package/lib/shared/models/trip-summary.model.d.ts +0 -4
- package/public_api.d.ts +0 -1
- /package/assets/icons/{icon-chevron-left--light.svg → medium/chevron-left--light.svg} +0 -0
- /package/assets/icons/{icon-chevron-left.svg → medium/chevron-left.svg} +0 -0
- /package/assets/icons/{icon-chevron-right--light.svg → medium/chevron-right--light.svg} +0 -0
- /package/assets/icons/{icon-chevron-right.svg → medium/chevron-right.svg} +0 -0
- /package/assets/images/{cloud-1.svg → cloud.svg} +0 -0
|
@@ -1,622 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Norwegian Air Shuttle. All Rights Reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { DOCUMENT } from '@angular/common';
|
|
6
|
-
import { Component, EventEmitter, Inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
7
|
-
import { NasComponentBase } from '../../../core/base/nas-component.base';
|
|
8
|
-
import { GeolocationState } from '../../../core/services/geolocation/geolocation-state.enum';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../services/airport-select.service";
|
|
11
|
-
import * as i2 from "../services/airport-select-dropdown.service";
|
|
12
|
-
import * as i3 from "../../../core/services/geolocation/geolocation.service";
|
|
13
|
-
import * as i4 from "@angular/common";
|
|
14
|
-
import * as i5 from "@angular/forms";
|
|
15
|
-
import * as i6 from "../../../core/directives/nas-class/nas-class.directive";
|
|
16
|
-
import * as i7 from "../../icon/icon.component";
|
|
17
|
-
import * as i8 from "../../button/button.component";
|
|
18
|
-
let nextId = 0;
|
|
19
|
-
export class AirportSelectDropdownComponent extends NasComponentBase {
|
|
20
|
-
get closestAirports() {
|
|
21
|
-
return this.closestAirportsValue;
|
|
22
|
-
}
|
|
23
|
-
set closestAirports(airports) {
|
|
24
|
-
if (!airports || !airports.length) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
this.closestAirportsValue = airports;
|
|
28
|
-
this.geolocationState = GeolocationState.granted;
|
|
29
|
-
}
|
|
30
|
-
get airport() {
|
|
31
|
-
return this.airportValue;
|
|
32
|
-
}
|
|
33
|
-
set airport(airport) {
|
|
34
|
-
if (!airport) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
this.airportValue = airport;
|
|
38
|
-
this.selectedModel = airport.name;
|
|
39
|
-
this.filteredAirports = this.selectService.filter(this.airports, this.selectedModel);
|
|
40
|
-
}
|
|
41
|
-
get open() {
|
|
42
|
-
return this.openValue;
|
|
43
|
-
}
|
|
44
|
-
set open(value) {
|
|
45
|
-
if (this.openValue === value) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
clearTimeout(this.inputSelectionTimeout);
|
|
49
|
-
this.openValue = value;
|
|
50
|
-
if (value) {
|
|
51
|
-
this.inputSelectionTimeout = setTimeout(() => {
|
|
52
|
-
this.input.nativeElement.select();
|
|
53
|
-
}, 100);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
get airports() {
|
|
57
|
-
return this.airportsValue;
|
|
58
|
-
}
|
|
59
|
-
set airports(airports) {
|
|
60
|
-
this.airportsValue = airports;
|
|
61
|
-
this.filteredAirports = this.selectService.filter(this.airports, this.selectedModel);
|
|
62
|
-
}
|
|
63
|
-
get selectedModel() {
|
|
64
|
-
return this.selectedModelValue;
|
|
65
|
-
}
|
|
66
|
-
set selectedModel(model) {
|
|
67
|
-
this.selectedModelValue = model;
|
|
68
|
-
if (!this.nasFormGroup || !this.nasFormControlName) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const control = this.nasFormGroup.get(this.nasFormControlName);
|
|
72
|
-
if (control && control.value !== model) {
|
|
73
|
-
control.patchValue(model);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
get resultsId() {
|
|
77
|
-
return `nas-airport-select-dropdown-results-${this.componentId}`;
|
|
78
|
-
}
|
|
79
|
-
get labelId() {
|
|
80
|
-
return `nas-airport-select-dropdown-label-${this.componentId}`;
|
|
81
|
-
}
|
|
82
|
-
get inputId() {
|
|
83
|
-
return this.id ? this.id : `nas-airport-select-dropdown-input-${this.componentId}`;
|
|
84
|
-
}
|
|
85
|
-
get geolocationIcon() {
|
|
86
|
-
if (this.focusOnGeolocation && this.geolocationState !== GeolocationState.denied) {
|
|
87
|
-
return 'geolocation--light';
|
|
88
|
-
}
|
|
89
|
-
if (this.geolocationState === GeolocationState.denied) {
|
|
90
|
-
return 'geolocation--disabled';
|
|
91
|
-
}
|
|
92
|
-
return 'geolocation';
|
|
93
|
-
}
|
|
94
|
-
constructor(document, selectService, airportSelectDropdownService, geolocationService) {
|
|
95
|
-
super('nas-airport-select');
|
|
96
|
-
this.document = document;
|
|
97
|
-
this.selectService = selectService;
|
|
98
|
-
this.airportSelectDropdownService = airportSelectDropdownService;
|
|
99
|
-
this.geolocationService = geolocationService;
|
|
100
|
-
this.focusedAirportIndex = -1;
|
|
101
|
-
this.focusedLatestSearchesIndex = -1;
|
|
102
|
-
this.focusedClosestAirportIndex = -1;
|
|
103
|
-
this.filteredAirports = this.airports;
|
|
104
|
-
this.displayAllAirportsLabel = true;
|
|
105
|
-
this.geolocationState = null;
|
|
106
|
-
this.isValid = true;
|
|
107
|
-
this.noAirportsAvailable = false;
|
|
108
|
-
this.selected = new EventEmitter();
|
|
109
|
-
this.openChange = new EventEmitter();
|
|
110
|
-
this.focusOnNext = new EventEmitter();
|
|
111
|
-
this.focusOnPrevious = new EventEmitter();
|
|
112
|
-
this.positionChange = new EventEmitter();
|
|
113
|
-
this.clearedSelection = new EventEmitter();
|
|
114
|
-
this.componentId = nextId++;
|
|
115
|
-
}
|
|
116
|
-
ngOnInit() {
|
|
117
|
-
if (!this.ariaLabelClear) {
|
|
118
|
-
this.warnMissingAccessibiltyInput('ariaLabelClear');
|
|
119
|
-
}
|
|
120
|
-
if (!this.ariaLabelBackdrop) {
|
|
121
|
-
this.warnMissingAccessibiltyInput('ariaLabelBackdrop');
|
|
122
|
-
}
|
|
123
|
-
this.selectedModel = this.airport ? this.airport.name : '';
|
|
124
|
-
if (this.exists(this.displayClosestAirports)) {
|
|
125
|
-
this.geolocationService.getState().subscribe((state) => {
|
|
126
|
-
this.geolocationState = state;
|
|
127
|
-
if (state === GeolocationState.granted) {
|
|
128
|
-
this.updateCurrentPosition();
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
if (!this.selectedModel) {
|
|
133
|
-
this.filteredAirports = this.selectService.filter(this.airports, this.selectedModel);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
this.displayLatestSearches = false;
|
|
137
|
-
this.displayClosestAirports = false;
|
|
138
|
-
this.displayAllAirportsLabel = false;
|
|
139
|
-
if (!this.filteredAirports) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const airport = this.filteredAirports.find(x => x.name === this.selectedModel);
|
|
143
|
-
if (airport) {
|
|
144
|
-
this.focusedAirportCode = airport.code;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
getAllAirportsAirportId(airportCode) {
|
|
148
|
-
return `nas-airport-select-dropdown-airport-${this.componentId}-all-airports-${airportCode}`;
|
|
149
|
-
}
|
|
150
|
-
getClosestAirportsAirportId(airportCode) {
|
|
151
|
-
return `nas-airport-select-dropdown-airport-${this.componentId}-closest-airports-${airportCode}`;
|
|
152
|
-
}
|
|
153
|
-
getLatestSearchesAirportId(airportCode) {
|
|
154
|
-
return `nas-airport-select-dropdown-airport-${this.componentId}-latest-searches-${airportCode}`;
|
|
155
|
-
}
|
|
156
|
-
updateCurrentPosition() {
|
|
157
|
-
if (this.geolocationState === GeolocationState.denied
|
|
158
|
-
|| this.geolocationState === GeolocationState.unknown) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
this.geolocationService.getCurrentPosition().subscribe((x) => {
|
|
162
|
-
this.positionChange.emit(x);
|
|
163
|
-
}, (error) => {
|
|
164
|
-
if (error.PERMISSION_DENIED) {
|
|
165
|
-
this.geolocationState = GeolocationState.denied;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
setOpen() {
|
|
170
|
-
if (this.open) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
this.open = true;
|
|
174
|
-
this.openChange.emit(true);
|
|
175
|
-
}
|
|
176
|
-
onGeolocationHover(hover) {
|
|
177
|
-
if (hover && this.geolocationState !== GeolocationState.denied) {
|
|
178
|
-
this.focusOnGeolocation = true;
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
this.focusOnGeolocation = false;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
blur() {
|
|
185
|
-
if (this.keepSelection) {
|
|
186
|
-
this.selectedModel = this.lastSelectedModel;
|
|
187
|
-
}
|
|
188
|
-
this.open = false;
|
|
189
|
-
this.openChange.emit(false);
|
|
190
|
-
if (this.selectedModel === this.lastSelectedModel) {
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
if (this.selectedModel) {
|
|
194
|
-
if (this.filteredAirports) {
|
|
195
|
-
let airport = this.filteredAirports.find(x => x.name === this.selectedModel);
|
|
196
|
-
if (!airport) {
|
|
197
|
-
airport = this.filteredAirports[0];
|
|
198
|
-
}
|
|
199
|
-
this.updateSelected(airport);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
this.updateSelected({
|
|
204
|
-
airportName: '',
|
|
205
|
-
code: '',
|
|
206
|
-
countryName: '',
|
|
207
|
-
displayName: '',
|
|
208
|
-
name: '',
|
|
209
|
-
normalizedAirportName: ''
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
filter() {
|
|
214
|
-
let isEmpty = false;
|
|
215
|
-
if (!this.nasFormGroup || !this.nasFormControlName) {
|
|
216
|
-
if (!this.selectedModel) {
|
|
217
|
-
this.resetFilter();
|
|
218
|
-
isEmpty = true;
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
this.focusedAirportIndex = 0;
|
|
222
|
-
this.filteredAirports = this.selectService.filter(this.airports, this.selectedModel);
|
|
223
|
-
this.focusedAirportCode = this.filteredAirports[0]?.code;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
const control = this.nasFormGroup.get(this.nasFormControlName);
|
|
228
|
-
if (!control || !control.value) {
|
|
229
|
-
this.resetFilter();
|
|
230
|
-
isEmpty = true;
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
this.focusedAirportIndex = 0;
|
|
234
|
-
this.filteredAirports = this.selectService.filter(this.airports, control.value);
|
|
235
|
-
this.focusedAirportCode = this.filteredAirports[0]?.code;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
this.displayLatestSearches = isEmpty;
|
|
239
|
-
this.displayClosestAirports = isEmpty;
|
|
240
|
-
this.displayAllAirportsLabel = isEmpty;
|
|
241
|
-
}
|
|
242
|
-
clearSelected(event) {
|
|
243
|
-
event.preventDefault();
|
|
244
|
-
if (this.keepSelection) {
|
|
245
|
-
this.lastSelectedModel = this.airport.name;
|
|
246
|
-
}
|
|
247
|
-
this.selectedModel = '';
|
|
248
|
-
this.updateSelected({
|
|
249
|
-
name: '',
|
|
250
|
-
countryName: '',
|
|
251
|
-
code: '',
|
|
252
|
-
displayName: '',
|
|
253
|
-
airportName: '',
|
|
254
|
-
normalizedAirportName: ''
|
|
255
|
-
});
|
|
256
|
-
this.focusedAirportIndex = -1;
|
|
257
|
-
this.focusedLatestSearchesIndex = -1;
|
|
258
|
-
this.focusedClosestAirportIndex = -1;
|
|
259
|
-
this.focusedAirportCode = '';
|
|
260
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
261
|
-
this.focusedClosestAirportCode = '';
|
|
262
|
-
this.filteredAirports = this.airports;
|
|
263
|
-
this.open = true;
|
|
264
|
-
this.displayLatestSearches = true;
|
|
265
|
-
this.displayClosestAirports = true;
|
|
266
|
-
this.displayAllAirportsLabel = true;
|
|
267
|
-
this.openChange.emit(this.open);
|
|
268
|
-
this.clearedSelection.emit();
|
|
269
|
-
}
|
|
270
|
-
focusDown() {
|
|
271
|
-
const hasLatestSearches = this.airportSelectDropdownService
|
|
272
|
-
.hasLatestSearches(this.exists(this.displayLatestSearches), this.latestSearches);
|
|
273
|
-
const hasClosestAirports = this.airportSelectDropdownService
|
|
274
|
-
.hasClosestAirports(this.exists(this.displayClosestAirports), this.closestAirports);
|
|
275
|
-
if (this.geolocationState !== null &&
|
|
276
|
-
this.geolocationState !== GeolocationState.granted &&
|
|
277
|
-
this.geolocationState !== GeolocationState.denied &&
|
|
278
|
-
!this.focusOnGeolocation &&
|
|
279
|
-
this.focusedAirportIndex === -1 &&
|
|
280
|
-
this.focusedLatestSearchesIndex === -1) {
|
|
281
|
-
this.focusOnGeolocation = true;
|
|
282
|
-
}
|
|
283
|
-
else if (hasLatestSearches && this.focusedLatestSearchesIndex < this.latestSearches.length - 1) {
|
|
284
|
-
this.focusDownLatestSearches();
|
|
285
|
-
}
|
|
286
|
-
else if (hasClosestAirports
|
|
287
|
-
&& this.airportSelectDropdownService.isIndexInClosestAirports(this.focusedClosestAirportIndex, this.closestAirports)) {
|
|
288
|
-
this.focusDownClosestAirports();
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
this.focusDownAirports(hasClosestAirports, hasLatestSearches);
|
|
292
|
-
}
|
|
293
|
-
this.autoScroll(66);
|
|
294
|
-
}
|
|
295
|
-
focusUp() {
|
|
296
|
-
const hasLatestSearches = this.airportSelectDropdownService
|
|
297
|
-
.hasLatestSearches(this.exists(this.displayLatestSearches), this.latestSearches);
|
|
298
|
-
const hasClosestAirports = this.airportSelectDropdownService
|
|
299
|
-
.hasClosestAirports(this.exists(this.displayClosestAirports), this.closestAirports);
|
|
300
|
-
const hasGeolocation = this.geolocationState !== null &&
|
|
301
|
-
this.geolocationState !== GeolocationState.granted &&
|
|
302
|
-
this.geolocationState !== GeolocationState.denied &&
|
|
303
|
-
!this.focusOnGeolocation;
|
|
304
|
-
if (this.focusedAirportIndex > 0) {
|
|
305
|
-
this.focusUpAirports(hasClosestAirports, hasLatestSearches);
|
|
306
|
-
}
|
|
307
|
-
else if (hasClosestAirports && this.focusedAirportIndex <= 0 && this.focusedClosestAirportIndex > 0) {
|
|
308
|
-
this.focusUpClosestAirports(hasLatestSearches);
|
|
309
|
-
}
|
|
310
|
-
else if (hasLatestSearches && hasClosestAirports && this.focusedClosestAirportIndex <= 0
|
|
311
|
-
|| hasLatestSearches && !hasClosestAirports && this.focusedAirportIndex <= 0) {
|
|
312
|
-
this.focusUpLatestSearches();
|
|
313
|
-
}
|
|
314
|
-
else if (hasGeolocation && hasLatestSearches && this.focusedLatestSearchesIndex <= 0
|
|
315
|
-
|| hasGeolocation && !hasLatestSearches && this.focusedAirportIndex <= 0) {
|
|
316
|
-
this.focusOnGeolocation = true;
|
|
317
|
-
this.focusedAirportCode = '';
|
|
318
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
319
|
-
this.focusedLatestSearchesIndex = -1;
|
|
320
|
-
this.focusedAirportIndex = -1;
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
this.blur();
|
|
324
|
-
}
|
|
325
|
-
this.autoScroll(66);
|
|
326
|
-
}
|
|
327
|
-
setSelected(airport) {
|
|
328
|
-
this.updateSelected(airport);
|
|
329
|
-
this.open = false;
|
|
330
|
-
this.openChange.emit(false);
|
|
331
|
-
}
|
|
332
|
-
onKeyDown(event) {
|
|
333
|
-
switch (event.key) {
|
|
334
|
-
case 'Escape':
|
|
335
|
-
this.open = false;
|
|
336
|
-
if (this.keepSelection && !this.airport.name) {
|
|
337
|
-
this.blur();
|
|
338
|
-
}
|
|
339
|
-
break;
|
|
340
|
-
case 'Tab':
|
|
341
|
-
case 'Enter':
|
|
342
|
-
if (this.filteredAirports) {
|
|
343
|
-
const airport = this.filteredAirports.find(x => x.code === this.focusedAirportCode) || this.filteredAirports[0];
|
|
344
|
-
this.selectedModel = airport?.name || '';
|
|
345
|
-
}
|
|
346
|
-
if (this.focusOnGeolocation) {
|
|
347
|
-
event.preventDefault();
|
|
348
|
-
this.updateCurrentPosition();
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
this.blur();
|
|
353
|
-
if (!event.shiftKey) {
|
|
354
|
-
event.preventDefault();
|
|
355
|
-
this.focusOnNext.emit(event);
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
this.focusOnPrevious.emit();
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
if (!event.shiftKey) {
|
|
362
|
-
event.preventDefault();
|
|
363
|
-
setTimeout(() => {
|
|
364
|
-
this.focusOnNext.emit(event);
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
this.open = false;
|
|
369
|
-
}
|
|
370
|
-
break;
|
|
371
|
-
case 'ArrowDown':
|
|
372
|
-
case 'Down':
|
|
373
|
-
this.focusDown();
|
|
374
|
-
break;
|
|
375
|
-
case 'ArrowUp':
|
|
376
|
-
case 'Up':
|
|
377
|
-
this.focusUp();
|
|
378
|
-
break;
|
|
379
|
-
case 'Backspace':
|
|
380
|
-
case 'Delete':
|
|
381
|
-
if (this.keepSelection) {
|
|
382
|
-
this.lastSelectedModel = this.airport.name;
|
|
383
|
-
}
|
|
384
|
-
break;
|
|
385
|
-
default:
|
|
386
|
-
break;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
resetFilter() {
|
|
390
|
-
this.focusedAirportIndex = -1;
|
|
391
|
-
this.focusedLatestSearchesIndex = -1;
|
|
392
|
-
this.focusedClosestAirportIndex = -1;
|
|
393
|
-
this.focusedAirportCode = '';
|
|
394
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
395
|
-
this.focusedClosestAirportCode = '';
|
|
396
|
-
this.filteredAirports = this.airports;
|
|
397
|
-
}
|
|
398
|
-
updateSelected(airport) {
|
|
399
|
-
this.selectedModel = airport.name;
|
|
400
|
-
if (this.keepSelection && airport.name.length) {
|
|
401
|
-
this.lastSelectedModel = airport.name;
|
|
402
|
-
}
|
|
403
|
-
this.selected.emit(airport);
|
|
404
|
-
}
|
|
405
|
-
focusDownLatestSearches() {
|
|
406
|
-
this.focusOnGeolocation = false;
|
|
407
|
-
let index = this.focusedLatestSearchesIndex;
|
|
408
|
-
index = index + 1;
|
|
409
|
-
const airport = this.latestSearches[index];
|
|
410
|
-
this.focusedLatestSearchesIndex = index;
|
|
411
|
-
this.focusedLatestSearchesAirportCode = airport.code;
|
|
412
|
-
this.focusedAirportCode = '';
|
|
413
|
-
this.focusedClosestAirportCode = '';
|
|
414
|
-
this.updateSelected(airport);
|
|
415
|
-
}
|
|
416
|
-
focusDownClosestAirports() {
|
|
417
|
-
let index = this.focusedClosestAirportIndex;
|
|
418
|
-
index = index + 1;
|
|
419
|
-
const airport = this.closestAirports[index];
|
|
420
|
-
this.focusedClosestAirportIndex = index;
|
|
421
|
-
this.focusedClosestAirportCode = airport.code || '';
|
|
422
|
-
this.focusedAirportCode = '';
|
|
423
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
424
|
-
this.updateSelected(airport);
|
|
425
|
-
}
|
|
426
|
-
focusDownAirports(hasClosestAirports, hasLatestSearches) {
|
|
427
|
-
let index = this.focusedAirportIndex;
|
|
428
|
-
this.focusOnGeolocation = false;
|
|
429
|
-
index = index + 1;
|
|
430
|
-
if (this.filteredAirports && index > this.filteredAirports.length - 1) {
|
|
431
|
-
this.focusedClosestAirportIndex = -1;
|
|
432
|
-
this.focusedLatestSearchesIndex = -1;
|
|
433
|
-
this.focusedAirportIndex = -1;
|
|
434
|
-
if (this.geolocationState !== GeolocationState.granted) {
|
|
435
|
-
this.focusOnGeolocation = true;
|
|
436
|
-
this.focusedAirportCode = '';
|
|
437
|
-
this.focusedClosestAirportCode = '';
|
|
438
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
else if (hasLatestSearches) {
|
|
442
|
-
this.focusDownLatestSearches();
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
else if (hasClosestAirports) {
|
|
446
|
-
this.focusDownClosestAirports();
|
|
447
|
-
return;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
this.focusedAirportIndex = index;
|
|
451
|
-
if (this.filteredAirports) {
|
|
452
|
-
const airport = this.filteredAirports[index];
|
|
453
|
-
if (airport) {
|
|
454
|
-
this.focusedAirportCode = airport.code;
|
|
455
|
-
this.selectedModel = airport.name;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
459
|
-
this.focusedClosestAirportCode = '';
|
|
460
|
-
}
|
|
461
|
-
focusUpAirports(hasClosestAirports, hasLatestSearches) {
|
|
462
|
-
let index = this.focusedAirportIndex;
|
|
463
|
-
this.focusOnGeolocation = false;
|
|
464
|
-
if (index - 1 < 0) {
|
|
465
|
-
this.focusedAirportIndex = -1;
|
|
466
|
-
this.focusedAirportCode = '';
|
|
467
|
-
this.blur();
|
|
468
|
-
if (!hasClosestAirports) {
|
|
469
|
-
this.focusedClosestAirportCode = '';
|
|
470
|
-
}
|
|
471
|
-
if (!hasLatestSearches) {
|
|
472
|
-
this.focusedClosestAirportCode = '';
|
|
473
|
-
}
|
|
474
|
-
return;
|
|
475
|
-
}
|
|
476
|
-
index = index - 1;
|
|
477
|
-
this.focusedAirportIndex = index;
|
|
478
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
479
|
-
this.focusedClosestAirportCode = '';
|
|
480
|
-
if (this.filteredAirports) {
|
|
481
|
-
const airport = this.filteredAirports[index];
|
|
482
|
-
if (airport) {
|
|
483
|
-
this.focusedAirportCode = airport.code;
|
|
484
|
-
this.selectedModel = airport.name;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
autoScroll(extraOffset) {
|
|
489
|
-
if (!this.results) {
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
const results = this.results.nativeElement;
|
|
493
|
-
const focusedItem = this.document.querySelector('.nas-airport-select__list-item--focus');
|
|
494
|
-
if (focusedItem) {
|
|
495
|
-
results.scrollTo(0, 0);
|
|
496
|
-
results.scrollTo(0, focusedItem.offsetTop + extraOffset - results.clientHeight);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
focusUpLatestSearches() {
|
|
500
|
-
this.focusOnGeolocation = false;
|
|
501
|
-
let latestSearchesIndex = this.focusedLatestSearchesIndex;
|
|
502
|
-
if (latestSearchesIndex < 0) {
|
|
503
|
-
this.focusedLatestSearchesIndex = -1;
|
|
504
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
505
|
-
this.blur();
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
const closestAirportIndex = this.focusedClosestAirportIndex;
|
|
509
|
-
const airportsIndex = this.focusedAirportIndex;
|
|
510
|
-
if (closestAirportIndex < 0 && airportsIndex < 0) {
|
|
511
|
-
latestSearchesIndex = latestSearchesIndex - 1;
|
|
512
|
-
if (latestSearchesIndex < 0) {
|
|
513
|
-
this.focusedLatestSearchesIndex = -1;
|
|
514
|
-
this.focusedLatestSearchesAirportCode = '';
|
|
515
|
-
this.blur();
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
const airport = this.latestSearches[latestSearchesIndex];
|
|
520
|
-
this.focusedLatestSearchesIndex = latestSearchesIndex;
|
|
521
|
-
this.focusedLatestSearchesAirportCode = airport.code;
|
|
522
|
-
this.focusedClosestAirportCode = '';
|
|
523
|
-
this.focusedClosestAirportIndex = -1;
|
|
524
|
-
this.focusedAirportCode = '';
|
|
525
|
-
this.focusedAirportIndex = -1;
|
|
526
|
-
this.updateSelected(airport);
|
|
527
|
-
}
|
|
528
|
-
focusUpClosestAirports(hasLatestSearches) {
|
|
529
|
-
let closestAirportIndex = this.focusedClosestAirportIndex;
|
|
530
|
-
if (!hasLatestSearches && closestAirportIndex <= 0) {
|
|
531
|
-
this.focusedClosestAirportIndex = -1;
|
|
532
|
-
this.blur();
|
|
533
|
-
return;
|
|
534
|
-
}
|
|
535
|
-
if (closestAirportIndex - 1 < 0) {
|
|
536
|
-
this.focusedClosestAirportIndex = -1;
|
|
537
|
-
this.focusedClosestAirportCode = '';
|
|
538
|
-
return;
|
|
539
|
-
}
|
|
540
|
-
if (this.focusedAirportIndex < 0) {
|
|
541
|
-
closestAirportIndex = closestAirportIndex - 1;
|
|
542
|
-
}
|
|
543
|
-
const airport = this.closestAirports[closestAirportIndex];
|
|
544
|
-
this.focusedClosestAirportIndex = closestAirportIndex;
|
|
545
|
-
this.focusedClosestAirportCode = airport.code;
|
|
546
|
-
this.focusedAirportCode = '';
|
|
547
|
-
this.focusedAirportIndex = -1;
|
|
548
|
-
this.updateSelected(airport);
|
|
549
|
-
}
|
|
550
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AirportSelectDropdownComponent, deps: [{ token: DOCUMENT }, { token: i1.AirportSelectService }, { token: i2.AirportSelectDropdownService }, { token: i3.GeolocationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
551
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AirportSelectDropdownComponent, selector: "nas-airport-select-dropdown", inputs: { id: "id", displayLatestSearches: "displayLatestSearches", displayClosestAirports: "displayClosestAirports", latestSearches: "latestSearches", resultsLabels: "resultsLabels", airportSelectLabel: "airportSelectLabel", airportSelectPlaceholder: "airportSelectPlaceholder", airportSelectIconModifier: "airportSelectIconModifier", labelOutside: "labelOutside", keepSelection: "keepSelection", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", enableGeolocation: "enableGeolocation", ariaLabelClear: "ariaLabelClear", ariaLabelBackdrop: "ariaLabelBackdrop", isValid: "isValid", invalidText: "invalidText", noAirportsAvailable: "noAirportsAvailable", closestAirports: "closestAirports", airport: "airport", open: "open", airports: "airports" }, outputs: { selected: "selected", openChange: "openChange", focusOnNext: "focusOnNext", focusOnPrevious: "focusOnPrevious", positionChange: "positionChange", clearedSelection: "clearedSelection" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\" [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled', exists(labelOutside) && 'label-outside'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect type=\"text\" role=\"combobox\" autocomplete=\"off\" aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\" [id]=\"inputId\" [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\" [attr.aria-owns]=\"resultsId\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\" (focus)=\"setOpen()\" (mousedown)=\"setOpen()\" (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\" [(ngModel)]=\"selectedModel\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\" (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"labelId\" [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled', exists(labelOutside) && 'label-outside'])\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\" *ngIf=\"airportSelectLabel\">{{airportSelectLabel}}</span>\n <input #airportSelect type=\"text\" role=\"combobox\" autocomplete=\"off\" aria-autocomplete=\"none\" [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\" [attr.aria-expanded]=\"open ? 'true' : 'false'\" [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\" [formControlName]=\"nasFormControlName\" [placeholder]=\"airportSelectPlaceholder\"\n (mousedown)=\"setOpen()\" (focus)=\"setOpen()\" (input)=\"filter()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\" (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [nasClass]=\"getClass('results-wrapper', exists(labelOutside) && 'label-outside')\" [id]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"labelId\" [nasClass]=\"getClass('results')\">\n <ng-container *ngIf=\"exists(enableGeolocation) && geolocationState !== null && geolocationState !== 0 && isValid\">\n <li role=\"option\">\n <nas-button link secondary [disabled]=\"geolocationState === 2\"\n [cssStyle]=\"{'height': '66px', 'text-decoration': 'underline', 'display': 'flex', 'justify-content': 'space-between'}\"\n [cssClass]=\"getClass('item', ['geolocation', focusOnGeolocation && geolocationState !== 2 && 'focus', geolocationState === 2 && 'disabled'])\"\n [tabindex]=\"-1\" (clickChange)=\"updateCurrentPosition()\" (mouseenter)=\"onGeolocationHover(true)\"\n (mouseleave)=\"onGeolocationHover(false)\">\n <nas-icon [nasClass]=\"getClass('geolocation', 'icon')\" [type]=\"geolocationIcon\"></nas-icon>\n <span *ngIf=\"geolocationState === 1; else geolocationDenied\"\n [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocation}}</span>\n <ng-template #geolocationDenied>\n <span [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocationDenied}}</span>\n </ng-template>\n </nas-button>\n </li>\n </ng-container>\n <li role=\"separator\" [nasClass]=\"getClass('list-section-label')\" *ngIf=\"latestSearches?.length > 0\n && exists(displayLatestSearches)\n && resultsLabels?.latestSearches\n && isValid\">\n <span>{{resultsLabels?.latestSearches}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayLatestSearches) && isValid\">\n <li role=\"option\" *ngFor=\"let airport of latestSearches\" [id]=\"getLatestSearchesAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedLatestSearchesAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedLatestSearchesAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedLatestSearchesAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\" *ngIf=\"exists(displayClosestAirports)\n && geolocationState !== null\n && geolocationState === 0\n && closestAirports?.length > 0\n && resultsLabels?.closestAirports\n && isValid\" [nasClass]=\"getClass('list-section-label')\">\n <span>{{resultsLabels?.closestAirports}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayClosestAirports) && geolocationState === 0 && isValid\">\n <li role=\"option\" *ngFor=\"let airport of closestAirports\" [id]=\"getClosestAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedClosestAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedClosestAirportCode && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', airport.code === focusedClosestAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\" [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"displayAllAirportsLabel && resultsLabels?.allAirports && isValid && !noAirportsAvailable\">\n <span>{{resultsLabels?.allAirports}}</span>\n </li>\n <ng-container *ngIf=\"isValid\">\n <li role=\"option\" *ngFor=\"let airport of filteredAirports\" [id]=\"getAllAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedAirportCode && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', airport.code === focusedAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li *ngIf=\"!isValid\" role=\"listitem\">\n <span [nasClass]=\"getClass('name', 'invalid')\">{{invalidText}}</span>\n </li>\n <li *ngIf=\"resultsLabels?.noAirports && noAirportsAvailable\" role=\"listitem\">\n <span [nasClass]=\"getClass('empty-list')\">{{resultsLabels.noAirports}}</span>\n </li>\n </ul>\n</div>\n<button type=\"button\" tabindex=\"0\" *ngIf=\"open\" [attr.aria-label]=\"ariaLabelBackdrop\" [nasClass]=\"getClass('backdrop')\"\n (click)=\"blur()\"></button>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.ButtonComponent, selector: "nas-button", inputs: ["primary", "secondary", "tertiary", "link", "light", "large", "block", "flex", "compact", "right", "spaceless", "href", "trackingvalue", "canContinueOnDisabled", "disabled", "type", "cssClass", "ariaLabel", "cssStyle", "tabindex", "overrideBaseCssClass", "useRouterLink", "id", "target", "icon", "iconLeft", "iconType", "buttonlink"], outputs: ["clickChange", "focusOnNext"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
552
|
-
}
|
|
553
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AirportSelectDropdownComponent, decorators: [{
|
|
554
|
-
type: Component,
|
|
555
|
-
args: [{ selector: 'nas-airport-select-dropdown', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"labelId\" [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled', exists(labelOutside) && 'label-outside'])\">\n <span [nasClass]=\"getClass('label')\">\n <ng-container *ngIf=\"airportSelectLabel; else emptyLabel\">{{airportSelectLabel}}</ng-container>\n <ng-template #emptyLabel> </ng-template>\n </span>\n <input #airportSelect type=\"text\" role=\"combobox\" autocomplete=\"off\" aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\" [id]=\"inputId\" [attr.aria-controls]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\" [attr.aria-owns]=\"resultsId\" [nasClass]=\"getClass('input')\"\n [placeholder]=\"airportSelectPlaceholder\" (focus)=\"setOpen()\" (mousedown)=\"setOpen()\" (input)=\"filter()\"\n (keydown)=\"onKeyDown($event)\" [(ngModel)]=\"selectedModel\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\" (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"labelId\" [attr.aria-label]=\"airportSelectLabel\"\n [nasClass]=\"getClass('wrapper', [open && 'active', selectedModel && 'filled', exists(labelOutside) && 'label-outside'])\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\" *ngIf=\"airportSelectLabel\">{{airportSelectLabel}}</span>\n <input #airportSelect type=\"text\" role=\"combobox\" autocomplete=\"off\" aria-autocomplete=\"none\" [id]=\"inputId\"\n [attr.aria-controls]=\"resultsId\" [attr.aria-expanded]=\"open ? 'true' : 'false'\" [attr.aria-owns]=\"resultsId\"\n [nasClass]=\"getClass('input')\" [formControlName]=\"nasFormControlName\" [placeholder]=\"airportSelectPlaceholder\"\n (mousedown)=\"setOpen()\" (focus)=\"setOpen()\" (input)=\"filter()\" (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\" role=\"button\" tabindex=\"-1\" *ngIf=\"selectedModel; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\" (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"selectedModel ? 'remove--secondary' : 'remove'\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\" [icon]=\"airportSelectIconModifier\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [nasClass]=\"getClass('results-wrapper', exists(labelOutside) && 'label-outside')\" [id]=\"resultsId\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results role=\"listbox\" *ngIf=\"open\" [attr.aria-labelledby]=\"labelId\" [nasClass]=\"getClass('results')\">\n <ng-container *ngIf=\"exists(enableGeolocation) && geolocationState !== null && geolocationState !== 0 && isValid\">\n <li role=\"option\">\n <nas-button link secondary [disabled]=\"geolocationState === 2\"\n [cssStyle]=\"{'height': '66px', 'text-decoration': 'underline', 'display': 'flex', 'justify-content': 'space-between'}\"\n [cssClass]=\"getClass('item', ['geolocation', focusOnGeolocation && geolocationState !== 2 && 'focus', geolocationState === 2 && 'disabled'])\"\n [tabindex]=\"-1\" (clickChange)=\"updateCurrentPosition()\" (mouseenter)=\"onGeolocationHover(true)\"\n (mouseleave)=\"onGeolocationHover(false)\">\n <nas-icon [nasClass]=\"getClass('geolocation', 'icon')\" [type]=\"geolocationIcon\"></nas-icon>\n <span *ngIf=\"geolocationState === 1; else geolocationDenied\"\n [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocation}}</span>\n <ng-template #geolocationDenied>\n <span [nasClass]=\"getClass('geolocation', 'label')\">{{resultsLabels?.geolocationDenied}}</span>\n </ng-template>\n </nas-button>\n </li>\n </ng-container>\n <li role=\"separator\" [nasClass]=\"getClass('list-section-label')\" *ngIf=\"latestSearches?.length > 0\n && exists(displayLatestSearches)\n && resultsLabels?.latestSearches\n && isValid\">\n <span>{{resultsLabels?.latestSearches}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayLatestSearches) && isValid\">\n <li role=\"option\" *ngFor=\"let airport of latestSearches\" [id]=\"getLatestSearchesAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedLatestSearchesAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedLatestSearchesAirportCode && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', airport.code === focusedLatestSearchesAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\" *ngIf=\"exists(displayClosestAirports)\n && geolocationState !== null\n && geolocationState === 0\n && closestAirports?.length > 0\n && resultsLabels?.closestAirports\n && isValid\" [nasClass]=\"getClass('list-section-label')\">\n <span>{{resultsLabels?.closestAirports}}</span>\n </li>\n <ng-container *ngIf=\"exists(displayClosestAirports) && geolocationState === 0 && isValid\">\n <li role=\"option\" *ngFor=\"let airport of closestAirports\" [id]=\"getClosestAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedClosestAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedClosestAirportCode && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', airport.code === focusedClosestAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li role=\"separator\" [nasClass]=\"getClass('list-section-label')\"\n *ngIf=\"displayAllAirportsLabel && resultsLabels?.allAirports && isValid && !noAirportsAvailable\">\n <span>{{resultsLabels?.allAirports}}</span>\n </li>\n <ng-container *ngIf=\"isValid\">\n <li role=\"option\" *ngFor=\"let airport of filteredAirports\" [id]=\"getAllAirportsAirportId(airport.code)\"\n [attr.aria-selected]=\"airport.code === focusedAirportCode\"\n [nasClass]=\"getClass('list-item', airport.code === focusedAirportCode && 'focus')\">\n <button type=\"button\" [nasClass]=\"getClass('item', airport.code === focusedAirportCode && 'focus')\"\n (click)=\"setSelected(airport)\" tabindex=\"-1\">\n <span [nasClass]=\"getClass('name')\">{{airport.name}}</span>\n <span [nasClass]=\"getClass('code')\"></span>\n <span [nasClass]=\"getClass('country')\">{{airport.countryName}}</span>\n </button>\n </li>\n </ng-container>\n <li *ngIf=\"!isValid\" role=\"listitem\">\n <span [nasClass]=\"getClass('name', 'invalid')\">{{invalidText}}</span>\n </li>\n <li *ngIf=\"resultsLabels?.noAirports && noAirportsAvailable\" role=\"listitem\">\n <span [nasClass]=\"getClass('empty-list')\">{{resultsLabels.noAirports}}</span>\n </li>\n </ul>\n</div>\n<button type=\"button\" tabindex=\"0\" *ngIf=\"open\" [attr.aria-label]=\"ariaLabelBackdrop\" [nasClass]=\"getClass('backdrop')\"\n (click)=\"blur()\"></button>" }]
|
|
556
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
557
|
-
type: Inject,
|
|
558
|
-
args: [DOCUMENT]
|
|
559
|
-
}] }, { type: i1.AirportSelectService }, { type: i2.AirportSelectDropdownService }, { type: i3.GeolocationService }]; }, propDecorators: { input: [{
|
|
560
|
-
type: ViewChild,
|
|
561
|
-
args: ['airportSelect']
|
|
562
|
-
}], results: [{
|
|
563
|
-
type: ViewChild,
|
|
564
|
-
args: ['results']
|
|
565
|
-
}], id: [{
|
|
566
|
-
type: Input
|
|
567
|
-
}], displayLatestSearches: [{
|
|
568
|
-
type: Input
|
|
569
|
-
}], displayClosestAirports: [{
|
|
570
|
-
type: Input
|
|
571
|
-
}], latestSearches: [{
|
|
572
|
-
type: Input
|
|
573
|
-
}], resultsLabels: [{
|
|
574
|
-
type: Input
|
|
575
|
-
}], airportSelectLabel: [{
|
|
576
|
-
type: Input
|
|
577
|
-
}], airportSelectPlaceholder: [{
|
|
578
|
-
type: Input
|
|
579
|
-
}], airportSelectIconModifier: [{
|
|
580
|
-
type: Input
|
|
581
|
-
}], labelOutside: [{
|
|
582
|
-
type: Input
|
|
583
|
-
}], keepSelection: [{
|
|
584
|
-
type: Input
|
|
585
|
-
}], nasFormControlName: [{
|
|
586
|
-
type: Input
|
|
587
|
-
}], nasFormGroup: [{
|
|
588
|
-
type: Input
|
|
589
|
-
}], enableGeolocation: [{
|
|
590
|
-
type: Input
|
|
591
|
-
}], ariaLabelClear: [{
|
|
592
|
-
type: Input
|
|
593
|
-
}], ariaLabelBackdrop: [{
|
|
594
|
-
type: Input
|
|
595
|
-
}], isValid: [{
|
|
596
|
-
type: Input
|
|
597
|
-
}], invalidText: [{
|
|
598
|
-
type: Input
|
|
599
|
-
}], noAirportsAvailable: [{
|
|
600
|
-
type: Input
|
|
601
|
-
}], closestAirports: [{
|
|
602
|
-
type: Input
|
|
603
|
-
}], airport: [{
|
|
604
|
-
type: Input
|
|
605
|
-
}], open: [{
|
|
606
|
-
type: Input
|
|
607
|
-
}], airports: [{
|
|
608
|
-
type: Input
|
|
609
|
-
}], selected: [{
|
|
610
|
-
type: Output
|
|
611
|
-
}], openChange: [{
|
|
612
|
-
type: Output
|
|
613
|
-
}], focusOnNext: [{
|
|
614
|
-
type: Output
|
|
615
|
-
}], focusOnPrevious: [{
|
|
616
|
-
type: Output
|
|
617
|
-
}], positionChange: [{
|
|
618
|
-
type: Output
|
|
619
|
-
}], clearedSelection: [{
|
|
620
|
-
type: Output
|
|
621
|
-
}] } });
|
|
622
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC1kcm9wZG93bi9haXJwb3J0LXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2FpcnBvcnQtc2VsZWN0L2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duL2FpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBTXpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7Ozs7O0FBRTdGLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQVFmLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxnQkFBZ0I7SUFzQ2xFLElBQ0ksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxlQUFlLENBQUMsUUFBNkI7UUFDL0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFH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O2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFlRixJQUFJO3NCQURQLEtBQUs7Z0JBb0JGLFFBQVE7c0JBRFgsS0FBSztnQkFTSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmFzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYmFzZS9uYXMtY29tcG9uZW50LmJhc2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9haXJwb3J0Lm1vZGVsJztcbmltcG9ydCB7IFJlc3VsdHNMYWJlbHNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yZXN1bHRzLWxhYmVscy5tb2RlbCc7XG5pbXBvcnQgeyBBaXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uc2VydmljZSc7XG5pbXBvcnQgeyBBaXJwb3J0U2VsZWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FpcnBvcnQtc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24tc3RhdGUuZW51bSc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWlycG9ydC1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9haXJwb3J0LXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFpcnBvcnRTZWxlY3REcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGFpcnBvcnRWYWx1ZTogQWlycG9ydE1vZGVsO1xuICBhaXJwb3J0c1ZhbHVlOiBBcnJheTxBaXJwb3J0TW9kZWw+O1xuICBmb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG4gIGZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gIGZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gIGZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGU6IHN0cmluZztcbiAgZm9jdXNlZEFpcnBvcnRDb2RlOiBzdHJpbmc7XG4gIGZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlOiBzdHJpbmc7XG4gIGZpbHRlcmVkQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4gPSB0aGlzLmFpcnBvcnRzO1xuICBkaXNwbGF5QWxsQWlycG9ydHNMYWJlbCA9IHRydWU7XG4gIG9wZW5WYWx1ZTogYm9vbGVhbjtcbiAgZm9jdXNPbkdlb2xvY2F0aW9uOiBib29sZWFuO1xuICBnZW9sb2NhdGlvblN0YXRlOiBHZW9sb2NhdGlvblN0YXRlID0gbnVsbDtcblxuICBAVmlld0NoaWxkKCdhaXJwb3J0U2VsZWN0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHMnKSByZXN1bHRzOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc3BsYXlMYXRlc3RTZWFyY2hlcz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc3BsYXlDbG9zZXN0QWlycG9ydHM/OiBib29sZWFuO1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlczogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgQElucHV0KCkgcmVzdWx0c0xhYmVsczogUmVzdWx0c0xhYmVsc01vZGVsO1xuICBASW5wdXQoKSBhaXJwb3J0U2VsZWN0TGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgYWlycG9ydFNlbGVjdFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXI6IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWxPdXRzaWRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGVuYWJsZUdlb2xvY2F0aW9uPzogYm9vbGVhbjtcbiAgQElucHV0KCkgYXJpYUxhYmVsQ2xlYXI6IHN0cmluZztcbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcbiAgQElucHV0KCkgaXNWYWxpZCA9IHRydWU7XG4gIEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vQWlycG9ydHNBdmFpbGFibGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgY2xvc2VzdEFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBjbG9zZXN0QWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICBpZiAoIWFpcnBvcnRzIHx8ICFhaXJwb3J0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3Nlc3RBaXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG4gICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlID0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGFpcnBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydFZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCkge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWlycG9ydFZhbHVlID0gYWlycG9ydDtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCB0aGlzLnNlbGVjdGVkTW9kZWwpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlblZhbHVlO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMub3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0U2VsZWN0aW9uVGltZW91dCk7XG4gICAgdGhpcy5vcGVuVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgYWlycG9ydHMoYWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD4pIHtcbiAgICB0aGlzLmFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcbiAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gIH1cblxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGZvY3VzT25QcmV2aW91cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuICBAT3V0cHV0KCkgY2xlYXJlZFNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgc2VsZWN0ZWRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vZGVsVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9kZWwobW9kZWw6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbFZhbHVlID0gbW9kZWw7XG5cbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpO1xuXG4gICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gbW9kZWwpIHtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc3VsdHNJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLXJlc3VsdHMtJHt0aGlzLmNvbXBvbmVudElkfWA7XG4gIH1cblxuICBnZXQgbGFiZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLWxhYmVsLSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCA/IHRoaXMuaWQgOiBgbmFzLWFpcnBvcnQtc2VsZWN0LWRyb3Bkb3duLWlucHV0LSR7dGhpcy5jb21wb25lbnRJZH1gO1xuICB9XG5cbiAgZ2V0IGdlb2xvY2F0aW9uSWNvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiAmJiB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkKSB7XG4gICAgICByZXR1cm4gJ2dlb2xvY2F0aW9uLS1saWdodCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmdlb2xvY2F0aW9uU3RhdGUgPT09IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkKSB7XG4gICAgICByZXR1cm4gJ2dlb2xvY2F0aW9uLS1kaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdnZW9sb2NhdGlvbic7XG4gIH1cblxuICBwcml2YXRlIGxhc3RTZWxlY3RlZE1vZGVsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2VsZWN0ZWRNb2RlbFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5wdXRTZWxlY3Rpb25UaW1lb3V0OiBhbnk7XG4gIHByaXZhdGUgY2xvc2VzdEFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgY29tcG9uZW50SWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBzZWxlY3RTZXJ2aWNlOiBBaXJwb3J0U2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2U6IEFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZW9sb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZSkge1xuICAgIHN1cGVyKCduYXMtYWlycG9ydC1zZWxlY3QnKTtcbiAgICB0aGlzLmNvbXBvbmVudElkID0gbmV4dElkKys7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXJpYUxhYmVsQ2xlYXIpIHtcbiAgICAgIHRoaXMud2Fybk1pc3NpbmdBY2Nlc3NpYmlsdHlJbnB1dCgnYXJpYUxhYmVsQ2xlYXInKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbEJhY2tkcm9wKSB7XG4gICAgICB0aGlzLndhcm5NaXNzaW5nQWNjZXNzaWJpbHR5SW5wdXQoJ2FyaWFMYWJlbEJhY2tkcm9wJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gdGhpcy5haXJwb3J0ID8gdGhpcy5haXJwb3J0Lm5hbWUgOiAnJztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlDbG9zZXN0QWlycG9ydHMpKSB7XG4gICAgICB0aGlzLmdlb2xvY2F0aW9uU2VydmljZS5nZXRTdGF0ZSgpLnN1YnNjcmliZSgoc3RhdGU6IEdlb2xvY2F0aW9uU3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBHZW9sb2NhdGlvblN0YXRlLmdyYW50ZWQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2RlbCkge1xuICAgICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5zZWxlY3RTZXJ2aWNlLmZpbHRlcih0aGlzLmFpcnBvcnRzLCB0aGlzLnNlbGVjdGVkTW9kZWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzID0gZmFsc2U7XG4gICAgdGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzID0gZmFsc2U7XG4gICAgdGhpcy5kaXNwbGF5QWxsQWlycG9ydHNMYWJlbCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzLmZpbmQoeCA9PiB4Lm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG5cbiAgICBpZiAoYWlycG9ydCkge1xuICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWxsQWlycG9ydHNBaXJwb3J0SWQoYWlycG9ydENvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24tYWlycG9ydC0ke3RoaXMuY29tcG9uZW50SWR9LWFsbC1haXJwb3J0cy0ke2FpcnBvcnRDb2RlfWA7XG4gIH1cblxuICBnZXRDbG9zZXN0QWlycG9ydHNBaXJwb3J0SWQoYWlycG9ydENvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24tYWlycG9ydC0ke3RoaXMuY29tcG9uZW50SWR9LWNsb3Nlc3QtYWlycG9ydHMtJHthaXJwb3J0Q29kZX1gO1xuICB9XG5cbiAgZ2V0TGF0ZXN0U2VhcmNoZXNBaXJwb3J0SWQoYWlycG9ydENvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBuYXMtYWlycG9ydC1zZWxlY3QtZHJvcGRvd24tYWlycG9ydC0ke3RoaXMuY29tcG9uZW50SWR9LWxhdGVzdC1zZWFyY2hlcy0ke2FpcnBvcnRDb2RlfWA7XG4gIH1cblxuICB1cGRhdGVDdXJyZW50UG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSA9PT0gR2VvbG9jYXRpb25TdGF0ZS5kZW5pZWRcbiAgICAgIHx8IHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSA9PT0gR2VvbG9jYXRpb25TdGF0ZS51bmtub3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nZW9sb2NhdGlvblNlcnZpY2UuZ2V0Q3VycmVudFBvc2l0aW9uKCkuc3Vic2NyaWJlKCh4OiBHZW9sb2NhdGlvblBvc2l0aW9uKSA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQoeCk7XG4gICAgfSwgKGVycm9yOiBHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IpID0+IHtcbiAgICAgIGlmIChlcnJvci5QRVJNSVNTSU9OX0RFTklFRCkge1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgPSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBvbkdlb2xvY2F0aW9uSG92ZXIoaG92ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaG92ZXIgJiYgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCkge1xuICAgICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMua2VlcFNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gdGhpcy5sYXN0U2VsZWN0ZWRNb2RlbDtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE1vZGVsID09PSB0aGlzLmxhc3RTZWxlY3RlZE1vZGVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2RlbCkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRBaXJwb3J0cykge1xuICAgICAgICBsZXQgYWlycG9ydCA9IHRoaXMuZmlsdGVyZWRBaXJwb3J0cy5maW5kKHggPT4geC5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kZWwpO1xuICAgICAgICBpZiAoIWFpcnBvcnQpIHtcbiAgICAgICAgICBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoe1xuICAgICAgICBhaXJwb3J0TmFtZTogJycsXG4gICAgICAgIGNvZGU6ICcnLFxuICAgICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcigpOiB2b2lkIHtcbiAgICBsZXQgaXNFbXB0eSA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCB8fCAhdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZGVsKSB7XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgaXNFbXB0eSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIHRoaXMuc2VsZWN0ZWRNb2RlbCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzWzBdPy5jb2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKTtcblxuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgaXNFbXB0eSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQWlycG9ydHMgPSB0aGlzLnNlbGVjdFNlcnZpY2UuZmlsdGVyKHRoaXMuYWlycG9ydHMsIGNvbnRyb2wudmFsdWUpO1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IHRoaXMuZmlsdGVyZWRBaXJwb3J0c1swXT8uY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlMYXRlc3RTZWFyY2hlcyA9IGlzRW1wdHk7XG4gICAgdGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzID0gaXNFbXB0eTtcbiAgICB0aGlzLmRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsID0gaXNFbXB0eTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLmtlZXBTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSB0aGlzLmFpcnBvcnQubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSAnJztcblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoe1xuICAgICAgbmFtZTogJycsXG4gICAgICBjb3VudHJ5TmFtZTogJycsXG4gICAgICBjb2RlOiAnJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnJyxcbiAgICAgIGFpcnBvcnROYW1lOiAnJyxcbiAgICAgIG5vcm1hbGl6ZWRBaXJwb3J0TmFtZTogJydcbiAgICB9KTtcblxuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5maWx0ZXJlZEFpcnBvcnRzID0gdGhpcy5haXJwb3J0cztcblxuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheUNsb3Nlc3RBaXJwb3J0cyA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5QWxsQWlycG9ydHNMYWJlbCA9IHRydWU7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQodGhpcy5vcGVuKTtcbiAgICB0aGlzLmNsZWFyZWRTZWxlY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgZm9jdXNEb3duKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0xhdGVzdFNlYXJjaGVzID0gdGhpcy5haXJwb3J0U2VsZWN0RHJvcGRvd25TZXJ2aWNlXG4gICAgICAuaGFzTGF0ZXN0U2VhcmNoZXModGhpcy5leGlzdHModGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMpLCB0aGlzLmxhdGVzdFNlYXJjaGVzKTtcblxuICAgIGNvbnN0IGhhc0Nsb3Nlc3RBaXJwb3J0cyA9IHRoaXMuYWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZVxuICAgICAgLmhhc0Nsb3Nlc3RBaXJwb3J0cyh0aGlzLmV4aXN0cyh0aGlzLmRpc3BsYXlDbG9zZXN0QWlycG9ydHMpLCB0aGlzLmNsb3Nlc3RBaXJwb3J0cyk7XG5cbiAgICBpZiAodGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBudWxsICYmXG4gICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZ3JhbnRlZCAmJlxuICAgICAgdGhpcy5nZW9sb2NhdGlvblN0YXRlICE9PSBHZW9sb2NhdGlvblN0YXRlLmRlbmllZCAmJlxuICAgICAgIXRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uICYmXG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPT09IC0xICYmXG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID09PSAtMSkge1xuICAgICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaGFzTGF0ZXN0U2VhcmNoZXMgJiYgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA8IHRoaXMubGF0ZXN0U2VhcmNoZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5mb2N1c0Rvd25MYXRlc3RTZWFyY2hlcygpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzXG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2UuaXNJbmRleEluQ2xvc2VzdEFpcnBvcnRzKHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXgsIHRoaXMuY2xvc2VzdEFpcnBvcnRzKSkge1xuICAgICAgdGhpcy5mb2N1c0Rvd25DbG9zZXN0QWlycG9ydHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c0Rvd25BaXJwb3J0cyhoYXNDbG9zZXN0QWlycG9ydHMsIGhhc0xhdGVzdFNlYXJjaGVzKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9TY3JvbGwoNjYpO1xuICB9XG5cbiAgZm9jdXNVcCgpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNMYXRlc3RTZWFyY2hlcyA9IHRoaXMuYWlycG9ydFNlbGVjdERyb3Bkb3duU2VydmljZVxuICAgICAgLmhhc0xhdGVzdFNlYXJjaGVzKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSwgdGhpcy5sYXRlc3RTZWFyY2hlcyk7XG5cbiAgICBjb25zdCBoYXNDbG9zZXN0QWlycG9ydHMgPSB0aGlzLmFpcnBvcnRTZWxlY3REcm9wZG93blNlcnZpY2VcbiAgICAgIC5oYXNDbG9zZXN0QWlycG9ydHModGhpcy5leGlzdHModGhpcy5kaXNwbGF5Q2xvc2VzdEFpcnBvcnRzKSwgdGhpcy5jbG9zZXN0QWlycG9ydHMpO1xuXG4gICAgY29uc3QgaGFzR2VvbG9jYXRpb24gPSB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkICYmXG4gICAgICB0aGlzLmdlb2xvY2F0aW9uU3RhdGUgIT09IEdlb2xvY2F0aW9uU3RhdGUuZGVuaWVkICYmXG4gICAgICAhdGhpcy5mb2N1c09uR2VvbG9jYXRpb247XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID4gMCkge1xuICAgICAgdGhpcy5mb2N1c1VwQWlycG9ydHMoaGFzQ2xvc2VzdEFpcnBvcnRzLCBoYXNMYXRlc3RTZWFyY2hlcyk7XG4gICAgfSBlbHNlIGlmIChoYXNDbG9zZXN0QWlycG9ydHMgJiYgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4IDw9IDAgJiYgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuZm9jdXNVcENsb3Nlc3RBaXJwb3J0cyhoYXNMYXRlc3RTZWFyY2hlcyk7XG4gICAgfSBlbHNlIGlmIChoYXNMYXRlc3RTZWFyY2hlcyAmJiBoYXNDbG9zZXN0QWlycG9ydHMgJiYgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA8PSAwXG4gICAgICB8fCBoYXNMYXRlc3RTZWFyY2hlcyAmJiAhaGFzQ2xvc2VzdEFpcnBvcnRzICYmIHRoaXMuZm9jdXNlZEFpcnBvcnRJbmRleCA8PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzVXBMYXRlc3RTZWFyY2hlcygpO1xuICAgIH0gZWxzZSBpZiAoaGFzR2VvbG9jYXRpb24gJiYgaGFzTGF0ZXN0U2VhcmNoZXMgJiYgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNJbmRleCA8PSAwXG4gICAgICB8fCBoYXNHZW9sb2NhdGlvbiAmJiAhaGFzTGF0ZXN0U2VhcmNoZXMgJiYgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4IDw9IDApIHtcbiAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvU2Nyb2xsKDY2KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uICYmICF0aGlzLmFpcnBvcnQubmFtZSkge1xuICAgICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRBaXJwb3J0cykge1xuICAgICAgICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHMuZmluZCh4ID0+IHguY29kZSA9PT0gdGhpcy5mb2N1c2VkQWlycG9ydENvZGUpIHx8IHRoaXMuZmlsdGVyZWRBaXJwb3J0c1swXTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Py5uYW1lIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uUHJldmlvdXMuZW1pdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHQuZW1pdChldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRNb2RlbCA9IHRoaXMuYWlycG9ydC5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMuZmlsdGVyZWRBaXJwb3J0cyA9IHRoaXMuYWlycG9ydHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkKGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICBpZiAodGhpcy5rZWVwU2VsZWN0aW9uICYmIGFpcnBvcnQubmFtZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkTW9kZWwgPSBhaXJwb3J0Lm5hbWU7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duTGF0ZXN0U2VhcmNoZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmxhdGVzdFNlYXJjaGVzW2luZGV4XTtcblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk6IHZvaWQge1xuICAgIGxldCBpbmRleCA9IHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0SW5kZXg7XG5cbiAgICBpbmRleCA9IGluZGV4ICsgMTtcblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmNsb3Nlc3RBaXJwb3J0c1tpbmRleF07XG5cbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gYWlycG9ydC5jb2RlIHx8ICcnO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSA9ICcnO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzRG93bkFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRBaXJwb3J0cyAmJiBpbmRleCA+IHRoaXMuZmlsdGVyZWRBaXJwb3J0cy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcblxuICAgICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25TdGF0ZSAhPT0gR2VvbG9jYXRpb25TdGF0ZS5ncmFudGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNPbkdlb2xvY2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChoYXNMYXRlc3RTZWFyY2hlcykge1xuICAgICAgICB0aGlzLmZvY3VzRG93bkxhdGVzdFNlYXJjaGVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2xvc2VzdEFpcnBvcnRzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNEb3duQ2xvc2VzdEFpcnBvcnRzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkQWlycG9ydHMpIHtcbiAgICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmZpbHRlcmVkQWlycG9ydHNbaW5kZXhdO1xuXG4gICAgICBpZiAoYWlycG9ydCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gYWlycG9ydC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNVcEFpcnBvcnRzKGhhc0Nsb3Nlc3RBaXJwb3J0czogYm9vbGVhbiwgaGFzTGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXg7XG4gICAgdGhpcy5mb2N1c09uR2VvbG9jYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChpbmRleCAtIDEgPCAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcbiAgICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmJsdXIoKTtcblxuICAgICAgaWYgKCFoYXNDbG9zZXN0QWlycG9ydHMpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgICB9XG4gICAgICBpZiAoIWhhc0xhdGVzdFNlYXJjaGVzKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW5kZXggPSBpbmRleCAtIDE7XG5cbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZEFpcnBvcnRzKSB7XG4gICAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5maWx0ZXJlZEFpcnBvcnRzW2luZGV4XTtcblxuICAgICAgaWYgKGFpcnBvcnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IGFpcnBvcnQubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9TY3JvbGwoZXh0cmFPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXN1bHRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hcy1haXJwb3J0LXNlbGVjdF9fbGlzdC1pdGVtLS1mb2N1cycpO1xuXG4gICAgaWYgKGZvY3VzZWRJdGVtKSB7XG4gICAgICByZXN1bHRzLnNjcm9sbFRvKDAsIDApO1xuICAgICAgcmVzdWx0cy5zY3JvbGxUbygwLCBmb2N1c2VkSXRlbS5vZmZzZXRUb3AgKyBleHRyYU9mZnNldCAtIHJlc3VsdHMuY2xpZW50SGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzVXBMYXRlc3RTZWFyY2hlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzT25HZW9sb2NhdGlvbiA9IGZhbHNlO1xuXG4gICAgbGV0IGxhdGVzdFNlYXJjaGVzSW5kZXggPSB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4O1xuXG4gICAgaWYgKGxhdGVzdFNlYXJjaGVzSW5kZXggPCAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0FpcnBvcnRDb2RlID0gJyc7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbG9zZXN0QWlycG9ydEluZGV4ID0gdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleDtcbiAgICBjb25zdCBhaXJwb3J0c0luZGV4ID0gdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4O1xuXG4gICAgaWYgKGNsb3Nlc3RBaXJwb3J0SW5kZXggPCAwICYmIGFpcnBvcnRzSW5kZXggPCAwKSB7XG4gICAgICBsYXRlc3RTZWFyY2hlc0luZGV4ID0gbGF0ZXN0U2VhcmNoZXNJbmRleCAtIDE7XG5cbiAgICAgIGlmIChsYXRlc3RTZWFyY2hlc0luZGV4IDwgMCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRMYXRlc3RTZWFyY2hlc0luZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSAnJztcbiAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhaXJwb3J0ID0gdGhpcy5sYXRlc3RTZWFyY2hlc1tsYXRlc3RTZWFyY2hlc0luZGV4XTtcblxuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzSW5kZXggPSBsYXRlc3RTZWFyY2hlc0luZGV4O1xuICAgIHRoaXMuZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleCA9IC0xO1xuICAgIHRoaXMuZm9jdXNlZEFpcnBvcnRDb2RlID0gJyc7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydEluZGV4ID0gLTE7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZChhaXJwb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNVcENsb3Nlc3RBaXJwb3J0cyhoYXNMYXRlc3RTZWFyY2hlczogYm9vbGVhbik6IHZvaWQge1xuICAgIGxldCBjbG9zZXN0QWlycG9ydEluZGV4ID0gdGhpcy5mb2N1c2VkQ2xvc2VzdEFpcnBvcnRJbmRleDtcblxuICAgIGlmICghaGFzTGF0ZXN0U2VhcmNoZXMgJiYgY2xvc2VzdEFpcnBvcnRJbmRleCA8PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2VzdEFpcnBvcnRJbmRleCAtIDEgPCAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkQWlycG9ydEluZGV4IDwgMCkge1xuICAgICAgY2xvc2VzdEFpcnBvcnRJbmRleCA9IGNsb3Nlc3RBaXJwb3J0SW5kZXggLSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGFpcnBvcnQgPSB0aGlzLmNsb3Nlc3RBaXJwb3J0c1tjbG9zZXN0QWlycG9ydEluZGV4XTtcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydEluZGV4ID0gY2xvc2VzdEFpcnBvcnRJbmRleDtcbiAgICB0aGlzLmZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgPSBhaXJwb3J0LmNvZGU7XG4gICAgdGhpcy5mb2N1c2VkQWlycG9ydENvZGUgPSAnJztcbiAgICB0aGlzLmZvY3VzZWRBaXJwb3J0SW5kZXggPSAtMTtcblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoYWlycG9ydCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhbmFzRm9ybUNvbnRyb2xOYW1lOyBlbHNlIHJlYWN0aXZlRm9ybVwiPlxuICA8bGFiZWwgW2lkXT1cImxhYmVsSWRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFpcnBvcnRTZWxlY3RMYWJlbFwiXG4gICAgW25hc0NsYXNzXT1cImdldENsYXNzKCd3cmFwcGVyJywgW29wZW4gJiYgJ2FjdGl2ZScsIHNlbGVjdGVkTW9kZWwgJiYgJ2ZpbGxlZCcsIGV4aXN0cyhsYWJlbE91dHNpZGUpICYmICdsYWJlbC1vdXRzaWRlJ10pXCI+XG4gICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdsYWJlbCcpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWlycG9ydFNlbGVjdExhYmVsOyBlbHNlIGVtcHR5TGFiZWxcIj57e2FpcnBvcnRTZWxlY3RMYWJlbH19PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGFiZWw+Jm5ic3A7PC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gICAgPGlucHV0ICNhaXJwb3J0U2VsZWN0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cImNvbWJvYm94XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCIgW2lkXT1cImlucHV0SWRcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlc3VsdHNJZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnXCIgW2F0dHIuYXJpYS1vd25zXT1cInJlc3VsdHNJZFwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaW5wdXQnKVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiYWlycG9ydFNlbGVjdFBsYWNlaG9sZGVyXCIgKGZvY3VzKT1cInNldE9wZW4oKVwiIChtb3VzZWRvd24pPVwic2V0T3BlbigpXCIgKGlucHV0KT1cImZpbHRlcigpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1vZGVsXCIgLz5cbiAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2ljb24nKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cInNlbGVjdGVkTW9kZWw7IGVsc2UgaXNFbXB0eVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsQ2xlYXJcIiAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxuYXMtaWNvbiBbdHlwZV09XCJzZWxlY3RlZE1vZGVsID8gJ3JlbW92ZS0tc2Vjb25kYXJ5JyA6ICdyZW1vdmUnXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNpc0VtcHR5PlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ3NtYWxsJ1wiIFtpY29uXT1cImFpcnBvcnRTZWxlY3RJY29uTW9kaWZpZXJcIj48L25hcy1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvbGFiZWw+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjcmVhY3RpdmVGb3JtPlxuICA8bGFiZWwgW2lkXT1cImxhYmVsSWRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFpcnBvcnRTZWxlY3RMYWJlbFwiXG4gICAgW25hc0NsYXNzXT1cImdldENsYXNzKCd3cmFwcGVyJywgW29wZW4gJiYgJ2FjdGl2ZScsIHNlbGVjdGVkTW9kZWwgJiYgJ2ZpbGxlZCcsIGV4aXN0cyhsYWJlbE91dHNpZGUpICYmICdsYWJlbC1vdXRzaWRlJ10pXCJcbiAgICBbZm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiPlxuICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGFiZWwnKVwiICpuZ0lmPVwiYWlycG9ydFNlbGVjdExhYmVsXCI+e3thaXJwb3J0U2VsZWN0TGFiZWx9fTwvc3Bhbj5cbiAgICA8aW5wdXQgI2FpcnBvcnRTZWxlY3QgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIiBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInJlc3VsdHNJZFwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIiBbYXR0ci5hcmlhLW93bnNdPVwicmVzdWx0c0lkXCJcbiAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaW5wdXQnKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lXCIgW3BsYWNlaG9sZGVyXT1cImFpcnBvcnRTZWxlY3RQbGFjZWhvbGRlclwiXG4gICAgICAobW91c2Vkb3duKT1cInNldE9wZW4oKVwiIChmb2N1cyk9XCJzZXRPcGVuKClcIiAoaW5wdXQpPVwiZmlsdGVyKClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIC8+XG4gICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdpY29uJylcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgKm5nSWY9XCJzZWxlY3RlZE1vZGVsOyBlbHNlIGlzRW1wdHlcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbENsZWFyXCIgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwic2VsZWN0ZWRNb2RlbCA/ICdyZW1vdmUtLXNlY29uZGFyeScgOiAncmVtb3ZlJ1wiPjwvbmFzLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXNFbXB0eT5cbiAgICAgICAgPG5hcy1pY29uIFt0eXBlXT1cIidzbWFsbCdcIiBbaWNvbl09XCJhaXJwb3J0U2VsZWN0SWNvbk1vZGlmaWVyXCI+PC9uYXMtaWNvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cbjxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdyZXN1bHRzLXdyYXBwZXInLCBleGlzdHMobGFiZWxPdXRzaWRlKSAmJiAnbGFiZWwtb3V0c2lkZScpXCIgW2lkXT1cInJlc3VsdHNJZFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbiA/ICd0cnVlJyA6ICdmYWxzZSdcIj5cbiAgPHVsICNyZXN1bHRzIHJvbGU9XCJsaXN0Ym94XCIgKm5nSWY9XCJvcGVuXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3Jlc3VsdHMnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleGlzdHMoZW5hYmxlR2VvbG9jYXRpb24pICYmIGdlb2xvY2F0aW9uU3RhdGUgIT09IG51bGwgJiYgZ2VvbG9jYXRpb25TdGF0ZSAhPT0gMCAmJiBpc1ZhbGlkXCI+XG4gICAgICA8bGkgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICA8bmFzLWJ1dHRvbiBsaW5rIHNlY29uZGFyeSBbZGlzYWJsZWRdPVwiZ2VvbG9jYXRpb25TdGF0ZSA9PT0gMlwiXG4gICAgICAgICAgW2Nzc1N0eWxlXT1cInsnaGVpZ2h0JzogJzY2cHgnLCAndGV4dC1kZWNvcmF0aW9uJzogJ3VuZGVybGluZScsICdkaXNwbGF5JzogJ2ZsZXgnLCAnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfVwiXG4gICAgICAgICAgW2Nzc0NsYXNzXT1cImdldENsYXNzKCdpdGVtJywgWydnZW9sb2NhdGlvbicsIGZvY3VzT25HZW9sb2NhdGlvbiAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSAyICYmICdmb2N1cycsIGdlb2xvY2F0aW9uU3RhdGUgPT09IDIgJiYgJ2Rpc2FibGVkJ10pXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIiAoY2xpY2tDaGFuZ2UpPVwidXBkYXRlQ3VycmVudFBvc2l0aW9uKClcIiAobW91c2VlbnRlcik9XCJvbkdlb2xvY2F0aW9uSG92ZXIodHJ1ZSlcIlxuICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uR2VvbG9jYXRpb25Ib3ZlcihmYWxzZSlcIj5cbiAgICAgICAgICA8bmFzLWljb24gW25hc0NsYXNzXT1cImdldENsYXNzKCdnZW9sb2NhdGlvbicsICdpY29uJylcIiBbdHlwZV09XCJnZW9sb2NhdGlvbkljb25cIj48L25hcy1pY29uPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2VvbG9jYXRpb25TdGF0ZSA9PT0gMTsgZWxzZSBnZW9sb2NhdGlvbkRlbmllZFwiXG4gICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2dlb2xvY2F0aW9uJywgJ2xhYmVsJylcIj57e3Jlc3VsdHNMYWJlbHM/Lmdlb2xvY2F0aW9ufX08L3NwYW4+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNnZW9sb2NhdGlvbkRlbmllZD5cbiAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZ2VvbG9jYXRpb24nLCAnbGFiZWwnKVwiPnt7cmVzdWx0c0xhYmVscz8uZ2VvbG9jYXRpb25EZW5pZWR9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25hcy1idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LXNlY3Rpb24tbGFiZWwnKVwiICpuZ0lmPVwibGF0ZXN0U2VhcmNoZXM/Lmxlbmd0aCA+IDBcbiAgICAgICYmIGV4aXN0cyhkaXNwbGF5TGF0ZXN0U2VhcmNoZXMpXG4gICAgICAmJiByZXN1bHRzTGFiZWxzPy5sYXRlc3RTZWFyY2hlc1xuICAgICAgJiYgaXNWYWxpZFwiPlxuICAgICAgPHNwYW4+e3tyZXN1bHRzTGFiZWxzPy5sYXRlc3RTZWFyY2hlc319PC9zcGFuPlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4aXN0cyhkaXNwbGF5TGF0ZXN0U2VhcmNoZXMpICYmIGlzVmFsaWRcIj5cbiAgICAgIDxsaSByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IGFpcnBvcnQgb2YgbGF0ZXN0U2VhcmNoZXNcIiBbaWRdPVwiZ2V0TGF0ZXN0U2VhcmNoZXNBaXJwb3J0SWQoYWlycG9ydC5jb2RlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYWlycG9ydC5jb2RlID09PSBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZVwiXG4gICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnbGlzdC1pdGVtJywgYWlycG9ydC5jb2RlID09PSBmb2N1c2VkTGF0ZXN0U2VhcmNoZXNBaXJwb3J0Q29kZSAmJiAnZm9jdXMnKVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZExhdGVzdFNlYXJjaGVzQWlycG9ydENvZGUgJiYgJ2ZvY3VzJylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRTZWxlY3RlZChhaXJwb3J0KVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCIgKm5nSWY9XCJleGlzdHMoZGlzcGxheUNsb3Nlc3RBaXJwb3J0cylcbiAgICAgICAmJiBnZW9sb2NhdGlvblN0YXRlICE9PSBudWxsXG4gICAgICAgJiYgZ2VvbG9jYXRpb25TdGF0ZSA9PT0gMFxuICAgICAgICYmIGNsb3Nlc3RBaXJwb3J0cz8ubGVuZ3RoID4gMFxuICAgICAgICYmIHJlc3VsdHNMYWJlbHM/LmNsb3Nlc3RBaXJwb3J0c1xuICAgICAgICYmIGlzVmFsaWRcIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xpc3Qtc2VjdGlvbi1sYWJlbCcpXCI+XG4gICAgICA8c3Bhbj57e3Jlc3VsdHNMYWJlbHM/LmNsb3Nlc3RBaXJwb3J0c319PC9zcGFuPlxuICAgIDwvbGk+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4aXN0cyhkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzKSAmJiBnZW9sb2NhdGlvblN0YXRlID09PSAwICYmIGlzVmFsaWRcIj5cbiAgICAgIDxsaSByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IGFpcnBvcnQgb2YgY2xvc2VzdEFpcnBvcnRzXCIgW2lkXT1cImdldENsb3Nlc3RBaXJwb3J0c0FpcnBvcnRJZChhaXJwb3J0LmNvZGUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGVcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xpc3QtaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZENsb3Nlc3RBaXJwb3J0Q29kZSAmJiAnZm9jdXMnKVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2l0ZW0nLCBhaXJwb3J0LmNvZGUgPT09IGZvY3VzZWRDbG9zZXN0QWlycG9ydENvZGUgJiYgJ2ZvY3VzJylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRTZWxlY3RlZChhaXJwb3J0KVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ25hbWUnKVwiPnt7YWlycG9ydC5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb2RlJylcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCdjb3VudHJ5JylcIj57e2FpcnBvcnQuY291bnRyeU5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdsaXN0LXNlY3Rpb24tbGFiZWwnKVwiXG4gICAgICAqbmdJZj1cImRpc3BsYXlBbGxBaXJwb3J0c0xhYmVsICYmIHJlc3VsdHNMYWJlbHM/LmFsbEFpcnBvcnRzICYmIGlzVmFsaWQgJiYgIW5vQWlycG9ydHNBdmFpbGFibGVcIj5cbiAgICAgIDxzcGFuPnt7cmVzdWx0c0xhYmVscz8uYWxsQWlycG9ydHN9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1ZhbGlkXCI+XG4gICAgICA8bGkgcm9sZT1cIm9wdGlvblwiICpuZ0Zvcj1cImxldCBhaXJwb3J0IG9mIGZpbHRlcmVkQWlycG9ydHNcIiBbaWRdPVwiZ2V0QWxsQWlycG9ydHNBaXJwb3J0SWQoYWlycG9ydC5jb2RlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYWlycG9ydC5jb2RlID09PSBmb2N1c2VkQWlycG9ydENvZGVcIlxuICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2xpc3QtaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtuYXNDbGFzc109XCJnZXRDbGFzcygnaXRlbScsIGFpcnBvcnQuY29kZSA9PT0gZm9jdXNlZEFpcnBvcnRDb2RlICYmICdmb2N1cycpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWQoYWlycG9ydClcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCduYW1lJylcIj57e2FpcnBvcnQubmFtZX19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29kZScpXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnY291bnRyeScpXCI+e3thaXJwb3J0LmNvdW50cnlOYW1lfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bGkgKm5nSWY9XCIhaXNWYWxpZFwiIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldENsYXNzKCduYW1lJywgJ2ludmFsaWQnKVwiPnt7aW52YWxpZFRleHR9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICAgICA8bGkgKm5nSWY9XCJyZXN1bHRzTGFiZWxzPy5ub0FpcnBvcnRzICYmIG5vQWlycG9ydHNBdmFpbGFibGVcIiByb2xlPVwibGlzdGl0ZW1cIj5cbiAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZW1wdHktbGlzdCcpXCI+e3tyZXN1bHRzTGFiZWxzLm5vQWlycG9ydHN9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIiAqbmdJZj1cIm9wZW5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEJhY2tkcm9wXCIgW25hc0NsYXNzXT1cImdldENsYXNzKCdiYWNrZHJvcCcpXCJcbiAgKGNsaWNrKT1cImJsdXIoKVwiPjwvYnV0dG9uPiJdfQ==
|