@swisspost/internet-header 1.7.1 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{klp-widget.controller-5d5afa10.js → klp-widget.controller-d23f72bb.js} +784 -1047
- package/dist/cjs/klp-widget.controller-d23f72bb.js.map +1 -0
- package/dist/cjs/{language.service-56d68ec3.js → language.service-dcd7bae3.js} +16 -1
- package/dist/cjs/language.service-dcd7bae3.js.map +1 -0
- package/dist/cjs/post-klp-login-widget.cjs.entry.js +1 -1
- package/dist/cjs/post-language-switch.cjs.entry.js +3 -4
- package/dist/cjs/post-language-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/post-main-navigation.cjs.entry.js +22 -25
- package/dist/cjs/post-main-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/post-meta-navigation.cjs.entry.js +3 -3
- package/dist/cjs/post-meta-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/post-search.cjs.entry.js +2 -2
- package/dist/cjs/post-search.cjs.entry.js.map +1 -1
- package/dist/cjs/post-skiplinks.cjs.entry.js +2 -2
- package/dist/cjs/post-skiplinks.cjs.entry.js.map +1 -1
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js +4 -4
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js.map +1 -1
- package/dist/cjs/swisspost-internet-header.cjs.entry.js +9 -9
- package/dist/cjs/swisspost-internet-header.cjs.entry.js.map +1 -1
- package/dist/collection/assets/i18n/translations.js +15 -0
- package/dist/collection/assets/i18n/translations.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js.map +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js +1 -1
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js.map +1 -1
- package/dist/collection/components/post-internet-header/post-internet-header.js +2 -1
- package/dist/collection/components/post-internet-header/post-internet-header.js.map +1 -1
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js +1 -1
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js.map +1 -1
- package/dist/collection/components/post-main-navigation/components/level-one-action.component.js +2 -1
- 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 +21 -25
- 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 +3 -3
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.js.map +1 -1
- package/dist/collection/components/post-search/post-search.js +2 -2
- package/dist/collection/components/post-search/post-search.js.map +1 -1
- package/dist/collection/components/post-skiplinks/post-skiplinks.js +1 -1
- package/dist/collection/components/post-skiplinks/post-skiplinks.js.map +1 -1
- package/dist/components/klp-widget.controller.js +783 -1046
- package/dist/components/klp-widget.controller.js.map +1 -1
- package/dist/components/language.service.js +15 -0
- package/dist/components/language.service.js.map +1 -1
- package/dist/components/post-language-switch2.js +2 -3
- package/dist/components/post-language-switch2.js.map +1 -1
- package/dist/components/post-main-navigation2.js +22 -25
- package/dist/components/post-main-navigation2.js.map +1 -1
- package/dist/components/post-meta-navigation2.js +3 -3
- package/dist/components/post-meta-navigation2.js.map +1 -1
- package/dist/components/post-search2.js +2 -2
- package/dist/components/post-search2.js.map +1 -1
- package/dist/components/post-skiplinks2.js +1 -1
- package/dist/components/post-skiplinks2.js.map +1 -1
- package/dist/components/swisspost-internet-breadcrumbs.js +3 -3
- package/dist/components/swisspost-internet-breadcrumbs.js.map +1 -1
- package/dist/components/swisspost-internet-header.js +9 -9
- package/dist/components/swisspost-internet-header.js.map +1 -1
- package/dist/esm/{klp-widget.controller-9f7e3c54.js → klp-widget.controller-945d9271.js} +784 -1047
- package/dist/esm/klp-widget.controller-945d9271.js.map +1 -0
- package/dist/esm/{language.service-74bc1f43.js → language.service-55e5ef74.js} +16 -1
- package/dist/esm/language.service-55e5ef74.js.map +1 -0
- package/dist/esm/post-klp-login-widget.entry.js +1 -1
- package/dist/esm/post-language-switch.entry.js +3 -4
- package/dist/esm/post-language-switch.entry.js.map +1 -1
- package/dist/esm/post-main-navigation.entry.js +22 -25
- package/dist/esm/post-main-navigation.entry.js.map +1 -1
- package/dist/esm/post-meta-navigation.entry.js +3 -3
- package/dist/esm/post-meta-navigation.entry.js.map +1 -1
- package/dist/esm/post-search.entry.js +2 -2
- package/dist/esm/post-search.entry.js.map +1 -1
- package/dist/esm/post-skiplinks.entry.js +2 -2
- package/dist/esm/post-skiplinks.entry.js.map +1 -1
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js +4 -4
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js.map +1 -1
- package/dist/esm/swisspost-internet-header.entry.js +9 -9
- package/dist/esm/swisspost-internet-header.entry.js.map +1 -1
- package/dist/esm-es5/klp-widget.controller-945d9271.js +13 -0
- package/dist/esm-es5/klp-widget.controller-945d9271.js.map +1 -0
- package/dist/esm-es5/language.service-55e5ef74.js +2 -0
- package/dist/esm-es5/language.service-55e5ef74.js.map +1 -0
- package/dist/esm-es5/post-klp-login-widget.entry.js +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-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/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-header.entry.js +1 -1
- package/dist/esm-es5/swisspost-internet-header.entry.js.map +1 -1
- package/dist/swisspost-internet-header/p-0d7864f3.js +13 -0
- package/dist/swisspost-internet-header/p-0d7864f3.js.map +1 -0
- package/dist/swisspost-internet-header/p-1195cffa.entry.js +2 -0
- package/dist/swisspost-internet-header/p-1195cffa.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-f62f50ce.system.entry.js → p-1c0ba4e8.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-1c0ba4e8.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-242b61d1.system.js +2 -0
- package/dist/swisspost-internet-header/p-242b61d1.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-30695393.entry.js +7 -0
- package/dist/swisspost-internet-header/{p-3f72b002.entry.js.map → p-30695393.entry.js.map} +1 -1
- package/dist/swisspost-internet-header/{p-6032d37e.entry.js → p-3462fe1c.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-3462fe1c.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-3cabcfa7.entry.js +2 -0
- package/dist/swisspost-internet-header/{p-21ef11a4.entry.js.map → p-3cabcfa7.entry.js.map} +1 -1
- package/dist/swisspost-internet-header/p-3df8cabd.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-3df8cabd.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-49fe20ff.system.js +1 -1
- package/dist/swisspost-internet-header/p-4c9f1f1a.system.entry.js +7 -0
- package/dist/swisspost-internet-header/{p-8f34abed.system.entry.js.map → p-4c9f1f1a.system.entry.js.map} +1 -1
- package/dist/swisspost-internet-header/{p-996a552e.system.entry.js → p-57f4eea0.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-6582303e.js +2 -0
- package/dist/swisspost-internet-header/p-6582303e.js.map +1 -0
- package/dist/swisspost-internet-header/p-73208b0d.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-73208b0d.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-96623613.system.entry.js +2 -0
- package/dist/swisspost-internet-header/{p-73b6ce0d.system.entry.js.map → p-96623613.system.entry.js.map} +1 -1
- package/dist/swisspost-internet-header/{p-c435e138.entry.js → p-99228f51.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-99228f51.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-9a6083cb.entry.js +2 -0
- package/dist/swisspost-internet-header/p-9a6083cb.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-afdd23a8.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-afdd23a8.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-b8d05765.system.js +13 -0
- package/dist/swisspost-internet-header/p-b8d05765.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-d5d1f301.entry.js +2 -0
- package/dist/swisspost-internet-header/p-d5d1f301.entry.js.map +1 -0
- package/dist/swisspost-internet-header/{p-5e5d587a.entry.js → p-e95ed009.entry.js} +2 -2
- package/dist/swisspost-internet-header/{p-30335ce0.system.entry.js → p-f349687c.system.entry.js} +2 -2
- package/dist/swisspost-internet-header/p-f349687c.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.css +1 -1
- package/dist/swisspost-internet-header/swisspost-internet-header.esm.js +1 -1
- package/dist/types/assets/i18n/translations.d.ts +15 -0
- package/dist/types/components/post-main-navigation/post-main-navigation.d.ts +1 -7
- package/dist/types/services/language.service.d.ts +19 -1
- package/package.json +7 -7
- package/dist/cjs/klp-widget.controller-5d5afa10.js.map +0 -1
- package/dist/cjs/language.service-56d68ec3.js.map +0 -1
- package/dist/esm/klp-widget.controller-9f7e3c54.js.map +0 -1
- package/dist/esm/language.service-74bc1f43.js.map +0 -1
- package/dist/esm-es5/klp-widget.controller-9f7e3c54.js +0 -27
- package/dist/esm-es5/klp-widget.controller-9f7e3c54.js.map +0 -1
- package/dist/esm-es5/language.service-74bc1f43.js +0 -2
- package/dist/esm-es5/language.service-74bc1f43.js.map +0 -1
- package/dist/swisspost-internet-header/p-21ef11a4.entry.js +0 -2
- package/dist/swisspost-internet-header/p-2fd2c574.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-2fd2c574.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-30335ce0.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-3f72b002.entry.js +0 -7
- package/dist/swisspost-internet-header/p-6032d37e.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-6df0c486.entry.js +0 -2
- package/dist/swisspost-internet-header/p-6df0c486.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-73b6ce0d.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-8bd39c64.js +0 -2
- package/dist/swisspost-internet-header/p-8bd39c64.js.map +0 -1
- package/dist/swisspost-internet-header/p-8f34abed.system.entry.js +0 -7
- package/dist/swisspost-internet-header/p-9efee6d6.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-9efee6d6.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-ad7071ea.system.js +0 -27
- package/dist/swisspost-internet-header/p-ad7071ea.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-c24585eb.entry.js +0 -2
- package/dist/swisspost-internet-header/p-c24585eb.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-c435e138.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-cce32859.entry.js +0 -2
- package/dist/swisspost-internet-header/p-cce32859.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-f0396178.system.entry.js +0 -2
- package/dist/swisspost-internet-header/p-f0396178.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-f4f5ca86.system.js +0 -2
- package/dist/swisspost-internet-header/p-f4f5ca86.system.js.map +0 -1
- package/dist/swisspost-internet-header/p-f62f50ce.system.entry.js.map +0 -1
- package/dist/swisspost-internet-header/p-fefa1082.js +0 -27
- package/dist/swisspost-internet-header/p-fefa1082.js.map +0 -1
- /package/dist/swisspost-internet-header/{p-996a552e.system.entry.js.map → p-57f4eea0.system.entry.js.map} +0 -0
- /package/dist/swisspost-internet-header/{p-5e5d587a.entry.js.map → p-e95ed009.entry.js.map} +0 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { s as state } from './store-b78e2d3b.js';
|
|
2
2
|
|
|
3
3
|
const translations = {
|
|
4
|
+
'Active navigation element': {
|
|
5
|
+
de: 'Aktives Navigationselement',
|
|
6
|
+
fr: 'Élément de navigation actif',
|
|
7
|
+
it: 'Elemento di navigazione attivo',
|
|
8
|
+
},
|
|
4
9
|
'Close overlay': {
|
|
5
10
|
de: 'Overlay Schliessen',
|
|
6
11
|
fr: 'Fermer la superposition',
|
|
@@ -41,6 +46,16 @@ const translations = {
|
|
|
41
46
|
fr: 'Naviguer sur post.ch',
|
|
42
47
|
it: 'Navigate su post.ch',
|
|
43
48
|
},
|
|
49
|
+
'Skip Links': {
|
|
50
|
+
de: 'Sprung Links',
|
|
51
|
+
fr: 'Sauter les liens',
|
|
52
|
+
it: 'Salta i link',
|
|
53
|
+
},
|
|
54
|
+
'Intermediary links': {
|
|
55
|
+
de: 'Intermediäre Links',
|
|
56
|
+
fr: 'Liens intermédiaires',
|
|
57
|
+
it: 'Collegamenti intermedi',
|
|
58
|
+
},
|
|
44
59
|
};
|
|
45
60
|
|
|
46
61
|
const getUserLang = (supportedLanguages, implementorPreferredLanguage, localStorageKey, cookieKey) => {
|
|
@@ -150,4 +165,4 @@ const translate = (key, lang, translationObject = translations) => { var _a, _b,
|
|
|
150
165
|
|
|
151
166
|
export { getUserLang as g, persistLanguageChoice as p, translate as t };
|
|
152
167
|
|
|
153
|
-
//# sourceMappingURL=language.service-
|
|
168
|
+
//# sourceMappingURL=language.service-55e5ef74.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"language.service-55e5ef74.js","mappings":"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","names":[],"sources":["./src/assets/i18n/translations.ts","./src/services/language.service.ts"],"sourcesContent":["export const translations = {\n 'Active navigation element': {\n de: 'Aktives Navigationselement',\n fr: 'Élément de navigation actif',\n it: 'Elemento di navigazione attivo',\n },\n 'Close overlay': {\n de: 'Overlay Schliessen',\n fr: 'Fermer la superposition',\n it: 'Chiudi sovrapposizione',\n },\n 'Current language is English': {\n de: 'Die aktuelle Sprache ist Deutsch',\n fr: 'La langue actuelle est le français',\n it: \"La lingua corrente è l'italiano\",\n },\n 'Change language': {\n de: 'Sprache wechseln',\n fr: 'Changer de langue',\n it: 'Cambia lingua',\n },\n 'Go to main content': {\n de: 'Zum Hauptinhalt springen',\n fr: 'Aller au contenu principal',\n it: 'Vai al contenuto principale',\n },\n 'Go to search': {\n de: 'Zur Suche springen',\n fr: 'Aller à la recherche',\n it: 'Vai alla ricerca',\n },\n 'Go to login': {\n de: 'Zum Login springen',\n fr: 'Aller au login',\n it: 'Vai al login',\n },\n 'Open menu': {\n de: 'Menü öffnen',\n fr: 'Ouvrir le menu',\n it: 'Apri il menu',\n },\n 'Navigate on post.ch': {\n de: 'Navigieren auf post.ch',\n fr: 'Naviguer sur post.ch',\n it: 'Navigate su post.ch',\n },\n 'Skip Links': {\n de: 'Sprung Links',\n fr: 'Sauter les liens',\n it: 'Salta i link',\n },\n 'Intermediary links': {\n de: 'Intermediäre Links',\n fr: 'Liens intermédiaires',\n it: 'Collegamenti intermedi',\n },\n};\n","import { translations } from '../assets/i18n/translations';\nimport { state } from '../data/store';\n\nexport const getUserLang = (\n supportedLanguages: string[],\n implementorPreferredLanguage?: string,\n localStorageKey?: string,\n cookieKey?: string,\n) => {\n // If there are no supported languages, well...\n if (supportedLanguages.length === 0) {\n return undefined;\n }\n\n // If there is only one language in the config, use this\n if (supportedLanguages.length === 1) {\n return supportedLanguages[0];\n }\n\n const url = new URL(window.location.href);\n\n /**\n * Build array of possible language definitions in order of importance.\n * At the end is a filter function that will weed out any undefined or null entries.\n */\n let languagesSet: Array<string> = [\n // Check if implementor overrides lang config\n implementorPreferredLanguage,\n\n // Check query string param\n url.searchParams.get('lang'),\n\n // Check url pathname\n url.pathname.split('/').find(segment => supportedLanguages.includes(segment)),\n\n // Check local storage with the key provided\n localStorageKey !== undefined ? window.localStorage.getItem(localStorageKey) : null,\n\n // Check cookies\n getCookie('language'),\n getCookie('lang'),\n cookieKey !== undefined ? getCookie(cookieKey) : null,\n\n // Check document language\n document.documentElement.lang,\n\n // Check browser preferred language\n getPreferredLanguageFromBrowser(supportedLanguages),\n\n // Check the state\n state.currentLanguage,\n ].filter((lang): lang is string => !!lang);\n\n // Check the set of languages to see if it matches\n // any of the supported languages. Return the first\n // supported language if there is none set\n const lang =\n languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];\n\n if (!lang || lang.length !== 2) {\n throw new Error(\n `Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`,\n );\n }\n\n return lang;\n};\n\n/**\n * Persist chosen language to local storage\n * @param lang Currently chose language, two char string\n */\nexport const persistLanguageChoice = (\n lang: string,\n cookieKey?: string,\n localStorageKey?: string,\n) => {\n if (localStorageKey !== undefined) {\n window.localStorage.setItem(localStorageKey, lang);\n }\n\n if (cookieKey !== undefined) {\n setCookie(cookieKey, lang);\n }\n\n state.currentLanguage = lang;\n};\n\n/**\n * Read a cookie by name\n * https://stackoverflow.com/questions/5639346/what-is-the-shortest-function-for-reading-a-cookie-by-name-in-javascript?rq=1\n * @param name Cookie name\n * @returns Cookie value or an empty string\n */\nexport const getCookie = (name: string) => {\n return document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || '';\n};\n\n/**\n * Write a new cookie\n * https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support\n * @param key\n * @param value\n */\nexport const setCookie = (key: string, value: string) => {\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n};\n\nconst getPreferredLanguageFromBrowser = (supportedLanguages: string[]): string | null => {\n // IE & Chrome\n if (navigator.language) {\n const lang = extractLanguage(navigator.language);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n\n // Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.\n if (navigator.languages) {\n for (const l of navigator.languages) {\n const lang = extractLanguage(l);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n }\n\n return null;\n};\n\nconst extractLanguage = (language: string): string => language.substring(0, 2).toLowerCase();\n\n/**\n * Simple translate function for general header UI strings\n *\n * @param key Translation key\n * @param lang Force a language\n * @param translationObject Optionally provide translations\n * @returns Translated string or the key\n */\nexport const translate = (key: string, lang?: string, translationObject = translations) =>\n translationObject[key]?.[lang ?? state.currentLanguage ?? ''] ?? key;\n"],"version":3}
|
|
@@ -10,7 +10,7 @@ const PostKlpLoginWidget = class {
|
|
|
10
10
|
}
|
|
11
11
|
async componentDidLoad() {
|
|
12
12
|
var _a;
|
|
13
|
-
const { initializeKLPLoginWidget } = await import('./klp-widget.controller-
|
|
13
|
+
const { initializeKLPLoginWidget } = await import('./klp-widget.controller-945d9271.js');
|
|
14
14
|
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.loginWidgetOptions) === undefined)
|
|
15
15
|
return;
|
|
16
16
|
initializeKLPLoginWidget('post-klp-login-widget', Object.assign(Object.assign({}, state.localizedConfig.header.loginWidgetOptions), { environment: state.environment }));
|
|
@@ -3,16 +3,15 @@ import { S as SvgSprite } from './svg-sprite.component-f319da57.js';
|
|
|
3
3
|
import { S as SvgIcon } from './svg-icon.component-7bac7397.js';
|
|
4
4
|
import { s as state } from './store-b78e2d3b.js';
|
|
5
5
|
import { e as elementHasTransition, u as userPrefersReducedMotion } from './ui.service-2fbc9c45.js';
|
|
6
|
-
import { t as translate } from './language.service-
|
|
6
|
+
import { t as translate } from './language.service-55e5ef74.js';
|
|
7
7
|
|
|
8
8
|
const PostLanguageSwitchList = (props) => {
|
|
9
9
|
var _a;
|
|
10
10
|
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined)
|
|
11
11
|
return;
|
|
12
12
|
const config = state.localizedConfig.header;
|
|
13
|
-
return (h("nav", { class: "language-switch-dropdown", ref: e => props.dropdownRef(e) },
|
|
14
|
-
h("
|
|
15
|
-
h("ul", { "aria-label": config.translations.navLangAriaLabel }, props.navLang
|
|
13
|
+
return (h("nav", { class: "language-switch-dropdown", ref: e => props.dropdownRef(e), "aria-label": config.translations.navLangAriaLabel },
|
|
14
|
+
h("ul", { "aria-label": translate('Change language') }, props.navLang
|
|
16
15
|
.filter(lang => !lang.isCurrent)
|
|
17
16
|
.map(lang => {
|
|
18
17
|
const TagName = lang.url === null ? 'button' : 'a';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"post-language-switch.entry.js","mappings":"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","names":[],"sources":["./src/components/post-language-switch/components/post-language-switch-list.tsx","./src/components/post-language-switch/post-language-switch.scss?tag=post-language-switch&encapsulation=shadow","./src/components/post-language-switch/post-language-switch.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { NavLangEntity } from '../../../models/header.model';\nimport { translate } from '../../../services/language.service';\nimport { state } from '../../../data/store';\n\nexport const PostLanguageSwitchList = (props: {\n navLang: NavLangEntity[];\n switchLanguage: (lang: NavLangEntity) => void;\n dropdownRef: (element: HTMLElement | undefined) => void;\n}) => {\n if (state.localizedConfig?.header === undefined) return;\n const config = state.localizedConfig.header;\n\n return (\n <nav class=\"language-switch-dropdown\" ref={e => props.dropdownRef(e)}>\n <h3 class=\"visually-hidden\">{translate('Change language')}</h3>\n <ul aria-label={config.translations.navLangAriaLabel}>\n {props.navLang\n .filter(lang => !lang.isCurrent)\n .map(lang => {\n const TagName = lang.url === null ? 'button' : 'a';\n return (\n <li key={lang.lang}>\n <TagName\n onClick={() => props.switchLanguage(lang)}\n href={lang.url}\n lang={lang.lang}\n title={lang.title}\n >\n <span class=\"visually-hidden\">{lang.title}</span>\n <span aria-hidden=\"true\">{lang.text}</span>\n </TagName>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n","@use \"@swisspost/design-system-styles/variables/color\";\n@use \"@swisspost/design-system-styles/functions\";\n@use \"../../utils/utils.scss\";\n\n:host {\n --separator-display: none;\n --separator-height: 100%;\n\n display: flex;\n align-items: center;\n align-self: stretch;\n\n &::before {\n display: var(--separator-display);\n height: var(--separator-height);\n border-left: 1px solid color.$gray-10;\n content: '';\n }\n}\n\n.lang-btn {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 1rem;\n border: none;\n box-shadow: none;\n background: none;\n text-transform: uppercase;\n cursor: pointer;\n color: rgba(color.$black, 0.8);\n\n &:hover,\n &:focus {\n color: black;\n }\n\n svg {\n width: 1.5em;\n height: 1.5em;\n transition: transform 250ms;\n\n &.rotated {\n transform: rotate(180deg);\n }\n }\n}\n\n.language-switch {\n position: relative;\n align-self: stretch;\n height: 100%;\n\n &.list {\n margin-top: 1.5rem;\n display: flex;\n align-items: center;\n }\n}\n\n.current-language {\n text-transform: uppercase;\n border-right: 1px solid color.$gray-20;\n padding: 0.5rem 1rem 0.5rem 0;\n}\n\n.language-switch-dropdown {\n .dropdown & {\n position: absolute;\n top: 100%;\n width: 100%;\n background: white;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%), 0 2px 6px 2px rgb(0 0 0 / 10%);\n z-index: 1;\n transform: scale(0.1);\n transform-origin: center top;\n transition: transform 0.1s;\n margin-top: var(--language-dropdown-margin-top);\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n\n &.open {\n transform: scale(1);\n }\n }\n\n ul {\n @extend %no-list;\n\n .list & {\n display: flex;\n\n > li + li {\n border-left: 1px solid color.$gray-20;\n }\n }\n }\n\n a,\n button {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: functions.px-to-rem(48px);\n padding: 0 0.25rem;\n text-transform: uppercase;\n cursor: pointer;\n transition: background-color 200ms, color 200ms;\n\n &:hover,\n &:focus {\n background: color.$gray-background;\n }\n\n span {\n // Worst case scenario\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .list & {\n color: black;\n height: auto;\n padding: 0.5rem 1rem;\n }\n }\n}\n","import {\n Component,\n Event,\n Host,\n h,\n Method,\n EventEmitter,\n State,\n Prop,\n Element,\n} from '@stencil/core';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { state } from '../../data/store';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n NavLangEntity,\n} from '../../models/header.model';\nimport { userPrefersReducedMotion, elementHasTransition } from '../../services/ui.service';\nimport { translate } from '../../services/language.service';\nimport { PostLanguageSwitchList } from './components/post-language-switch-list';\nimport { IAvailableLanguage } from '../../models/language.model';\n\n@Component({\n tag: 'post-language-switch',\n styleUrl: 'post-language-switch.scss',\n shadow: true,\n})\nexport class PostLanguageSwitch implements HasDropdown {\n @Prop() mode: 'dropdown' | 'list';\n @State() langSwitchOpen = false;\n @Element() host: DropdownElement;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Event({ bubbles: true }) languageChanged: EventEmitter<string>;\n private languageSwitchDropdown: HTMLElement | undefined;\n\n componentWillUpdate() {\n // Check if language switch got set to close and if mode is dropdown\n if (this.languageSwitchDropdown && !this.langSwitchOpen && this.mode == 'dropdown') {\n this.languageSwitchDropdown.classList.remove('open');\n\n // Check if element has transition applied and whether user prefers to see animations or not\n if (\n elementHasTransition(this.languageSwitchDropdown, 'transform') &&\n !userPrefersReducedMotion()\n ) {\n // Wait for CSS transition 'transform' to end before continuing\n return new Promise<boolean>(resolve => {\n this.languageSwitchDropdown?.addEventListener('transitionend', event => {\n if (event.propertyName === 'transform') {\n resolve(true);\n }\n });\n });\n }\n }\n }\n\n componentDidUpdate() {\n // Language switch got set to open\n if (this.languageSwitchDropdown && this.langSwitchOpen) {\n // Force browser to redraw/refresh DOM before adding 'open' class\n this.languageSwitchDropdown.getBoundingClientRect();\n this.languageSwitchDropdown.classList.add('open');\n }\n }\n\n /**\n * Open or close the language switch programatically\n * @param force Boolean to force a state\n * @returns Boolean indicating new state\n */\n @Method()\n async toggleDropdown(force?: boolean) {\n this.langSwitchOpen = force ?? !this.langSwitchOpen;\n this.dropdownToggled.emit({ open: this.langSwitchOpen, element: this.host });\n return this.langSwitchOpen;\n }\n\n /**\n * Emit a language change to the parent component\n *\n * @param newLang Config of the new language\n */\n switchLanguage(newLang: NavLangEntity) {\n this.languageChanged.emit(newLang.lang);\n this.toggleDropdown(false);\n }\n\n private getMergedLanguageConfig(config: NavLangEntity[], overrides?: IAvailableLanguage[]) {\n if (overrides === undefined) {\n return config;\n }\n\n return config.map(langConfig =>\n Object.assign(\n {},\n langConfig,\n overrides.find(l => l.lang === langConfig.lang),\n ),\n );\n }\n\n private setDropdownRef(element: HTMLElement | undefined) {\n this.languageSwitchDropdown = element;\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) return;\n const config = state.localizedConfig.header;\n const mergedConfig = this.getMergedLanguageConfig(\n config.navLang,\n state.languageSwitchOverrides,\n );\n\n return (\n <Host>\n <div class={`language-switch ${this.mode}`}>\n <SvgSprite />\n {this.mode === 'dropdown' ? (\n <button\n class=\"lang-btn\"\n aria-expanded={`${this.langSwitchOpen}`}\n aria-haspopup=\"listbox\"\n onClick={() => this.toggleDropdown()}\n >\n <span class=\"visually-hidden\">\n {config.translations.navLangAriaLabel}, {translate('Current language is English')}\n </span>\n <span aria-hidden=\"true\">{state.currentLanguage}</span>\n <SvgIcon name=\"pi-arrow-down\" classNames={this.langSwitchOpen ? 'rotated' : ''} />\n </button>\n ) : (\n <span class=\"bold current-language\">\n <span class=\"visually-hidden\">{translate('Current language is English')}</span>\n <span>{state.currentLanguage}</span>\n </span>\n )}\n {this.langSwitchOpen || this.mode === 'list' ? (\n <PostLanguageSwitchList\n navLang={mergedConfig}\n switchLanguage={e => this.switchLanguage(e)}\n dropdownRef={e => e !== undefined && this.setDropdownRef(e)}\n />\n ) : null}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"post-language-switch.entry.js","mappings":"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","names":[],"sources":["./src/components/post-language-switch/components/post-language-switch-list.tsx","./src/components/post-language-switch/post-language-switch.scss?tag=post-language-switch&encapsulation=shadow","./src/components/post-language-switch/post-language-switch.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { NavLangEntity } from '../../../models/header.model';\nimport { translate } from '../../../services/language.service';\nimport { state } from '../../../data/store';\n\nexport const PostLanguageSwitchList = (props: {\n navLang: NavLangEntity[];\n switchLanguage: (lang: NavLangEntity) => void;\n dropdownRef: (element: HTMLElement | undefined) => void;\n}) => {\n if (state.localizedConfig?.header === undefined) return;\n const config = state.localizedConfig.header;\n\n return (\n <nav\n class=\"language-switch-dropdown\"\n ref={e => props.dropdownRef(e)}\n aria-label={config.translations.navLangAriaLabel}\n >\n <ul aria-label={translate('Change language')}>\n {props.navLang\n .filter(lang => !lang.isCurrent)\n .map(lang => {\n const TagName = lang.url === null ? 'button' : 'a';\n return (\n <li key={lang.lang}>\n <TagName\n onClick={() => props.switchLanguage(lang)}\n href={lang.url}\n lang={lang.lang}\n title={lang.title}\n >\n <span class=\"visually-hidden\">{lang.title}</span>\n <span aria-hidden=\"true\">{lang.text}</span>\n </TagName>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n","@use \"@swisspost/design-system-styles/variables/color\";\n@use \"@swisspost/design-system-styles/functions\";\n@use \"../../utils/utils.scss\";\n\n:host {\n --separator-display: none;\n --separator-height: 100%;\n\n display: flex;\n align-items: center;\n align-self: stretch;\n\n &::before {\n display: var(--separator-display);\n height: var(--separator-height);\n border-left: 1px solid color.$gray-10;\n content: '';\n }\n}\n\n.lang-btn {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 1rem;\n border: none;\n box-shadow: none;\n background: none;\n text-transform: uppercase;\n cursor: pointer;\n color: rgba(color.$black, 0.8);\n\n &:hover,\n &:focus {\n color: black;\n }\n\n svg {\n width: 1.5em;\n height: 1.5em;\n transition: transform 250ms;\n\n &.rotated {\n transform: rotate(180deg);\n }\n }\n}\n\n.language-switch {\n position: relative;\n align-self: stretch;\n height: 100%;\n\n &.list {\n margin-top: 1.5rem;\n display: flex;\n align-items: center;\n }\n}\n\n.current-language {\n text-transform: uppercase;\n border-right: 1px solid color.$gray-20;\n padding: 0.5rem 1rem 0.5rem 0;\n}\n\n.language-switch-dropdown {\n .dropdown & {\n position: absolute;\n top: 100%;\n width: 100%;\n background: white;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%), 0 2px 6px 2px rgb(0 0 0 / 10%);\n z-index: 1;\n transform: scale(0.1);\n transform-origin: center top;\n transition: transform 0.1s;\n margin-top: var(--language-dropdown-margin-top);\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n\n &.open {\n transform: scale(1);\n }\n }\n\n ul {\n @extend %no-list;\n\n .list & {\n display: flex;\n\n > li + li {\n border-left: 1px solid color.$gray-20;\n }\n }\n }\n\n a,\n button {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: functions.px-to-rem(48px);\n padding: 0 0.25rem;\n text-transform: uppercase;\n cursor: pointer;\n transition: background-color 200ms, color 200ms;\n\n &:hover,\n &:focus {\n background: color.$gray-background;\n }\n\n span {\n // Worst case scenario\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .list & {\n color: black;\n height: auto;\n padding: 0.5rem 1rem;\n }\n }\n}\n","import {\n Component,\n Event,\n Host,\n h,\n Method,\n EventEmitter,\n State,\n Prop,\n Element,\n} from '@stencil/core';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { state } from '../../data/store';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n NavLangEntity,\n} from '../../models/header.model';\nimport { userPrefersReducedMotion, elementHasTransition } from '../../services/ui.service';\nimport { translate } from '../../services/language.service';\nimport { PostLanguageSwitchList } from './components/post-language-switch-list';\nimport { IAvailableLanguage } from '../../models/language.model';\n\n@Component({\n tag: 'post-language-switch',\n styleUrl: 'post-language-switch.scss',\n shadow: true,\n})\nexport class PostLanguageSwitch implements HasDropdown {\n @Prop() mode: 'dropdown' | 'list';\n @State() langSwitchOpen = false;\n @Element() host: DropdownElement;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Event({ bubbles: true }) languageChanged: EventEmitter<string>;\n private languageSwitchDropdown: HTMLElement | undefined;\n\n componentWillUpdate() {\n // Check if language switch got set to close and if mode is dropdown\n if (this.languageSwitchDropdown && !this.langSwitchOpen && this.mode == 'dropdown') {\n this.languageSwitchDropdown.classList.remove('open');\n\n // Check if element has transition applied and whether user prefers to see animations or not\n if (\n elementHasTransition(this.languageSwitchDropdown, 'transform') &&\n !userPrefersReducedMotion()\n ) {\n // Wait for CSS transition 'transform' to end before continuing\n return new Promise<boolean>(resolve => {\n this.languageSwitchDropdown?.addEventListener('transitionend', event => {\n if (event.propertyName === 'transform') {\n resolve(true);\n }\n });\n });\n }\n }\n }\n\n componentDidUpdate() {\n // Language switch got set to open\n if (this.languageSwitchDropdown && this.langSwitchOpen) {\n // Force browser to redraw/refresh DOM before adding 'open' class\n this.languageSwitchDropdown.getBoundingClientRect();\n this.languageSwitchDropdown.classList.add('open');\n }\n }\n\n /**\n * Open or close the language switch programatically\n * @param force Boolean to force a state\n * @returns Boolean indicating new state\n */\n @Method()\n async toggleDropdown(force?: boolean) {\n this.langSwitchOpen = force ?? !this.langSwitchOpen;\n this.dropdownToggled.emit({ open: this.langSwitchOpen, element: this.host });\n return this.langSwitchOpen;\n }\n\n /**\n * Emit a language change to the parent component\n *\n * @param newLang Config of the new language\n */\n switchLanguage(newLang: NavLangEntity) {\n this.languageChanged.emit(newLang.lang);\n this.toggleDropdown(false);\n }\n\n private getMergedLanguageConfig(config: NavLangEntity[], overrides?: IAvailableLanguage[]) {\n if (overrides === undefined) {\n return config;\n }\n\n return config.map(langConfig =>\n Object.assign(\n {},\n langConfig,\n overrides.find(l => l.lang === langConfig.lang),\n ),\n );\n }\n\n private setDropdownRef(element: HTMLElement | undefined) {\n this.languageSwitchDropdown = element;\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) return;\n const config = state.localizedConfig.header;\n const mergedConfig = this.getMergedLanguageConfig(\n config.navLang,\n state.languageSwitchOverrides,\n );\n\n return (\n <Host>\n <div class={`language-switch ${this.mode}`}>\n <SvgSprite />\n {this.mode === 'dropdown' ? (\n <button\n class=\"lang-btn\"\n aria-expanded={`${this.langSwitchOpen}`}\n aria-haspopup=\"listbox\"\n onClick={() => this.toggleDropdown()}\n >\n <span class=\"visually-hidden\">\n {config.translations.navLangAriaLabel}, {translate('Current language is English')}\n </span>\n <span aria-hidden=\"true\">{state.currentLanguage}</span>\n <SvgIcon name=\"pi-arrow-down\" classNames={this.langSwitchOpen ? 'rotated' : ''} />\n </button>\n ) : (\n <span class=\"bold current-language\">\n <span class=\"visually-hidden\">{translate('Current language is English')}</span>\n <span>{state.currentLanguage}</span>\n </span>\n )}\n {this.langSwitchOpen || this.mode === 'list' ? (\n <PostLanguageSwitchList\n navLang={mergedConfig}\n switchLanguage={e => this.switchLanguage(e)}\n dropdownRef={e => e !== undefined && this.setDropdownRef(e)}\n />\n ) : null}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-35186c69.js';
|
|
2
2
|
import { t as throttle } from './index-d2256e06.js';
|
|
3
|
-
import { c as clearAllBodyScrollLocks, d as disableBodyScroll, e as enableBodyScroll } from './bodyScrollLock.esm-afcc00e3.js';
|
|
4
3
|
import { s as state } from './store-b78e2d3b.js';
|
|
5
4
|
import { u as userPrefersReducedMotion } from './ui.service-2fbc9c45.js';
|
|
5
|
+
import { t as translate } from './language.service-55e5ef74.js';
|
|
6
6
|
import { S as SvgSprite } from './svg-sprite.component-f319da57.js';
|
|
7
7
|
import { S as SvgIcon } from './svg-icon.component-7bac7397.js';
|
|
8
8
|
|
|
@@ -17,6 +17,7 @@ const LevelOneAction = (props) => {
|
|
|
17
17
|
? props.level.title
|
|
18
18
|
: undefined, tabindex: props.level.url ? undefined : 0, "aria-haspopup": !props.level.noFlyout + '', "aria-expanded": props.level.noFlyout ? null : props.isOpen + '', onTouchEnd: e => props.onTouchEnd(e), onKeyDown: e => props.onKeyDown(e), onClick: e => props.onClick(e) },
|
|
19
19
|
h("span", null, props.level.text),
|
|
20
|
+
props.level.isActiveOverride ? (h("span", { class: "visually-hidden" }, translate('Active navigation element'))) : null,
|
|
20
21
|
h("svg", { "aria-hidden": "true" },
|
|
21
22
|
h("use", { href: "#pi-pointy-arrow-right" }))));
|
|
22
23
|
};
|
|
@@ -41,7 +42,6 @@ const PostMainNavigation = class {
|
|
|
41
42
|
}
|
|
42
43
|
disconnectedCallback() {
|
|
43
44
|
window.removeEventListener('resize', this.throttledResize);
|
|
44
|
-
clearAllBodyScrollLocks();
|
|
45
45
|
if (this.mouseEnterTimer !== null)
|
|
46
46
|
window.clearTimeout(this.mouseEnterTimer);
|
|
47
47
|
if (this.mouseLeaveTimer !== null)
|
|
@@ -74,7 +74,7 @@ const PostMainNavigation = class {
|
|
|
74
74
|
const flyout = (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById(id);
|
|
75
75
|
if (flyout && this.activeFlyout !== '') {
|
|
76
76
|
// Add flyout animation if there's no flyout open
|
|
77
|
-
this.addFlyoutAnimation(flyout);
|
|
77
|
+
this.addFlyoutAnimation(flyout, 'expand');
|
|
78
78
|
}
|
|
79
79
|
this.activeFlyout = id;
|
|
80
80
|
this.flyoutToggled.emit(id);
|
|
@@ -91,24 +91,30 @@ const PostMainNavigation = class {
|
|
|
91
91
|
const flyout = (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById(id);
|
|
92
92
|
if (flyout) {
|
|
93
93
|
// Add flyout animation for close action
|
|
94
|
-
this.addFlyoutAnimation(flyout);
|
|
94
|
+
this.addFlyoutAnimation(flyout, 'collapse');
|
|
95
95
|
}
|
|
96
96
|
this.activeFlyout = null;
|
|
97
97
|
this.flyoutToggled.emit();
|
|
98
98
|
}
|
|
99
|
-
addFlyoutAnimation(flyout) {
|
|
99
|
+
addFlyoutAnimation(flyout, direction) {
|
|
100
100
|
// Check if user prefers to see animations or not
|
|
101
101
|
if (!userPrefersReducedMotion()) {
|
|
102
102
|
flyout.classList.add('animate');
|
|
103
103
|
// Remove flyout animation after transition ended
|
|
104
|
-
flyout.addEventListener('transitionend', () =>
|
|
104
|
+
flyout.addEventListener('transitionend', () => {
|
|
105
|
+
var _a, _b, _c;
|
|
106
|
+
if (direction === 'expand') {
|
|
107
|
+
(_a = flyout.querySelector('button.flyout-back-button')) === null || _a === void 0 ? void 0 : _a.focus();
|
|
108
|
+
}
|
|
109
|
+
else if (direction === 'collapse') {
|
|
110
|
+
(_c = (_b = flyout.parentElement) === null || _b === void 0 ? void 0 : _b.querySelector('a.main-link')) === null || _c === void 0 ? void 0 : _c.focus();
|
|
111
|
+
}
|
|
112
|
+
flyout.classList.remove('animate');
|
|
113
|
+
}, {
|
|
105
114
|
once: true,
|
|
106
115
|
});
|
|
107
116
|
}
|
|
108
117
|
}
|
|
109
|
-
removeFlyoutAnimation(flyout) {
|
|
110
|
-
flyout.classList.remove('animate');
|
|
111
|
-
}
|
|
112
118
|
isActiveFlyout(id) {
|
|
113
119
|
return id === this.activeFlyout;
|
|
114
120
|
}
|
|
@@ -176,17 +182,6 @@ const PostMainNavigation = class {
|
|
|
176
182
|
this.openFlyout(level.id);
|
|
177
183
|
}
|
|
178
184
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Disable or re-enable body scrolling, depending on whether mobile menu is open or closed
|
|
181
|
-
*/
|
|
182
|
-
setBodyScroll() {
|
|
183
|
-
if (this.mobileMenuOpen) {
|
|
184
|
-
disableBodyScroll(this.flyoutElement);
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
enableBodyScroll(this.flyoutElement);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
185
|
/**
|
|
191
186
|
* Toggle the main navigation (only visible on mobile)
|
|
192
187
|
* @param force Force a state
|
|
@@ -198,7 +193,6 @@ const PostMainNavigation = class {
|
|
|
198
193
|
if (force === false) {
|
|
199
194
|
this.closeFlyout();
|
|
200
195
|
}
|
|
201
|
-
this.setBodyScroll();
|
|
202
196
|
this.setWindowHeight();
|
|
203
197
|
return this.mobileMenuOpen;
|
|
204
198
|
}
|
|
@@ -225,10 +219,13 @@ const PostMainNavigation = class {
|
|
|
225
219
|
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === undefined)
|
|
226
220
|
return;
|
|
227
221
|
const headerConfig = state.localizedConfig.header;
|
|
228
|
-
return (h(Host, null, h(SvgSprite, null), h("nav", { id: "post-internet-header-main-navigation", class: { 'main-navigation': true, 'open': this.mobileMenuOpen }, role: "menu"
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
222
|
+
return (h(Host, null, h(SvgSprite, null), h("nav", { "aria-label": headerConfig.translations.navMainAriaLabel, id: "post-internet-header-main-navigation", class: { 'main-navigation': true, 'open': this.mobileMenuOpen }, role: "menu" }, h("ul", { class: "main-container container" }, headerConfig.navMain.map(levelOne => (h("li", { key: levelOne.text, onMouseLeave: () => this.handleMouseLeave(levelOne), onMouseEnter: () => this.handleMouseEnter(levelOne) }, h(LevelOneAction, { level: levelOne, isOpen: this.isActiveFlyout(levelOne.id), onTouchEnd: e => this.handleTouchEnd(e, levelOne), onKeyDown: e => this.handleKeyPress(e, levelOne), onClick: e => this.handleClick(e, levelOne) }), !levelOne.noFlyout ? renderLevelOneFlyout.bind(this)(levelOne) : null)))), h("slot", null))));
|
|
223
|
+
function renderLevelOneFlyout(levelOne) {
|
|
224
|
+
return (h("div", { id: levelOne.id, class: { flyout: true, open: this.isActiveFlyout(levelOne.id) } }, h("div", { class: "wide-container" }, h("div", { class: "flyout-nav" }, h("button", { class: "nav-link flyout-back-button", onClick: () => this.closeFlyout(levelOne.id) }, h(SvgIcon, { name: "pi-pointy-arrow-right", classNames: "mirrored" }), h("span", null, headerConfig.translations.backButtonText)), h("button", { class: "flyout-close-button", onClick: () => this.closeFlyout(levelOne.id) }, h("span", { class: "visually-hidden" }, levelOne.text, ", ", headerConfig.translations.mobileNavToggleClose), h(SvgIcon, { name: "pi-close" }))), h("h2", { class: "flyout-title container" }, h("a", { href: levelOne.url, class: "nav-link" }, levelOne.text)), h("div", { class: "flyout-row container" }, levelOne.flyout.map((flyout, i) => (h("div", { key: flyout.title, class: "flyout-column" }, flyout.title ? h("h3", { id: `${levelOne.id}-column-${i}` }, flyout.title) : null, h("ul", { class: "flyout-linklist", "aria-labelledby": flyout.title ? `${levelOne.id}-column-${i}` : undefined }, flyout.linkList.map(link => (h("li", { key: link.url }, h("a", { class: {
|
|
225
|
+
'flyout-link': true,
|
|
226
|
+
'active': !!(link === null || link === void 0 ? void 0 : link.isActiveOverride),
|
|
227
|
+
}, href: link.url, target: link.target }, link.title, (link === null || link === void 0 ? void 0 : link.isActiveOverride) ? (h("span", { class: "visually-hidden" }, ", ", translate('Active navigation element'))) : null))))))))))));
|
|
228
|
+
}
|
|
232
229
|
}
|
|
233
230
|
get host() { return getElement(this); }
|
|
234
231
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"post-main-navigation.entry.js","mappings":"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","names":[],"sources":["./src/components/post-main-navigation/components/level-one-action.component.tsx","./src/components/post-main-navigation/post-main-navigation.scss?tag=post-main-navigation&encapsulation=shadow","./src/components/post-main-navigation/post-main-navigation.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { NavMainEntity } from '../../../models/header.model';\n\nexport const LevelOneAction = (props: {\n level: NavMainEntity;\n isOpen: boolean;\n onTouchEnd: (e: any) => void;\n onKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n}) => {\n const TagName = props.level.url ? 'a' : 'button';\n\n return (\n <TagName\n class={{\n 'main-link': true,\n 'active': !!props.level.isActiveOverride,\n 'focus': props.isOpen,\n }}\n href={props.level.url}\n title={\n props.level.title?.trim() && props.level.title?.trim() !== props.level.text?.trim()\n ? props.level.title\n : undefined\n }\n tabindex={props.level.url ? undefined : 0}\n aria-haspopup={!props.level.noFlyout + ''}\n aria-expanded={props.level.noFlyout ? null : props.isOpen + ''}\n onTouchEnd={e => props.onTouchEnd(e)}\n onKeyDown={e => props.onKeyDown(e)}\n onClick={e => props.onClick(e)}\n >\n <span>{props.level.text}</span>\n <svg aria-hidden=\"true\">\n <use href=\"#pi-pointy-arrow-right\" />\n </svg>\n </TagName>\n );\n};\n","@use '@swisspost/design-system-styles/variables/color';\n@use '@swisspost/design-system-styles/placeholders/text';\n@use '@swisspost/design-system-styles/functions';\n@use '../../utils/utils.scss';\n@use '../../utils/mixins.scss';\n\n:host {\n --host-window-height: var(--window-height, 100vh);\n --calculated-header-height: calc(var(--header-height) + 1px);\n\n display: block;\n min-width: 0;\n height: var(--header-height);\n}\n\n:host(.no-animation) {\n * {\n animation: none !important;\n transition: none !important;\n }\n}\n\n.main-navigation,\n.main-container,\n.main-container li,\n.main-link {\n @include mixins.min(lg) {\n height: 100%;\n }\n}\n\n.main-navigation {\n font-size: functions.px-to-rem(18px);\n\n @include mixins.min(lg) {\n font-size: functions.px-to-rem(16px);\n margin: 0 0.75rem;\n }\n\n @include mixins.min(xl) {\n font-size: functions.px-to-rem(18px);\n }\n\n @include mixins.min(xxl) {\n font-size: functions.px-to-rem(20px);\n }\n\n @include mixins.max(lg) {\n position: absolute;\n top: var(--calculated-header-height);\n left: 0;\n background: white;\n height: calc(var(--host-window-height) - var(--calculated-header-height));\n width: 100%;\n margin: 0;\n overflow: hidden scroll;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior: contain;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n z-index: -1;\n visibility: hidden;\n transform: translateY(-100%);\n transition: transform 0.35s, visibility 0.35s;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n\n &.open {\n transform: translateY(0);\n visibility: visible;\n }\n }\n}\n\n.main-container {\n @extend %no-list;\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n @include mixins.max(lg) {\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-start;\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n\n > li + li {\n border-top: 1px solid color.$gray-10;\n }\n }\n\n @include mixins.min(lg) {\n padding-right: 0;\n padding-left: 0;\n }\n\n > li {\n flex: 0 1 auto;\n min-width: 0;\n }\n}\n\n.main-link {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n text-align: left;\n cursor: pointer;\n width: 100%;\n\n @include mixins.min(lg) {\n svg {\n display: none;\n }\n }\n\n @include mixins.max(lg) {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 300;\n padding: 0.625rem 0;\n width: 100%;\n text-align: left;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.main-link,\n.flyout-link {\n position: relative;\n color: black;\n\n &::after {\n content: '';\n position: absolute;\n bottom: -1px;\n left: 0;\n width: 100%;\n height: 4px;\n background-color: transparent;\n opacity: 0;\n transform: scaleX(0.8);\n transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n\n &:hover,\n &.focus {\n &::after {\n background-color: color.$gray-20;\n opacity: 1;\n transform: scale(1);\n }\n }\n\n &.active {\n font-weight: 700;\n\n &::after {\n background-color: color.$yellow;\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n.flyout {\n left: 0;\n width: 100%;\n background: white;\n padding-bottom: 3rem;\n overflow: auto;\n overscroll-behavior: contain;\n visibility: hidden;\n\n @include mixins.min(lg) {\n position: absolute;\n top: 100%;\n max-height: calc(100vh - var(--header-height) - var(--meta-header-height) - 1px);\n z-index: -1;\n box-shadow: 0 0 1px 0 rgb(0 0 0 / 40%);\n transform: translateY(-100%);\n\n &.open {\n box-shadow: 0 0 8px 0 rgb(0 0 0 / 40%);\n transform: translateY(0);\n }\n }\n\n @include mixins.max(lg) {\n position: fixed;\n top: 0;\n height: 100%;\n z-index: 1;\n transform: translateX(100%);\n\n &.open {\n transform: translateX(0);\n }\n }\n\n &.open {\n visibility: visible;\n }\n\n &.animate {\n transition: transform 0.35s, visibility 0.35s, box-shadow 0.35s;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n}\n\n.flyout-nav {\n @extend %font-curve-small;\n\n display: flex;\n justify-content: space-between;\n min-height: 3.5rem;\n\n // Change box-sizing to content-box to add 1px border width to flyout-nav hight.\n // This ensures flyout-nav has same hight as main-navigation-container.\n box-sizing: content-box;\n}\n\n.flyout-row {\n display: flex;\n gap: 1.5rem;\n\n @include mixins.max(lg) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n }\n\n @include mixins.max(rg) {\n grid-template-columns: 1fr;\n }\n}\n\n.flyout-column {\n flex: 1;\n max-width: 25%;\n\n @include mixins.max(lg) {\n max-width: none;\n }\n\n h3 {\n @extend %font-curve-small;\n margin-top: 0;\n }\n}\n\n.flyout-back-button {\n @include mixins.container-padding();\n\n display: flex;\n align-items: center;\n font-size: functions.px-to-rem(16px);\n font-weight: 400;\n cursor: pointer;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n @include mixins.min(lg) {\n display: none;\n }\n}\n\n.flyout-close-button {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n margin-left: auto;\n padding: 0 1.5rem;\n cursor: pointer;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n @include mixins.max(lg) {\n display: none;\n }\n}\n\n.flyout-linklist {\n @extend %no-list;\n\n li {\n border-top: 1px solid color.$gray-10;\n }\n\n &:first-child > li {\n border-top-color: transparent;\n }\n}\n\n.flyout-link {\n @extend %nav-link;\n\n display: block;\n padding: 0.75rem 0;\n}\n\n.flyout-title {\n @extend %font-curve-bigger-regular;\n\n margin: 2.5rem 0 1.5rem 0;\n\n @include mixins.min(lg) {\n display: none;\n }\n}\n","import { Component, Host, h, State, Method, Event, Element, EventEmitter } from '@stencil/core';\nimport { throttle } from 'throttle-debounce';\nimport { disableBodyScroll, enableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport { state } from '../../data/store';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n IsFocusable,\n NavMainEntity,\n} from '../../models/header.model';\nimport { userPrefersReducedMotion } from '../../services/ui.service';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { LevelOneAction } from './components/level-one-action.component';\n\n@Component({\n tag: 'post-main-navigation',\n styleUrl: 'post-main-navigation.scss',\n shadow: true,\n})\nexport class PostMainNavigation implements HasDropdown, IsFocusable {\n @State() activeFlyout: string | null;\n @State() mobileMenuOpen: boolean;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Event() flyoutToggled: EventEmitter<string | null>;\n @Element() host: DropdownElement;\n private throttledResize: throttle<() => void>;\n private resizeTimer: number | null = null;\n private mouseLeaveTimer: number | null = null;\n private mouseEnterTimer: number | null = null;\n private flyoutElement: HTMLElement | undefined;\n\n connectedCallback() {\n this.throttledResize = throttle(300, () => this.handleResize());\n window.addEventListener('resize', this.throttledResize, { passive: true });\n this.setWindowHeight();\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this.throttledResize);\n clearAllBodyScrollLocks();\n if (this.mouseEnterTimer !== null) window.clearTimeout(this.mouseEnterTimer);\n if (this.mouseLeaveTimer !== null) window.clearTimeout(this.mouseLeaveTimer);\n }\n\n handleResize() {\n // Suspend all animations and transitions on window resize\n this.host.classList.add('no-animation');\n if (this.resizeTimer !== null) window.clearTimeout(this.resizeTimer);\n this.resizeTimer = window.setTimeout(() => {\n this.host.classList.remove('no-animation');\n }, 300);\n\n this.setWindowHeight();\n }\n\n // Update window height var\n setWindowHeight() {\n if (!this.host) {\n return;\n }\n this.host.style.setProperty('--window-height', `${window.innerHeight}px`);\n\n // Safari might or might not show a blank bar at the bottom where the browser\n // controls should be. This timeout waits for this bar to appear before resetting the available height\n window.setTimeout(() => {\n this.host.style.setProperty('--window-height', `${window.innerHeight}px`);\n }, 100);\n }\n\n openFlyout(id: string) {\n const flyout = this.host.shadowRoot?.getElementById(id);\n\n if (flyout && this.activeFlyout !== '') {\n // Add flyout animation if there's no flyout open\n this.addFlyoutAnimation(flyout);\n }\n\n this.activeFlyout = id;\n this.flyoutToggled.emit(id);\n this.setWindowHeight();\n\n if (this.mouseLeaveTimer !== null) {\n window.clearTimeout(this.mouseLeaveTimer);\n this.mouseLeaveTimer = null;\n }\n }\n\n closeFlyout(id?: string) {\n if (id === undefined) return;\n const flyout = this.host.shadowRoot?.getElementById(id);\n\n if (flyout) {\n // Add flyout animation for close action\n this.addFlyoutAnimation(flyout);\n }\n\n this.activeFlyout = null;\n this.flyoutToggled.emit();\n }\n\n addFlyoutAnimation(flyout: HTMLElement) {\n // Check if user prefers to see animations or not\n if (!userPrefersReducedMotion()) {\n flyout.classList.add('animate');\n\n // Remove flyout animation after transition ended\n flyout.addEventListener('transitionend', () => this.removeFlyoutAnimation(flyout), {\n once: true,\n });\n }\n }\n\n removeFlyoutAnimation(flyout: HTMLElement) {\n flyout.classList.remove('animate');\n }\n\n isActiveFlyout(id?: string) {\n return id === this.activeFlyout;\n }\n\n handleMouseEnter(level: NavMainEntity) {\n // Cancel opening the flyout if there already is one scheduled to open\n if (this.mouseEnterTimer !== null) {\n window.clearTimeout(this.mouseEnterTimer);\n this.mouseEnterTimer = null;\n }\n\n // Cancel closing if we enter again\n if (this.mouseLeaveTimer && this.activeFlyout === level.id) {\n window.clearTimeout(this.mouseLeaveTimer);\n this.mouseLeaveTimer = null;\n }\n\n if (window.innerWidth >= 1024 && level.flyout.length > 0 && this.activeFlyout !== level.id) {\n // Delay opening the flyout for a moment to give users a chance to move the mouse over the navigation without triggering the flyout\n this.mouseEnterTimer = window.setTimeout(() => {\n this.mouseEnterTimer = null;\n if (level.id !== undefined) this.openFlyout(level.id);\n }, 200);\n }\n }\n\n handleMouseLeave(level: NavMainEntity) {\n // Cancel opening the flyout if a mouseleave event happens before the flyout opened\n if (this.mouseEnterTimer !== null) {\n window.clearTimeout(this.mouseEnterTimer);\n }\n\n // Don't close an open flyout if the mouseleave is from another mainnav entry\n if (this.activeFlyout && this.activeFlyout !== level.id) {\n return;\n }\n\n if (window.innerWidth >= 1024 && level.flyout.length > 0) {\n // Allow the pointer to shortly leave the flyout without closing it. This\n // allows for user mistakes and makes the experience less nervous\n this.mouseLeaveTimer = window.setTimeout(() => {\n this.closeFlyout(level.id);\n }, 300);\n }\n }\n\n handleTouchEnd(event: TouchEvent, level: NavMainEntity) {\n if (!this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first touchstart and has a flyout, prevent link activation and open the flyout\n if (event.cancelable) event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n handleKeyPress(event: KeyboardEvent, level: NavMainEntity) {\n if (event.key === 'Enter' && !this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first enter keypress and has a flyout, prevent link activation and open the flyout\n event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n handleClick(event: MouseEvent, level: NavMainEntity) {\n if (!this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first click, always open the flyout, never the link\n // This is relevant for desktop with active screenreader which\n // translates an enter keypress to a click\n event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n /**\n * Disable or re-enable body scrolling, depending on whether mobile menu is open or closed\n */\n setBodyScroll() {\n if (this.mobileMenuOpen) {\n disableBodyScroll(this.flyoutElement);\n } else {\n enableBodyScroll(this.flyoutElement);\n }\n }\n\n /**\n * Toggle the main navigation (only visible on mobile)\n * @param force Force a state\n * @returns Boolean indicating new state\n */\n @Method()\n async toggleDropdown(force?: boolean) {\n this.mobileMenuOpen = force === undefined ? !this.mobileMenuOpen : force;\n this.dropdownToggled.emit({ open: this.mobileMenuOpen, element: this.host });\n\n if (force === false) {\n this.closeFlyout();\n }\n\n this.setBodyScroll();\n this.setWindowHeight();\n\n return this.mobileMenuOpen;\n }\n\n /**\n * Focus the main navigation toggle button\n */\n @Method()\n async setFocus() {\n const firstLink = this.host.shadowRoot?.querySelector<HTMLElement>('.main-link');\n if (firstLink) {\n firstLink.focus();\n }\n }\n\n /**\n * Open a specific flyout\n * @param id Flyout ID\n */\n @Method()\n async setActiveFlyout(id: string | null) {\n this.activeFlyout = id;\n this.flyoutToggled.emit(this.activeFlyout);\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) return;\n const headerConfig = state.localizedConfig.header;\n\n return (\n <Host>\n <SvgSprite />\n <nav\n id=\"post-internet-header-main-navigation\"\n class={{ 'main-navigation': true, 'open': this.mobileMenuOpen }}\n role=\"menu\"\n ref={el => (this.flyoutElement = el)}\n >\n <h1 class=\"visually-hidden\">{headerConfig.translations.navMainAriaLabel}</h1>\n <ul class=\"main-container container\">\n {headerConfig.navMain.map(levelOne => (\n <li\n key={levelOne.text}\n onMouseLeave={() => this.handleMouseLeave(levelOne)}\n onMouseEnter={() => this.handleMouseEnter(levelOne)}\n >\n <LevelOneAction\n level={levelOne}\n isOpen={this.isActiveFlyout(levelOne.id)}\n onTouchEnd={e => this.handleTouchEnd(e, levelOne)}\n onKeyDown={e => this.handleKeyPress(e, levelOne)}\n onClick={e => this.handleClick(e, levelOne)}\n />\n {!levelOne.noFlyout ? (\n <div\n id={levelOne.id}\n class={{ flyout: true, open: this.isActiveFlyout(levelOne.id) }}\n >\n <div class=\"wide-container\">\n <div class=\"flyout-nav\">\n <button\n class=\"nav-link flyout-back-button\"\n onClick={() => this.closeFlyout(levelOne.id)}\n >\n <SvgIcon name=\"pi-pointy-arrow-right\" classNames=\"mirrored\" />\n <span>{headerConfig.translations.backButtonText}</span>\n </button>\n <button\n class=\"flyout-close-button\"\n onClick={() => this.closeFlyout(levelOne.id)}\n >\n <span class=\"visually-hidden\">\n {levelOne.text}, {headerConfig.translations.mobileNavToggleClose}\n </span>\n <SvgIcon name=\"pi-close\" />\n </button>\n </div>\n <h2 class=\"flyout-title container\">\n <a href={levelOne.url} class=\"nav-link\">\n {levelOne.text}\n </a>\n </h2>\n <div class=\"flyout-row container\">\n {levelOne.flyout.map((flyout, i) => (\n <div key={flyout.title} class=\"flyout-column\">\n {flyout.title ? <h3 id={`${levelOne.id}-column-${i}`}>{flyout.title}</h3> : null}\n <ul\n class=\"flyout-linklist\"\n aria-labelledby={flyout.title ? `${levelOne.id}-column-${i}` : undefined}\n >\n {flyout.linkList.map(link => (\n <li key={link.url}>\n <a\n class={{\n 'flyout-link': true,\n 'active': !!link?.isActiveOverride,\n }}\n href={link.url}\n target={link.target}\n >\n {link.title}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : null}\n </li>\n ))}\n </ul>\n <slot></slot>\n </nav>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"post-main-navigation.entry.js","mappings":"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","names":[],"sources":["./src/components/post-main-navigation/components/level-one-action.component.tsx","./src/components/post-main-navigation/post-main-navigation.scss?tag=post-main-navigation&encapsulation=shadow","./src/components/post-main-navigation/post-main-navigation.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { NavMainEntity } from '../../../models/header.model';\nimport { translate } from '../../../services/language.service';\n\nexport const LevelOneAction = (props: {\n level: NavMainEntity;\n isOpen: boolean;\n onTouchEnd: (e: any) => void;\n onKeyDown: (e: any) => void;\n onClick: (e: any) => void;\n}) => {\n const TagName = props.level.url ? 'a' : 'button';\n\n return (\n <TagName\n class={{\n 'main-link': true,\n 'active': !!props.level.isActiveOverride,\n 'focus': props.isOpen,\n }}\n href={props.level.url}\n title={\n props.level.title?.trim() && props.level.title?.trim() !== props.level.text?.trim()\n ? props.level.title\n : undefined\n }\n tabindex={props.level.url ? undefined : 0}\n aria-haspopup={!props.level.noFlyout + ''}\n aria-expanded={props.level.noFlyout ? null : props.isOpen + ''}\n onTouchEnd={e => props.onTouchEnd(e)}\n onKeyDown={e => props.onKeyDown(e)}\n onClick={e => props.onClick(e)}\n >\n <span>{props.level.text}</span>\n {props.level.isActiveOverride ? (\n <span class=\"visually-hidden\">{translate('Active navigation element')}</span>\n ) : null}\n <svg aria-hidden=\"true\">\n <use href=\"#pi-pointy-arrow-right\" />\n </svg>\n </TagName>\n );\n};\n","@use '@swisspost/design-system-styles/variables/color';\n@use '@swisspost/design-system-styles/placeholders/text';\n@use '@swisspost/design-system-styles/functions';\n@use '../../utils/utils.scss';\n@use '../../utils/mixins.scss';\n\n:host {\n --host-window-height: var(--window-height, 100vh);\n --calculated-header-height: calc(var(--header-height) + 1px);\n\n display: block;\n min-width: 0;\n height: var(--header-height);\n}\n\n:host(.no-animation) {\n * {\n animation: none !important;\n transition: none !important;\n }\n}\n\n.main-navigation,\n.main-container,\n.main-container li,\n.main-link {\n @include mixins.min(lg) {\n height: 100%;\n }\n}\n\n.main-navigation {\n font-size: functions.px-to-rem(18px);\n\n @include mixins.min(lg) {\n font-size: functions.px-to-rem(16px);\n margin: 0 0.75rem;\n }\n\n @include mixins.min(xl) {\n font-size: functions.px-to-rem(18px);\n }\n\n @include mixins.min(xxl) {\n font-size: functions.px-to-rem(20px);\n }\n\n @include mixins.max(lg) {\n position: absolute;\n top: var(--calculated-header-height);\n left: 0;\n background: white;\n height: calc(var(--host-window-height) - var(--calculated-header-height));\n width: 100%;\n margin: 0;\n overflow: hidden scroll;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior: contain;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n z-index: -1;\n visibility: hidden;\n transform: translateY(-100%);\n transition: transform 0.35s, visibility 0.35s;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n\n &.open {\n transform: translateY(0);\n visibility: visible;\n }\n }\n}\n\n.main-container {\n @extend %no-list;\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n @include mixins.max(lg) {\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-start;\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n\n > li + li {\n border-top: 1px solid color.$gray-10;\n }\n }\n\n @include mixins.min(lg) {\n padding-right: 0;\n padding-left: 0;\n }\n\n > li {\n flex: 0 1 auto;\n min-width: 0;\n }\n}\n\n.main-link {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n text-align: left;\n cursor: pointer;\n width: 100%;\n\n @include mixins.min(lg) {\n svg {\n display: none;\n }\n }\n\n @include mixins.max(lg) {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 300;\n padding: 0.625rem 0;\n width: 100%;\n text-align: left;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.main-link,\n.flyout-link {\n position: relative;\n color: black;\n\n &::after {\n content: '';\n position: absolute;\n bottom: -1px;\n left: 0;\n width: 100%;\n height: 4px;\n background-color: transparent;\n opacity: 0;\n transform: scaleX(0.8);\n transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n\n &:hover,\n &.focus {\n &::after {\n background-color: color.$gray-20;\n opacity: 1;\n transform: scale(1);\n }\n }\n\n &.active {\n font-weight: 700;\n\n &::after {\n background-color: color.$yellow;\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n.flyout {\n left: 0;\n width: 100%;\n background: white;\n padding-bottom: 3rem;\n overflow: auto;\n overscroll-behavior: contain;\n visibility: hidden;\n\n @include mixins.min(lg) {\n position: absolute;\n top: 100%;\n max-height: calc(100vh - var(--header-height) - var(--meta-header-height) - 1px);\n z-index: -1;\n box-shadow: 0 0 1px 0 rgb(0 0 0 / 40%);\n transform: translateY(-100%);\n\n &.open {\n box-shadow: 0 0 8px 0 rgb(0 0 0 / 40%);\n transform: translateY(0);\n }\n }\n\n @include mixins.max(lg) {\n position: fixed;\n top: 0;\n height: 100%;\n z-index: 1;\n transform: translateX(100%);\n\n &.open {\n transform: translateX(0);\n }\n }\n\n &.open {\n visibility: visible;\n }\n\n &.animate {\n transition: transform 0.35s, visibility 0.35s, box-shadow 0.35s;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n}\n\n.flyout-nav {\n @extend %font-curve-small;\n\n display: flex;\n justify-content: space-between;\n min-height: 3.5rem;\n\n // Change box-sizing to content-box to add 1px border width to flyout-nav hight.\n // This ensures flyout-nav has same hight as main-navigation-container.\n box-sizing: content-box;\n}\n\n.flyout-row {\n display: flex;\n gap: 1.5rem;\n\n @include mixins.max(lg) {\n display: grid;\n grid-template-columns: 1fr 1fr;\n }\n\n @include mixins.max(rg) {\n grid-template-columns: 1fr;\n }\n}\n\n.flyout-column {\n flex: 1;\n max-width: 25%;\n\n @include mixins.max(lg) {\n max-width: none;\n }\n\n h3 {\n @extend %font-curve-small;\n margin-top: 0;\n }\n}\n\n.flyout-back-button {\n @include mixins.container-padding();\n\n display: flex;\n align-items: center;\n font-size: functions.px-to-rem(16px);\n font-weight: 400;\n cursor: pointer;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n @include mixins.min(lg) {\n display: none;\n }\n}\n\n.flyout-close-button {\n @extend %nav-link;\n\n display: flex;\n align-items: center;\n margin-left: auto;\n padding: 0 1.5rem;\n cursor: pointer;\n\n svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n @include mixins.max(lg) {\n display: none;\n }\n}\n\n.flyout-linklist {\n @extend %no-list;\n\n li {\n border-top: 1px solid color.$gray-10;\n }\n\n &:first-child > li {\n border-top-color: transparent;\n }\n}\n\n.flyout-link {\n @extend %nav-link;\n\n display: block;\n padding: 0.75rem 0;\n}\n\n.flyout-title {\n @extend %font-curve-bigger-regular;\n\n margin: 2.5rem 0 1.5rem 0;\n\n @include mixins.min(lg) {\n display: none;\n }\n}\n","import { Component, Host, h, State, Method, Event, Element, EventEmitter } from '@stencil/core';\nimport { throttle } from 'throttle-debounce';\nimport { state } from '../../data/store';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n IsFocusable,\n NavMainEntity,\n} from '../../models/header.model';\nimport { userPrefersReducedMotion } from '../../services/ui.service';\nimport { translate } from '../../services/language.service';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { LevelOneAction } from './components/level-one-action.component';\n\n@Component({\n tag: 'post-main-navigation',\n styleUrl: 'post-main-navigation.scss',\n shadow: true,\n})\nexport class PostMainNavigation implements HasDropdown, IsFocusable {\n @State() activeFlyout: string | null;\n @State() mobileMenuOpen: boolean;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Event() flyoutToggled: EventEmitter<string | null>;\n @Element() host: DropdownElement;\n private throttledResize: throttle<() => void>;\n private resizeTimer: number | null = null;\n private mouseLeaveTimer: number | null = null;\n private mouseEnterTimer: number | null = null;\n\n connectedCallback() {\n this.throttledResize = throttle(300, () => this.handleResize());\n window.addEventListener('resize', this.throttledResize, { passive: true });\n this.setWindowHeight();\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this.throttledResize);\n if (this.mouseEnterTimer !== null) window.clearTimeout(this.mouseEnterTimer);\n if (this.mouseLeaveTimer !== null) window.clearTimeout(this.mouseLeaveTimer);\n }\n\n handleResize() {\n // Suspend all animations and transitions on window resize\n this.host.classList.add('no-animation');\n if (this.resizeTimer !== null) window.clearTimeout(this.resizeTimer);\n this.resizeTimer = window.setTimeout(() => {\n this.host.classList.remove('no-animation');\n }, 300);\n\n this.setWindowHeight();\n }\n\n // Update window height var\n setWindowHeight() {\n if (!this.host) {\n return;\n }\n this.host.style.setProperty('--window-height', `${window.innerHeight}px`);\n\n // Safari might or might not show a blank bar at the bottom where the browser\n // controls should be. This timeout waits for this bar to appear before resetting the available height\n window.setTimeout(() => {\n this.host.style.setProperty('--window-height', `${window.innerHeight}px`);\n }, 100);\n }\n\n openFlyout(id: string) {\n const flyout = this.host.shadowRoot?.getElementById(id);\n\n if (flyout && this.activeFlyout !== '') {\n // Add flyout animation if there's no flyout open\n this.addFlyoutAnimation(flyout, 'expand');\n }\n\n this.activeFlyout = id;\n this.flyoutToggled.emit(id);\n this.setWindowHeight();\n\n if (this.mouseLeaveTimer !== null) {\n window.clearTimeout(this.mouseLeaveTimer);\n this.mouseLeaveTimer = null;\n }\n }\n\n closeFlyout(id?: string) {\n if (id === undefined) return;\n const flyout = this.host.shadowRoot?.getElementById(id);\n\n if (flyout) {\n // Add flyout animation for close action\n this.addFlyoutAnimation(flyout, 'collapse');\n }\n\n this.activeFlyout = null;\n this.flyoutToggled.emit();\n }\n\n addFlyoutAnimation(flyout: HTMLElement, direction?: 'expand' | 'collapse') {\n // Check if user prefers to see animations or not\n if (!userPrefersReducedMotion()) {\n flyout.classList.add('animate');\n\n // Remove flyout animation after transition ended\n flyout.addEventListener(\n 'transitionend',\n () => {\n if (direction === 'expand') {\n flyout.querySelector<HTMLElement>('button.flyout-back-button')?.focus();\n } else if (direction === 'collapse') {\n flyout.parentElement?.querySelector<HTMLElement>('a.main-link')?.focus();\n }\n\n flyout.classList.remove('animate');\n },\n {\n once: true,\n },\n );\n }\n }\n\n isActiveFlyout(id?: string) {\n return id === this.activeFlyout;\n }\n\n handleMouseEnter(level: NavMainEntity) {\n // Cancel opening the flyout if there already is one scheduled to open\n if (this.mouseEnterTimer !== null) {\n window.clearTimeout(this.mouseEnterTimer);\n this.mouseEnterTimer = null;\n }\n\n // Cancel closing if we enter again\n if (this.mouseLeaveTimer && this.activeFlyout === level.id) {\n window.clearTimeout(this.mouseLeaveTimer);\n this.mouseLeaveTimer = null;\n }\n\n if (window.innerWidth >= 1024 && level.flyout.length > 0 && this.activeFlyout !== level.id) {\n // Delay opening the flyout for a moment to give users a chance to move the mouse over the navigation without triggering the flyout\n this.mouseEnterTimer = window.setTimeout(() => {\n this.mouseEnterTimer = null;\n if (level.id !== undefined) this.openFlyout(level.id);\n }, 200);\n }\n }\n\n handleMouseLeave(level: NavMainEntity) {\n // Cancel opening the flyout if a mouseleave event happens before the flyout opened\n if (this.mouseEnterTimer !== null) {\n window.clearTimeout(this.mouseEnterTimer);\n }\n\n // Don't close an open flyout if the mouseleave is from another mainnav entry\n if (this.activeFlyout && this.activeFlyout !== level.id) {\n return;\n }\n\n if (window.innerWidth >= 1024 && level.flyout.length > 0) {\n // Allow the pointer to shortly leave the flyout without closing it. This\n // allows for user mistakes and makes the experience less nervous\n this.mouseLeaveTimer = window.setTimeout(() => {\n this.closeFlyout(level.id);\n }, 300);\n }\n }\n\n handleTouchEnd(event: TouchEvent, level: NavMainEntity) {\n if (!this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first touchstart and has a flyout, prevent link activation and open the flyout\n if (event.cancelable) event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n handleKeyPress(event: KeyboardEvent, level: NavMainEntity) {\n if (event.key === 'Enter' && !this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first enter keypress and has a flyout, prevent link activation and open the flyout\n event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n handleClick(event: MouseEvent, level: NavMainEntity) {\n if (!this.isActiveFlyout(level.id) && !level.noFlyout) {\n // It's the first click, always open the flyout, never the link\n // This is relevant for desktop with active screenreader which\n // translates an enter keypress to a click\n event.preventDefault();\n if (level.id) this.openFlyout(level.id);\n }\n }\n\n /**\n * Toggle the main navigation (only visible on mobile)\n * @param force Force a state\n * @returns Boolean indicating new state\n */\n @Method()\n async toggleDropdown(force?: boolean) {\n this.mobileMenuOpen = force === undefined ? !this.mobileMenuOpen : force;\n this.dropdownToggled.emit({ open: this.mobileMenuOpen, element: this.host });\n\n if (force === false) {\n this.closeFlyout();\n }\n\n this.setWindowHeight();\n\n return this.mobileMenuOpen;\n }\n\n /**\n * Focus the main navigation toggle button\n */\n @Method()\n async setFocus() {\n const firstLink = this.host.shadowRoot?.querySelector<HTMLElement>('.main-link');\n if (firstLink) {\n firstLink.focus();\n }\n }\n\n /**\n * Open a specific flyout\n * @param id Flyout ID\n */\n @Method()\n async setActiveFlyout(id: string | null) {\n this.activeFlyout = id;\n this.flyoutToggled.emit(this.activeFlyout);\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) return;\n const headerConfig = state.localizedConfig.header;\n\n return (\n <Host>\n <SvgSprite />\n <nav\n aria-label={headerConfig.translations.navMainAriaLabel}\n id=\"post-internet-header-main-navigation\"\n class={{ 'main-navigation': true, 'open': this.mobileMenuOpen }}\n role=\"menu\"\n >\n <ul class=\"main-container container\">\n {headerConfig.navMain.map(levelOne => (\n <li\n key={levelOne.text}\n onMouseLeave={() => this.handleMouseLeave(levelOne)}\n onMouseEnter={() => this.handleMouseEnter(levelOne)}\n >\n <LevelOneAction\n level={levelOne}\n isOpen={this.isActiveFlyout(levelOne.id)}\n onTouchEnd={e => this.handleTouchEnd(e, levelOne)}\n onKeyDown={e => this.handleKeyPress(e, levelOne)}\n onClick={e => this.handleClick(e, levelOne)}\n />\n {!levelOne.noFlyout ? renderLevelOneFlyout.bind(this)(levelOne) : null}\n </li>\n ))}\n </ul>\n <slot></slot>\n </nav>\n </Host>\n );\n\n function renderLevelOneFlyout(levelOne: NavMainEntity) {\n return (\n <div id={levelOne.id} class={{ flyout: true, open: this.isActiveFlyout(levelOne.id) }}>\n <div class=\"wide-container\">\n <div class=\"flyout-nav\">\n <button\n class=\"nav-link flyout-back-button\"\n onClick={() => this.closeFlyout(levelOne.id)}\n >\n <SvgIcon name=\"pi-pointy-arrow-right\" classNames=\"mirrored\" />\n <span>{headerConfig.translations.backButtonText}</span>\n </button>\n <button class=\"flyout-close-button\" onClick={() => this.closeFlyout(levelOne.id)}>\n <span class=\"visually-hidden\">\n {levelOne.text}, {headerConfig.translations.mobileNavToggleClose}\n </span>\n <SvgIcon name=\"pi-close\" />\n </button>\n </div>\n <h2 class=\"flyout-title container\">\n <a href={levelOne.url} class=\"nav-link\">\n {levelOne.text}\n </a>\n </h2>\n <div class=\"flyout-row container\">\n {levelOne.flyout.map((flyout, i) => (\n <div key={flyout.title} class=\"flyout-column\">\n {flyout.title ? <h3 id={`${levelOne.id}-column-${i}`}>{flyout.title}</h3> : null}\n <ul\n class=\"flyout-linklist\"\n aria-labelledby={flyout.title ? `${levelOne.id}-column-${i}` : undefined}\n >\n {flyout.linkList.map(link => (\n <li key={link.url}>\n <a\n class={{\n 'flyout-link': true,\n 'active': !!link?.isActiveOverride,\n }}\n href={link.url}\n target={link.target}\n >\n {link.title}\n {link?.isActiveOverride ? (\n <span class=\"visually-hidden\">\n , {translate('Active navigation element')}\n </span>\n ) : null}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n }\n}\n"],"version":3}
|
|
@@ -10,11 +10,11 @@ const PostMetaNavigation = class {
|
|
|
10
10
|
this.fullWidth = false;
|
|
11
11
|
}
|
|
12
12
|
render() {
|
|
13
|
-
var _a;
|
|
13
|
+
var _a, _b;
|
|
14
14
|
if (((_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header.navMeta) === undefined)
|
|
15
15
|
return;
|
|
16
|
-
const
|
|
17
|
-
return (h(Host, null, h("div", { class: `meta-container ${this.orientation}${this.fullWidth ? ' full-width' : ''}` }, h("nav", { class: "meta-navigation" }, h("ul", { class: "meta-list" }, navMeta === null ||
|
|
16
|
+
const headerConfig = state.localizedConfig.header;
|
|
17
|
+
return (h(Host, null, h("div", { class: `meta-container ${this.orientation}${this.fullWidth ? ' full-width' : ''}` }, h("nav", { "aria-label": headerConfig.translations.navMetaAriaLabel, class: "meta-navigation" }, h("ul", { class: "meta-list" }, (_b = headerConfig.navMeta) === null || _b === void 0 ? void 0 : _b.filter(meta => !meta.isHomeLink).map(meta => (h("li", { key: meta.url }, h("a", { class: { 'active': meta.isActive, 'meta-link': true }, target: meta.target, href: meta.url }, h("span", { "aria-hidden": "true" }, meta.text))))))), h("slot", null))));
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
PostMetaNavigation.style = postMetaNavigationCss;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"post-meta-navigation.entry.js","mappings":";;;AAAA,MAAM,qBAAqB,GAAG,66IAA66I;;MCQ97I,kBAAkB;;;;qBAEC,KAAK;;EAEnC,MAAM;;IACJ,IAAI,CAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,MAAM,CAAC,OAAO,MAAK,SAAS;MAAE,OAAO;IAChE,MAAM,
|
|
1
|
+
{"file":"post-meta-navigation.entry.js","mappings":";;;AAAA,MAAM,qBAAqB,GAAG,66IAA66I;;MCQ97I,kBAAkB;;;;qBAEC,KAAK;;EAEnC,MAAM;;IACJ,IAAI,CAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,MAAM,CAAC,OAAO,MAAK,SAAS;MAAE,OAAO;IAChE,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC;IAElD,QACE,EAAC,IAAI,QACH,WAAK,KAAK,EAAE,kBAAkB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,aAAa,GAAG,EAAE,EAAE,IACpF,yBAAiB,YAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAC,iBAAiB,IAClF,UAAI,KAAK,EAAC,WAAW,IAClB,MAAA,YAAY,CAAC,OAAO,0CACjB,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAChC,GAAG,CAAC,IAAI,KACP,UAAI,GAAG,EAAE,IAAI,CAAC,GAAG,IACf,SACE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,EACrD,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,IAAI,EAAE,IAAI,CAAC,GAAG,IAEd,2BAAkB,MAAM,IAAE,IAAI,CAAC,IAAI,CAAQ,CACzC,CACD,CACN,CAAC,CACD,CACD,EACN,eAAa,CACT,CACD,EACP;GACH;;;;;;","names":[],"sources":["./src/components/post-meta-navigation/post-meta-navigation.scss?tag=post-meta-navigation&encapsulation=shadow","./src/components/post-meta-navigation/post-meta-navigation.tsx"],"sourcesContent":["@use \"@swisspost/design-system-styles/variables/color\";\n@use \"@swisspost/design-system-styles/functions\";\n@use \"../../utils/utils.scss\";\n@use \"../../utils/mixins.scss\";\n\n:host {\n display: block;\n background: color.$gray-background-light;\n font-size: functions.px-to-rem(14px);\n}\n\n.meta-container {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n min-height: functions.px-to-rem(48px);\n\n @media (min-width: 1441px) {\n &:not(.full-width) {\n margin: 0 auto;\n max-width: 1440px;\n }\n }\n\n &.vertical {\n @include mixins.container-padding();\n\n flex-direction: column;\n align-items: flex-start;\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n\n @include mixins.min(lg) {\n display: none;\n }\n }\n\n &.horizontal {\n ::slotted(*) {\n --separator-display: block;\n --separator-height: #{functions.px-to-rem(34px)};\n }\n }\n}\n\n.meta-navigation {\n .horizontal & {\n padding-right: 1rem;\n }\n}\n\n.meta-list {\n @extend %no-list;\n display: flex;\n\n .vertical & {\n flex-direction: column;\n align-items: flex-start;\n }\n}\n\n.meta-link {\n @extend %nav-link;\n\n font-size: functions.px-to-rem(14px);\n display: flex;\n align-items: center;\n padding: 0 0.5rem;\n min-height: functions.px-to-rem(34px);\n border-radius: 3px;\n\n &.active {\n background: color.$yellow;\n color: black;\n }\n\n .vertical & {\n color: black;\n padding: 0;\n\n &.active {\n padding: 0 0.5rem;\n margin-left: -0.5rem;\n }\n }\n}\n","import { Component, Host, h, Prop } from '@stencil/core';\nimport { state } from '../../data/store';\n\n@Component({\n tag: 'post-meta-navigation',\n styleUrl: 'post-meta-navigation.scss',\n shadow: true,\n})\nexport class PostMetaNavigation {\n @Prop() orientation: 'horizontal' | 'vertical';\n @Prop() fullWidth?: boolean = false;\n\n render() {\n if (state.localizedConfig?.header.navMeta === undefined) return;\n const headerConfig = state.localizedConfig.header;\n\n return (\n <Host>\n <div class={`meta-container ${this.orientation}${this.fullWidth ? ' full-width' : ''}`}>\n <nav aria-label={headerConfig.translations.navMetaAriaLabel} class=\"meta-navigation\">\n <ul class=\"meta-list\">\n {headerConfig.navMeta\n ?.filter(meta => !meta.isHomeLink)\n .map(meta => (\n <li key={meta.url}>\n <a\n class={{ 'active': meta.isActive, 'meta-link': true }}\n target={meta.target}\n href={meta.url}\n >\n <span aria-hidden=\"true\">{meta.text}</span>\n </a>\n </li>\n ))}\n </ul>\n </nav>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -498,9 +498,9 @@ const PostSearch = class {
|
|
|
498
498
|
}
|
|
499
499
|
const { translations, search } = state.localizedConfig.header;
|
|
500
500
|
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;
|
|
501
|
-
return (h(Host,
|
|
501
|
+
return (h(Host, { role: "search" }, h(SvgSprite, null), h("div", { class: "search" }, h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => this.toggleDropdown(e) }, h("span", { class: "visually-hidden" }, this.searchDropdownOpen
|
|
502
502
|
? translations.searchToggleExpanded
|
|
503
|
-
: translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { id: "post-internet-header-search-recommendations-title", class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions(), "aria-labelledby": showPortalRecommendations
|
|
503
|
+
: translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", role: "searchbox", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => this.startSearch(), class: "nav-link start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { id: "post-internet-header-search-recommendations-title", class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions(), "aria-labelledby": showPortalRecommendations
|
|
504
504
|
? 'post-internet-header-search-recommendations-title'
|
|
505
505
|
: undefined }, showPortalRecommendations &&
|
|
506
506
|
search.searchRecommendations.links.map(recommendation => (h("li", { key: recommendation.href }, h("a", { class: "nav-link search-recommendation", href: new URL(recommendation.href, 'https://post.ch').href, "data-suggestion-text": recommendation.label, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), h("span", null, recommendation.label))))), this.parcelSuggestion && this.parcelSuggestion.ok && (h("li", null, h("a", { class: "nav-link parcel-suggestion", href: this.parcelSuggestion.url, "data-suggestion-text": (_d = this.searchBox) === null || _d === void 0 ? void 0 : _d.value, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-letter-parcel" }), h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
|