@swisspost/internet-header 1.5.0-beta.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +226 -226
- 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.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 +243 -243
- 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 +226 -226
- 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-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-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-7ea26ee9.entry.js +2 -0
- package/dist/swisspost-internet-header/p-7ea26ee9.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-8717445f.entry.js → p-95b81c4d.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-95b81c4d.entry.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-b228fe49.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-b228fe49.system.entry.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-c946c5b8.system.entry.js → p-d6539597.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-d6539597.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
|
@@ -5,169 +5,169 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
const index = require('./index-5751975e.js');
|
|
6
6
|
const index$1 = require('./index-e7245d60.js');
|
|
7
7
|
const bodyScrollLock_esm = require('./bodyScrollLock.esm-59f17217.js');
|
|
8
|
-
const store = require('./store-
|
|
9
|
-
const ui_service = require('./ui.service-
|
|
10
|
-
const svgSprite_component = require('./svg-sprite.component-
|
|
11
|
-
const svgIcon_component = require('./svg-icon.component-
|
|
12
|
-
const if_component = require('./if.component-
|
|
13
|
-
|
|
14
|
-
// https://www.post.ch/api/trackandtrace?id=99.00.306600.01004883
|
|
15
|
-
// Track and trace URL
|
|
16
|
-
const getTrackAndTraceApiUrl = (id) => {
|
|
17
|
-
const lang = store.state.currentLanguage;
|
|
18
|
-
return `https://www.post.ch/${lang}/api/trackandtrace?id=${encodeURIComponent(id)}`;
|
|
19
|
-
};
|
|
20
|
-
// Get the redire
|
|
21
|
-
const getTrackAndTraceRedirectUrl = (query, { packageTrackingRedirectUrl }) => {
|
|
22
|
-
return packageTrackingRedirectUrl.replace('{trackingNumber}', encodeURIComponent(query));
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Check whether a query is a tracking id
|
|
26
|
-
*
|
|
27
|
-
* @param query User query
|
|
28
|
-
* @returns Boolean
|
|
29
|
-
*/
|
|
30
|
-
const isParcel = async (query, searchConfig) => {
|
|
31
|
-
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
32
|
-
return parcelInfo.ok;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Try to get parcel info from a query that is possibly a tracking id.
|
|
36
|
-
* This is mainly used to check if a search should redirect to track&trace instead of the regular search.
|
|
37
|
-
*
|
|
38
|
-
* @param query User query that is possibly a tracking number
|
|
39
|
-
* @returns Track and trace info
|
|
40
|
-
*/
|
|
41
|
-
const getParcelInfo = async (query, { redirectPattern }) => {
|
|
42
|
-
const trackingNrPattern = new RegExp(redirectPattern);
|
|
43
|
-
if (trackingNrPattern.test(query)) {
|
|
44
|
-
try {
|
|
45
|
-
const trackAndTraceReqest = await fetch(getTrackAndTraceApiUrl(query));
|
|
46
|
-
const trackAndTraceResult = await trackAndTraceReqest.json();
|
|
47
|
-
return Object.assign(Object.assign({}, trackAndTraceResult), { ok: trackAndTraceResult.ok === 'true' });
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.warn(`Could not check track and trace API due to error: ${error.message}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return { ok: false, timestamp: new Date().toDateString() };
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Get parcel info if query is a parcel or null
|
|
57
|
-
*
|
|
58
|
-
* @param query Parcel id
|
|
59
|
-
* @returns Parcel info and a redirect url or null if not a parcel
|
|
60
|
-
*/
|
|
61
|
-
const getParcelSuggestion = async (query, searchConfig) => {
|
|
62
|
-
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
63
|
-
return parcelInfo.ok
|
|
64
|
-
? Object.assign(Object.assign({}, parcelInfo), { url: getTrackAndTraceRedirectUrl(query, searchConfig) }) : null;
|
|
8
|
+
const store = require('./store-d0d514fc.js');
|
|
9
|
+
const ui_service = require('./ui.service-e1ebb6d4.js');
|
|
10
|
+
const svgSprite_component = require('./svg-sprite.component-1bd7a058.js');
|
|
11
|
+
const svgIcon_component = require('./svg-icon.component-be93f876.js');
|
|
12
|
+
const if_component = require('./if.component-51d000af.js');
|
|
13
|
+
|
|
14
|
+
// https://www.post.ch/api/trackandtrace?id=99.00.306600.01004883
|
|
15
|
+
// Track and trace URL
|
|
16
|
+
const getTrackAndTraceApiUrl = (id) => {
|
|
17
|
+
const lang = store.state.currentLanguage;
|
|
18
|
+
return `https://www.post.ch/${lang}/api/trackandtrace?id=${encodeURIComponent(id)}`;
|
|
19
|
+
};
|
|
20
|
+
// Get the redire
|
|
21
|
+
const getTrackAndTraceRedirectUrl = (query, { packageTrackingRedirectUrl }) => {
|
|
22
|
+
return packageTrackingRedirectUrl.replace('{trackingNumber}', encodeURIComponent(query));
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Check whether a query is a tracking id
|
|
26
|
+
*
|
|
27
|
+
* @param query User query
|
|
28
|
+
* @returns Boolean
|
|
29
|
+
*/
|
|
30
|
+
const isParcel = async (query, searchConfig) => {
|
|
31
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
32
|
+
return parcelInfo.ok;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Try to get parcel info from a query that is possibly a tracking id.
|
|
36
|
+
* This is mainly used to check if a search should redirect to track&trace instead of the regular search.
|
|
37
|
+
*
|
|
38
|
+
* @param query User query that is possibly a tracking number
|
|
39
|
+
* @returns Track and trace info
|
|
40
|
+
*/
|
|
41
|
+
const getParcelInfo = async (query, { redirectPattern }) => {
|
|
42
|
+
const trackingNrPattern = new RegExp(redirectPattern);
|
|
43
|
+
if (trackingNrPattern.test(query)) {
|
|
44
|
+
try {
|
|
45
|
+
const trackAndTraceReqest = await fetch(getTrackAndTraceApiUrl(query));
|
|
46
|
+
const trackAndTraceResult = await trackAndTraceReqest.json();
|
|
47
|
+
return Object.assign(Object.assign({}, trackAndTraceResult), { ok: trackAndTraceResult.ok === 'true' });
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.warn(`Could not check track and trace API due to error: ${error.message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { ok: false, timestamp: new Date().toDateString() };
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Get parcel info if query is a parcel or null
|
|
57
|
+
*
|
|
58
|
+
* @param query Parcel id
|
|
59
|
+
* @returns Parcel info and a redirect url or null if not a parcel
|
|
60
|
+
*/
|
|
61
|
+
const getParcelSuggestion = async (query, searchConfig) => {
|
|
62
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
63
|
+
return parcelInfo.ok
|
|
64
|
+
? Object.assign(Object.assign({}, parcelInfo), { url: getTrackAndTraceRedirectUrl(query, searchConfig) }) : null;
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
-
/**
|
|
68
|
-
* Construct a search page url from a query
|
|
69
|
-
*
|
|
70
|
-
* @param query Search term
|
|
71
|
-
* @returns
|
|
72
|
-
*/
|
|
73
|
-
const getSearchRedirectUrl = async (query, searchConfig) => {
|
|
74
|
-
const isTrackTraceId = await isParcel(query, searchConfig);
|
|
75
|
-
return isTrackTraceId
|
|
76
|
-
? getTrackAndTraceRedirectUrl(query, searchConfig)
|
|
77
|
-
: getSearchPageUrl(query);
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Stitch toghether the search page URL
|
|
81
|
-
*
|
|
82
|
-
* @param query Search term
|
|
83
|
-
* @returns Search page URL
|
|
84
|
-
*/
|
|
85
|
-
const getSearchPageUrl = (query) => {
|
|
86
|
-
var _a;
|
|
87
|
-
if (((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const { searchPageUrl } = store.state.localizedConfig.header.search;
|
|
91
|
-
const searchParam = `#q=${encodeURIComponent(query)}`;
|
|
92
|
-
return `${searchPageUrl}${searchParam}&t=AllTab`;
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Equalize the length of two arrays while filling up empty slots up to max. length
|
|
96
|
-
*
|
|
97
|
-
* @param arrayA First array
|
|
98
|
-
* @param arrayB Second array
|
|
99
|
-
* @param maxLength Max. length of result array
|
|
100
|
-
* @returns Array with two resulting arrays
|
|
101
|
-
*/
|
|
102
|
-
const equalizeArrays = (arrayA, arrayB, maxLength = 8) => {
|
|
103
|
-
const coveoSliced = arrayA.slice(0, Math.max(maxLength / 2, maxLength - arrayB.length));
|
|
104
|
-
return [coveoSliced, arrayB.slice(0, maxLength - coveoSliced.length)];
|
|
67
|
+
/**
|
|
68
|
+
* Construct a search page url from a query
|
|
69
|
+
*
|
|
70
|
+
* @param query Search term
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
const getSearchRedirectUrl = async (query, searchConfig) => {
|
|
74
|
+
const isTrackTraceId = await isParcel(query, searchConfig);
|
|
75
|
+
return isTrackTraceId
|
|
76
|
+
? getTrackAndTraceRedirectUrl(query, searchConfig)
|
|
77
|
+
: getSearchPageUrl(query);
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Stitch toghether the search page URL
|
|
81
|
+
*
|
|
82
|
+
* @param query Search term
|
|
83
|
+
* @returns Search page URL
|
|
84
|
+
*/
|
|
85
|
+
const getSearchPageUrl = (query) => {
|
|
86
|
+
var _a;
|
|
87
|
+
if (((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const { searchPageUrl } = store.state.localizedConfig.header.search;
|
|
91
|
+
const searchParam = `#q=${encodeURIComponent(query)}`;
|
|
92
|
+
return `${searchPageUrl}${searchParam}&t=AllTab`;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Equalize the length of two arrays while filling up empty slots up to max. length
|
|
96
|
+
*
|
|
97
|
+
* @param arrayA First array
|
|
98
|
+
* @param arrayB Second array
|
|
99
|
+
* @param maxLength Max. length of result array
|
|
100
|
+
* @returns Array with two resulting arrays
|
|
101
|
+
*/
|
|
102
|
+
const equalizeArrays = (arrayA, arrayB, maxLength = 8) => {
|
|
103
|
+
const coveoSliced = arrayA.slice(0, Math.max(maxLength / 2, maxLength - arrayB.length));
|
|
104
|
+
return [coveoSliced, arrayB.slice(0, maxLength - coveoSliced.length)];
|
|
105
105
|
};
|
|
106
106
|
|
|
107
|
-
// Coveo constants
|
|
108
|
-
const coveo = {
|
|
109
|
-
url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',
|
|
110
|
-
environment: {
|
|
111
|
-
prod: {
|
|
112
|
-
organisation: 'postchagprod6ef4sbet',
|
|
113
|
-
token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',
|
|
114
|
-
},
|
|
115
|
-
int01: {
|
|
116
|
-
organisation: 'postchagnonprods5sq57qt',
|
|
117
|
-
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
118
|
-
},
|
|
119
|
-
int02: {
|
|
120
|
-
organisation: 'postchagnonprods5sq57qt',
|
|
121
|
-
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
122
|
-
},
|
|
123
|
-
},
|
|
107
|
+
// Coveo constants
|
|
108
|
+
const coveo = {
|
|
109
|
+
url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',
|
|
110
|
+
environment: {
|
|
111
|
+
prod: {
|
|
112
|
+
organisation: 'postchagprod6ef4sbet',
|
|
113
|
+
token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',
|
|
114
|
+
},
|
|
115
|
+
int01: {
|
|
116
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
117
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
118
|
+
},
|
|
119
|
+
int02: {
|
|
120
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
121
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
/**
|
|
127
|
-
* Get suggestions from coveo
|
|
128
|
-
* https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object
|
|
129
|
-
*
|
|
130
|
-
* @param query Search term
|
|
131
|
-
* @returns
|
|
132
|
-
*/
|
|
133
|
-
const getCoveoSuggestions = async (query) => {
|
|
134
|
-
var _a, _b;
|
|
135
|
-
if (((_b = (_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.search) === undefined)
|
|
136
|
-
return [];
|
|
137
|
-
const config = store.state.localizedConfig.header.search;
|
|
138
|
-
const { token, organisation } = coveo.environment[store.state.environment];
|
|
139
|
-
const url = `${coveo.url}?q=${query}&locale=${store.state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;
|
|
140
|
-
let coveoCompletions;
|
|
141
|
-
try {
|
|
142
|
-
const coveoResponse = await fetch(url, {
|
|
143
|
-
method: 'GET',
|
|
144
|
-
headers: {
|
|
145
|
-
Authorization: `Bearer ${token}`,
|
|
146
|
-
},
|
|
147
|
-
});
|
|
148
|
-
const coveoJSON = (await coveoResponse.json());
|
|
149
|
-
coveoCompletions = coveoJSON.completions.map(completion => (Object.assign(Object.assign({}, completion), { redirectUrl: getSearchPageUrl(completion.expression) })));
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
console.error('Connection to coveo failed. Did you add "*.coveo.com" to your connect-src content security policy and tried turning off your adblocker?');
|
|
153
|
-
}
|
|
154
|
-
return coveoCompletions === undefined ? [] : coveoCompletions;
|
|
126
|
+
/**
|
|
127
|
+
* Get suggestions from coveo
|
|
128
|
+
* https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object
|
|
129
|
+
*
|
|
130
|
+
* @param query Search term
|
|
131
|
+
* @returns
|
|
132
|
+
*/
|
|
133
|
+
const getCoveoSuggestions = async (query) => {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
if (((_b = (_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.search) === undefined)
|
|
136
|
+
return [];
|
|
137
|
+
const config = store.state.localizedConfig.header.search;
|
|
138
|
+
const { token, organisation } = coveo.environment[store.state.environment];
|
|
139
|
+
const url = `${coveo.url}?q=${query}&locale=${store.state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;
|
|
140
|
+
let coveoCompletions;
|
|
141
|
+
try {
|
|
142
|
+
const coveoResponse = await fetch(url, {
|
|
143
|
+
method: 'GET',
|
|
144
|
+
headers: {
|
|
145
|
+
Authorization: `Bearer ${token}`,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
const coveoJSON = (await coveoResponse.json());
|
|
149
|
+
coveoCompletions = coveoJSON.completions.map(completion => (Object.assign(Object.assign({}, completion), { redirectUrl: getSearchPageUrl(completion.expression) })));
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error('Connection to coveo failed. Did you add "*.coveo.com" to your connect-src content security policy and tried turning off your adblocker?');
|
|
153
|
+
}
|
|
154
|
+
return coveoCompletions === undefined ? [] : coveoCompletions;
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
-
// Implement some TOPOS logic into the header search
|
|
158
|
-
const gisAPIUrl = 'https://places.post.ch/StandortSuche/StaoCacheService';
|
|
159
|
-
const placesUrl = 'https://places.post.ch';
|
|
160
|
-
const pois = [
|
|
161
|
-
'001PST',
|
|
162
|
-
'001MP24',
|
|
163
|
-
'001AG-PICK',
|
|
164
|
-
'001PFFIL',
|
|
165
|
-
'001PFST',
|
|
166
|
-
'001BZ',
|
|
167
|
-
'001LZB',
|
|
168
|
-
'001PZ',
|
|
169
|
-
'001LZP',
|
|
170
|
-
'001AL',
|
|
157
|
+
// Implement some TOPOS logic into the header search
|
|
158
|
+
const gisAPIUrl = 'https://places.post.ch/StandortSuche/StaoCacheService';
|
|
159
|
+
const placesUrl = 'https://places.post.ch';
|
|
160
|
+
const pois = [
|
|
161
|
+
'001PST',
|
|
162
|
+
'001MP24',
|
|
163
|
+
'001AG-PICK',
|
|
164
|
+
'001PFFIL',
|
|
165
|
+
'001PFST',
|
|
166
|
+
'001BZ',
|
|
167
|
+
'001LZB',
|
|
168
|
+
'001PZ',
|
|
169
|
+
'001LZP',
|
|
170
|
+
'001AL',
|
|
171
171
|
];
|
|
172
172
|
|
|
173
173
|
function escapeStringRegexp(string) {
|
|
@@ -2294,6 +2294,23 @@ const removeMootSeparators = (string, separator) => {
|
|
|
2294
2294
|
.replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, 'g'), '');
|
|
2295
2295
|
};
|
|
2296
2296
|
|
|
2297
|
+
const buildPatternSlug = options => {
|
|
2298
|
+
let negationSetPattern = 'a-z\\d';
|
|
2299
|
+
negationSetPattern += options.lowercase ? '' : 'A-Z';
|
|
2300
|
+
|
|
2301
|
+
if (options.preserveCharacters.length > 0) {
|
|
2302
|
+
for (const character of options.preserveCharacters) {
|
|
2303
|
+
if (character === options.separator) {
|
|
2304
|
+
throw new Error(`The separator character \`${options.separator}\` cannot be included in preserved characters: ${options.preserveCharacters}`);
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
negationSetPattern += escapeStringRegexp(character);
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2311
|
+
return new RegExp(`[^${negationSetPattern}]+`, 'g');
|
|
2312
|
+
};
|
|
2313
|
+
|
|
2297
2314
|
function slugify(string, options) {
|
|
2298
2315
|
if (typeof string !== 'string') {
|
|
2299
2316
|
throw new TypeError(`Expected a string, got \`${typeof string}\``);
|
|
@@ -2306,6 +2323,7 @@ function slugify(string, options) {
|
|
|
2306
2323
|
customReplacements: [],
|
|
2307
2324
|
preserveLeadingUnderscore: false,
|
|
2308
2325
|
preserveTrailingDash: false,
|
|
2326
|
+
preserveCharacters: [],
|
|
2309
2327
|
...options
|
|
2310
2328
|
};
|
|
2311
2329
|
|
|
@@ -2323,15 +2341,19 @@ function slugify(string, options) {
|
|
|
2323
2341
|
string = decamelize(string);
|
|
2324
2342
|
}
|
|
2325
2343
|
|
|
2326
|
-
|
|
2344
|
+
const patternSlug = buildPatternSlug(options);
|
|
2327
2345
|
|
|
2328
2346
|
if (options.lowercase) {
|
|
2329
2347
|
string = string.toLowerCase();
|
|
2330
|
-
patternSlug = /[^a-z\d]+/g;
|
|
2331
2348
|
}
|
|
2332
2349
|
|
|
2333
2350
|
string = string.replace(patternSlug, options.separator);
|
|
2334
2351
|
string = string.replace(/\\/g, '');
|
|
2352
|
+
|
|
2353
|
+
// Detect contractions/possessives by looking for any word followed by a `-t`
|
|
2354
|
+
// or `-s` in isolation and then remove it.
|
|
2355
|
+
string = string.replace(/([a-zA-Z\d]+)-([ts])(-|$)/g, '$1$2$3');
|
|
2356
|
+
|
|
2335
2357
|
if (options.separator) {
|
|
2336
2358
|
string = removeMootSeparators(string, options.separator);
|
|
2337
2359
|
}
|
|
@@ -2347,391 +2369,391 @@ function slugify(string, options) {
|
|
|
2347
2369
|
return string;
|
|
2348
2370
|
}
|
|
2349
2371
|
|
|
2350
|
-
/**
|
|
2351
|
-
* Transform to lowercase, extract accents to separate unicode chars,
|
|
2352
|
-
* replace all accent unicode chars so only standard latin chars remain
|
|
2353
|
-
* https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463#37511463
|
|
2354
|
-
*
|
|
2355
|
-
* @param str Input string
|
|
2356
|
-
* @returns
|
|
2357
|
-
*/
|
|
2358
|
-
const hardNormalize = (str) => str
|
|
2359
|
-
.toLowerCase()
|
|
2360
|
-
.normalize('NFD')
|
|
2361
|
-
.replace(/[\u0300-\u036f]/g, '');
|
|
2362
|
-
/**
|
|
2363
|
-
* Convert a poi name to a URL compatible slug, logic copied from TOPOS
|
|
2364
|
-
* @param fragment A poi name
|
|
2365
|
-
* @returns
|
|
2366
|
-
*/
|
|
2367
|
-
const createSlug = (fragment) => slugify(fragment
|
|
2368
|
-
.replace(/ \/ /g, '-')
|
|
2369
|
-
.replace(/ /g, '-')
|
|
2370
|
-
.replace(/\//g, '')
|
|
2371
|
-
.replace(/\./g, '')
|
|
2372
|
-
.replace(/\,/g, '')
|
|
2372
|
+
/**
|
|
2373
|
+
* Transform to lowercase, extract accents to separate unicode chars,
|
|
2374
|
+
* replace all accent unicode chars so only standard latin chars remain
|
|
2375
|
+
* https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463#37511463
|
|
2376
|
+
*
|
|
2377
|
+
* @param str Input string
|
|
2378
|
+
* @returns
|
|
2379
|
+
*/
|
|
2380
|
+
const hardNormalize = (str) => str
|
|
2381
|
+
.toLowerCase()
|
|
2382
|
+
.normalize('NFD')
|
|
2383
|
+
.replace(/[\u0300-\u036f]/g, '');
|
|
2384
|
+
/**
|
|
2385
|
+
* Convert a poi name to a URL compatible slug, logic copied from TOPOS
|
|
2386
|
+
* @param fragment A poi name
|
|
2387
|
+
* @returns
|
|
2388
|
+
*/
|
|
2389
|
+
const createSlug = (fragment) => slugify(fragment
|
|
2390
|
+
.replace(/ \/ /g, '-')
|
|
2391
|
+
.replace(/ /g, '-')
|
|
2392
|
+
.replace(/\//g, '')
|
|
2393
|
+
.replace(/\./g, '')
|
|
2394
|
+
.replace(/\,/g, '')
|
|
2373
2395
|
.replace(/\'/g, ''));
|
|
2374
2396
|
|
|
2375
|
-
// Never load types twice
|
|
2376
|
-
let typesCache = null;
|
|
2377
|
-
/**
|
|
2378
|
-
* Convert Post POI ids to stao cache ids
|
|
2379
|
-
* @returns
|
|
2380
|
-
*/
|
|
2381
|
-
const convertTypes = async () => {
|
|
2382
|
-
if (typesCache === null) {
|
|
2383
|
-
try {
|
|
2384
|
-
const typesResponse = await fetch(`${gisAPIUrl}/Types?lang=${store.state.currentLanguage}`);
|
|
2385
|
-
const typesJSON = (await typesResponse.json());
|
|
2386
|
-
typesCache = encodeURIComponent(pois
|
|
2387
|
-
.map(poi => {
|
|
2388
|
-
const foundType = typesJSON.types.find(type => type.id === poi);
|
|
2389
|
-
return foundType === null || foundType === void 0 ? void 0 : foundType.tag;
|
|
2390
|
-
})
|
|
2391
|
-
.filter(poi => poi !== undefined)
|
|
2392
|
-
.join(','));
|
|
2393
|
-
}
|
|
2394
|
-
catch (error) {
|
|
2395
|
-
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2396
|
-
throw error;
|
|
2397
|
-
}
|
|
2398
|
-
}
|
|
2399
|
-
return typesCache;
|
|
2400
|
-
};
|
|
2401
|
-
/**
|
|
2402
|
-
* Query the Gis API for locations and localities (pois)
|
|
2403
|
-
*
|
|
2404
|
-
* @param query User input string
|
|
2405
|
-
* @returns
|
|
2406
|
-
*/
|
|
2407
|
-
const queryPlaces = async (query) => {
|
|
2408
|
-
if (query.length === 0) {
|
|
2409
|
-
return [];
|
|
2410
|
-
}
|
|
2411
|
-
const limit = 8;
|
|
2412
|
-
const excludeTypes = ['address', 'locality', 'region'];
|
|
2413
|
-
const types = await convertTypes();
|
|
2414
|
-
const geocoderUrl = `${gisAPIUrl}/Geocode?query=${encodeURIComponent(query)}&lang=${store.state.currentLanguage}&pois=${types}&limit=100`;
|
|
2415
|
-
try {
|
|
2416
|
-
const geocodeResponse = await fetch(geocoderUrl);
|
|
2417
|
-
const geocodeJSON = (await geocodeResponse.json());
|
|
2418
|
-
if (!geocodeJSON.ok) {
|
|
2419
|
-
throw new Error(geocodeJSON.info);
|
|
2420
|
-
}
|
|
2421
|
-
return geocodeJSON.locations
|
|
2422
|
-
.filter(location => !excludeTypes.includes(location.type))
|
|
2423
|
-
.slice(0, limit);
|
|
2424
|
-
}
|
|
2425
|
-
catch (error) {
|
|
2426
|
-
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2427
|
-
throw error;
|
|
2428
|
-
}
|
|
2429
|
-
};
|
|
2430
|
-
/**
|
|
2431
|
-
* Try to highlight place suggestions
|
|
2432
|
-
* Limitation: accented chars are not handled by this basic function
|
|
2433
|
-
*
|
|
2434
|
-
* @param query Search term
|
|
2435
|
-
* @param place Name of the suggested place
|
|
2436
|
-
* @returns
|
|
2437
|
-
*/
|
|
2438
|
-
const highlightPlacesString = (query, place) => {
|
|
2439
|
-
if (query === undefined)
|
|
2440
|
-
return place;
|
|
2441
|
-
// Strip accents from the string
|
|
2442
|
-
const reference = hardNormalize(place);
|
|
2443
|
-
const q = hardNormalize(query);
|
|
2444
|
-
const indexOfQuery = reference.indexOf(q);
|
|
2445
|
-
if (indexOfQuery < 0) {
|
|
2446
|
-
return place;
|
|
2447
|
-
}
|
|
2448
|
-
return `${place.substring(0, indexOfQuery)}{${place.substring(indexOfQuery, indexOfQuery + query.length)}}${place.substring(indexOfQuery + query.length, place.length)}`;
|
|
2449
|
-
};
|
|
2450
|
-
/**
|
|
2451
|
-
* Get the deeplink to any location found via geocoder
|
|
2452
|
-
*
|
|
2453
|
-
* @param location A location from the Gis API Geocode endpoint
|
|
2454
|
-
* @returns
|
|
2455
|
-
*/
|
|
2456
|
-
const getPlacesUrl = (location) => {
|
|
2457
|
-
let url;
|
|
2458
|
-
if (location.id !== '') {
|
|
2459
|
-
url = `${placesUrl}/${store.state.currentLanguage}/${location.id}/${createSlug(location.name)}`;
|
|
2460
|
-
}
|
|
2461
|
-
else {
|
|
2462
|
-
url = `${placesUrl}?preselecttext=${encodeURIComponent(location.name)}`;
|
|
2463
|
-
}
|
|
2464
|
-
return url;
|
|
2397
|
+
// Never load types twice
|
|
2398
|
+
let typesCache = null;
|
|
2399
|
+
/**
|
|
2400
|
+
* Convert Post POI ids to stao cache ids
|
|
2401
|
+
* @returns
|
|
2402
|
+
*/
|
|
2403
|
+
const convertTypes = async () => {
|
|
2404
|
+
if (typesCache === null) {
|
|
2405
|
+
try {
|
|
2406
|
+
const typesResponse = await fetch(`${gisAPIUrl}/Types?lang=${store.state.currentLanguage}`);
|
|
2407
|
+
const typesJSON = (await typesResponse.json());
|
|
2408
|
+
typesCache = encodeURIComponent(pois
|
|
2409
|
+
.map(poi => {
|
|
2410
|
+
const foundType = typesJSON.types.find(type => type.id === poi);
|
|
2411
|
+
return foundType === null || foundType === void 0 ? void 0 : foundType.tag;
|
|
2412
|
+
})
|
|
2413
|
+
.filter(poi => poi !== undefined)
|
|
2414
|
+
.join(','));
|
|
2415
|
+
}
|
|
2416
|
+
catch (error) {
|
|
2417
|
+
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2418
|
+
throw error;
|
|
2419
|
+
}
|
|
2420
|
+
}
|
|
2421
|
+
return typesCache;
|
|
2422
|
+
};
|
|
2423
|
+
/**
|
|
2424
|
+
* Query the Gis API for locations and localities (pois)
|
|
2425
|
+
*
|
|
2426
|
+
* @param query User input string
|
|
2427
|
+
* @returns
|
|
2428
|
+
*/
|
|
2429
|
+
const queryPlaces = async (query) => {
|
|
2430
|
+
if (query.length === 0) {
|
|
2431
|
+
return [];
|
|
2432
|
+
}
|
|
2433
|
+
const limit = 8;
|
|
2434
|
+
const excludeTypes = ['address', 'locality', 'region'];
|
|
2435
|
+
const types = await convertTypes();
|
|
2436
|
+
const geocoderUrl = `${gisAPIUrl}/Geocode?query=${encodeURIComponent(query)}&lang=${store.state.currentLanguage}&pois=${types}&limit=100`;
|
|
2437
|
+
try {
|
|
2438
|
+
const geocodeResponse = await fetch(geocoderUrl);
|
|
2439
|
+
const geocodeJSON = (await geocodeResponse.json());
|
|
2440
|
+
if (!geocodeJSON.ok) {
|
|
2441
|
+
throw new Error(geocodeJSON.info);
|
|
2442
|
+
}
|
|
2443
|
+
return geocodeJSON.locations
|
|
2444
|
+
.filter(location => !excludeTypes.includes(location.type))
|
|
2445
|
+
.slice(0, limit);
|
|
2446
|
+
}
|
|
2447
|
+
catch (error) {
|
|
2448
|
+
console.error('Fetching places failed. Did you add "places.post.ch" to your connect-src content security policy?');
|
|
2449
|
+
throw error;
|
|
2450
|
+
}
|
|
2451
|
+
};
|
|
2452
|
+
/**
|
|
2453
|
+
* Try to highlight place suggestions
|
|
2454
|
+
* Limitation: accented chars are not handled by this basic function
|
|
2455
|
+
*
|
|
2456
|
+
* @param query Search term
|
|
2457
|
+
* @param place Name of the suggested place
|
|
2458
|
+
* @returns
|
|
2459
|
+
*/
|
|
2460
|
+
const highlightPlacesString = (query, place) => {
|
|
2461
|
+
if (query === undefined)
|
|
2462
|
+
return place;
|
|
2463
|
+
// Strip accents from the string
|
|
2464
|
+
const reference = hardNormalize(place);
|
|
2465
|
+
const q = hardNormalize(query);
|
|
2466
|
+
const indexOfQuery = reference.indexOf(q);
|
|
2467
|
+
if (indexOfQuery < 0) {
|
|
2468
|
+
return place;
|
|
2469
|
+
}
|
|
2470
|
+
return `${place.substring(0, indexOfQuery)}{${place.substring(indexOfQuery, indexOfQuery + query.length)}}${place.substring(indexOfQuery + query.length, place.length)}`;
|
|
2471
|
+
};
|
|
2472
|
+
/**
|
|
2473
|
+
* Get the deeplink to any location found via geocoder
|
|
2474
|
+
*
|
|
2475
|
+
* @param location A location from the Gis API Geocode endpoint
|
|
2476
|
+
* @returns
|
|
2477
|
+
*/
|
|
2478
|
+
const getPlacesUrl = (location) => {
|
|
2479
|
+
let url;
|
|
2480
|
+
if (location.id !== '') {
|
|
2481
|
+
url = `${placesUrl}/${store.state.currentLanguage}/${location.id}/${createSlug(location.name)}`;
|
|
2482
|
+
}
|
|
2483
|
+
else {
|
|
2484
|
+
url = `${placesUrl}?preselecttext=${encodeURIComponent(location.name)}`;
|
|
2485
|
+
}
|
|
2486
|
+
return url;
|
|
2465
2487
|
};
|
|
2466
2488
|
|
|
2467
|
-
const HighlightedText = (props) => {
|
|
2468
|
-
var _a;
|
|
2469
|
-
const highlightClass = (_a = props.highlightClass) !== null && _a !== void 0 ? _a : 'bold';
|
|
2470
|
-
const highlightedString = props.text
|
|
2471
|
-
.replace(/{/g, `<span class=${highlightClass}>`)
|
|
2472
|
-
.replace(/}/g, '</span>')
|
|
2473
|
-
.replace(/[\[\]]/g, '');
|
|
2474
|
-
return index.h("span", { innerHTML: highlightedString });
|
|
2489
|
+
const HighlightedText = (props) => {
|
|
2490
|
+
var _a;
|
|
2491
|
+
const highlightClass = (_a = props.highlightClass) !== null && _a !== void 0 ? _a : 'bold';
|
|
2492
|
+
const highlightedString = props.text
|
|
2493
|
+
.replace(/{/g, `<span class=${highlightClass}>`)
|
|
2494
|
+
.replace(/}/g, '</span>')
|
|
2495
|
+
.replace(/[\[\]]/g, '');
|
|
2496
|
+
return index.h("span", { innerHTML: highlightedString });
|
|
2475
2497
|
};
|
|
2476
2498
|
|
|
2477
2499
|
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}";
|
|
2478
2500
|
|
|
2479
|
-
const PostSearch = class {
|
|
2480
|
-
constructor(hostRef) {
|
|
2481
|
-
index.registerInstance(this, hostRef);
|
|
2482
|
-
this.dropdownToggled = index.createEvent(this, "dropdownToggled", 7);
|
|
2483
|
-
this.searchDropdownOpen = false;
|
|
2484
|
-
this.coveoSuggestions = [];
|
|
2485
|
-
this.placeSuggestions = [];
|
|
2486
|
-
this.parcelSuggestion = null;
|
|
2487
|
-
}
|
|
2488
|
-
connectedCallback() {
|
|
2489
|
-
this.throttledResize = index$1.throttle(300, () => this.handleResize());
|
|
2490
|
-
window.addEventListener('resize', this.throttledResize, { passive: true });
|
|
2491
|
-
}
|
|
2492
|
-
disconnectedCallback() {
|
|
2493
|
-
window.removeEventListener('resize', this.throttledResize);
|
|
2494
|
-
bodyScrollLock_esm.clearAllBodyScrollLocks();
|
|
2495
|
-
}
|
|
2496
|
-
componentWillUpdate() {
|
|
2497
|
-
// Check if search flyout got set to close
|
|
2498
|
-
if (this.searchFlyout && !this.searchDropdownOpen) {
|
|
2499
|
-
this.searchFlyout.classList.remove('open');
|
|
2500
|
-
// Check if element has transition applied and whether user prefers to see animations or not
|
|
2501
|
-
if (ui_service.elementHasTransition(this.searchFlyout, 'transform') && !ui_service.userPrefersReducedMotion()) {
|
|
2502
|
-
// Wait for CSS transition 'transform' to end before continuing
|
|
2503
|
-
return new Promise(resolve => {
|
|
2504
|
-
if (this.searchFlyout === undefined) {
|
|
2505
|
-
return resolve(true);
|
|
2506
|
-
}
|
|
2507
|
-
this.searchFlyout.addEventListener('transitionend', event => {
|
|
2508
|
-
if (event.propertyName === 'transform') {
|
|
2509
|
-
resolve(true);
|
|
2510
|
-
}
|
|
2511
|
-
});
|
|
2512
|
-
});
|
|
2513
|
-
}
|
|
2514
|
-
}
|
|
2515
|
-
}
|
|
2516
|
-
componentDidUpdate() {
|
|
2517
|
-
// Search flyout got set to open
|
|
2518
|
-
if (this.searchFlyout && this.searchDropdownOpen) {
|
|
2519
|
-
// Force browser to redraw/refresh DOM before adding 'open' class
|
|
2520
|
-
this.searchFlyout.getBoundingClientRect();
|
|
2521
|
-
this.searchFlyout.classList.add('open');
|
|
2522
|
-
}
|
|
2523
|
-
// Focus on the searchBox whenever the dropdown is opened
|
|
2524
|
-
if (this.searchDropdownOpen && this.searchBox) {
|
|
2525
|
-
this.searchBox.focus({ preventScroll: true });
|
|
2526
|
-
}
|
|
2527
|
-
}
|
|
2528
|
-
/**
|
|
2529
|
-
* Toggle the dropdown and optionally force an open/closed state
|
|
2530
|
-
* @param force Boolean to force open/closed state
|
|
2531
|
-
* @returns Boolean indicating open state of the component
|
|
2532
|
-
*/
|
|
2533
|
-
async toggleDropdown(force) {
|
|
2534
|
-
this.searchDropdownOpen =
|
|
2535
|
-
force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;
|
|
2536
|
-
this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });
|
|
2537
|
-
if (!this.searchDropdownOpen) {
|
|
2538
|
-
// Reset suggestions when dropdown closes
|
|
2539
|
-
this.coveoSuggestions = [];
|
|
2540
|
-
this.placeSuggestions = [];
|
|
2541
|
-
if (this.searchBox)
|
|
2542
|
-
this.searchBox.value = '';
|
|
2543
|
-
this.setFocus();
|
|
2544
|
-
}
|
|
2545
|
-
else {
|
|
2546
|
-
// Get basic suggestions when dropdown opens
|
|
2547
|
-
try {
|
|
2548
|
-
this.coveoSuggestions = await getCoveoSuggestions('');
|
|
2549
|
-
}
|
|
2550
|
-
catch (_a) { }
|
|
2551
|
-
}
|
|
2552
|
-
this.setBodyScroll();
|
|
2553
|
-
return this.searchDropdownOpen;
|
|
2554
|
-
}
|
|
2555
|
-
/**
|
|
2556
|
-
* Sets the focus on the search button
|
|
2557
|
-
*/
|
|
2558
|
-
async setFocus() {
|
|
2559
|
-
const shadowRoot = this.host.shadowRoot;
|
|
2560
|
-
if (shadowRoot === null) {
|
|
2561
|
-
return;
|
|
2562
|
-
}
|
|
2563
|
-
const toggleButton = shadowRoot.querySelector('.search-button');
|
|
2564
|
-
if (toggleButton) {
|
|
2565
|
-
toggleButton.focus();
|
|
2566
|
-
}
|
|
2567
|
-
}
|
|
2568
|
-
handleResize() {
|
|
2569
|
-
// Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls
|
|
2570
|
-
if (this.searchDropdownOpen) {
|
|
2571
|
-
this.setBodyScroll();
|
|
2572
|
-
}
|
|
2573
|
-
}
|
|
2574
|
-
/**
|
|
2575
|
-
* Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)
|
|
2576
|
-
*/
|
|
2577
|
-
setBodyScroll() {
|
|
2578
|
-
if (this.searchDropdownOpen && window.innerWidth < 1024) {
|
|
2579
|
-
bodyScrollLock_esm.disableBodyScroll(this.searchFlyout);
|
|
2580
|
-
}
|
|
2581
|
-
else {
|
|
2582
|
-
bodyScrollLock_esm.enableBodyScroll(this.searchFlyout);
|
|
2583
|
-
}
|
|
2584
|
-
}
|
|
2585
|
-
/**
|
|
2586
|
-
* Fetch suggestions from all available sources
|
|
2587
|
-
*/
|
|
2588
|
-
async handleSearchInput() {
|
|
2589
|
-
var _a;
|
|
2590
|
-
if (this.searchBox === undefined || ((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
2591
|
-
return;
|
|
2592
|
-
}
|
|
2593
|
-
const query = this.searchBox.value.trim();
|
|
2594
|
-
const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([
|
|
2595
|
-
queryPlaces(query),
|
|
2596
|
-
getCoveoSuggestions(query),
|
|
2597
|
-
getParcelSuggestion(query, store.state.localizedConfig.header.search),
|
|
2598
|
-
]);
|
|
2599
|
-
// Parcel suggestion is more important than any other
|
|
2600
|
-
if (trackAndTraceInfo) {
|
|
2601
|
-
this.parcelSuggestion = trackAndTraceInfo;
|
|
2602
|
-
this.placeSuggestions = [];
|
|
2603
|
-
this.coveoSuggestions = [];
|
|
2604
|
-
}
|
|
2605
|
-
else {
|
|
2606
|
-
[this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(coveoSuggestions, placeSuggestions, 8);
|
|
2607
|
-
}
|
|
2608
|
-
this.deselectSuggestion();
|
|
2609
|
-
}
|
|
2610
|
-
/**
|
|
2611
|
-
* Start search on enter
|
|
2612
|
-
* @param event
|
|
2613
|
-
*/
|
|
2614
|
-
handleKeyDown(event) {
|
|
2615
|
-
var _a, _b, _c, _d;
|
|
2616
|
-
if (this.searchFlyout === undefined) {
|
|
2617
|
-
return;
|
|
2618
|
-
}
|
|
2619
|
-
let selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2620
|
-
switch (event.key.toLowerCase()) {
|
|
2621
|
-
case 'enter':
|
|
2622
|
-
if (selectedSuggestion) {
|
|
2623
|
-
const selectedHref = selectedSuggestion.getAttribute('href');
|
|
2624
|
-
if (selectedHref !== null) {
|
|
2625
|
-
window.location.href = selectedHref;
|
|
2626
|
-
}
|
|
2627
|
-
}
|
|
2628
|
-
else {
|
|
2629
|
-
this.startSearch();
|
|
2630
|
-
}
|
|
2631
|
-
break;
|
|
2632
|
-
case 'arrowdown':
|
|
2633
|
-
case 'arrowup':
|
|
2634
|
-
const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');
|
|
2635
|
-
this.deselectSuggestion();
|
|
2636
|
-
if (event.key.toLowerCase() === 'arrowdown') {
|
|
2637
|
-
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) {
|
|
2638
|
-
// Select next suggestion if there's any, otherwise none will be selected
|
|
2639
|
-
selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add('selected');
|
|
2640
|
-
}
|
|
2641
|
-
else {
|
|
2642
|
-
// If there are any suggestions, select first suggestion in list
|
|
2643
|
-
if (suggestions.length > 0) {
|
|
2644
|
-
suggestions[0].classList.add('selected');
|
|
2645
|
-
}
|
|
2646
|
-
}
|
|
2647
|
-
}
|
|
2648
|
-
else if (event.key.toLowerCase() === 'arrowup') {
|
|
2649
|
-
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) {
|
|
2650
|
-
// Select previous suggestion if there's any, otherwise none will be selected
|
|
2651
|
-
selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add('selected');
|
|
2652
|
-
}
|
|
2653
|
-
else {
|
|
2654
|
-
// If there are any suggestions, select last suggestion in list
|
|
2655
|
-
if (suggestions.length > 0) {
|
|
2656
|
-
suggestions[suggestions.length - 1].classList.add('selected');
|
|
2657
|
-
}
|
|
2658
|
-
}
|
|
2659
|
-
}
|
|
2660
|
-
// Get the newly selected suggestion
|
|
2661
|
-
selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2662
|
-
const suggestedText = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.dataset.suggestionText;
|
|
2663
|
-
// Update search box value with selected suggestion text
|
|
2664
|
-
if (suggestedText !== undefined && this.searchBox) {
|
|
2665
|
-
this.searchBox.value = suggestedText;
|
|
2666
|
-
}
|
|
2667
|
-
break;
|
|
2668
|
-
}
|
|
2669
|
-
}
|
|
2670
|
-
/**
|
|
2671
|
-
* Set selected suggestion on mouse enter
|
|
2672
|
-
* @param event
|
|
2673
|
-
*/
|
|
2674
|
-
handleMouseEnterSuggestion(event) {
|
|
2675
|
-
this.deselectSuggestion();
|
|
2676
|
-
// Set hovered suggestion element as selected
|
|
2677
|
-
event.target.classList.add('selected');
|
|
2678
|
-
}
|
|
2679
|
-
/**
|
|
2680
|
-
* Set selected suggestion on mouse enter
|
|
2681
|
-
* @param event
|
|
2682
|
-
*/
|
|
2683
|
-
handleMouseLeaveSuggestions() {
|
|
2684
|
-
this.deselectSuggestion();
|
|
2685
|
-
}
|
|
2686
|
-
/**
|
|
2687
|
-
* Deselect any previously selected suggestion
|
|
2688
|
-
*/
|
|
2689
|
-
deselectSuggestion() {
|
|
2690
|
-
if (this.searchFlyout === undefined)
|
|
2691
|
-
return;
|
|
2692
|
-
const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');
|
|
2693
|
-
if (selectedSuggestion) {
|
|
2694
|
-
selectedSuggestion.classList.remove('selected');
|
|
2695
|
-
}
|
|
2696
|
-
}
|
|
2697
|
-
/**
|
|
2698
|
-
* Redirect to the post search page
|
|
2699
|
-
*/
|
|
2700
|
-
async startSearch() {
|
|
2701
|
-
var _a;
|
|
2702
|
-
if (this.searchBox && ((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search)) {
|
|
2703
|
-
const redirectUrl = await getSearchRedirectUrl(this.searchBox.value.trim(), store.state.localizedConfig.header.search);
|
|
2704
|
-
if (!redirectUrl)
|
|
2705
|
-
return;
|
|
2706
|
-
window.location.href = redirectUrl;
|
|
2707
|
-
}
|
|
2708
|
-
}
|
|
2709
|
-
render() {
|
|
2710
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
2711
|
-
if (((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined) {
|
|
2712
|
-
return;
|
|
2713
|
-
}
|
|
2714
|
-
const { translations, search } = store.state.localizedConfig.header;
|
|
2715
|
-
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;
|
|
2716
|
-
return (index.h(index.Host, null, index.h(svgSprite_component.SvgSprite, null), index.h("div", { class: "search" }, index.h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => this.toggleDropdown(e) }, index.h("span", { class: "visually-hidden" }, this.searchDropdownOpen
|
|
2717
|
-
? translations.searchToggleExpanded
|
|
2718
|
-
: translations.searchToggle), index.h(svgIcon_component.SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), index.h(if_component.If, { condition: this.searchDropdownOpen }, index.h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, index.h("div", { class: "container box" }, index.h("div", { class: "row" }, index.h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, index.h("div", { class: "form-group form-floating" }, index.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) }), index.h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), index.h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, index.h("span", { class: "visually-hidden" }, translations.searchSubmit), index.h(svgIcon_component.SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (index.h("h2", { class: "bold" }, search.searchRecommendations.title)), index.h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions() }, showPortalRecommendations &&
|
|
2719
|
-
search.searchRecommendations.links.map(recommendation => (index.h("li", { key: recommendation.href }, index.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) }, index.h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), index.h("span", null, recommendation.label))))), this.parcelSuggestion && this.parcelSuggestion.ok && (index.h("li", null, index.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) }, index.h(svgIcon_component.SvgIcon, { name: "pi-letter-parcel" }), index.h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
|
|
2720
|
-
_f.id, ":\u00A0"), index.h("span", null, (_h = (_g = this.parcelSuggestion) === null || _g === void 0 ? void 0 : _g.sending) === null || _h === void 0 ? void 0 :
|
|
2721
|
-
_h.product, ",", ' ', (_k = (_j = this.parcelSuggestion) === null || _j === void 0 ? void 0 : _j.sending) === null || _k === void 0 ? void 0 :
|
|
2722
|
-
_k.recipient.zipcode, ' ', (_m = (_l = this.parcelSuggestion) === null || _l === void 0 ? void 0 : _l.sending) === null || _m === void 0 ? void 0 :
|
|
2723
|
-
_m.recipient.city, ",", ' ', (_p = (_o = this.parcelSuggestion) === null || _o === void 0 ? void 0 : _o.sending) === null || _p === void 0 ? void 0 :
|
|
2724
|
-
_p.state)))), !showPortalRecommendations &&
|
|
2725
|
-
this.coveoSuggestions &&
|
|
2726
|
-
this.coveoSuggestions.map(suggestion => (index.h("li", { key: suggestion.objectId }, index.h("a", { class: "nav-link", href: suggestion.redirectUrl, "data-suggestion-text": suggestion.expression, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, index.h(svgIcon_component.SvgIcon, { name: "pi-search" }), index.h(HighlightedText, { text: suggestion.highlighted }))))), !showPortalRecommendations &&
|
|
2727
|
-
this.placeSuggestions &&
|
|
2728
|
-
this.placeSuggestions.map(suggestion => {
|
|
2729
|
-
var _a, _b;
|
|
2730
|
-
return (index.h("li", { key: suggestion.id }, index.h("a", { class: "nav-link", href: getPlacesUrl(suggestion), "data-suggestion-text": suggestion.name, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, index.h(svgIcon_component.SvgIcon, { name: "pi-place" }), index.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) }))));
|
|
2731
|
-
}))))))))));
|
|
2732
|
-
}
|
|
2733
|
-
get host() { return index.getElement(this); }
|
|
2734
|
-
};
|
|
2501
|
+
const PostSearch = class {
|
|
2502
|
+
constructor(hostRef) {
|
|
2503
|
+
index.registerInstance(this, hostRef);
|
|
2504
|
+
this.dropdownToggled = index.createEvent(this, "dropdownToggled", 7);
|
|
2505
|
+
this.searchDropdownOpen = false;
|
|
2506
|
+
this.coveoSuggestions = [];
|
|
2507
|
+
this.placeSuggestions = [];
|
|
2508
|
+
this.parcelSuggestion = null;
|
|
2509
|
+
}
|
|
2510
|
+
connectedCallback() {
|
|
2511
|
+
this.throttledResize = index$1.throttle(300, () => this.handleResize());
|
|
2512
|
+
window.addEventListener('resize', this.throttledResize, { passive: true });
|
|
2513
|
+
}
|
|
2514
|
+
disconnectedCallback() {
|
|
2515
|
+
window.removeEventListener('resize', this.throttledResize);
|
|
2516
|
+
bodyScrollLock_esm.clearAllBodyScrollLocks();
|
|
2517
|
+
}
|
|
2518
|
+
componentWillUpdate() {
|
|
2519
|
+
// Check if search flyout got set to close
|
|
2520
|
+
if (this.searchFlyout && !this.searchDropdownOpen) {
|
|
2521
|
+
this.searchFlyout.classList.remove('open');
|
|
2522
|
+
// Check if element has transition applied and whether user prefers to see animations or not
|
|
2523
|
+
if (ui_service.elementHasTransition(this.searchFlyout, 'transform') && !ui_service.userPrefersReducedMotion()) {
|
|
2524
|
+
// Wait for CSS transition 'transform' to end before continuing
|
|
2525
|
+
return new Promise(resolve => {
|
|
2526
|
+
if (this.searchFlyout === undefined) {
|
|
2527
|
+
return resolve(true);
|
|
2528
|
+
}
|
|
2529
|
+
this.searchFlyout.addEventListener('transitionend', event => {
|
|
2530
|
+
if (event.propertyName === 'transform') {
|
|
2531
|
+
resolve(true);
|
|
2532
|
+
}
|
|
2533
|
+
});
|
|
2534
|
+
});
|
|
2535
|
+
}
|
|
2536
|
+
}
|
|
2537
|
+
}
|
|
2538
|
+
componentDidUpdate() {
|
|
2539
|
+
// Search flyout got set to open
|
|
2540
|
+
if (this.searchFlyout && this.searchDropdownOpen) {
|
|
2541
|
+
// Force browser to redraw/refresh DOM before adding 'open' class
|
|
2542
|
+
this.searchFlyout.getBoundingClientRect();
|
|
2543
|
+
this.searchFlyout.classList.add('open');
|
|
2544
|
+
}
|
|
2545
|
+
// Focus on the searchBox whenever the dropdown is opened
|
|
2546
|
+
if (this.searchDropdownOpen && this.searchBox) {
|
|
2547
|
+
this.searchBox.focus({ preventScroll: true });
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
/**
|
|
2551
|
+
* Toggle the dropdown and optionally force an open/closed state
|
|
2552
|
+
* @param force Boolean to force open/closed state
|
|
2553
|
+
* @returns Boolean indicating open state of the component
|
|
2554
|
+
*/
|
|
2555
|
+
async toggleDropdown(force) {
|
|
2556
|
+
this.searchDropdownOpen =
|
|
2557
|
+
force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;
|
|
2558
|
+
this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });
|
|
2559
|
+
if (!this.searchDropdownOpen) {
|
|
2560
|
+
// Reset suggestions when dropdown closes
|
|
2561
|
+
this.coveoSuggestions = [];
|
|
2562
|
+
this.placeSuggestions = [];
|
|
2563
|
+
if (this.searchBox)
|
|
2564
|
+
this.searchBox.value = '';
|
|
2565
|
+
this.setFocus();
|
|
2566
|
+
}
|
|
2567
|
+
else {
|
|
2568
|
+
// Get basic suggestions when dropdown opens
|
|
2569
|
+
try {
|
|
2570
|
+
this.coveoSuggestions = await getCoveoSuggestions('');
|
|
2571
|
+
}
|
|
2572
|
+
catch (_a) { }
|
|
2573
|
+
}
|
|
2574
|
+
this.setBodyScroll();
|
|
2575
|
+
return this.searchDropdownOpen;
|
|
2576
|
+
}
|
|
2577
|
+
/**
|
|
2578
|
+
* Sets the focus on the search button
|
|
2579
|
+
*/
|
|
2580
|
+
async setFocus() {
|
|
2581
|
+
const shadowRoot = this.host.shadowRoot;
|
|
2582
|
+
if (shadowRoot === null) {
|
|
2583
|
+
return;
|
|
2584
|
+
}
|
|
2585
|
+
const toggleButton = shadowRoot.querySelector('.search-button');
|
|
2586
|
+
if (toggleButton) {
|
|
2587
|
+
toggleButton.focus();
|
|
2588
|
+
}
|
|
2589
|
+
}
|
|
2590
|
+
handleResize() {
|
|
2591
|
+
// Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls
|
|
2592
|
+
if (this.searchDropdownOpen) {
|
|
2593
|
+
this.setBodyScroll();
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
/**
|
|
2597
|
+
* Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)
|
|
2598
|
+
*/
|
|
2599
|
+
setBodyScroll() {
|
|
2600
|
+
if (this.searchDropdownOpen && window.innerWidth < 1024) {
|
|
2601
|
+
bodyScrollLock_esm.disableBodyScroll(this.searchFlyout);
|
|
2602
|
+
}
|
|
2603
|
+
else {
|
|
2604
|
+
bodyScrollLock_esm.enableBodyScroll(this.searchFlyout);
|
|
2605
|
+
}
|
|
2606
|
+
}
|
|
2607
|
+
/**
|
|
2608
|
+
* Fetch suggestions from all available sources
|
|
2609
|
+
*/
|
|
2610
|
+
async handleSearchInput() {
|
|
2611
|
+
var _a;
|
|
2612
|
+
if (this.searchBox === undefined || ((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search) === undefined) {
|
|
2613
|
+
return;
|
|
2614
|
+
}
|
|
2615
|
+
const query = this.searchBox.value.trim();
|
|
2616
|
+
const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([
|
|
2617
|
+
queryPlaces(query),
|
|
2618
|
+
getCoveoSuggestions(query),
|
|
2619
|
+
getParcelSuggestion(query, store.state.localizedConfig.header.search),
|
|
2620
|
+
]);
|
|
2621
|
+
// Parcel suggestion is more important than any other
|
|
2622
|
+
if (trackAndTraceInfo) {
|
|
2623
|
+
this.parcelSuggestion = trackAndTraceInfo;
|
|
2624
|
+
this.placeSuggestions = [];
|
|
2625
|
+
this.coveoSuggestions = [];
|
|
2626
|
+
}
|
|
2627
|
+
else {
|
|
2628
|
+
[this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(coveoSuggestions, placeSuggestions, 8);
|
|
2629
|
+
}
|
|
2630
|
+
this.deselectSuggestion();
|
|
2631
|
+
}
|
|
2632
|
+
/**
|
|
2633
|
+
* Start search on enter
|
|
2634
|
+
* @param event
|
|
2635
|
+
*/
|
|
2636
|
+
handleKeyDown(event) {
|
|
2637
|
+
var _a, _b, _c, _d;
|
|
2638
|
+
if (this.searchFlyout === undefined) {
|
|
2639
|
+
return;
|
|
2640
|
+
}
|
|
2641
|
+
let selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2642
|
+
switch (event.key.toLowerCase()) {
|
|
2643
|
+
case 'enter':
|
|
2644
|
+
if (selectedSuggestion) {
|
|
2645
|
+
const selectedHref = selectedSuggestion.getAttribute('href');
|
|
2646
|
+
if (selectedHref !== null) {
|
|
2647
|
+
window.location.href = selectedHref;
|
|
2648
|
+
}
|
|
2649
|
+
}
|
|
2650
|
+
else {
|
|
2651
|
+
this.startSearch();
|
|
2652
|
+
}
|
|
2653
|
+
break;
|
|
2654
|
+
case 'arrowdown':
|
|
2655
|
+
case 'arrowup':
|
|
2656
|
+
const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');
|
|
2657
|
+
this.deselectSuggestion();
|
|
2658
|
+
if (event.key.toLowerCase() === 'arrowdown') {
|
|
2659
|
+
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) {
|
|
2660
|
+
// Select next suggestion if there's any, otherwise none will be selected
|
|
2661
|
+
selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add('selected');
|
|
2662
|
+
}
|
|
2663
|
+
else {
|
|
2664
|
+
// If there are any suggestions, select first suggestion in list
|
|
2665
|
+
if (suggestions.length > 0) {
|
|
2666
|
+
suggestions[0].classList.add('selected');
|
|
2667
|
+
}
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2670
|
+
else if (event.key.toLowerCase() === 'arrowup') {
|
|
2671
|
+
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) {
|
|
2672
|
+
// Select previous suggestion if there's any, otherwise none will be selected
|
|
2673
|
+
selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add('selected');
|
|
2674
|
+
}
|
|
2675
|
+
else {
|
|
2676
|
+
// If there are any suggestions, select last suggestion in list
|
|
2677
|
+
if (suggestions.length > 0) {
|
|
2678
|
+
suggestions[suggestions.length - 1].classList.add('selected');
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2682
|
+
// Get the newly selected suggestion
|
|
2683
|
+
selectedSuggestion = this.searchFlyout.querySelector('.suggestions > li > a.selected');
|
|
2684
|
+
const suggestedText = selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.dataset.suggestionText;
|
|
2685
|
+
// Update search box value with selected suggestion text
|
|
2686
|
+
if (suggestedText !== undefined && this.searchBox) {
|
|
2687
|
+
this.searchBox.value = suggestedText;
|
|
2688
|
+
}
|
|
2689
|
+
break;
|
|
2690
|
+
}
|
|
2691
|
+
}
|
|
2692
|
+
/**
|
|
2693
|
+
* Set selected suggestion on mouse enter
|
|
2694
|
+
* @param event
|
|
2695
|
+
*/
|
|
2696
|
+
handleMouseEnterSuggestion(event) {
|
|
2697
|
+
this.deselectSuggestion();
|
|
2698
|
+
// Set hovered suggestion element as selected
|
|
2699
|
+
event.target.classList.add('selected');
|
|
2700
|
+
}
|
|
2701
|
+
/**
|
|
2702
|
+
* Set selected suggestion on mouse enter
|
|
2703
|
+
* @param event
|
|
2704
|
+
*/
|
|
2705
|
+
handleMouseLeaveSuggestions() {
|
|
2706
|
+
this.deselectSuggestion();
|
|
2707
|
+
}
|
|
2708
|
+
/**
|
|
2709
|
+
* Deselect any previously selected suggestion
|
|
2710
|
+
*/
|
|
2711
|
+
deselectSuggestion() {
|
|
2712
|
+
if (this.searchFlyout === undefined)
|
|
2713
|
+
return;
|
|
2714
|
+
const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');
|
|
2715
|
+
if (selectedSuggestion) {
|
|
2716
|
+
selectedSuggestion.classList.remove('selected');
|
|
2717
|
+
}
|
|
2718
|
+
}
|
|
2719
|
+
/**
|
|
2720
|
+
* Redirect to the post search page
|
|
2721
|
+
*/
|
|
2722
|
+
async startSearch() {
|
|
2723
|
+
var _a;
|
|
2724
|
+
if (this.searchBox && ((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.search)) {
|
|
2725
|
+
const redirectUrl = await getSearchRedirectUrl(this.searchBox.value.trim(), store.state.localizedConfig.header.search);
|
|
2726
|
+
if (!redirectUrl)
|
|
2727
|
+
return;
|
|
2728
|
+
window.location.href = redirectUrl;
|
|
2729
|
+
}
|
|
2730
|
+
}
|
|
2731
|
+
render() {
|
|
2732
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
2733
|
+
if (((_a = store.state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined) {
|
|
2734
|
+
return;
|
|
2735
|
+
}
|
|
2736
|
+
const { translations, search } = store.state.localizedConfig.header;
|
|
2737
|
+
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;
|
|
2738
|
+
return (index.h(index.Host, null, index.h(svgSprite_component.SvgSprite, null), index.h("div", { class: "search" }, index.h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => this.toggleDropdown(e) }, index.h("span", { class: "visually-hidden" }, this.searchDropdownOpen
|
|
2739
|
+
? translations.searchToggleExpanded
|
|
2740
|
+
: translations.searchToggle), index.h(svgIcon_component.SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), index.h(if_component.If, { condition: this.searchDropdownOpen }, index.h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, index.h("div", { class: "container box" }, index.h("div", { class: "row" }, index.h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, index.h("div", { class: "form-group form-floating" }, index.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) }), index.h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), index.h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, index.h("span", { class: "visually-hidden" }, translations.searchSubmit), index.h(svgIcon_component.SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (index.h("h2", { class: "bold" }, search.searchRecommendations.title)), index.h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions() }, showPortalRecommendations &&
|
|
2741
|
+
search.searchRecommendations.links.map(recommendation => (index.h("li", { key: recommendation.href }, index.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) }, index.h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), index.h("span", null, recommendation.label))))), this.parcelSuggestion && this.parcelSuggestion.ok && (index.h("li", null, index.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) }, index.h(svgIcon_component.SvgIcon, { name: "pi-letter-parcel" }), index.h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
|
|
2742
|
+
_f.id, ":\u00A0"), index.h("span", null, (_h = (_g = this.parcelSuggestion) === null || _g === void 0 ? void 0 : _g.sending) === null || _h === void 0 ? void 0 :
|
|
2743
|
+
_h.product, ",", ' ', (_k = (_j = this.parcelSuggestion) === null || _j === void 0 ? void 0 : _j.sending) === null || _k === void 0 ? void 0 :
|
|
2744
|
+
_k.recipient.zipcode, ' ', (_m = (_l = this.parcelSuggestion) === null || _l === void 0 ? void 0 : _l.sending) === null || _m === void 0 ? void 0 :
|
|
2745
|
+
_m.recipient.city, ",", ' ', (_p = (_o = this.parcelSuggestion) === null || _o === void 0 ? void 0 : _o.sending) === null || _p === void 0 ? void 0 :
|
|
2746
|
+
_p.state)))), !showPortalRecommendations &&
|
|
2747
|
+
this.coveoSuggestions &&
|
|
2748
|
+
this.coveoSuggestions.map(suggestion => (index.h("li", { key: suggestion.objectId }, index.h("a", { class: "nav-link", href: suggestion.redirectUrl, "data-suggestion-text": suggestion.expression, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, index.h(svgIcon_component.SvgIcon, { name: "pi-search" }), index.h(HighlightedText, { text: suggestion.highlighted }))))), !showPortalRecommendations &&
|
|
2749
|
+
this.placeSuggestions &&
|
|
2750
|
+
this.placeSuggestions.map(suggestion => {
|
|
2751
|
+
var _a, _b;
|
|
2752
|
+
return (index.h("li", { key: suggestion.id }, index.h("a", { class: "nav-link", href: getPlacesUrl(suggestion), "data-suggestion-text": suggestion.name, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, index.h(svgIcon_component.SvgIcon, { name: "pi-place" }), index.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) }))));
|
|
2753
|
+
}))))))))));
|
|
2754
|
+
}
|
|
2755
|
+
get host() { return index.getElement(this); }
|
|
2756
|
+
};
|
|
2735
2757
|
PostSearch.style = postSearchCss;
|
|
2736
2758
|
|
|
2737
2759
|
exports.post_search = PostSearch;
|