@swisspost/internet-header 1.5.0-beta.2 → 1.5.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/LICENSE +202 -202
- package/dist/cjs/{if.component-313f59b8.js → if.component-51d000af.js} +6 -6
- package/dist/cjs/if.component-51d000af.js.map +1 -0
- package/dist/cjs/{klp-widget.controller-84642428.js → klp-widget.controller-d8941c4e.js} +4811 -4811
- package/dist/cjs/{klp-widget.controller-84642428.js.map → klp-widget.controller-d8941c4e.js.map} +1 -1
- package/dist/cjs/{language.service-a80ae01d.js → language.service-7dbf739d.js} +141 -141
- package/dist/cjs/language.service-7dbf739d.js.map +1 -0
- package/dist/cjs/post-klp-login-widget.cjs.entry.js +33 -33
- package/dist/cjs/post-klp-login-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/post-language-switch.cjs.entry.js +88 -88
- package/dist/cjs/post-language-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/post-logo.cjs.entry.js +51 -51
- package/dist/cjs/post-logo.cjs.entry.js.map +1 -1
- package/dist/cjs/post-main-navigation.cjs.entry.js +227 -227
- package/dist/cjs/post-main-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/post-meta-navigation.cjs.entry.js +15 -15
- package/dist/cjs/post-meta-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/post-search.cjs.entry.js +556 -534
- package/dist/cjs/post-search.cjs.entry.js.map +1 -1
- package/dist/cjs/post-skiplinks.cjs.entry.js +41 -41
- package/dist/cjs/post-skiplinks.cjs.entry.js.map +1 -1
- package/dist/cjs/{store-47e14589.js → store-d0d514fc.js} +20 -13
- package/dist/cjs/store-d0d514fc.js.map +1 -0
- package/dist/cjs/{svg-icon.component-10fbda11.js → svg-icon.component-be93f876.js} +2 -2
- package/dist/cjs/svg-icon.component-be93f876.js.map +1 -0
- package/dist/cjs/{svg-sprite.component-c3b454b3.js → svg-sprite.component-1bd7a058.js} +40 -40
- package/dist/cjs/svg-sprite.component-1bd7a058.js.map +1 -0
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js +370 -392
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js.map +1 -1
- package/dist/cjs/swisspost-internet-footer.cjs.entry.js +125 -125
- package/dist/cjs/swisspost-internet-footer.cjs.entry.js.map +1 -1
- package/dist/cjs/swisspost-internet-header.cjs.entry.js +608 -608
- package/dist/cjs/swisspost-internet-header.cjs.entry.js.map +1 -1
- package/dist/cjs/{ui.service-db4a8252.js → ui.service-e1ebb6d4.js} +28 -28
- package/dist/cjs/ui.service-e1ebb6d4.js.map +1 -0
- package/dist/cjs/{utils-b6014257.js → utils-60853c5d.js} +15 -15
- package/dist/cjs/utils-60853c5d.js.map +1 -0
- package/dist/collection/assets/config/test-configuration.json +4067 -4067
- package/dist/collection/assets/i18n/translations.js +38 -38
- package/dist/collection/assets/i18n/translations.js.map +1 -1
- package/dist/collection/assets/js/sockjs-client.js +5134 -5134
- package/dist/collection/components/post-internet-breadcrumbs/components/breadcrumb-list.component.js +11 -11
- package/dist/collection/components/post-internet-breadcrumbs/components/breadcrumb-list.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/focus-trap.component.js +42 -42
- package/dist/collection/components/post-internet-breadcrumbs/components/focus-trap.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js +8 -8
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-links.component.js +6 -6
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-links.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/overlay.component.js +12 -12
- package/dist/collection/components/post-internet-breadcrumbs/components/overlay.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js +253 -253
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js.map +1 -1
- package/dist/collection/components/post-internet-footer/components/post-footer-block-address.component.js +12 -12
- package/dist/collection/components/post-internet-footer/components/post-footer-block-address.component.js.map +1 -1
- package/dist/collection/components/post-internet-footer/components/post-footer-block-contact.component.js +24 -24
- package/dist/collection/components/post-internet-footer/components/post-footer-block-contact.component.js.map +1 -1
- package/dist/collection/components/post-internet-footer/components/post-footer-block-custom.component.js +6 -6
- package/dist/collection/components/post-internet-footer/components/post-footer-block-custom.component.js.map +1 -1
- package/dist/collection/components/post-internet-footer/components/post-footer-block-list.component.js +6 -6
- package/dist/collection/components/post-internet-footer/components/post-footer-block-list.component.js.map +1 -1
- package/dist/collection/components/post-internet-footer/components/post-footer-block-socials.component.js +5 -5
- package/dist/collection/components/post-internet-footer/components/post-footer-block-socials.component.js.map +1 -1
- package/dist/collection/components/post-internet-footer/post-internet-footer.js +86 -86
- package/dist/collection/components/post-internet-footer/post-internet-footer.js.map +1 -1
- package/dist/collection/components/post-internet-header/post-internet-header.js +676 -676
- package/dist/collection/components/post-internet-header/post-internet-header.js.map +1 -1
- package/dist/collection/components/post-klp-login-widget/klp-widget.controller.js +14 -14
- package/dist/collection/components/post-klp-login-widget/klp-widget.controller.js.map +1 -1
- package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js +67 -67
- package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js.map +1 -1
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js +9 -9
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js.map +1 -1
- package/dist/collection/components/post-language-switch/post-language-switch.js +186 -186
- package/dist/collection/components/post-language-switch/post-language-switch.js.map +1 -1
- package/dist/collection/components/post-logo/logo-sprite.component.js +4 -4
- package/dist/collection/components/post-logo/logo-sprite.component.js.map +1 -1
- package/dist/collection/components/post-logo/post-logo.js +60 -60
- package/dist/collection/components/post-logo/post-logo.js.map +1 -1
- package/dist/collection/components/post-main-navigation/components/level-one-action.component.js +13 -13
- package/dist/collection/components/post-main-navigation/components/level-one-action.component.js.map +1 -1
- package/dist/collection/components/post-main-navigation/post-main-navigation.css +1 -1
- package/dist/collection/components/post-main-navigation/post-main-navigation.js +347 -347
- package/dist/collection/components/post-main-navigation/post-main-navigation.js.map +1 -1
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.js +67 -67
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.js.map +1 -1
- package/dist/collection/components/post-search/post-search.js +362 -362
- package/dist/collection/components/post-search/post-search.js.map +1 -1
- package/dist/collection/components/post-skiplinks/post-skiplinks.js +51 -51
- package/dist/collection/components/post-skiplinks/post-skiplinks.js.map +1 -1
- package/dist/collection/data/store.js +11 -11
- package/dist/collection/data/store.js.map +1 -1
- package/dist/collection/index.js +2 -2
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/models/breadcrumbs.model.js +2 -2
- package/dist/collection/models/breadcrumbs.model.js.map +1 -1
- package/dist/collection/models/coveo.model.js +2 -2
- package/dist/collection/models/coveo.model.js.map +1 -1
- package/dist/collection/models/footer.model.js +2 -2
- package/dist/collection/models/footer.model.js.map +1 -1
- package/dist/collection/models/general.model.js +2 -2
- package/dist/collection/models/general.model.js.map +1 -1
- package/dist/collection/models/geocode.model.js +10 -10
- package/dist/collection/models/geocode.model.js.map +1 -1
- package/dist/collection/models/header.model.js +2 -2
- package/dist/collection/models/header.model.js.map +1 -1
- package/dist/collection/models/implementor.model.js +2 -2
- package/dist/collection/models/implementor.model.js.map +1 -1
- package/dist/collection/models/language.model.js +2 -2
- package/dist/collection/models/language.model.js.map +1 -1
- package/dist/collection/models/track-and-trace.model.js +2 -2
- package/dist/collection/models/track-and-trace.model.js.map +1 -1
- package/dist/collection/services/config.service.js +170 -170
- package/dist/collection/services/config.service.js.map +1 -1
- package/dist/collection/services/language.service.js +107 -107
- package/dist/collection/services/language.service.js.map +1 -1
- package/dist/collection/services/route.service.js +163 -163
- package/dist/collection/services/route.service.js.map +1 -1
- package/dist/collection/services/search/coveo.service.js +34 -34
- package/dist/collection/services/search/coveo.service.js.map +1 -1
- package/dist/collection/services/search/coveo.settings.js +19 -19
- package/dist/collection/services/search/coveo.settings.js.map +1 -1
- package/dist/collection/services/search/parcel.service.js +54 -54
- package/dist/collection/services/search/parcel.service.js.map +1 -1
- package/dist/collection/services/search/places.service.js +95 -95
- package/dist/collection/services/search/places.service.js.map +1 -1
- package/dist/collection/services/search/places.settings.js +16 -16
- package/dist/collection/services/search/places.settings.js.map +1 -1
- package/dist/collection/services/search/search-utilities.js +26 -26
- package/dist/collection/services/search/search-utilities.js.map +1 -1
- package/dist/collection/services/search/search.service.js +42 -42
- package/dist/collection/services/search/search.service.js.map +1 -1
- package/dist/collection/services/ui.service.js +30 -30
- package/dist/collection/services/ui.service.js.map +1 -1
- package/dist/collection/tests/setup-tests.js +14 -14
- package/dist/collection/tests/setup-tests.js.map +1 -1
- package/dist/collection/utils/highlighted.component.js +11 -11
- package/dist/collection/utils/highlighted.component.js.map +1 -1
- package/dist/collection/utils/if.component.js +7 -7
- package/dist/collection/utils/if.component.js.map +1 -1
- package/dist/collection/utils/svg-icon.component.js +3 -3
- package/dist/collection/utils/svg-icon.component.js.map +1 -1
- package/dist/collection/utils/svg-sprite.component.js +3 -3
- package/dist/collection/utils/svg-sprite.component.js.map +1 -1
- package/dist/collection/utils/utils.js +16 -16
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/klp-widget.controller.js +4810 -4810
- package/dist/components/klp-widget.controller.js.map +1 -1
- package/dist/components/language.service.js +139 -139
- package/dist/components/language.service.js.map +1 -1
- package/dist/components/post-klp-login-widget2.js +48 -48
- package/dist/components/post-klp-login-widget2.js.map +1 -1
- package/dist/components/post-language-switch2.js +102 -102
- package/dist/components/post-language-switch2.js.map +1 -1
- package/dist/components/post-logo2.js +67 -67
- package/dist/components/post-logo2.js.map +1 -1
- package/dist/components/post-main-navigation2.js +244 -244
- package/dist/components/post-main-navigation2.js.map +1 -1
- package/dist/components/post-meta-navigation2.js +32 -32
- package/dist/components/post-meta-navigation2.js.map +1 -1
- package/dist/components/post-search2.js +577 -555
- package/dist/components/post-search2.js.map +1 -1
- package/dist/components/post-skiplinks2.js +52 -52
- package/dist/components/post-skiplinks2.js.map +1 -1
- package/dist/components/store.js +19 -12
- package/dist/components/store.js.map +1 -1
- package/dist/components/svg-icon.component.js +1 -1
- package/dist/components/svg-icon.component.js.map +1 -1
- package/dist/components/svg-sprite.component.js +39 -39
- package/dist/components/svg-sprite.component.js.map +1 -1
- package/dist/components/swisspost-internet-breadcrumbs.js +387 -409
- package/dist/components/swisspost-internet-breadcrumbs.js.map +1 -1
- package/dist/components/swisspost-internet-footer.js +140 -140
- package/dist/components/swisspost-internet-footer.js.map +1 -1
- package/dist/components/swisspost-internet-header.js +672 -672
- package/dist/components/swisspost-internet-header.js.map +1 -1
- package/dist/components/ui.service.js +27 -27
- package/dist/components/ui.service.js.map +1 -1
- package/dist/components/utils.js +14 -14
- package/dist/components/utils.js.map +1 -1
- package/dist/esm/{if.component-542fb8c3.js → if.component-0fe54385.js} +6 -6
- package/dist/esm/if.component-0fe54385.js.map +1 -0
- package/dist/esm/{klp-widget.controller-903e0422.js → klp-widget.controller-55366e6a.js} +4811 -4811
- package/dist/esm/{klp-widget.controller-903e0422.js.map → klp-widget.controller-55366e6a.js.map} +1 -1
- package/dist/esm/{language.service-e49858e0.js → language.service-023d2711.js} +141 -141
- package/dist/esm/language.service-023d2711.js.map +1 -0
- package/dist/esm/post-klp-login-widget.entry.js +33 -33
- package/dist/esm/post-klp-login-widget.entry.js.map +1 -1
- package/dist/esm/post-language-switch.entry.js +88 -88
- package/dist/esm/post-language-switch.entry.js.map +1 -1
- package/dist/esm/post-logo.entry.js +51 -51
- package/dist/esm/post-logo.entry.js.map +1 -1
- package/dist/esm/post-main-navigation.entry.js +227 -227
- package/dist/esm/post-main-navigation.entry.js.map +1 -1
- package/dist/esm/post-meta-navigation.entry.js +15 -15
- package/dist/esm/post-meta-navigation.entry.js.map +1 -1
- package/dist/esm/post-search.entry.js +556 -534
- package/dist/esm/post-search.entry.js.map +1 -1
- package/dist/esm/post-skiplinks.entry.js +41 -41
- package/dist/esm/post-skiplinks.entry.js.map +1 -1
- package/dist/esm/{store-d495dc07.js → store-837c3490.js} +20 -13
- package/dist/esm/store-837c3490.js.map +1 -0
- package/dist/esm/{svg-icon.component-1b1b27a2.js → svg-icon.component-e09b4bf9.js} +2 -2
- package/dist/esm/svg-icon.component-e09b4bf9.js.map +1 -0
- package/dist/esm/{svg-sprite.component-ec0ac38c.js → svg-sprite.component-cf60303f.js} +40 -40
- package/dist/esm/svg-sprite.component-cf60303f.js.map +1 -0
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js +370 -392
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js.map +1 -1
- package/dist/esm/swisspost-internet-footer.entry.js +125 -125
- package/dist/esm/swisspost-internet-footer.entry.js.map +1 -1
- package/dist/esm/swisspost-internet-header.entry.js +608 -608
- package/dist/esm/swisspost-internet-header.entry.js.map +1 -1
- package/dist/esm/{ui.service-1d9b0f51.js → ui.service-2fbc9c45.js} +28 -28
- package/dist/esm/ui.service-2fbc9c45.js.map +1 -0
- package/dist/esm/{utils-5bf107ff.js → utils-ee79122f.js} +15 -15
- package/dist/esm/utils-ee79122f.js.map +1 -0
- package/dist/esm-es5/{if.component-542fb8c3.js → if.component-0fe54385.js} +1 -1
- package/dist/esm-es5/if.component-0fe54385.js.map +1 -0
- package/dist/esm-es5/{klp-widget.controller-903e0422.js → klp-widget.controller-55366e6a.js} +1 -1
- package/dist/{swisspost-internet-header/p-83f6cd1e.js.map → esm-es5/klp-widget.controller-55366e6a.js.map} +1 -1
- package/dist/esm-es5/{language.service-e49858e0.js → language.service-023d2711.js} +2 -2
- package/dist/esm-es5/language.service-023d2711.js.map +1 -0
- package/dist/esm-es5/post-klp-login-widget.entry.js +1 -1
- package/dist/esm-es5/post-klp-login-widget.entry.js.map +1 -1
- package/dist/esm-es5/post-language-switch.entry.js +1 -1
- package/dist/esm-es5/post-language-switch.entry.js.map +1 -1
- package/dist/esm-es5/post-logo.entry.js +1 -1
- package/dist/esm-es5/post-logo.entry.js.map +1 -1
- package/dist/esm-es5/post-main-navigation.entry.js +1 -1
- package/dist/esm-es5/post-main-navigation.entry.js.map +1 -1
- package/dist/esm-es5/post-meta-navigation.entry.js +1 -1
- package/dist/esm-es5/post-meta-navigation.entry.js.map +1 -1
- package/dist/esm-es5/post-search.entry.js +1 -1
- package/dist/esm-es5/post-search.entry.js.map +1 -1
- package/dist/esm-es5/post-skiplinks.entry.js +1 -1
- package/dist/esm-es5/post-skiplinks.entry.js.map +1 -1
- package/dist/esm-es5/store-837c3490.js +2 -0
- package/dist/esm-es5/store-837c3490.js.map +1 -0
- package/dist/esm-es5/{svg-icon.component-1b1b27a2.js → svg-icon.component-e09b4bf9.js} +1 -1
- package/dist/esm-es5/svg-icon.component-e09b4bf9.js.map +1 -0
- package/dist/esm-es5/{svg-sprite.component-ec0ac38c.js → svg-sprite.component-cf60303f.js} +1 -1
- package/dist/esm-es5/svg-sprite.component-cf60303f.js.map +1 -0
- package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js +3 -3
- package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js.map +1 -1
- package/dist/esm-es5/swisspost-internet-footer.entry.js +1 -1
- package/dist/esm-es5/swisspost-internet-footer.entry.js.map +1 -1
- package/dist/esm-es5/swisspost-internet-header.entry.js +1 -1
- package/dist/esm-es5/swisspost-internet-header.entry.js.map +1 -1
- package/dist/esm-es5/{ui.service-1d9b0f51.js → ui.service-2fbc9c45.js} +1 -1
- package/dist/esm-es5/ui.service-2fbc9c45.js.map +1 -0
- package/dist/esm-es5/{utils-5bf107ff.js → utils-ee79122f.js} +1 -1
- package/dist/esm-es5/utils-ee79122f.js.map +1 -0
- package/dist/swisspost-internet-header/assets/config/test-configuration.json +4067 -4067
- package/dist/swisspost-internet-header/p-06649b46.js +2 -0
- package/dist/swisspost-internet-header/p-06649b46.js.map +1 -0
- package/dist/swisspost-internet-header/{p-ec80c8fc.js → p-0942595f.js} +2 -2
- package/dist/swisspost-internet-header/p-0942595f.js.map +1 -0
- package/dist/swisspost-internet-header/{p-c29ec122.system.js → p-0c5624c0.system.js} +1 -1
- package/dist/swisspost-internet-header/p-0c5624c0.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-2eb04045.entry.js → p-0cba8ab4.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-0cba8ab4.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-17a47667.system.js +1 -1
- package/dist/swisspost-internet-header/{p-ddcb8258.entry.js → p-26879023.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-26879023.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-cb3de015.system.entry.js → p-28e6362f.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-28e6362f.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-00fd320e.entry.js → p-322526ef.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-322526ef.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-f4ff1e9e.system.js → p-3753a678.system.js} +2 -2
- package/dist/swisspost-internet-header/p-3753a678.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-a9c4b2d0.system.entry.js → p-38d645ba.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-38d645ba.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-3df823de.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-3df823de.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-872a76a4.system.js → p-42695801.system.js} +1 -1
- package/dist/swisspost-internet-header/p-42695801.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-bdabd6ac.js → p-45db66a6.js} +1 -1
- package/dist/swisspost-internet-header/p-45db66a6.js.map +1 -0
- package/dist/swisspost-internet-header/p-493337e1.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-493337e1.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-78f653be.system.entry.js → p-5d2fac3b.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-5d2fac3b.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-62c5cf26.entry.js +2 -0
- package/dist/swisspost-internet-header/p-62c5cf26.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-9d0a7039.entry.js → p-64cb215a.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-64cb215a.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-a51ad207.system.entry.js → p-66144e99.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-66144e99.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-715ebef7.system.entry.js +7 -0
- package/dist/swisspost-internet-header/p-715ebef7.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-7709ed5c.entry.js +2 -0
- package/dist/swisspost-internet-header/p-7709ed5c.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-12baacf0.entry.js → p-77d5e07f.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-77d5e07f.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-7fcba2e7.system.js +2 -0
- package/dist/swisspost-internet-header/p-7fcba2e7.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-549b62ba.system.js → p-88aac12c.system.js} +1 -1
- package/dist/swisspost-internet-header/p-88aac12c.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-0e2ec555.js → p-8bf099a8.js} +1 -1
- package/dist/swisspost-internet-header/p-8bf099a8.js.map +1 -0
- package/dist/swisspost-internet-header/{p-3eb881c3.js → p-a2f9d462.js} +1 -1
- package/dist/swisspost-internet-header/p-a2f9d462.js.map +1 -0
- package/dist/swisspost-internet-header/{p-eeff8b03.js → p-ab1dd269.js} +1 -1
- package/dist/swisspost-internet-header/p-ab1dd269.js.map +1 -0
- package/dist/swisspost-internet-header/{p-a4160d23.entry.js → p-ccb522ba.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-ccb522ba.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-cfa787d7.entry.js +6 -0
- package/dist/swisspost-internet-header/p-cfa787d7.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-8717445f.entry.js → p-d33734b5.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-d33734b5.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-c946c5b8.system.entry.js → p-db87f3e3.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-db87f3e3.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-b406315a.system.entry.js → p-e2990968.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-e2990968.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-83f6cd1e.js → p-ed24b372.js} +1 -1
- package/dist/swisspost-internet-header/p-ed24b372.js.map +1 -0
- package/dist/swisspost-internet-header/{p-9509f6c7.system.js → p-edb2802d.system.js} +1 -1
- package/dist/swisspost-internet-header/p-edb2802d.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-ee915bbe.system.js → p-ee119d2e.system.js} +1 -1
- package/dist/swisspost-internet-header/p-ee119d2e.system.js.map +1 -0
- package/dist/swisspost-internet-header/{p-883f9547.system.entry.js → p-f38f38f4.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-f38f38f4.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-3ba40afe.js → p-f7c0cf7b.js} +1 -1
- package/dist/swisspost-internet-header/p-f7c0cf7b.js.map +1 -0
- package/dist/swisspost-internet-header/{p-4654b2af.system.js → p-ffc59851.system.js} +1 -1
- package/dist/swisspost-internet-header/p-ffc59851.system.js.map +1 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.esm.js +1 -1
- package/dist/types/assets/i18n/translations.d.ts +37 -37
- package/dist/types/components/post-internet-breadcrumbs/components/breadcrumb-list.component.d.ts +9 -9
- package/dist/types/components/post-internet-breadcrumbs/components/focus-trap.component.d.ts +12 -12
- package/dist/types/components/post-internet-breadcrumbs/components/middle-dropdown.component.d.ts +7 -7
- package/dist/types/components/post-internet-breadcrumbs/components/middle-links.component.d.ts +6 -6
- package/dist/types/components/post-internet-breadcrumbs/components/overlay.component.d.ts +16 -16
- package/dist/types/components/post-internet-breadcrumbs/post-internet-breadcrumbs.d.ts +45 -45
- package/dist/types/components/post-internet-footer/components/post-footer-block-address.component.d.ts +5 -5
- package/dist/types/components/post-internet-footer/components/post-footer-block-contact.component.d.ts +6 -6
- package/dist/types/components/post-internet-footer/components/post-footer-block-custom.component.d.ts +4 -4
- package/dist/types/components/post-internet-footer/components/post-footer-block-list.component.d.ts +5 -5
- package/dist/types/components/post-internet-footer/components/post-footer-block-socials.component.d.ts +5 -5
- package/dist/types/components/post-internet-footer/post-internet-footer.d.ts +10 -10
- package/dist/types/components/post-internet-header/post-internet-header.d.ts +124 -124
- package/dist/types/components/post-klp-login-widget/klp-widget.controller.d.ts +3 -3
- package/dist/types/components/post-klp-login-widget/post-klp-login-widget.d.ts +10 -10
- package/dist/types/components/post-language-switch/components/post-language-switch-list.d.ts +6 -6
- package/dist/types/components/post-language-switch/post-language-switch.d.ts +27 -27
- package/dist/types/components/post-logo/logo-sprite.component.d.ts +4 -4
- package/dist/types/components/post-logo/post-logo.d.ts +11 -11
- package/dist/types/components/post-main-navigation/components/level-one-action.component.d.ts +8 -8
- package/dist/types/components/post-main-navigation/post-main-navigation.d.ts +48 -48
- package/dist/types/components/post-meta-navigation/post-meta-navigation.d.ts +5 -5
- package/dist/types/components/post-search/post-search.d.ts +61 -61
- package/dist/types/components/post-skiplinks/post-skiplinks.d.ts +9 -9
- package/dist/types/data/store.d.ts +16 -16
- package/dist/types/index.d.ts +1 -1
- package/dist/types/models/breadcrumbs.model.d.ts +36 -36
- package/dist/types/models/coveo.model.d.ts +22 -22
- package/dist/types/models/footer.model.d.ts +48 -48
- package/dist/types/models/general.model.d.ts +46 -46
- package/dist/types/models/geocode.model.d.ts +52 -52
- package/dist/types/models/header.model.d.ts +163 -163
- package/dist/types/models/implementor.model.d.ts +22 -22
- package/dist/types/models/language.model.d.ts +6 -6
- package/dist/types/models/track-and-trace.model.d.ts +25 -25
- package/dist/types/services/config.service.d.ts +56 -56
- package/dist/types/services/language.service.d.ts +65 -65
- package/dist/types/services/route.service.d.ts +39 -39
- package/dist/types/services/search/coveo.service.d.ts +9 -9
- package/dist/types/services/search/coveo.settings.d.ts +2 -2
- package/dist/types/services/search/parcel.service.d.ts +28 -28
- package/dist/types/services/search/places.service.d.ts +24 -24
- package/dist/types/services/search/places.settings.d.ts +3 -3
- package/dist/types/services/search/search-utilities.d.ts +15 -15
- package/dist/types/services/search/search.service.d.ts +24 -24
- package/dist/types/services/ui.service.d.ts +23 -23
- package/dist/types/utils/highlighted.component.d.ts +4 -4
- package/dist/types/utils/if.component.d.ts +4 -4
- package/dist/types/utils/svg-icon.component.d.ts +4 -4
- package/dist/types/utils/svg-sprite.component.d.ts +1 -1
- package/dist/types/utils/utils.d.ts +8 -8
- package/package.json +7 -7
- package/readme.md +57 -15
- package/dist/cjs/if.component-313f59b8.js.map +0 -1
- package/dist/cjs/language.service-a80ae01d.js.map +0 -1
- package/dist/cjs/store-47e14589.js.map +0 -1
- package/dist/cjs/svg-icon.component-10fbda11.js.map +0 -1
- package/dist/cjs/svg-sprite.component-c3b454b3.js.map +0 -1
- package/dist/cjs/ui.service-db4a8252.js.map +0 -1
- package/dist/cjs/utils-b6014257.js.map +0 -1
- package/dist/esm/if.component-542fb8c3.js.map +0 -1
- package/dist/esm/language.service-e49858e0.js.map +0 -1
- package/dist/esm/store-d495dc07.js.map +0 -1
- package/dist/esm/svg-icon.component-1b1b27a2.js.map +0 -1
- package/dist/esm/svg-sprite.component-ec0ac38c.js.map +0 -1
- package/dist/esm/ui.service-1d9b0f51.js.map +0 -1
- package/dist/esm/utils-5bf107ff.js.map +0 -1
- package/dist/esm-es5/if.component-542fb8c3.js.map +0 -1
- package/dist/esm-es5/klp-widget.controller-903e0422.js.map +0 -1
- package/dist/esm-es5/language.service-e49858e0.js.map +0 -1
- package/dist/esm-es5/store-d495dc07.js +0 -2
- package/dist/esm-es5/store-d495dc07.js.map +0 -1
- package/dist/esm-es5/svg-icon.component-1b1b27a2.js.map +0 -1
- package/dist/esm-es5/svg-sprite.component-ec0ac38c.js.map +0 -1
- package/dist/esm-es5/ui.service-1d9b0f51.js.map +0 -1
- package/dist/esm-es5/utils-5bf107ff.js.map +0 -1
- package/dist/swisspost-internet-header/p-00fd320e.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-0e2ec555.js.map +0 -1
- package/dist/swisspost-internet-header/p-12baacf0.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-2eb04045.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-3ba40afe.js.map +0 -1
- package/dist/swisspost-internet-header/p-3eb881c3.js.map +0 -1
- package/dist/swisspost-internet-header/p-458c9862.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-458c9862.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-4654b2af.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-549b62ba.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-5e43c5e0.js +0 -2
- package/dist/swisspost-internet-header/p-5e43c5e0.js.map +0 -1
- package/dist/swisspost-internet-header/p-74932c29.entry.js +0 -6
- package/dist/swisspost-internet-header/p-74932c29.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-76ce4acc.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-76ce4acc.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-78f653be.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-7f16a46b.entry.js +0 -2
- package/dist/swisspost-internet-header/p-7f16a46b.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-8717445f.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-872a76a4.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-883f9547.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-9509f6c7.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-9d0a7039.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-a4160d23.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-a51ad207.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-a9c4b2d0.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-b406315a.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-bdabd6ac.js.map +0 -1
- package/dist/swisspost-internet-header/p-c29ec122.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-c69923cd.system.js +0 -2
- package/dist/swisspost-internet-header/p-c69923cd.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-c946c5b8.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-cb3de015.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-d713a3b3.system.entry.js +0 -7
- package/dist/swisspost-internet-header/p-d713a3b3.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-ddcb8258.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-ec80c8fc.js.map +0 -1
- package/dist/swisspost-internet-header/p-ee915bbe.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-eeff8b03.js.map +0 -1
- package/dist/swisspost-internet-header/p-f4ff1e9e.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-fa0c66c7.entry.js +0 -2
- package/dist/swisspost-internet-header/p-fa0c66c7.entry.js.map +0 -1
|
@@ -1,169 +1,169 @@
|
|
|
1
1
|
import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-066666f4.js';
|
|
2
2
|
import { t as throttle } from './index-a75df186.js';
|
|
3
3
|
import { c as clearAllBodyScrollLocks, d as disableBodyScroll, e as enableBodyScroll } from './bodyScrollLock.esm-afcc00e3.js';
|
|
4
|
-
import { s as state } from './store-
|
|
5
|
-
import { e as elementHasTransition, u as userPrefersReducedMotion } from './ui.service-
|
|
6
|
-
import { S as SvgSprite } from './svg-sprite.component-
|
|
7
|
-
import { S as SvgIcon } from './svg-icon.component-
|
|
8
|
-
import { I as If } from './if.component-
|
|
9
|
-
|
|
10
|
-
// https://www.post.ch/api/trackandtrace?id=99.00.306600.01004883
|
|
11
|
-
// Track and trace URL
|
|
12
|
-
const getTrackAndTraceApiUrl = (id) => {
|
|
13
|
-
const lang = state.currentLanguage;
|
|
14
|
-
return `https://www.post.ch/${lang}/api/trackandtrace?id=${encodeURIComponent(id)}`;
|
|
15
|
-
};
|
|
16
|
-
// Get the redire
|
|
17
|
-
const getTrackAndTraceRedirectUrl = (query, { packageTrackingRedirectUrl }) => {
|
|
18
|
-
return packageTrackingRedirectUrl.replace('{trackingNumber}', encodeURIComponent(query));
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Check whether a query is a tracking id
|
|
22
|
-
*
|
|
23
|
-
* @param query User query
|
|
24
|
-
* @returns Boolean
|
|
25
|
-
*/
|
|
26
|
-
const isParcel = async (query, searchConfig) => {
|
|
27
|
-
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
28
|
-
return parcelInfo.ok;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Try to get parcel info from a query that is possibly a tracking id.
|
|
32
|
-
* This is mainly used to check if a search should redirect to track&trace instead of the regular search.
|
|
33
|
-
*
|
|
34
|
-
* @param query User query that is possibly a tracking number
|
|
35
|
-
* @returns Track and trace info
|
|
36
|
-
*/
|
|
37
|
-
const getParcelInfo = async (query, { redirectPattern }) => {
|
|
38
|
-
const trackingNrPattern = new RegExp(redirectPattern);
|
|
39
|
-
if (trackingNrPattern.test(query)) {
|
|
40
|
-
try {
|
|
41
|
-
const trackAndTraceReqest = await fetch(getTrackAndTraceApiUrl(query));
|
|
42
|
-
const trackAndTraceResult = await trackAndTraceReqest.json();
|
|
43
|
-
return Object.assign(Object.assign({}, trackAndTraceResult), { ok: trackAndTraceResult.ok === 'true' });
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
console.warn(`Could not check track and trace API due to error: ${error.message}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return { ok: false, timestamp: new Date().toDateString() };
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Get parcel info if query is a parcel or null
|
|
53
|
-
*
|
|
54
|
-
* @param query Parcel id
|
|
55
|
-
* @returns Parcel info and a redirect url or null if not a parcel
|
|
56
|
-
*/
|
|
57
|
-
const getParcelSuggestion = async (query, searchConfig) => {
|
|
58
|
-
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
59
|
-
return parcelInfo.ok
|
|
60
|
-
? Object.assign(Object.assign({}, parcelInfo), { url: getTrackAndTraceRedirectUrl(query, searchConfig) }) : null;
|
|
4
|
+
import { s as state } from './store-837c3490.js';
|
|
5
|
+
import { e as elementHasTransition, u as userPrefersReducedMotion } from './ui.service-2fbc9c45.js';
|
|
6
|
+
import { S as SvgSprite } from './svg-sprite.component-cf60303f.js';
|
|
7
|
+
import { S as SvgIcon } from './svg-icon.component-e09b4bf9.js';
|
|
8
|
+
import { I as If } from './if.component-0fe54385.js';
|
|
9
|
+
|
|
10
|
+
// https://www.post.ch/api/trackandtrace?id=99.00.306600.01004883
|
|
11
|
+
// Track and trace URL
|
|
12
|
+
const getTrackAndTraceApiUrl = (id) => {
|
|
13
|
+
const lang = state.currentLanguage;
|
|
14
|
+
return `https://www.post.ch/${lang}/api/trackandtrace?id=${encodeURIComponent(id)}`;
|
|
15
|
+
};
|
|
16
|
+
// Get the redire
|
|
17
|
+
const getTrackAndTraceRedirectUrl = (query, { packageTrackingRedirectUrl }) => {
|
|
18
|
+
return packageTrackingRedirectUrl.replace('{trackingNumber}', encodeURIComponent(query));
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Check whether a query is a tracking id
|
|
22
|
+
*
|
|
23
|
+
* @param query User query
|
|
24
|
+
* @returns Boolean
|
|
25
|
+
*/
|
|
26
|
+
const isParcel = async (query, searchConfig) => {
|
|
27
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
28
|
+
return parcelInfo.ok;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Try to get parcel info from a query that is possibly a tracking id.
|
|
32
|
+
* This is mainly used to check if a search should redirect to track&trace instead of the regular search.
|
|
33
|
+
*
|
|
34
|
+
* @param query User query that is possibly a tracking number
|
|
35
|
+
* @returns Track and trace info
|
|
36
|
+
*/
|
|
37
|
+
const getParcelInfo = async (query, { redirectPattern }) => {
|
|
38
|
+
const trackingNrPattern = new RegExp(redirectPattern);
|
|
39
|
+
if (trackingNrPattern.test(query)) {
|
|
40
|
+
try {
|
|
41
|
+
const trackAndTraceReqest = await fetch(getTrackAndTraceApiUrl(query));
|
|
42
|
+
const trackAndTraceResult = await trackAndTraceReqest.json();
|
|
43
|
+
return Object.assign(Object.assign({}, trackAndTraceResult), { ok: trackAndTraceResult.ok === 'true' });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.warn(`Could not check track and trace API due to error: ${error.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { ok: false, timestamp: new Date().toDateString() };
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Get parcel info if query is a parcel or null
|
|
53
|
+
*
|
|
54
|
+
* @param query Parcel id
|
|
55
|
+
* @returns Parcel info and a redirect url or null if not a parcel
|
|
56
|
+
*/
|
|
57
|
+
const getParcelSuggestion = async (query, searchConfig) => {
|
|
58
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
59
|
+
return parcelInfo.ok
|
|
60
|
+
? Object.assign(Object.assign({}, parcelInfo), { url: getTrackAndTraceRedirectUrl(query, searchConfig) }) : null;
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
* Construct a search page url from a query
|
|
65
|
-
*
|
|
66
|
-
* @param query Search term
|
|
67
|
-
* @returns
|
|
68
|
-
*/
|
|
69
|
-
const getSearchRedirectUrl = async (query, searchConfig) => {
|
|
70
|
-
const isTrackTraceId = await isParcel(query, searchConfig);
|
|
71
|
-
return isTrackTraceId
|
|
72
|
-
? getTrackAndTraceRedirectUrl(query, searchConfig)
|
|
73
|
-
: getSearchPageUrl(query);
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Stitch toghether the search page URL
|
|
77
|
-
*
|
|
78
|
-
* @param query Search term
|
|
79
|
-
* @returns Search page URL
|
|
80
|
-
*/
|
|
81
|
-
const getSearchPageUrl = (query) => {
|
|
82
|
-
var _a;
|
|
83
|
-
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const { searchPageUrl } = state.localizedConfig.header.search;
|
|
87
|
-
const searchParam = `#q=${encodeURIComponent(query)}`;
|
|
88
|
-
return `${searchPageUrl}${searchParam}&t=AllTab`;
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Equalize the length of two arrays while filling up empty slots up to max. length
|
|
92
|
-
*
|
|
93
|
-
* @param arrayA First array
|
|
94
|
-
* @param arrayB Second array
|
|
95
|
-
* @param maxLength Max. length of result array
|
|
96
|
-
* @returns Array with two resulting arrays
|
|
97
|
-
*/
|
|
98
|
-
const equalizeArrays = (arrayA, arrayB, maxLength = 8) => {
|
|
99
|
-
const coveoSliced = arrayA.slice(0, Math.max(maxLength / 2, maxLength - arrayB.length));
|
|
100
|
-
return [coveoSliced, arrayB.slice(0, maxLength - coveoSliced.length)];
|
|
63
|
+
/**
|
|
64
|
+
* Construct a search page url from a query
|
|
65
|
+
*
|
|
66
|
+
* @param query Search term
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
const getSearchRedirectUrl = async (query, searchConfig) => {
|
|
70
|
+
const isTrackTraceId = await isParcel(query, searchConfig);
|
|
71
|
+
return isTrackTraceId
|
|
72
|
+
? getTrackAndTraceRedirectUrl(query, searchConfig)
|
|
73
|
+
: getSearchPageUrl(query);
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Stitch toghether the search page URL
|
|
77
|
+
*
|
|
78
|
+
* @param query Search term
|
|
79
|
+
* @returns Search page URL
|
|
80
|
+
*/
|
|
81
|
+
const getSearchPageUrl = (query) => {
|
|
82
|
+
var _a;
|
|
83
|
+
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const { searchPageUrl } = state.localizedConfig.header.search;
|
|
87
|
+
const searchParam = `#q=${encodeURIComponent(query)}`;
|
|
88
|
+
return `${searchPageUrl}${searchParam}&t=AllTab`;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Equalize the length of two arrays while filling up empty slots up to max. length
|
|
92
|
+
*
|
|
93
|
+
* @param arrayA First array
|
|
94
|
+
* @param arrayB Second array
|
|
95
|
+
* @param maxLength Max. length of result array
|
|
96
|
+
* @returns Array with two resulting arrays
|
|
97
|
+
*/
|
|
98
|
+
const equalizeArrays = (arrayA, arrayB, maxLength = 8) => {
|
|
99
|
+
const coveoSliced = arrayA.slice(0, Math.max(maxLength / 2, maxLength - arrayB.length));
|
|
100
|
+
return [coveoSliced, arrayB.slice(0, maxLength - coveoSliced.length)];
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
// Coveo constants
|
|
104
|
-
const coveo = {
|
|
105
|
-
url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',
|
|
106
|
-
environment: {
|
|
107
|
-
prod: {
|
|
108
|
-
organisation: 'postchagprod6ef4sbet',
|
|
109
|
-
token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',
|
|
110
|
-
},
|
|
111
|
-
int01: {
|
|
112
|
-
organisation: 'postchagnonprods5sq57qt',
|
|
113
|
-
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
114
|
-
},
|
|
115
|
-
int02: {
|
|
116
|
-
organisation: 'postchagnonprods5sq57qt',
|
|
117
|
-
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
118
|
-
},
|
|
119
|
-
},
|
|
103
|
+
// Coveo constants
|
|
104
|
+
const coveo = {
|
|
105
|
+
url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',
|
|
106
|
+
environment: {
|
|
107
|
+
prod: {
|
|
108
|
+
organisation: 'postchagprod6ef4sbet',
|
|
109
|
+
token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',
|
|
110
|
+
},
|
|
111
|
+
int01: {
|
|
112
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
113
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
114
|
+
},
|
|
115
|
+
int02: {
|
|
116
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
117
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
/**
|
|
123
|
-
* Get suggestions from coveo
|
|
124
|
-
* https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object
|
|
125
|
-
*
|
|
126
|
-
* @param query Search term
|
|
127
|
-
* @returns
|
|
128
|
-
*/
|
|
129
|
-
const getCoveoSuggestions = async (query) => {
|
|
130
|
-
var _a, _b;
|
|
131
|
-
if (((_b = (_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.search) === undefined)
|
|
132
|
-
return [];
|
|
133
|
-
const config = state.localizedConfig.header.search;
|
|
134
|
-
const { token, organisation } = coveo.environment[state.environment];
|
|
135
|
-
const url = `${coveo.url}?q=${query}&locale=${state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;
|
|
136
|
-
let coveoCompletions;
|
|
137
|
-
try {
|
|
138
|
-
const coveoResponse = await fetch(url, {
|
|
139
|
-
method: 'GET',
|
|
140
|
-
headers: {
|
|
141
|
-
Authorization: `Bearer ${token}`,
|
|
142
|
-
},
|
|
143
|
-
});
|
|
144
|
-
const coveoJSON = (await coveoResponse.json());
|
|
145
|
-
coveoCompletions = coveoJSON.completions.map(completion => (Object.assign(Object.assign({}, completion), { redirectUrl: getSearchPageUrl(completion.expression) })));
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
console.error('Connection to coveo failed. Did you add "*.coveo.com" to your connect-src content security policy and tried turning off your adblocker?');
|
|
149
|
-
}
|
|
150
|
-
return coveoCompletions === undefined ? [] : coveoCompletions;
|
|
122
|
+
/**
|
|
123
|
+
* Get suggestions from coveo
|
|
124
|
+
* https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object
|
|
125
|
+
*
|
|
126
|
+
* @param query Search term
|
|
127
|
+
* @returns
|
|
128
|
+
*/
|
|
129
|
+
const getCoveoSuggestions = async (query) => {
|
|
130
|
+
var _a, _b;
|
|
131
|
+
if (((_b = (_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.search) === undefined)
|
|
132
|
+
return [];
|
|
133
|
+
const config = state.localizedConfig.header.search;
|
|
134
|
+
const { token, organisation } = coveo.environment[state.environment];
|
|
135
|
+
const url = `${coveo.url}?q=${query}&locale=${state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;
|
|
136
|
+
let coveoCompletions;
|
|
137
|
+
try {
|
|
138
|
+
const coveoResponse = await fetch(url, {
|
|
139
|
+
method: 'GET',
|
|
140
|
+
headers: {
|
|
141
|
+
Authorization: `Bearer ${token}`,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
const coveoJSON = (await coveoResponse.json());
|
|
145
|
+
coveoCompletions = coveoJSON.completions.map(completion => (Object.assign(Object.assign({}, completion), { redirectUrl: getSearchPageUrl(completion.expression) })));
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('Connection to coveo failed. Did you add "*.coveo.com" to your connect-src content security policy and tried turning off your adblocker?');
|
|
149
|
+
}
|
|
150
|
+
return coveoCompletions === undefined ? [] : coveoCompletions;
|
|
151
151
|
};
|
|
152
152
|
|
|
153
|
-
// Implement some TOPOS logic into the header search
|
|
154
|
-
const gisAPIUrl = 'https://places.post.ch/StandortSuche/StaoCacheService';
|
|
155
|
-
const placesUrl = 'https://places.post.ch';
|
|
156
|
-
const pois = [
|
|
157
|
-
'001PST',
|
|
158
|
-
'001MP24',
|
|
159
|
-
'001AG-PICK',
|
|
160
|
-
'001PFFIL',
|
|
161
|
-
'001PFST',
|
|
162
|
-
'001BZ',
|
|
163
|
-
'001LZB',
|
|
164
|
-
'001PZ',
|
|
165
|
-
'001LZP',
|
|
166
|
-
'001AL',
|
|
153
|
+
// Implement some TOPOS logic into the header search
|
|
154
|
+
const gisAPIUrl = 'https://places.post.ch/StandortSuche/StaoCacheService';
|
|
155
|
+
const placesUrl = 'https://places.post.ch';
|
|
156
|
+
const pois = [
|
|
157
|
+
'001PST',
|
|
158
|
+
'001MP24',
|
|
159
|
+
'001AG-PICK',
|
|
160
|
+
'001PFFIL',
|
|
161
|
+
'001PFST',
|
|
162
|
+
'001BZ',
|
|
163
|
+
'001LZB',
|
|
164
|
+
'001PZ',
|
|
165
|
+
'001LZP',
|
|
166
|
+
'001AL',
|
|
167
167
|
];
|
|
168
168
|
|
|
169
169
|
function escapeStringRegexp(string) {
|
|
@@ -2290,6 +2290,23 @@ const removeMootSeparators = (string, separator) => {
|
|
|
2290
2290
|
.replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, 'g'), '');
|
|
2291
2291
|
};
|
|
2292
2292
|
|
|
2293
|
+
const buildPatternSlug = options => {
|
|
2294
|
+
let negationSetPattern = 'a-z\\d';
|
|
2295
|
+
negationSetPattern += options.lowercase ? '' : 'A-Z';
|
|
2296
|
+
|
|
2297
|
+
if (options.preserveCharacters.length > 0) {
|
|
2298
|
+
for (const character of options.preserveCharacters) {
|
|
2299
|
+
if (character === options.separator) {
|
|
2300
|
+
throw new Error(`The separator character \`${options.separator}\` cannot be included in preserved characters: ${options.preserveCharacters}`);
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
negationSetPattern += escapeStringRegexp(character);
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
return new RegExp(`[^${negationSetPattern}]+`, 'g');
|
|
2308
|
+
};
|
|
2309
|
+
|
|
2293
2310
|
function slugify(string, options) {
|
|
2294
2311
|
if (typeof string !== 'string') {
|
|
2295
2312
|
throw new TypeError(`Expected a string, got \`${typeof string}\``);
|
|
@@ -2302,6 +2319,7 @@ function slugify(string, options) {
|
|
|
2302
2319
|
customReplacements: [],
|
|
2303
2320
|
preserveLeadingUnderscore: false,
|
|
2304
2321
|
preserveTrailingDash: false,
|
|
2322
|
+
preserveCharacters: [],
|
|
2305
2323
|
...options
|
|
2306
2324
|
};
|
|
2307
2325
|
|
|
@@ -2319,15 +2337,19 @@ function slugify(string, options) {
|
|
|
2319
2337
|
string = decamelize(string);
|
|
2320
2338
|
}
|
|
2321
2339
|
|
|
2322
|
-
|
|
2340
|
+
const patternSlug = buildPatternSlug(options);
|
|
2323
2341
|
|
|
2324
2342
|
if (options.lowercase) {
|
|
2325
2343
|
string = string.toLowerCase();
|
|
2326
|
-
patternSlug = /[^a-z\d]+/g;
|
|
2327
2344
|
}
|
|
2328
2345
|
|
|
2329
2346
|
string = string.replace(patternSlug, options.separator);
|
|
2330
2347
|
string = string.replace(/\\/g, '');
|
|
2348
|
+
|
|
2349
|
+
// Detect contractions/possessives by looking for any word followed by a `-t`
|
|
2350
|
+
// or `-s` in isolation and then remove it.
|
|
2351
|
+
string = string.replace(/([a-zA-Z\d]+)-([ts])(-|$)/g, '$1$2$3');
|
|
2352
|
+
|
|
2331
2353
|
if (options.separator) {
|
|
2332
2354
|
string = removeMootSeparators(string, options.separator);
|
|
2333
2355
|
}
|
|
@@ -2343,391 +2365,391 @@ function slugify(string, options) {
|
|
|
2343
2365
|
return string;
|
|
2344
2366
|
}
|
|
2345
2367
|
|
|
2346
|
-
/**
|
|
2347
|
-
* Transform to lowercase, extract accents to separate unicode chars,
|
|
2348
|
-
* replace all accent unicode chars so only standard latin chars remain
|
|
2349
|
-
* https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463#37511463
|
|
2350
|
-
*
|
|
2351
|
-
* @param str Input string
|
|
2352
|
-
* @returns
|
|
2353
|
-
*/
|
|
2354
|
-
const hardNormalize = (str) => str
|
|
2355
|
-
.toLowerCase()
|
|
2356
|
-
.normalize('NFD')
|
|
2357
|
-
.replace(/[\u0300-\u036f]/g, '');
|
|
2358
|
-
/**
|
|
2359
|
-
* Convert a poi name to a URL compatible slug, logic copied from TOPOS
|
|
2360
|
-
* @param fragment A poi name
|
|
2361
|
-
* @returns
|
|
2362
|
-
*/
|
|
2363
|
-
const createSlug = (fragment) => slugify(fragment
|
|
2364
|
-
.replace(/ \/ /g, '-')
|
|
2365
|
-
.replace(/ /g, '-')
|
|
2366
|
-
.replace(/\//g, '')
|
|
2367
|
-
.replace(/\./g, '')
|
|
2368
|
-
.replace(/\,/g, '')
|
|
2368
|
+
/**
|
|
2369
|
+
* Transform to lowercase, extract accents to separate unicode chars,
|
|
2370
|
+
* replace all accent unicode chars so only standard latin chars remain
|
|
2371
|
+
* https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463#37511463
|
|
2372
|
+
*
|
|
2373
|
+
* @param str Input string
|
|
2374
|
+
* @returns
|
|
2375
|
+
*/
|
|
2376
|
+
const hardNormalize = (str) => str
|
|
2377
|
+
.toLowerCase()
|
|
2378
|
+
.normalize('NFD')
|
|
2379
|
+
.replace(/[\u0300-\u036f]/g, '');
|
|
2380
|
+
/**
|
|
2381
|
+
* Convert a poi name to a URL compatible slug, logic copied from TOPOS
|
|
2382
|
+
* @param fragment A poi name
|
|
2383
|
+
* @returns
|
|
2384
|
+
*/
|
|
2385
|
+
const createSlug = (fragment) => slugify(fragment
|
|
2386
|
+
.replace(/ \/ /g, '-')
|
|
2387
|
+
.replace(/ /g, '-')
|
|
2388
|
+
.replace(/\//g, '')
|
|
2389
|
+
.replace(/\./g, '')
|
|
2390
|
+
.replace(/\,/g, '')
|
|
2369
2391
|
.replace(/\'/g, ''));
|
|
2370
2392
|
|
|
2371
|
-
// Never load types twice
|
|
2372
|
-
let typesCache = null;
|
|
2373
|
-
/**
|
|
2374
|
-
* Convert Post POI ids to stao cache ids
|
|
2375
|
-
* @returns
|
|
2376
|
-
*/
|
|
2377
|
-
const convertTypes = async () => {
|
|
2378
|
-
if (typesCache === null) {
|
|
2379
|
-
try {
|
|
2380
|
-
const typesResponse = await fetch(`${gisAPIUrl}/Types?lang=${state.currentLanguage}`);
|
|
2381
|
-
const typesJSON = (await typesResponse.json());
|
|
2382
|
-
typesCache = encodeURIComponent(pois
|
|
2383
|
-
.map(poi => {
|
|
2384
|
-
const foundType = typesJSON.types.find(type => type.id === poi);
|
|
2385
|
-
return foundType === null || foundType === void 0 ? void 0 : foundType.tag;
|
|
2386
|
-
})
|
|
2387
|
-
.filter(poi => poi !== undefined)
|
|
2388
|
-
.join(','));
|
|
2389
|
-
}
|
|
2390
|
-
catch (error) {
|
|
2391
|
-
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2392
|
-
throw error;
|
|
2393
|
-
}
|
|
2394
|
-
}
|
|
2395
|
-
return typesCache;
|
|
2396
|
-
};
|
|
2397
|
-
/**
|
|
2398
|
-
* Query the Gis API for locations and localities (pois)
|
|
2399
|
-
*
|
|
2400
|
-
* @param query User input string
|
|
2401
|
-
* @returns
|
|
2402
|
-
*/
|
|
2403
|
-
const queryPlaces = async (query) => {
|
|
2404
|
-
if (query.length === 0) {
|
|
2405
|
-
return [];
|
|
2406
|
-
}
|
|
2407
|
-
const limit = 8;
|
|
2408
|
-
const excludeTypes = ['address', 'locality', 'region'];
|
|
2409
|
-
const types = await convertTypes();
|
|
2410
|
-
const geocoderUrl = `${gisAPIUrl}/Geocode?query=${encodeURIComponent(query)}&lang=${state.currentLanguage}&pois=${types}&limit=100`;
|
|
2411
|
-
try {
|
|
2412
|
-
const geocodeResponse = await fetch(geocoderUrl);
|
|
2413
|
-
const geocodeJSON = (await geocodeResponse.json());
|
|
2414
|
-
if (!geocodeJSON.ok) {
|
|
2415
|
-
throw new Error(geocodeJSON.info);
|
|
2416
|
-
}
|
|
2417
|
-
return geocodeJSON.locations
|
|
2418
|
-
.filter(location => !excludeTypes.includes(location.type))
|
|
2419
|
-
.slice(0, limit);
|
|
2420
|
-
}
|
|
2421
|
-
catch (error) {
|
|
2422
|
-
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2423
|
-
throw error;
|
|
2424
|
-
}
|
|
2425
|
-
};
|
|
2426
|
-
/**
|
|
2427
|
-
* Try to highlight place suggestions
|
|
2428
|
-
* Limitation: accented chars are not handled by this basic function
|
|
2429
|
-
*
|
|
2430
|
-
* @param query Search term
|
|
2431
|
-
* @param place Name of the suggested place
|
|
2432
|
-
* @returns
|
|
2433
|
-
*/
|
|
2434
|
-
const highlightPlacesString = (query, place) => {
|
|
2435
|
-
if (query === undefined)
|
|
2436
|
-
return place;
|
|
2437
|
-
// Strip accents from the string
|
|
2438
|
-
const reference = hardNormalize(place);
|
|
2439
|
-
const q = hardNormalize(query);
|
|
2440
|
-
const indexOfQuery = reference.indexOf(q);
|
|
2441
|
-
if (indexOfQuery < 0) {
|
|
2442
|
-
return place;
|
|
2443
|
-
}
|
|
2444
|
-
return `${place.substring(0, indexOfQuery)}{${place.substring(indexOfQuery, indexOfQuery + query.length)}}${place.substring(indexOfQuery + query.length, place.length)}`;
|
|
2445
|
-
};
|
|
2446
|
-
/**
|
|
2447
|
-
* Get the deeplink to any location found via geocoder
|
|
2448
|
-
*
|
|
2449
|
-
* @param location A location from the Gis API Geocode endpoint
|
|
2450
|
-
* @returns
|
|
2451
|
-
*/
|
|
2452
|
-
const getPlacesUrl = (location) => {
|
|
2453
|
-
let url;
|
|
2454
|
-
if (location.id !== '') {
|
|
2455
|
-
url = `${placesUrl}/${state.currentLanguage}/${location.id}/${createSlug(location.name)}`;
|
|
2456
|
-
}
|
|
2457
|
-
else {
|
|
2458
|
-
url = `${placesUrl}?preselecttext=${encodeURIComponent(location.name)}`;
|
|
2459
|
-
}
|
|
2460
|
-
return url;
|
|
2393
|
+
// Never load types twice
|
|
2394
|
+
let typesCache = null;
|
|
2395
|
+
/**
|
|
2396
|
+
* Convert Post POI ids to stao cache ids
|
|
2397
|
+
* @returns
|
|
2398
|
+
*/
|
|
2399
|
+
const convertTypes = async () => {
|
|
2400
|
+
if (typesCache === null) {
|
|
2401
|
+
try {
|
|
2402
|
+
const typesResponse = await fetch(`${gisAPIUrl}/Types?lang=${state.currentLanguage}`);
|
|
2403
|
+
const typesJSON = (await typesResponse.json());
|
|
2404
|
+
typesCache = encodeURIComponent(pois
|
|
2405
|
+
.map(poi => {
|
|
2406
|
+
const foundType = typesJSON.types.find(type => type.id === poi);
|
|
2407
|
+
return foundType === null || foundType === void 0 ? void 0 : foundType.tag;
|
|
2408
|
+
})
|
|
2409
|
+
.filter(poi => poi !== undefined)
|
|
2410
|
+
.join(','));
|
|
2411
|
+
}
|
|
2412
|
+
catch (error) {
|
|
2413
|
+
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2414
|
+
throw error;
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
return typesCache;
|
|
2418
|
+
};
|
|
2419
|
+
/**
|
|
2420
|
+
* Query the Gis API for locations and localities (pois)
|
|
2421
|
+
*
|
|
2422
|
+
* @param query User input string
|
|
2423
|
+
* @returns
|
|
2424
|
+
*/
|
|
2425
|
+
const queryPlaces = async (query) => {
|
|
2426
|
+
if (query.length === 0) {
|
|
2427
|
+
return [];
|
|
2428
|
+
}
|
|
2429
|
+
const limit = 8;
|
|
2430
|
+
const excludeTypes = ['address', 'locality', 'region'];
|
|
2431
|
+
const types = await convertTypes();
|
|
2432
|
+
const geocoderUrl = `${gisAPIUrl}/Geocode?query=${encodeURIComponent(query)}&lang=${state.currentLanguage}&pois=${types}&limit=100`;
|
|
2433
|
+
try {
|
|
2434
|
+
const geocodeResponse = await fetch(geocoderUrl);
|
|
2435
|
+
const geocodeJSON = (await geocodeResponse.json());
|
|
2436
|
+
if (!geocodeJSON.ok) {
|
|
2437
|
+
throw new Error(geocodeJSON.info);
|
|
2438
|
+
}
|
|
2439
|
+
return geocodeJSON.locations
|
|
2440
|
+
.filter(location => !excludeTypes.includes(location.type))
|
|
2441
|
+
.slice(0, limit);
|
|
2442
|
+
}
|
|
2443
|
+
catch (error) {
|
|
2444
|
+
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2445
|
+
throw error;
|
|
2446
|
+
}
|
|
2447
|
+
};
|
|
2448
|
+
/**
|
|
2449
|
+
* Try to highlight place suggestions
|
|
2450
|
+
* Limitation: accented chars are not handled by this basic function
|
|
2451
|
+
*
|
|
2452
|
+
* @param query Search term
|
|
2453
|
+
* @param place Name of the suggested place
|
|
2454
|
+
* @returns
|
|
2455
|
+
*/
|
|
2456
|
+
const highlightPlacesString = (query, place) => {
|
|
2457
|
+
if (query === undefined)
|
|
2458
|
+
return place;
|
|
2459
|
+
// Strip accents from the string
|
|
2460
|
+
const reference = hardNormalize(place);
|
|
2461
|
+
const q = hardNormalize(query);
|
|
2462
|
+
const indexOfQuery = reference.indexOf(q);
|
|
2463
|
+
if (indexOfQuery < 0) {
|
|
2464
|
+
return place;
|
|
2465
|
+
}
|
|
2466
|
+
return `${place.substring(0, indexOfQuery)}{${place.substring(indexOfQuery, indexOfQuery + query.length)}}${place.substring(indexOfQuery + query.length, place.length)}`;
|
|
2467
|
+
};
|
|
2468
|
+
/**
|
|
2469
|
+
* Get the deeplink to any location found via geocoder
|
|
2470
|
+
*
|
|
2471
|
+
* @param location A location from the Gis API Geocode endpoint
|
|
2472
|
+
* @returns
|
|
2473
|
+
*/
|
|
2474
|
+
const getPlacesUrl = (location) => {
|
|
2475
|
+
let url;
|
|
2476
|
+
if (location.id !== '') {
|
|
2477
|
+
url = `${placesUrl}/${state.currentLanguage}/${location.id}/${createSlug(location.name)}`;
|
|
2478
|
+
}
|
|
2479
|
+
else {
|
|
2480
|
+
url = `${placesUrl}?preselecttext=${encodeURIComponent(location.name)}`;
|
|
2481
|
+
}
|
|
2482
|
+
return url;
|
|
2461
2483
|
};
|
|
2462
2484
|
|
|
2463
|
-
const HighlightedText = (props) => {
|
|
2464
|
-
var _a;
|
|
2465
|
-
const highlightClass = (_a = props.highlightClass) !== null && _a !== void 0 ? _a : 'bold';
|
|
2466
|
-
const highlightedString = props.text
|
|
2467
|
-
.replace(/{/g, `<span class=${highlightClass}>`)
|
|
2468
|
-
.replace(/}/g, '</span>')
|
|
2469
|
-
.replace(/[\[\]]/g, '');
|
|
2470
|
-
return h("span", { innerHTML: highlightedString });
|
|
2485
|
+
const HighlightedText = (props) => {
|
|
2486
|
+
var _a;
|
|
2487
|
+
const highlightClass = (_a = props.highlightClass) !== null && _a !== void 0 ? _a : 'bold';
|
|
2488
|
+
const highlightedString = props.text
|
|
2489
|
+
.replace(/{/g, `<span class=${highlightClass}>`)
|
|
2490
|
+
.replace(/}/g, '</span>')
|
|
2491
|
+
.replace(/[\[\]]/g, '');
|
|
2492
|
+
return h("span", { innerHTML: highlightedString });
|
|
2471
2493
|
};
|
|
2472
2494
|
|
|
2473
2495
|
const postSearchCss = "@charset \"UTF-8\";/*!\n * Bootstrap Utilities v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n\n * The MIT License (MIT)\n\n * Copyright (c) 2011-2020 Twitter, Inc.\n * Copyright (c) 2011-2020 The Bootstrap Authors\n\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */.form-label{margin-bottom:0.5rem;color:rgba(var(--post-contrast-color-rgb), 0.8)}.col-form-label{padding-top:calc(0.875rem + 2px);padding-bottom:calc(0.875rem + 2px);margin-bottom:0;font-size:inherit;line-height:1.4;color:rgba(var(--post-contrast-color-rgb), 0.8)}.col-form-label-lg{padding-top:calc(1.25rem + 2px);padding-bottom:calc(1.25rem + 2px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.375rem + 2px);padding-bottom:calc(0.375rem + 2px);font-size:0.875rem}.form-text{margin-top:0.25rem;font-size:0.8125rem;color:var(--post-contrast-color)}.form-control{display:block;width:100%;padding:0.875rem 1.125rem;font-size:1rem;font-weight:400;line-height:1.4;color:#000;background-color:#fff;background-clip:padding-box;border:2px solid #666666;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0;-webkit-transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{-webkit-transition:none;transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#000;background-color:#fff;border-color:#000;outline:0;-webkit-box-shadow:0 0 0 0.125rem rgba(51, 51, 51, 0.25);box-shadow:0 0 0 0.125rem rgba(51, 51, 51, 0.25)}.form-control::-webkit-date-and-time-value{height:1.4em}.form-control::-webkit-input-placeholder{color:#666666;opacity:1}.form-control::-moz-placeholder{color:#666666;opacity:1}.form-control:-ms-input-placeholder{color:#666666;opacity:1}.form-control::-ms-input-placeholder{color:#666666;opacity:1}.form-control::placeholder{color:#666666;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);border-color:#cccccc;opacity:1}.form-control::-webkit-file-upload-button{padding:0.875rem 1.125rem;margin:-0.875rem -1.125rem;-webkit-margin-end:1.125rem;margin-inline-end:1.125rem;color:#000;background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:2px;border-radius:0;-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1)}.form-control::file-selector-button{padding:0.875rem 1.125rem;margin:-0.875rem -1.125rem;-webkit-margin-end:1.125rem;margin-inline-end:1.125rem;color:#000;background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:2px;border-radius:0;-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1)}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#fff}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#fff}.form-control::-webkit-file-upload-button{padding:0.875rem 1.125rem;margin:-0.875rem -1.125rem;-webkit-margin-end:1.125rem;margin-inline-end:1.125rem;color:#000;background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:2px;border-radius:0;-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1)}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#fff}.form-control-plaintext{display:block;width:100%;padding:0.875rem 0;margin-bottom:0;line-height:1.4;color:var(--post-contrast-color);background-color:transparent;border:solid transparent;border-width:2px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg,.form-floating>.form-control-plaintext.form-control,.form-floating>.form-control-plaintext.form-select{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.8875rem + 4px);padding:0.375rem 0.875rem;font-size:0.875rem;border-radius:0}.form-control-sm::-webkit-file-upload-button{padding:0.375rem 0.875rem;margin:-0.375rem -0.875rem;-webkit-margin-end:0.875rem;margin-inline-end:0.875rem}.form-control-sm::file-selector-button{padding:0.375rem 0.875rem;margin:-0.375rem -0.875rem;-webkit-margin-end:0.875rem;margin-inline-end:0.875rem}.form-control-sm::-webkit-file-upload-button{padding:0.375rem 0.875rem;margin:-0.375rem -0.875rem;-webkit-margin-end:0.875rem;margin-inline-end:0.875rem}.form-control-lg,.form-floating>.form-control,.form-floating>.form-select{min-height:calc(4.25rem + 4px);padding:1.25rem 1.375rem;font-size:1.25rem;border-radius:0}.form-control-lg::-webkit-file-upload-button,.form-floating>.form-control::-webkit-file-upload-button,.form-floating>.form-select::-webkit-file-upload-button{padding:1.25rem 1.375rem;margin:-1.25rem -1.375rem;-webkit-margin-end:1.375rem;margin-inline-end:1.375rem}.form-control-lg::file-selector-button,.form-floating>.form-control::file-selector-button,.form-floating>.form-select::file-selector-button{padding:1.25rem 1.375rem;margin:-1.25rem -1.375rem;-webkit-margin-end:1.375rem;margin-inline-end:1.375rem}.form-control-lg::-webkit-file-upload-button,.form-floating>.form-control::-webkit-file-upload-button,.form-floating>.form-select::-webkit-file-upload-button{padding:1.25rem 1.375rem;margin:-1.25rem -1.375rem;-webkit-margin-end:1.375rem;margin-inline-end:1.375rem}textarea.form-control{min-height:calc(3.15rem + 4px)}textarea.form-control-sm{min-height:calc(1.8875rem + 4px)}textarea.form-control-lg,.form-floating>textarea.form-control,.form-floating>textarea.form-select{min-height:calc(4.25rem + 4px)}.form-control-color{width:3rem;height:auto;padding:0.875rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.4em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1.4em;border-radius:0}.form-select{display:block;width:100%;padding:0.875rem 3.375rem 0.875rem 1.125rem;-moz-padding-start:calc(1.125rem - 3px);font-size:1rem;font-weight:400;line-height:1.4;color:#000;background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath opacity='1' fill='%23000000' d='M27.6 10.667l-11.6 11.6-11.467-11.6-1.067 1.067 12.533 12.4 12.533-12.4z'%3E%3C/path%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 1.125rem center;background-size:14px 14px;border:2px solid #666666;border-radius:0;-webkit-transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.form-select{-webkit-transition:none;transition:none}}.form-select:focus{border-color:#000;outline:0;-webkit-box-shadow:0 0 0 0.125rem rgba(51, 51, 51, 0.25);box-shadow:0 0 0 0.125rem rgba(51, 51, 51, 0.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:1.125rem;background-image:none}.form-select:disabled{color:#666666;background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);border-color:#cccccc}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.form-select-sm{padding-top:0.375rem;padding-bottom:0.375rem;padding-left:0.875rem;font-size:0.875rem;border-radius:0}.form-select-lg{padding-top:1.25rem;padding-bottom:1.25rem;padding-left:1.375rem;font-size:1.25rem;border-radius:0}.form-check{display:block;min-height:1.5rem;padding-left:0;margin-bottom:1rem}.form-check .form-check-input{float:left;margin-left:0}.form-check-input{width:1.5rem;height:1.5rem;margin-top:-0.05rem;vertical-align:top;background-color:transparent;background-repeat:no-repeat;background-position:center;background-size:contain;border:2px solid #666666;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:0}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{-webkit-filter:none;filter:none}.form-check-input:focus{border-color:#000;outline:0;-webkit-box-shadow:0 0 0 0.125rem rgba(0, 0, 0, 0.25);box-shadow:0 0 0 0.125rem rgba(0, 0, 0, 0.25)}.form-check-input:checked{background-color:transparent;border-color:#000}.form-check-input:checked[type=checkbox]{background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath opacity='1' fill='%23000000' d='M12.667 23.6l-7.2-7.067 1.067-1.067 6.133 6.267 12.8-12.933 1.067 1.067z'%3E%3C/path%3E%3C/svg%3E\")}.form-check-input:checked[type=radio]{background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='-3 -3 6 6'%3E%3Ccircle opacity='1' fill='%23000000' r='2'%3E%3C/circle%3E%3C/svg%3E\")}.form-check-input[type=checkbox]:indeterminate{background-color:transparent;border-color:#000;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath opacity='1' fill='%23000000' d='M5.333 16.010l20-0.021 0.001 1.333-20 0.021-0.001-1.333z'%3E%3C/path%3E%3C/svg%3E\")}.form-check-input:disabled{pointer-events:none;-webkit-filter:none;filter:none;opacity:0.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:0.5}.form-check-label{color:rgba(var(--post-contrast-color-rgb), 0.8);cursor:pointer}.form-switch{padding-left:0}.form-switch .form-check-input{width:4rem;margin-left:0;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-16 -16 32 32'%3e%3ccircle r='15' stroke='%23666666' stroke-width='2' fill='%23fff'/%3e%3c/svg%3e\");background-position:left center;border-radius:4rem;-webkit-transition:background-position 250ms cubic-bezier(0.4, 0, 0.2, 1), background-color 250ms;transition:background-position 250ms cubic-bezier(0.4, 0, 0.2, 1), background-color 250ms}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{-webkit-transition:none;transition:none}}.form-switch .form-check-input:focus{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-16 -16 32 32'%3e%3ccircle r='15' stroke='%23000' stroke-width='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-16 -16 32 32'%3e%3ccircle r='15' stroke='%23000' stroke-width='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-inline{display:inline-block;margin-right:1.5rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;-webkit-filter:none;filter:none;opacity:0.4}.form-range{width:100%;height:2.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #000, 0 0 0 0.2rem rgba(51, 51, 51, 0.25);box-shadow:0 0 0 1px #000, 0 0 0 0.2rem rgba(51, 51, 51, 0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #000, 0 0 0 0.2rem rgba(51, 51, 51, 0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:2rem;height:2rem;margin-top:-0.9rem;background-color:#fff;border:2px solid #000;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#fff}.form-range::-webkit-slider-runnable-track{width:100%;height:0.2rem;color:transparent;cursor:pointer;background-color:#cccccc;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:2rem;height:2rem;background-color:#fff;border:2px solid #000;border-radius:1rem;-moz-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#fff}.form-range::-moz-range-track{width:100%;height:0.2rem;color:transparent;cursor:pointer;background-color:#cccccc;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#fff}.form-range:disabled::-moz-range-thumb{background-color:#fff}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(4.25rem + 4px);line-height:1.4}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1.25rem 1.375rem;pointer-events:none;border:2px solid transparent;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1)}@media (prefers-reduced-motion: reduce){.form-floating>label{-webkit-transition:none;transition:none}}.form-floating>.form-control{padding:1.25rem 1.375rem}.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control:-ms-input-placeholder{color:transparent}.form-floating>.form-control::-ms-input-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:not(:-ms-input-placeholder){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:-webkit-autofill{padding-top:1.5rem;padding-bottom:0}.form-floating>.form-select{padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:1;transform:scale(0.7647058824)}.form-floating>.form-control:not(:-ms-input-placeholder)~label{opacity:1;transform:scale(0.7647058824)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:1;-webkit-transform:scale(0.7647058824);transform:scale(0.7647058824)}.form-floating>.form-control:-webkit-autofill~label{opacity:1;-webkit-transform:scale(0.7647058824);transform:scale(0.7647058824)}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:0.875rem 1.125rem;font-size:1rem;font-weight:400;line-height:1.4;color:#000;text-align:center;white-space:nowrap;background-color:rgba(var(--post-contrast-color-inverted-rgb), 0.6);border:2px solid #666666;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:1.25rem 1.375rem;font-size:1.25rem;border-radius:0}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:0.375rem 0.875rem;font-size:0.875rem;border-radius:0}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:4.5rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-2px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:0;font-size:1rem;color:#666666}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:1rem;color:#fff;background-color:#666666;border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#666666;padding-right:3.15rem;background-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24pt' height='24pt' viewBox='0 0 24 24' version='1.1'%3E%3Cg id='surface1'%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%280%25,50.588235%25,22.745098%25%29;fill-opacity:1;' d='M 9.5 18.398438 L 3.800781 12.699219 L 5.199219 11.300781 L 9.5 15.597656 L 18.800781 6.300781 L 20.199219 7.699219 Z M 9.5 18.398438 '/%3E%3C/g%3E%3C/svg%3E%0A\");background-repeat:no-repeat;background-position:right calc(0.35em + 0.4375rem) center;background-size:calc(0.7em + 0.875rem) calc(0.7em + 0.875rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#666666;-webkit-box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25);box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:3.15rem;background-position:top calc(0.35em + 0.4375rem) right calc(0.35em + 0.4375rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#666666}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{padding-right:6.1875rem;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath opacity='1' fill='%23000000' d='M27.6 10.667l-11.6 11.6-11.467-11.6-1.067 1.067 12.533 12.4 12.533-12.4z'%3E%3C/path%3E%3C/svg%3E\"), url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24pt' height='24pt' viewBox='0 0 24 24' version='1.1'%3E%3Cg id='surface1'%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%280%25,50.588235%25,22.745098%25%29;fill-opacity:1;' d='M 9.5 18.398438 L 3.800781 12.699219 L 5.199219 11.300781 L 9.5 15.597656 L 18.800781 6.300781 L 20.199219 7.699219 Z M 9.5 18.398438 '/%3E%3C/g%3E%3C/svg%3E%0A\");background-position:right 1.125rem center, center right 3.375rem;background-size:14px 14px, calc(0.7em + 0.875rem) calc(0.7em + 0.875rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#666666;-webkit-box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25);box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#666666}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#666666}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{-webkit-box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25);box-shadow:0 0 0 0.125rem rgba(102, 102, 102, 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#666666}.form-check-inline .form-check-input~.valid-feedback{margin-left:0.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:0;font-size:1rem;color:#a51728}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:0.1rem;font-size:1rem;color:#fff;background-color:#a51728;border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#a51728;padding-right:3.15rem;background-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24pt' height='24pt' viewBox='0 0 24 24' version='1.1'%3E%3Cg id='surface1'%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%2864.705882%25,9.019608%25,15.686275%25%29;fill-opacity:1;' d='M 11 3 L 13 3 L 13 17 L 11 17 Z M 11 3 '/%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%2864.705882%25,9.019608%25,15.686275%25%29;fill-opacity:1;' d='M 11 19 L 13 19 L 13 21 L 11 21 Z M 11 19 '/%3E%3C/g%3E%3C/svg%3E%0A\");background-repeat:no-repeat;background-position:right calc(0.35em + 0.4375rem) center;background-size:calc(0.7em + 0.875rem) calc(0.7em + 0.875rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#a51728;-webkit-box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25);box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:3.15rem;background-position:top calc(0.35em + 0.4375rem) right calc(0.35em + 0.4375rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#a51728}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{padding-right:6.1875rem;background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath opacity='1' fill='%23000000' d='M27.6 10.667l-11.6 11.6-11.467-11.6-1.067 1.067 12.533 12.4 12.533-12.4z'%3E%3C/path%3E%3C/svg%3E\"), url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24pt' height='24pt' viewBox='0 0 24 24' version='1.1'%3E%3Cg id='surface1'%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%2864.705882%25,9.019608%25,15.686275%25%29;fill-opacity:1;' d='M 11 3 L 13 3 L 13 17 L 11 17 Z M 11 3 '/%3E%3Cpath style=' stroke:none;fill-rule:nonzero;fill:rgb%2864.705882%25,9.019608%25,15.686275%25%29;fill-opacity:1;' d='M 11 19 L 13 19 L 13 21 L 11 21 Z M 11 19 '/%3E%3C/g%3E%3C/svg%3E%0A\");background-position:right 1.125rem center, center right 3.375rem;background-size:14px 14px, calc(0.7em + 0.875rem) calc(0.7em + 0.875rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#a51728;-webkit-box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25);box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#a51728}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#a51728}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{-webkit-box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25);box-shadow:0 0 0 0.125rem rgba(165, 23, 40, 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#a51728}.form-check-inline .form-check-input~.invalid-feedback{margin-left:0.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.form-control-rg{height:calc(2.65rem + 4px);padding:0.625rem 0.875rem;font-size:1rem;line-height:1.4}select.form-control-rg:not([size]):not([multiple]){height:calc(2.65rem + 4px)}.form-control{position:relative}.form-control:disabled{color:#666666}.form-control[readonly]:not(:disabled){border-color:#666666;background-color:#fff}.form-control[type=file]{min-height:calc(3.15rem + 4px)}.form-control[type=file]::-webkit-file-upload-button{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;padding-left:0;padding-right:0;width:0;border:0 none}.form-control[type=file]::file-selector-button{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;padding-left:0;padding-right:0;width:0;border:0 none}.form-control[type=file]::after{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;content:\"Choose File\";position:absolute;top:0;bottom:0;right:0;z-index:2;padding-left:inherit;padding-right:inherit;background-color:inherit;border-left:inherit;text-align:center}[lang=de] .form-control[type=file]::after{content:\"Datei auswählen\"}[lang=fr] .form-control[type=file]::after{content:\"Choisir un fichier\"}[lang=it] .form-control[type=file]::after{content:\"Scegli file\"}.form-control[type=file].form-control-sm{min-height:calc(2.15rem + 4px)}.form-control[type=file].form-control-rg{min-height:calc(2.65rem + 4px)}.form-control[type=file].form-control-lg{min-height:calc(3.9rem + 4px)}@media (forced-colors: active), (-ms-high-contrast: active), (-ms-high-contrast: white-on-black){.form-control:hover,.form-control:focus{border-color:Highlight}.form-control:hover[type=file]::after,.form-control:focus[type=file]::after{border-color:Highlight}}.form-floating>label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:2px;left:2px;margin:0;padding:1.25rem 1.375rem;height:4.25rem;border:0;color:#666666;font-size:1.0625rem;max-width:calc(100% - 4px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transform-origin:1.375rem 0;transform-origin:1.375rem 0;-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms linear;transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms linear}.form-floating>.form-control{}.form-floating>.form-control[type=file]::-webkit-file-upload-button{padding-top:1.7rem}.form-floating>.form-control[type=file]::file-selector-button{padding-top:1.7rem}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:not(:-ms-input-placeholder){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.5rem;padding-bottom:0}.form-floating>.form-control:not(:-moz-placeholder-shown)[type=file]::file-selector-button{padding-top:1.7rem}.form-floating>.form-control:not(:-ms-input-placeholder)[type=file]::file-selector-button{padding-top:1.7rem}.form-floating>.form-control:focus[type=file]::-webkit-file-upload-button,.form-floating>.form-control:not(:placeholder-shown)[type=file]::-webkit-file-upload-button{padding-top:1.7rem}.form-floating>.form-control:focus[type=file]::file-selector-button,.form-floating>.form-control:not(:placeholder-shown)[type=file]::file-selector-button{padding-top:1.7rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{padding-top:0;max-width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px);-moz-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1)}.form-floating>.form-control:not(:-ms-input-placeholder)~label{padding-top:0;max-width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px);-ms-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label{padding-top:0;max-width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px);-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1)}.form-floating>.form-select{padding-top:1.5rem;padding-bottom:0}.form-floating>.form-select~label{padding-top:0;max-width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px);-webkit-transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1);transition:all 250ms cubic-bezier(0.4, 0, 0.2, 1), width 0ms 250ms cubic-bezier(0.4, 0, 0.2, 1)}.form-floating>.form-select:empty{padding-top:1.5rem;padding-bottom:0}.form-floating>.form-select:empty~label{padding-top:1.25rem;max-width:calc(100% - 4px);-webkit-transform:none;transform:none}.form-floating>.form-select[multiple]{padding-top:2.25rem;padding-bottom:0;height:auto}.form-floating>.form-select[multiple] option{height:1.4em}.form-floating>.form-select[multiple]~label{padding-top:0.9558823529rem;padding-bottom:0;width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem);height:auto;background:#fff}.form-floating>.form-select[multiple]:empty~label{padding-top:1.25rem;padding-bottom:1.25rem;width:calc(100% - 4px - 1.375rem);height:4.25rem}.form-floating>textarea.form-control{padding-top:1.875rem;padding-bottom:1.25rem;height:auto}.form-floating>textarea.form-control~label{padding-bottom:0;width:calc(100% - 4px);max-width:none;height:unset}.form-floating>textarea.form-control:not(:-moz-placeholder-shown){padding-top:1.875rem;padding-bottom:1.25rem}.form-floating>textarea.form-control:not(:-ms-input-placeholder){padding-top:1.875rem;padding-bottom:1.25rem}.form-floating>textarea.form-control:focus,.form-floating>textarea.form-control:not(:placeholder-shown){padding-top:1.875rem;padding-bottom:1.25rem}.form-floating>textarea.form-control:not(:-moz-placeholder-shown)~label{padding-top:0.9558823529rem;width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem);max-width:none;background:#fff}.form-floating>textarea.form-control:not(:-ms-input-placeholder)~label{padding-top:0.9558823529rem;width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem);max-width:none;background:#fff}.form-floating>textarea.form-control:focus~label,.form-floating>textarea.form-control:not(:placeholder-shown)~label{padding-top:0.9558823529rem;width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem);max-width:none;background:#fff}.form-floating>textarea.form-control:is(.is-valid,.is-invalid)~label{width:calc(100% - 4px - 1.375rem - 0.5rem - 2rem)}.form-floating>textarea.form-control:is(.is-valid,.is-invalid):not(:-moz-placeholder-shown)~label{width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem - 0.6538461538rem - 2.6153846154rem)}.form-floating>textarea.form-control:is(.is-valid,.is-invalid):not(:-ms-input-placeholder)~label{width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem - 0.6538461538rem - 2.6153846154rem)}.form-floating>textarea.form-control:is(.is-valid,.is-invalid):focus~label,.form-floating>textarea.form-control:is(.is-valid,.is-invalid):not(:placeholder-shown)~label{width:calc(130.7692307692% - 0.8461538462rem - 5.2307692308px - 1.7980769231rem - 0.6538461538rem - 2.6153846154rem)}@media (forced-colors: active), (-ms-high-contrast: active), (-ms-high-contrast: white-on-black){.form-floating>input,.form-floating>textarea{}.form-floating>input::-webkit-input-placeholder,.form-floating>textarea::-webkit-input-placeholder{opacity:0}.form-floating>input::-moz-placeholder,.form-floating>textarea::-moz-placeholder{opacity:0}.form-floating>input:-ms-input-placeholder,.form-floating>textarea:-ms-input-placeholder{opacity:0}.form-floating>input::-ms-input-placeholder,.form-floating>textarea::-ms-input-placeholder{opacity:0}.form-floating>input::placeholder,.form-floating>textarea::placeholder{opacity:0}.form-floating>input::input-placeholder,.form-floating>textarea::input-placeholder{opacity:0}}.row{--bs-gutter-x:30px;--bs-gutter-y:0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-0.5 * var(--bs-gutter-x));margin-left:calc(-0.5 * var(--bs-gutter-x))}.row>*{-ms-flex-negative:0;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * 0.5);padding-left:calc(var(--bs-gutter-x) * 0.5);margin-top:var(--bs-gutter-y)}.col{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width: 400px){.col-sm{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-sm-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-sm-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-sm-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-sm-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-sm-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-sm-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width: 600px){.col-rg{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-rg-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-rg-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-rg-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-rg-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-rg-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-rg-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-rg-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-rg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-rg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-rg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-rg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-rg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-rg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-rg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-rg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-rg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-rg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-rg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-rg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-rg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-rg-0{margin-left:0}.offset-rg-1{margin-left:8.33333333%}.offset-rg-2{margin-left:16.66666667%}.offset-rg-3{margin-left:25%}.offset-rg-4{margin-left:33.33333333%}.offset-rg-5{margin-left:41.66666667%}.offset-rg-6{margin-left:50%}.offset-rg-7{margin-left:58.33333333%}.offset-rg-8{margin-left:66.66666667%}.offset-rg-9{margin-left:75%}.offset-rg-10{margin-left:83.33333333%}.offset-rg-11{margin-left:91.66666667%}.g-rg-0,.gx-rg-0{--bs-gutter-x:0}.g-rg-0,.gy-rg-0{--bs-gutter-y:0}.g-rg-1,.gx-rg-1{--bs-gutter-x:0.25rem}.g-rg-1,.gy-rg-1{--bs-gutter-y:0.25rem}.g-rg-2,.gx-rg-2{--bs-gutter-x:0.5rem}.g-rg-2,.gy-rg-2{--bs-gutter-y:0.5rem}.g-rg-3,.gx-rg-3{--bs-gutter-x:1rem}.g-rg-3,.gy-rg-3{--bs-gutter-y:1rem}.g-rg-4,.gx-rg-4{--bs-gutter-x:1.5rem}.g-rg-4,.gy-rg-4{--bs-gutter-y:1.5rem}.g-rg-5,.gx-rg-5{--bs-gutter-x:3rem}.g-rg-5,.gy-rg-5{--bs-gutter-y:3rem}}@media (min-width: 780px){.col-md{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-md-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-md-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-md-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-md-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-md-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-md-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width: 1024px){.col-lg{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-lg-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-lg-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-lg-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-lg-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-lg-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-lg-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width: 1280px){.col-xl{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-xl-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xl-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xl-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xl-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xl-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xl-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width: 1441px){.col-xxl{-ms-flex:1 0 0%;flex:1 0 0%}.row-cols-xxl-auto>*{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xxl-1>*{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xxl-2>*{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xxl-3>*{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xxl-5>*{-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xxl-6>*{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xxl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-xxl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xxl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xxl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-xxl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-xxl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xxl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-xxl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-xxl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xxl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-xxl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-xxl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.container,.container-fluid,.container-xs{width:100%;padding-right:var(--bs-gutter-x, 15px);padding-left:var(--bs-gutter-x, 15px);margin-right:auto;margin-left:auto}.container{max-width:1440px}.vertical-gutters{margin-bottom:-30px}.vertical-gutters>.col,.vertical-gutters>[class*=col-]{padding-bottom:30px}.row.border-gutters{margin-right:-1px;margin-bottom:-1px;margin-left:0}.row.border-gutters>.col,.row.border-gutters>[class*=col-]{padding-right:1px;padding-bottom:1px;padding-left:0}.container{padding-right:12px;padding-left:12px}.container-reset{margin-right:-12px;margin-left:-12px}.container-reset-left{margin-left:-12px}.container-reset-right{margin-right:-12px}@media (max-width: 399.98px){.container-fluid-xs{padding-right:1rem;padding-left:1rem}}@media (min-width: 400px){.container{padding-right:16px;padding-left:16px}}@media (min-width: 400px){.container-reset{margin-right:-16px;margin-left:-16px}}@media (min-width: 400px){.container-reset-left{margin-left:-16px}}@media (min-width: 400px){.container-reset-right{margin-right:-16px}}@media (min-width: 400px) and (max-width: 599.98px){.container-fluid-sm{padding-right:1rem;padding-left:1rem}}@media (min-width: 600px){.container{padding-right:32px;padding-left:32px}}@media (min-width: 600px){.container-reset{margin-right:-32px;margin-left:-32px}}@media (min-width: 600px){.container-reset-left{margin-left:-32px}}@media (min-width: 600px){.container-reset-right{margin-right:-32px}}@media (min-width: 600px) and (max-width: 779.98px){.container-fluid-rg{padding-right:1rem;padding-left:1rem}}@media (min-width: 780px) and (max-width: 1023.98px){.container-fluid-md{padding-right:1rem;padding-left:1rem}}@media (min-width: 1024px){.container{padding-right:40px;padding-left:40px}}@media (min-width: 1024px){.container-reset{margin-right:-40px;margin-left:-40px}}@media (min-width: 1024px){.container-reset-left{margin-left:-40px}}@media (min-width: 1024px){.container-reset-right{margin-right:-40px}}@media (min-width: 1024px) and (max-width: 1279.98px){.container-fluid-lg{padding-right:1rem;padding-left:1rem}}@media (min-width: 1280px){.container{padding-right:128px;padding-left:128px}}@media (min-width: 1280px){.container-reset{margin-right:-128px;margin-left:-128px}}@media (min-width: 1280px){.container-reset-left{margin-left:-128px}}@media (min-width: 1280px){.container-reset-right{margin-right:-128px}}@media (min-width: 1280px) and (max-width: 1440.98px){.container-fluid-xl{padding-right:1rem;padding-left:1rem}}@media (min-width: 1441px){.container-fluid-xxl{padding-right:1rem;padding-left:1rem}}@font-face{font-display:swap;font-family:\"Frutiger Neue For Post\";font-weight:700;src:url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Bold.woff2\") format(\"woff2\"), url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Bold.woff\") format(\"woff\")}@font-face{font-display:swap;font-family:\"Frutiger Neue For Post\";font-weight:400;src:url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Rg.woff2\") format(\"woff2\"), url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Rg.woff\") format(\"woff\")}@font-face{font-display:swap;font-family:\"Frutiger Neue For Post\";font-weight:300;src:url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Lt.woff2\") format(\"woff2\"), url(\"https://fonts.post.ch/frutigerneueforpost/v2/FrutigerNeueforPostW05-Lt.woff\") format(\"woff\")}*,:host,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}:host{font-family:\"Frutiger Neue For Post\", system-ui, sans-serif}button{font:inherit;padding:0}img,svg{max-width:100%;max-height:100%}@media (forced-colors: active){svg{color:white}}.no-list{list-style:none;padding-left:0;margin-top:0;margin-bottom:0}.btn-blank{background-color:transparent;border:none;border-radius:0;padding:0}.search-button,.nav-link{text-decoration:none;color:rgba(0, 0, 0, 0.8);-webkit-transition:color 200ms;transition:color 200ms;background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none;border:0;margin:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;gap:0.5rem}.search-button:hover,.nav-link:hover,.search-button:focus,.nav-link:focus{color:black}.search-button>svg,.nav-link>svg{width:1.4em;height:1.4em;-ms-flex-negative:0;flex-shrink:0}.search-button>span,.nav-link>span{-ms-flex-negative:1;flex-shrink:1}.box>*:first-child{margin-top:0}.box>*:last-child{margin-bottom:0}.mirrored{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.bold{font-weight:700}.light{font-weight:300}.d-flex{display:-ms-flexbox;display:flex}.d-inline-flex{display:-ms-inline-flexbox;display:inline-flex}.align-items-center{-ms-flex-align:center;align-items:center}@media (min-width: 1441px){.wide-container{margin:0 auto;max-width:1440px}}@media (max-width: 599.98px){.container{padding-right:16px;padding-left:16px}}@media (min-width: 600px) and (max-width: 1023.98px){.container{padding-right:32px;padding-left:32px}}@media (min-width: 1024px){.container{padding-right:40px;padding-left:40px}}.visually-hidden{position:absolute;width:1px;height:1px;border:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0)}@media (max-width: -0.02px){.hidden-xs{display:none}}@media (max-width: 399.98px){.hidden-sm{display:none}}@media (max-width: 599.98px){.hidden-rg{display:none}}@media (max-width: 779.98px){.hidden-md{display:none}}@media (max-width: 1023.98px){.hidden-lg{display:none}}@media (max-width: 1279.98px){.hidden-xl{display:none}}@media (max-width: 1440.98px){.hidden-xxl{display:none}}:host{display:block}.search,:host{height:100%}.search-button{height:100%;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;cursor:pointer;padding-right:calc(1rem - 1px);padding-left:calc(1rem - 1px)}@media (min-width: 1024px){.search-button{padding:0 calc(1.125rem - 1px)}}@media (min-width: 1280px){.search-button{padding:0 calc(1.5rem - 1px)}}.search-button svg{width:1.5rem;height:1.5rem}@media (min-width: 600px) and (max-width: 1023.98px){.search-button .visually-hidden{position:static;width:auto;height:auto;margin:auto;overflow:visible;clip:auto;visibility:visible;font-weight:300;margin-right:0.5rem;cursor:pointer}}.flyout{position:absolute;top:100%;left:0;width:100%;background:white;overflow:auto;-ms-scroll-chaining:none;overscroll-behavior:contain;padding-top:3.25rem;padding-bottom:3.25rem;z-index:-1;-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:-webkit-transform 0.35s, -webkit-box-shadow 0.35s;transition:-webkit-transform 0.35s, -webkit-box-shadow 0.35s;transition:transform 0.35s, box-shadow 0.35s;transition:transform 0.35s, box-shadow 0.35s, -webkit-transform 0.35s, -webkit-box-shadow 0.35s}@media (prefers-reduced-motion: reduce){.flyout{-webkit-transition:none;transition:none}}@media (min-width: 1024px){.flyout{max-height:calc(100vh - var(--header-height) - var(--meta-header-height) - 1px);-webkit-box-shadow:0 0 1px 0 rgba(0, 0, 0, 0.4);box-shadow:0 0 1px 0 rgba(0, 0, 0, 0.4)}.flyout.open{-webkit-box-shadow:0 0 8px 0 rgba(0, 0, 0, 0.4);box-shadow:0 0 8px 0 rgba(0, 0, 0, 0.4)}}@media (max-width: 1023.98px){.flyout{height:calc(100vh - var(--header-height) - 1px)}}.flyout.open{-webkit-transform:translateY(0);transform:translateY(0)}.start-search-button{position:absolute;top:0;right:0;height:100%;padding-right:1rem;padding-left:1rem;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;cursor:pointer}.start-search-button svg{width:1.5rem;height:1.5rem}.suggestions{margin:1.5rem 0}.suggestions a{padding:0.75rem 1rem}.suggestions a:hover,.suggestions a:focus,.suggestions a.selected{background:#f4f3f1}.suggestions a.parcel-suggestion{-ms-flex-wrap:wrap;flex-wrap:wrap}.search-recommendation__icon{height:1.5em;width:1.5em}";
|
|
2474
2496
|
|
|
2475
|
-
const PostSearch = class {
|
|
2476
|
-
constructor(hostRef) {
|
|
2477
|
-
registerInstance(this, hostRef);
|
|
2478
|
-
this.dropdownToggled = createEvent(this, "dropdownToggled", 7);
|
|
2479
|
-
this.searchDropdownOpen = false;
|
|
2480
|
-
this.coveoSuggestions = [];
|
|
2481
|
-
this.placeSuggestions = [];
|
|
2482
|
-
this.parcelSuggestion = null;
|
|
2483
|
-
}
|
|
2484
|
-
connectedCallback() {
|
|
2485
|
-
this.throttledResize = throttle(300, () => this.handleResize());
|
|
2486
|
-
window.addEventListener('resize', this.throttledResize, { passive: true });
|
|
2487
|
-
}
|
|
2488
|
-
disconnectedCallback() {
|
|
2489
|
-
window.removeEventListener('resize', this.throttledResize);
|
|
2490
|
-
clearAllBodyScrollLocks();
|
|
2491
|
-
}
|
|
2492
|
-
componentWillUpdate() {
|
|
2493
|
-
// Check if search flyout got set to close
|
|
2494
|
-
if (this.searchFlyout && !this.searchDropdownOpen) {
|
|
2495
|
-
this.searchFlyout.classList.remove('open');
|
|
2496
|
-
// Check if element has transition applied and whether user prefers to see animations or not
|
|
2497
|
-
if (elementHasTransition(this.searchFlyout, 'transform') && !userPrefersReducedMotion()) {
|
|
2498
|
-
// Wait for CSS transition 'transform' to end before continuing
|
|
2499
|
-
return new Promise(resolve => {
|
|
2500
|
-
if (this.searchFlyout === undefined) {
|
|
2501
|
-
return resolve(true);
|
|
2502
|
-
}
|
|
2503
|
-
this.searchFlyout.addEventListener('transitionend', event => {
|
|
2504
|
-
if (event.propertyName === 'transform') {
|
|
2505
|
-
resolve(true);
|
|
2506
|
-
}
|
|
2507
|
-
});
|
|
2508
|
-
});
|
|
2509
|
-
}
|
|
2510
|
-
}
|
|
2511
|
-
}
|
|
2512
|
-
componentDidUpdate() {
|
|
2513
|
-
// Search flyout got set to open
|
|
2514
|
-
if (this.searchFlyout && this.searchDropdownOpen) {
|
|
2515
|
-
// Force browser to redraw/refresh DOM before adding 'open' class
|
|
2516
|
-
this.searchFlyout.getBoundingClientRect();
|
|
2517
|
-
this.searchFlyout.classList.add('open');
|
|
2518
|
-
}
|
|
2519
|
-
// Focus on the searchBox whenever the dropdown is opened
|
|
2520
|
-
if (this.searchDropdownOpen && this.searchBox) {
|
|
2521
|
-
this.searchBox.focus({ preventScroll: true });
|
|
2522
|
-
}
|
|
2523
|
-
}
|
|
2524
|
-
/**
|
|
2525
|
-
* Toggle the dropdown and optionally force an open/closed state
|
|
2526
|
-
* @param force Boolean to force open/closed state
|
|
2527
|
-
* @returns Boolean indicating open state of the component
|
|
2528
|
-
*/
|
|
2529
|
-
async toggleDropdown(force) {
|
|
2530
|
-
this.searchDropdownOpen =
|
|
2531
|
-
force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;
|
|
2532
|
-
this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });
|
|
2533
|
-
if (!this.searchDropdownOpen) {
|
|
2534
|
-
// Reset suggestions when dropdown closes
|
|
2535
|
-
this.coveoSuggestions = [];
|
|
2536
|
-
this.placeSuggestions = [];
|
|
2537
|
-
if (this.searchBox)
|
|
2538
|
-
this.searchBox.value = '';
|
|
2539
|
-
this.setFocus();
|
|
2540
|
-
}
|
|
2541
|
-
else {
|
|
2542
|
-
// Get basic suggestions when dropdown opens
|
|
2543
|
-
try {
|
|
2544
|
-
this.coveoSuggestions = await getCoveoSuggestions('');
|
|
2545
|
-
}
|
|
2546
|
-
catch (_a) { }
|
|
2547
|
-
}
|
|
2548
|
-
this.setBodyScroll();
|
|
2549
|
-
return this.searchDropdownOpen;
|
|
2550
|
-
}
|
|
2551
|
-
/**
|
|
2552
|
-
* Sets the focus on the search button
|
|
2553
|
-
*/
|
|
2554
|
-
async setFocus() {
|
|
2555
|
-
const shadowRoot = this.host.shadowRoot;
|
|
2556
|
-
if (shadowRoot === null) {
|
|
2557
|
-
return;
|
|
2558
|
-
}
|
|
2559
|
-
const toggleButton = shadowRoot.querySelector('.search-button');
|
|
2560
|
-
if (toggleButton) {
|
|
2561
|
-
toggleButton.focus();
|
|
2562
|
-
}
|
|
2563
|
-
}
|
|
2564
|
-
handleResize() {
|
|
2565
|
-
// Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls
|
|
2566
|
-
if (this.searchDropdownOpen) {
|
|
2567
|
-
this.setBodyScroll();
|
|
2568
|
-
}
|
|
2569
|
-
}
|
|
2570
|
-
/**
|
|
2571
|
-
* Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)
|
|
2572
|
-
*/
|
|
2573
|
-
setBodyScroll() {
|
|
2574
|
-
if (this.searchDropdownOpen && window.innerWidth < 1024) {
|
|
2575
|
-
disableBodyScroll(this.searchFlyout);
|
|
2576
|
-
}
|
|
2577
|
-
else {
|
|
2578
|
-
enableBodyScroll(this.searchFlyout);
|
|
2579
|
-
}
|
|
2580
|
-
}
|
|
2581
|
-
/**
|
|
2582
|
-
* Fetch suggestions from all available sources
|
|
2583
|
-
*/
|
|
2584
|
-
async handleSearchInput() {
|
|
2585
|
-
var _a;
|
|
2586
|
-
if (this.searchBox === undefined || ((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
2587
|
-
return;
|
|
2588
|
-
}
|
|
2589
|
-
const query = this.searchBox.value.trim();
|
|
2590
|
-
const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([
|
|
2591
|
-
queryPlaces(query),
|
|
2592
|
-
getCoveoSuggestions(query),
|
|
2593
|
-
getParcelSuggestion(query, state.localizedConfig.header.search),
|
|
2594
|
-
]);
|
|
2595
|
-
// Parcel suggestion is more important than any other
|
|
2596
|
-
if (trackAndTraceInfo) {
|
|
2597
|
-
this.parcelSuggestion = trackAndTraceInfo;
|
|
2598
|
-
this.placeSuggestions = [];
|
|
2599
|
-
this.coveoSuggestions = [];
|
|
2600
|
-
}
|
|
2601
|
-
else {
|
|
2602
|
-
[this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(coveoSuggestions, placeSuggestions, 8);
|
|
2603
|
-
}
|
|
2604
|
-
this.deselectSuggestion();
|
|
2605
|
-
}
|
|
2606
|
-
/**
|
|
2607
|
-
* Start search on enter
|
|
2608
|
-
* @param event
|
|
2609
|
-
*/
|
|
2610
|
-
handleKeyDown(event) {
|
|
2611
|
-
var _a, _b, _c, _d;
|
|
2612
|
-
if (this.searchFlyout === undefined) {
|
|
2613
|
-
return;
|
|
2614
|
-
}
|
|
2615
|
-
let selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2616
|
-
switch (event.key.toLowerCase()) {
|
|
2617
|
-
case 'enter':
|
|
2618
|
-
if (selectedSuggestion) {
|
|
2619
|
-
const selectedHref = selectedSuggestion.getAttribute('href');
|
|
2620
|
-
if (selectedHref !== null) {
|
|
2621
|
-
window.location.href = selectedHref;
|
|
2622
|
-
}
|
|
2623
|
-
}
|
|
2624
|
-
else {
|
|
2625
|
-
this.startSearch();
|
|
2626
|
-
}
|
|
2627
|
-
break;
|
|
2628
|
-
case 'arrowdown':
|
|
2629
|
-
case 'arrowup':
|
|
2630
|
-
const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');
|
|
2631
|
-
this.deselectSuggestion();
|
|
2632
|
-
if (event.key.toLowerCase() === 'arrowdown') {
|
|
2633
|
-
if ((_b = (_a = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.parentElement) === null || _a === void 0 ? void 0 : _a.nextElementSibling) === null || _b === void 0 ? void 0 : _b.firstElementChild) {
|
|
2634
|
-
// Select next suggestion if there's any, otherwise none will be selected
|
|
2635
|
-
selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add('selected');
|
|
2636
|
-
}
|
|
2637
|
-
else {
|
|
2638
|
-
// If there are any suggestions, select first suggestion in list
|
|
2639
|
-
if (suggestions.length > 0) {
|
|
2640
|
-
suggestions[0].classList.add('selected');
|
|
2641
|
-
}
|
|
2642
|
-
}
|
|
2643
|
-
}
|
|
2644
|
-
else if (event.key.toLowerCase() === 'arrowup') {
|
|
2645
|
-
if ((_d = (_c = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.parentElement) === null || _c === void 0 ? void 0 : _c.previousElementSibling) === null || _d === void 0 ? void 0 : _d.firstElementChild) {
|
|
2646
|
-
// Select previous suggestion if there's any, otherwise none will be selected
|
|
2647
|
-
selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add('selected');
|
|
2648
|
-
}
|
|
2649
|
-
else {
|
|
2650
|
-
// If there are any suggestions, select last suggestion in list
|
|
2651
|
-
if (suggestions.length > 0) {
|
|
2652
|
-
suggestions[suggestions.length - 1].classList.add('selected');
|
|
2653
|
-
}
|
|
2654
|
-
}
|
|
2655
|
-
}
|
|
2656
|
-
// Get the newly selected suggestion
|
|
2657
|
-
selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2658
|
-
const suggestedText = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.dataset.suggestionText;
|
|
2659
|
-
// Update search box value with selected suggestion text
|
|
2660
|
-
if (suggestedText !== undefined && this.searchBox) {
|
|
2661
|
-
this.searchBox.value = suggestedText;
|
|
2662
|
-
}
|
|
2663
|
-
break;
|
|
2664
|
-
}
|
|
2665
|
-
}
|
|
2666
|
-
/**
|
|
2667
|
-
* Set selected suggestion on mouse enter
|
|
2668
|
-
* @param event
|
|
2669
|
-
*/
|
|
2670
|
-
handleMouseEnterSuggestion(event) {
|
|
2671
|
-
this.deselectSuggestion();
|
|
2672
|
-
// Set hovered suggestion element as selected
|
|
2673
|
-
event.target.classList.add('selected');
|
|
2674
|
-
}
|
|
2675
|
-
/**
|
|
2676
|
-
* Set selected suggestion on mouse enter
|
|
2677
|
-
* @param event
|
|
2678
|
-
*/
|
|
2679
|
-
handleMouseLeaveSuggestions() {
|
|
2680
|
-
this.deselectSuggestion();
|
|
2681
|
-
}
|
|
2682
|
-
/**
|
|
2683
|
-
* Deselect any previously selected suggestion
|
|
2684
|
-
*/
|
|
2685
|
-
deselectSuggestion() {
|
|
2686
|
-
if (this.searchFlyout === undefined)
|
|
2687
|
-
return;
|
|
2688
|
-
const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');
|
|
2689
|
-
if (selectedSuggestion) {
|
|
2690
|
-
selectedSuggestion.classList.remove('selected');
|
|
2691
|
-
}
|
|
2692
|
-
}
|
|
2693
|
-
/**
|
|
2694
|
-
* Redirect to the post search page
|
|
2695
|
-
*/
|
|
2696
|
-
async startSearch() {
|
|
2697
|
-
var _a;
|
|
2698
|
-
if (this.searchBox && ((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search)) {
|
|
2699
|
-
const redirectUrl = await getSearchRedirectUrl(this.searchBox.value.trim(), state.localizedConfig.header.search);
|
|
2700
|
-
if (!redirectUrl)
|
|
2701
|
-
return;
|
|
2702
|
-
window.location.href = redirectUrl;
|
|
2703
|
-
}
|
|
2704
|
-
}
|
|
2705
|
-
render() {
|
|
2706
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
2707
|
-
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined) {
|
|
2708
|
-
return;
|
|
2709
|
-
}
|
|
2710
|
-
const { translations, search } = state.localizedConfig.header;
|
|
2711
|
-
const showPortalRecommendations = ((_b = this.searchBox) === null || _b === void 0 ? void 0 : _b.value) === '' && ((_c = search.searchRecommendations) === null || _c === void 0 ? void 0 : _c.links.length) > 0;
|
|
2712
|
-
return (h(Host, null, h(SvgSprite, null), h("div", { class: "search" }, h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => this.toggleDropdown(e) }, h("span", { class: "visually-hidden" }, this.searchDropdownOpen
|
|
2713
|
-
? translations.searchToggleExpanded
|
|
2714
|
-
: translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions() }, showPortalRecommendations &&
|
|
2715
|
-
search.searchRecommendations.links.map(recommendation => (h("li", { key: recommendation.href }, h("a", { class: "nav-link search-recommendation", href: new URL(recommendation.href, 'https://post.ch').href, "data-suggestion-text": recommendation.label, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), h("span", null, recommendation.label))))), this.parcelSuggestion && this.parcelSuggestion.ok && (h("li", null, h("a", { class: "nav-link parcel-suggestion", href: this.parcelSuggestion.url, "data-suggestion-text": (_d = this.searchBox) === null || _d === void 0 ? void 0 : _d.value, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-letter-parcel" }), h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
|
|
2716
|
-
_f.id, ":\u00A0"), h("span", null, (_h = (_g = this.parcelSuggestion) === null || _g === void 0 ? void 0 : _g.sending) === null || _h === void 0 ? void 0 :
|
|
2717
|
-
_h.product, ",", ' ', (_k = (_j = this.parcelSuggestion) === null || _j === void 0 ? void 0 : _j.sending) === null || _k === void 0 ? void 0 :
|
|
2718
|
-
_k.recipient.zipcode, ' ', (_m = (_l = this.parcelSuggestion) === null || _l === void 0 ? void 0 : _l.sending) === null || _m === void 0 ? void 0 :
|
|
2719
|
-
_m.recipient.city, ",", ' ', (_p = (_o = this.parcelSuggestion) === null || _o === void 0 ? void 0 : _o.sending) === null || _p === void 0 ? void 0 :
|
|
2720
|
-
_p.state)))), !showPortalRecommendations &&
|
|
2721
|
-
this.coveoSuggestions &&
|
|
2722
|
-
this.coveoSuggestions.map(suggestion => (h("li", { key: suggestion.objectId }, h("a", { class: "nav-link", href: suggestion.redirectUrl, "data-suggestion-text": suggestion.expression, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-search" }), h(HighlightedText, { text: suggestion.highlighted }))))), !showPortalRecommendations &&
|
|
2723
|
-
this.placeSuggestions &&
|
|
2724
|
-
this.placeSuggestions.map(suggestion => {
|
|
2725
|
-
var _a, _b;
|
|
2726
|
-
return (h("li", { key: suggestion.id }, h("a", { class: "nav-link", href: getPlacesUrl(suggestion), "data-suggestion-text": suggestion.name, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-place" }), h(HighlightedText, { text: highlightPlacesString((_b = (_a = this.searchBox) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.trim(), suggestion.name) }))));
|
|
2727
|
-
}))))))))));
|
|
2728
|
-
}
|
|
2729
|
-
get host() { return getElement(this); }
|
|
2730
|
-
};
|
|
2497
|
+
const PostSearch = class {
|
|
2498
|
+
constructor(hostRef) {
|
|
2499
|
+
registerInstance(this, hostRef);
|
|
2500
|
+
this.dropdownToggled = createEvent(this, "dropdownToggled", 7);
|
|
2501
|
+
this.searchDropdownOpen = false;
|
|
2502
|
+
this.coveoSuggestions = [];
|
|
2503
|
+
this.placeSuggestions = [];
|
|
2504
|
+
this.parcelSuggestion = null;
|
|
2505
|
+
}
|
|
2506
|
+
connectedCallback() {
|
|
2507
|
+
this.throttledResize = throttle(300, () => this.handleResize());
|
|
2508
|
+
window.addEventListener('resize', this.throttledResize, { passive: true });
|
|
2509
|
+
}
|
|
2510
|
+
disconnectedCallback() {
|
|
2511
|
+
window.removeEventListener('resize', this.throttledResize);
|
|
2512
|
+
clearAllBodyScrollLocks();
|
|
2513
|
+
}
|
|
2514
|
+
componentWillUpdate() {
|
|
2515
|
+
// Check if search flyout got set to close
|
|
2516
|
+
if (this.searchFlyout && !this.searchDropdownOpen) {
|
|
2517
|
+
this.searchFlyout.classList.remove('open');
|
|
2518
|
+
// Check if element has transition applied and whether user prefers to see animations or not
|
|
2519
|
+
if (elementHasTransition(this.searchFlyout, 'transform') && !userPrefersReducedMotion()) {
|
|
2520
|
+
// Wait for CSS transition 'transform' to end before continuing
|
|
2521
|
+
return new Promise(resolve => {
|
|
2522
|
+
if (this.searchFlyout === undefined) {
|
|
2523
|
+
return resolve(true);
|
|
2524
|
+
}
|
|
2525
|
+
this.searchFlyout.addEventListener('transitionend', event => {
|
|
2526
|
+
if (event.propertyName === 'transform') {
|
|
2527
|
+
resolve(true);
|
|
2528
|
+
}
|
|
2529
|
+
});
|
|
2530
|
+
});
|
|
2531
|
+
}
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
componentDidUpdate() {
|
|
2535
|
+
// Search flyout got set to open
|
|
2536
|
+
if (this.searchFlyout && this.searchDropdownOpen) {
|
|
2537
|
+
// Force browser to redraw/refresh DOM before adding 'open' class
|
|
2538
|
+
this.searchFlyout.getBoundingClientRect();
|
|
2539
|
+
this.searchFlyout.classList.add('open');
|
|
2540
|
+
}
|
|
2541
|
+
// Focus on the searchBox whenever the dropdown is opened
|
|
2542
|
+
if (this.searchDropdownOpen && this.searchBox) {
|
|
2543
|
+
this.searchBox.focus({ preventScroll: true });
|
|
2544
|
+
}
|
|
2545
|
+
}
|
|
2546
|
+
/**
|
|
2547
|
+
* Toggle the dropdown and optionally force an open/closed state
|
|
2548
|
+
* @param force Boolean to force open/closed state
|
|
2549
|
+
* @returns Boolean indicating open state of the component
|
|
2550
|
+
*/
|
|
2551
|
+
async toggleDropdown(force) {
|
|
2552
|
+
this.searchDropdownOpen =
|
|
2553
|
+
force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;
|
|
2554
|
+
this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });
|
|
2555
|
+
if (!this.searchDropdownOpen) {
|
|
2556
|
+
// Reset suggestions when dropdown closes
|
|
2557
|
+
this.coveoSuggestions = [];
|
|
2558
|
+
this.placeSuggestions = [];
|
|
2559
|
+
if (this.searchBox)
|
|
2560
|
+
this.searchBox.value = '';
|
|
2561
|
+
this.setFocus();
|
|
2562
|
+
}
|
|
2563
|
+
else {
|
|
2564
|
+
// Get basic suggestions when dropdown opens
|
|
2565
|
+
try {
|
|
2566
|
+
this.coveoSuggestions = await getCoveoSuggestions('');
|
|
2567
|
+
}
|
|
2568
|
+
catch (_a) { }
|
|
2569
|
+
}
|
|
2570
|
+
this.setBodyScroll();
|
|
2571
|
+
return this.searchDropdownOpen;
|
|
2572
|
+
}
|
|
2573
|
+
/**
|
|
2574
|
+
* Sets the focus on the search button
|
|
2575
|
+
*/
|
|
2576
|
+
async setFocus() {
|
|
2577
|
+
const shadowRoot = this.host.shadowRoot;
|
|
2578
|
+
if (shadowRoot === null) {
|
|
2579
|
+
return;
|
|
2580
|
+
}
|
|
2581
|
+
const toggleButton = shadowRoot.querySelector('.search-button');
|
|
2582
|
+
if (toggleButton) {
|
|
2583
|
+
toggleButton.focus();
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
handleResize() {
|
|
2587
|
+
// Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls
|
|
2588
|
+
if (this.searchDropdownOpen) {
|
|
2589
|
+
this.setBodyScroll();
|
|
2590
|
+
}
|
|
2591
|
+
}
|
|
2592
|
+
/**
|
|
2593
|
+
* Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)
|
|
2594
|
+
*/
|
|
2595
|
+
setBodyScroll() {
|
|
2596
|
+
if (this.searchDropdownOpen && window.innerWidth < 1024) {
|
|
2597
|
+
disableBodyScroll(this.searchFlyout);
|
|
2598
|
+
}
|
|
2599
|
+
else {
|
|
2600
|
+
enableBodyScroll(this.searchFlyout);
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
/**
|
|
2604
|
+
* Fetch suggestions from all available sources
|
|
2605
|
+
*/
|
|
2606
|
+
async handleSearchInput() {
|
|
2607
|
+
var _a;
|
|
2608
|
+
if (this.searchBox === undefined || ((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
2609
|
+
return;
|
|
2610
|
+
}
|
|
2611
|
+
const query = this.searchBox.value.trim();
|
|
2612
|
+
const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([
|
|
2613
|
+
queryPlaces(query),
|
|
2614
|
+
getCoveoSuggestions(query),
|
|
2615
|
+
getParcelSuggestion(query, state.localizedConfig.header.search),
|
|
2616
|
+
]);
|
|
2617
|
+
// Parcel suggestion is more important than any other
|
|
2618
|
+
if (trackAndTraceInfo) {
|
|
2619
|
+
this.parcelSuggestion = trackAndTraceInfo;
|
|
2620
|
+
this.placeSuggestions = [];
|
|
2621
|
+
this.coveoSuggestions = [];
|
|
2622
|
+
}
|
|
2623
|
+
else {
|
|
2624
|
+
[this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(coveoSuggestions, placeSuggestions, 8);
|
|
2625
|
+
}
|
|
2626
|
+
this.deselectSuggestion();
|
|
2627
|
+
}
|
|
2628
|
+
/**
|
|
2629
|
+
* Start search on enter
|
|
2630
|
+
* @param event
|
|
2631
|
+
*/
|
|
2632
|
+
handleKeyDown(event) {
|
|
2633
|
+
var _a, _b, _c, _d;
|
|
2634
|
+
if (this.searchFlyout === undefined) {
|
|
2635
|
+
return;
|
|
2636
|
+
}
|
|
2637
|
+
let selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2638
|
+
switch (event.key.toLowerCase()) {
|
|
2639
|
+
case 'enter':
|
|
2640
|
+
if (selectedSuggestion) {
|
|
2641
|
+
const selectedHref = selectedSuggestion.getAttribute('href');
|
|
2642
|
+
if (selectedHref !== null) {
|
|
2643
|
+
window.location.href = selectedHref;
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2646
|
+
else {
|
|
2647
|
+
this.startSearch();
|
|
2648
|
+
}
|
|
2649
|
+
break;
|
|
2650
|
+
case 'arrowdown':
|
|
2651
|
+
case 'arrowup':
|
|
2652
|
+
const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');
|
|
2653
|
+
this.deselectSuggestion();
|
|
2654
|
+
if (event.key.toLowerCase() === 'arrowdown') {
|
|
2655
|
+
if ((_b = (_a = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.parentElement) === null || _a === void 0 ? void 0 : _a.nextElementSibling) === null || _b === void 0 ? void 0 : _b.firstElementChild) {
|
|
2656
|
+
// Select next suggestion if there's any, otherwise none will be selected
|
|
2657
|
+
selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add('selected');
|
|
2658
|
+
}
|
|
2659
|
+
else {
|
|
2660
|
+
// If there are any suggestions, select first suggestion in list
|
|
2661
|
+
if (suggestions.length > 0) {
|
|
2662
|
+
suggestions[0].classList.add('selected');
|
|
2663
|
+
}
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
else if (event.key.toLowerCase() === 'arrowup') {
|
|
2667
|
+
if ((_d = (_c = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.parentElement) === null || _c === void 0 ? void 0 : _c.previousElementSibling) === null || _d === void 0 ? void 0 : _d.firstElementChild) {
|
|
2668
|
+
// Select previous suggestion if there's any, otherwise none will be selected
|
|
2669
|
+
selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add('selected');
|
|
2670
|
+
}
|
|
2671
|
+
else {
|
|
2672
|
+
// If there are any suggestions, select last suggestion in list
|
|
2673
|
+
if (suggestions.length > 0) {
|
|
2674
|
+
suggestions[suggestions.length - 1].classList.add('selected');
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
// Get the newly selected suggestion
|
|
2679
|
+
selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2680
|
+
const suggestedText = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.dataset.suggestionText;
|
|
2681
|
+
// Update search box value with selected suggestion text
|
|
2682
|
+
if (suggestedText !== undefined && this.searchBox) {
|
|
2683
|
+
this.searchBox.value = suggestedText;
|
|
2684
|
+
}
|
|
2685
|
+
break;
|
|
2686
|
+
}
|
|
2687
|
+
}
|
|
2688
|
+
/**
|
|
2689
|
+
* Set selected suggestion on mouse enter
|
|
2690
|
+
* @param event
|
|
2691
|
+
*/
|
|
2692
|
+
handleMouseEnterSuggestion(event) {
|
|
2693
|
+
this.deselectSuggestion();
|
|
2694
|
+
// Set hovered suggestion element as selected
|
|
2695
|
+
event.target.classList.add('selected');
|
|
2696
|
+
}
|
|
2697
|
+
/**
|
|
2698
|
+
* Set selected suggestion on mouse enter
|
|
2699
|
+
* @param event
|
|
2700
|
+
*/
|
|
2701
|
+
handleMouseLeaveSuggestions() {
|
|
2702
|
+
this.deselectSuggestion();
|
|
2703
|
+
}
|
|
2704
|
+
/**
|
|
2705
|
+
* Deselect any previously selected suggestion
|
|
2706
|
+
*/
|
|
2707
|
+
deselectSuggestion() {
|
|
2708
|
+
if (this.searchFlyout === undefined)
|
|
2709
|
+
return;
|
|
2710
|
+
const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');
|
|
2711
|
+
if (selectedSuggestion) {
|
|
2712
|
+
selectedSuggestion.classList.remove('selected');
|
|
2713
|
+
}
|
|
2714
|
+
}
|
|
2715
|
+
/**
|
|
2716
|
+
* Redirect to the post search page
|
|
2717
|
+
*/
|
|
2718
|
+
async startSearch() {
|
|
2719
|
+
var _a;
|
|
2720
|
+
if (this.searchBox && ((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search)) {
|
|
2721
|
+
const redirectUrl = await getSearchRedirectUrl(this.searchBox.value.trim(), state.localizedConfig.header.search);
|
|
2722
|
+
if (!redirectUrl)
|
|
2723
|
+
return;
|
|
2724
|
+
window.location.href = redirectUrl;
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
render() {
|
|
2728
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
2729
|
+
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined) {
|
|
2730
|
+
return;
|
|
2731
|
+
}
|
|
2732
|
+
const { translations, search } = state.localizedConfig.header;
|
|
2733
|
+
const showPortalRecommendations = ((_b = this.searchBox) === null || _b === void 0 ? void 0 : _b.value) === '' && ((_c = search.searchRecommendations) === null || _c === void 0 ? void 0 : _c.links.length) > 0;
|
|
2734
|
+
return (h(Host, null, h(SvgSprite, null), h("div", { class: "search" }, h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => this.toggleDropdown(e) }, h("span", { class: "visually-hidden" }, this.searchDropdownOpen
|
|
2735
|
+
? translations.searchToggleExpanded
|
|
2736
|
+
: translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions() }, showPortalRecommendations &&
|
|
2737
|
+
search.searchRecommendations.links.map(recommendation => (h("li", { key: recommendation.href }, h("a", { class: "nav-link search-recommendation", href: new URL(recommendation.href, 'https://post.ch').href, "data-suggestion-text": recommendation.label, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), h("span", null, recommendation.label))))), this.parcelSuggestion && this.parcelSuggestion.ok && (h("li", null, h("a", { class: "nav-link parcel-suggestion", href: this.parcelSuggestion.url, "data-suggestion-text": (_d = this.searchBox) === null || _d === void 0 ? void 0 : _d.value, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-letter-parcel" }), h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
|
|
2738
|
+
_f.id, ":\u00A0"), h("span", null, (_h = (_g = this.parcelSuggestion) === null || _g === void 0 ? void 0 : _g.sending) === null || _h === void 0 ? void 0 :
|
|
2739
|
+
_h.product, ",", ' ', (_k = (_j = this.parcelSuggestion) === null || _j === void 0 ? void 0 : _j.sending) === null || _k === void 0 ? void 0 :
|
|
2740
|
+
_k.recipient.zipcode, ' ', (_m = (_l = this.parcelSuggestion) === null || _l === void 0 ? void 0 : _l.sending) === null || _m === void 0 ? void 0 :
|
|
2741
|
+
_m.recipient.city, ",", ' ', (_p = (_o = this.parcelSuggestion) === null || _o === void 0 ? void 0 : _o.sending) === null || _p === void 0 ? void 0 :
|
|
2742
|
+
_p.state)))), !showPortalRecommendations &&
|
|
2743
|
+
this.coveoSuggestions &&
|
|
2744
|
+
this.coveoSuggestions.map(suggestion => (h("li", { key: suggestion.objectId }, h("a", { class: "nav-link", href: suggestion.redirectUrl, "data-suggestion-text": suggestion.expression, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-search" }), h(HighlightedText, { text: suggestion.highlighted }))))), !showPortalRecommendations &&
|
|
2745
|
+
this.placeSuggestions &&
|
|
2746
|
+
this.placeSuggestions.map(suggestion => {
|
|
2747
|
+
var _a, _b;
|
|
2748
|
+
return (h("li", { key: suggestion.id }, h("a", { class: "nav-link", href: getPlacesUrl(suggestion), "data-suggestion-text": suggestion.name, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-place" }), h(HighlightedText, { text: highlightPlacesString((_b = (_a = this.searchBox) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.trim(), suggestion.name) }))));
|
|
2749
|
+
}))))))))));
|
|
2750
|
+
}
|
|
2751
|
+
get host() { return getElement(this); }
|
|
2752
|
+
};
|
|
2731
2753
|
PostSearch.style = postSearchCss;
|
|
2732
2754
|
|
|
2733
2755
|
export { PostSearch as post_search };
|