@postnord/pn-marketweb-components 4.2.5 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/header-theme-a250bf67.js +245 -0
- package/cjs/header-theme-a250bf67.js.map +1 -0
- package/cjs/index-9a9efa1c.js +24 -16
- package/cjs/loader.cjs.js +1 -1
- package/cjs/pn-app-banner.cjs.entry.js +1 -1
- package/cjs/pn-breakpoints.cjs.entry.js +1 -1
- package/cjs/pn-chat-message_2.cjs.entry.js +2 -2
- package/cjs/pn-chat.cjs.entry.js +2 -2
- package/cjs/pn-customernumber-selector-option.cjs.entry.js +1 -1
- package/cjs/pn-customernumber-selector.cjs.entry.js +1 -1
- package/cjs/pn-find-price-result.cjs.entry.js +1 -1
- package/cjs/pn-find-price.cjs.entry.js +2 -2
- package/cjs/pn-find-service-and-price-result.cjs.entry.js +1 -1
- package/cjs/pn-find-service-and-price.cjs.entry.js +1 -1
- package/cjs/pn-hero-block-international.cjs.entry.js +1 -1
- package/cjs/pn-language-selector_13.cjs.entry.js +1519 -0
- package/cjs/pn-language-selector_13.cjs.entry.js.map +1 -0
- package/cjs/pn-level-up-modal.cjs.entry.js +1 -1
- package/cjs/pn-level-up.cjs.entry.js +2 -2
- package/cjs/pn-link-list.cjs.entry.js +1 -1
- package/cjs/pn-market-web-components.cjs.js +1 -1
- package/cjs/pn-marketweb-header-main-row_2.cjs.entry.js +222 -0
- package/cjs/pn-marketweb-header-main-row_2.cjs.entry.js.map +1 -0
- package/cjs/pn-marketweb-header-skeleton-loader.cjs.entry.js +23 -0
- package/cjs/pn-marketweb-header-skeleton-loader.cjs.entry.js.map +1 -0
- package/cjs/pn-marketweb-header-toggle.cjs.entry.js +46 -0
- package/cjs/pn-marketweb-header-toggle.cjs.entry.js.map +1 -0
- package/cjs/pn-marketweb-header.cjs.entry.js +1043 -0
- package/cjs/pn-marketweb-header.cjs.entry.js.map +1 -0
- package/cjs/pn-marketweb-icon.cjs.entry.js +1 -1
- package/cjs/{pn-marketweb-siteheader-login-linklist.cjs.entry.js → pn-marketweb-siteheader-login-button_2.cjs.entry.js} +44 -2
- package/cjs/pn-marketweb-siteheader-login-button_2.cjs.entry.js.map +1 -0
- package/cjs/pn-marketweb-siteheader-login-mypage-button.cjs.entry.js +1 -1
- package/cjs/pn-marketweb-siteheader.cjs.entry.js +7 -199
- package/cjs/pn-marketweb-siteheader.cjs.entry.js.map +1 -1
- package/cjs/pn-marketweb-table.cjs.entry.js +1 -1
- package/cjs/pn-media-block.cjs.entry.js +1 -1
- package/cjs/pn-pex-pricefinder.cjs.entry.js +1 -1
- package/cjs/pn-product-card_3.cjs.entry.js +1 -1
- package/cjs/pn-product-pricelist-result.cjs.entry.js +1 -1
- package/cjs/pn-product-pricelist.cjs.entry.js +2 -2
- package/cjs/pn-product-tile-info_2.cjs.entry.js +1 -1
- package/cjs/pn-product-tile.cjs.entry.js +1 -1
- package/cjs/pn-profile-modal-customernumber.cjs.entry.js +1 -1
- package/cjs/pn-profile-modal-profile.cjs.entry.js +2 -2
- package/cjs/pn-profile-modal-type.cjs.entry.js +1 -1
- package/cjs/pn-profile-modal.cjs.entry.js +1 -1
- package/cjs/pn-profile-selector-option.cjs.entry.js +1 -1
- package/cjs/pn-profile-selector.cjs.entry.js +1 -1
- package/cjs/pn-proxio-findprice-result.cjs.entry.js +1 -1
- package/cjs/pn-proxio-findprice.cjs.entry.js +3 -3
- package/cjs/pn-proxio-pricegroup.cjs.entry.js +1 -1
- package/cjs/pn-proxio-productcard_4.cjs.entry.js +3 -3
- package/cjs/pn-qr-code-generator.cjs.entry.js +1 -1
- package/cjs/pn-sidenav-level.cjs.entry.js +1 -1
- package/cjs/pn-sidenav-link.cjs.entry.js +1 -1
- package/cjs/pn-sidenav-togglebutton.cjs.entry.js +1 -1
- package/cjs/pn-sidenav.cjs.entry.js +1 -1
- package/cjs/pn-site-footer_3.cjs.entry.js +3 -3
- package/cjs/pn-titletag.cjs.entry.js +1 -1
- package/cjs/pn-usp-promoter.cjs.entry.js +1 -1
- package/cjs/translations-9510f11c.js +198 -0
- package/cjs/translations-9510f11c.js.map +1 -0
- package/collection/collection-manifest.json +5 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.css +204 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.js +658 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.css +217 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.js +20 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.css +115 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.js +520 -0
- package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.js +37 -0
- package/collection/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.js +109 -0
- package/collection/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.css +225 -0
- package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js +916 -0
- package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js +638 -0
- package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.js +180 -0
- package/collection/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.js +2 -0
- package/collection/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-i18n.js +37 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-i18n.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-language.js +46 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-language.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-menu.js +36 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-menu.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-theme.js +48 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-theme.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.js +101 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.js +63 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-url.js +91 -0
- package/collection/components/layout-components/pn-marketweb-header/utils/header-url.js.map +1 -0
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-button.js +1 -1
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-linklist.css +34 -12
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-mypage-button.js +1 -1
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-profileselection.css +36 -15
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.css +27 -13
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js +29 -4
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js.map +1 -1
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-types.js.map +1 -1
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-unified-login.js +1 -1
- package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.js +4 -4
- package/collection/components/media/pn-media-block/pn-media-block.js +1 -1
- package/collection/components/minor/pn-app-banner/pn-app-banner.js +1 -1
- package/collection/components/minor/pn-marketweb-icon/pn-marketweb-icon.js +1 -1
- package/collection/components/minor/pn-swan/pn-swan.js +1 -1
- package/collection/components/minor/pn-titletag/pn-titletag.js +1 -1
- package/collection/components/navigation/pn-language-selector/pn-language-selector-option.css +25 -12
- package/collection/components/navigation/pn-language-selector/pn-language-selector-option.js +1 -1
- package/collection/components/navigation/pn-language-selector/pn-language-selector.css +17 -5
- package/collection/components/navigation/pn-language-selector/pn-language-selector.js +22 -3
- package/collection/components/navigation/pn-language-selector/pn-language-selector.js.map +1 -1
- package/collection/components/navigation/pn-mainnav/pn-mainnav-level.css +37 -17
- package/collection/components/navigation/pn-mainnav/pn-mainnav-level.js +2 -2
- package/collection/components/navigation/pn-mainnav/pn-mainnav-link.css +81 -33
- package/collection/components/navigation/pn-mainnav/pn-mainnav-link.js +1 -1
- package/collection/components/navigation/pn-mainnav/pn-mainnav-list.css +12 -2
- package/collection/components/navigation/pn-mainnav/pn-mainnav-list.js +1 -1
- package/collection/components/navigation/pn-mainnav/pn-mainnav.css +35 -22
- package/collection/components/navigation/pn-mainnav/pn-mainnav.js +1 -1
- package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.css +80 -0
- package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.js +147 -0
- package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.js.map +1 -0
- package/collection/components/navigation/pn-sidenav/pn-sidenav-level.js +1 -1
- package/collection/components/navigation/pn-sidenav/pn-sidenav-link.js +1 -1
- package/collection/components/navigation/pn-sidenav/pn-sidenav-togglebutton.js +1 -1
- package/collection/components/navigation/pn-sidenav/pn-sidenav.js +1 -1
- package/collection/components/navigation/pn-site-footer/pn-site-footer-col.js +1 -1
- package/collection/components/navigation/pn-site-footer/pn-site-footer.js +1 -1
- package/collection/components/navigation/pn-site-selector/pn-site-selector-item.css +16 -12
- package/collection/components/navigation/pn-site-selector/pn-site-selector-item.js +1 -1
- package/collection/components/navigation/pn-site-selector/pn-site-selector.css +15 -0
- package/collection/components/navigation/pn-site-selector/pn-site-selector.js +22 -3
- package/collection/components/navigation/pn-site-selector/pn-site-selector.js.map +1 -1
- package/collection/components/profile/pn-customernumber-selector/pn-customernumber-selector-option.js +1 -1
- package/collection/components/profile/pn-customernumber-selector/pn-customernumber-selector.js +1 -1
- package/collection/components/profile/pn-profile-modal/pn-profile-modal-customernumber.js +1 -1
- package/collection/components/profile/pn-profile-modal/pn-profile-modal-profile.js +2 -2
- package/collection/components/profile/pn-profile-modal/pn-profile-modal-type.js +1 -1
- package/collection/components/profile/pn-profile-modal/pn-profile-modal.js +1 -1
- package/collection/components/profile/pn-profile-selector/pn-profile-selector-option.js +1 -1
- package/collection/components/profile/pn-profile-selector/pn-profile-selector.js +1 -1
- package/collection/components/utilities/pn-breakpoints/pn-breakpoints.js +1 -1
- package/collection/components/widgets/pn-chat/pn-chat-message/pn-chat-message.js +1 -1
- package/collection/components/widgets/pn-chat/pn-chat.js +2 -2
- package/collection/components/widgets/pn-find-price/pn-find-price-result.js +1 -1
- package/collection/components/widgets/pn-find-price/pn-find-price.js +2 -2
- package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-result.js +1 -1
- package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price.js +1 -1
- package/collection/components/widgets/pn-hero-block-international/pn-hero-block-international.js +1 -1
- package/collection/components/widgets/pn-level-up/pn-level-up-modal/pn-level-up-modal.js +1 -1
- package/collection/components/widgets/pn-level-up/pn-level-up.js +2 -2
- package/collection/components/widgets/pn-link-list/pn-link-list.js +1 -1
- package/collection/components/widgets/pn-marketweb-carousel/pn-marketweb-carousel.js +1 -1
- package/collection/components/widgets/pn-marketweb-table/pn-marketweb-table.js +1 -1
- package/collection/components/widgets/pn-pex-pricefinder/pn-pex-pricefinder.js +1 -1
- package/collection/components/widgets/pn-product-card/pn-product-card.js +1 -1
- package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-result.js +1 -1
- package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist.js +2 -2
- package/collection/components/widgets/pn-product-tile/pn-product-tile-info.js +1 -1
- package/collection/components/widgets/pn-product-tile/pn-product-tile.js +1 -1
- package/collection/components/widgets/pn-proxio-findprice/pn-proxio-findprice-result.js +1 -1
- package/collection/components/widgets/pn-proxio-findprice/pn-proxio-findprice.js +3 -3
- package/collection/components/widgets/pn-proxio-pricegroup/pn-proxio-pricegroup.js +1 -1
- package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard-description.js +1 -1
- package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard-information.js +1 -1
- package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard.js +1 -1
- package/collection/components/widgets/pn-qr-code-generator/pn-qr-code-generator.js +1 -1
- package/collection/components/widgets/pn-usp-promoter/pn-usp-promoter.js +1 -1
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.js +105 -0
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.js.map +1 -0
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.js +166 -0
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.js.map +1 -0
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.js +2 -0
- package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.js.map +1 -0
- package/components/pn-app-banner.js +1 -1
- package/components/pn-breakpoints.js +1 -1
- package/components/pn-chat-message2.js +1 -1
- package/components/pn-chat.js +2 -2
- package/components/pn-customernumber-selector-option.js +1 -1
- package/components/pn-customernumber-selector.js +1 -1
- package/components/pn-find-price-result2.js +1 -1
- package/components/pn-find-price.js +2 -2
- package/components/pn-find-service-and-price-result2.js +1 -1
- package/components/pn-find-service-and-price.js +1 -1
- package/components/pn-hero-block-international.js +1 -1
- package/components/pn-language-selector-option2.js +2 -2
- package/components/pn-language-selector-option2.js.map +1 -1
- package/components/pn-language-selector2.js +4 -2
- package/components/pn-language-selector2.js.map +1 -1
- package/components/pn-level-up-modal2.js +1 -1
- package/components/pn-level-up.js +2 -2
- package/components/pn-link-list.js +1 -1
- package/components/pn-mainnav-level2.js +3 -3
- package/components/pn-mainnav-level2.js.map +1 -1
- package/components/pn-mainnav-link2.js +2 -2
- package/components/pn-mainnav-link2.js.map +1 -1
- package/components/pn-mainnav-list2.js +2 -2
- package/components/pn-mainnav-list2.js.map +1 -1
- package/components/pn-mainnav2.js +2 -2
- package/components/pn-mainnav2.js.map +1 -1
- package/components/pn-marketweb-carousel2.js +1 -1
- package/components/pn-marketweb-header-main-row.d.ts +11 -0
- package/components/pn-marketweb-header-main-row.js +8 -0
- package/components/pn-marketweb-header-main-row.js.map +1 -0
- package/components/pn-marketweb-header-main-row2.js +281 -0
- package/components/pn-marketweb-header-main-row2.js.map +1 -0
- package/components/pn-marketweb-header-shared.js +192 -0
- package/components/pn-marketweb-header-shared.js.map +1 -0
- package/components/pn-marketweb-header-skeleton-loader.d.ts +11 -0
- package/components/pn-marketweb-header-skeleton-loader.js +37 -0
- package/components/pn-marketweb-header-skeleton-loader.js.map +1 -0
- package/components/pn-marketweb-header-toggle.d.ts +11 -0
- package/components/pn-marketweb-header-toggle.js +8 -0
- package/components/pn-marketweb-header-toggle.js.map +1 -0
- package/components/pn-marketweb-header-toggle2.js +61 -0
- package/components/pn-marketweb-header-toggle2.js.map +1 -0
- package/components/pn-marketweb-header-top-row.d.ts +11 -0
- package/components/pn-marketweb-header-top-row.js +8 -0
- package/components/pn-marketweb-header-top-row.js.map +1 -0
- package/components/pn-marketweb-header-top-row2.js +238 -0
- package/components/pn-marketweb-header-top-row2.js.map +1 -0
- package/components/pn-marketweb-header.d.ts +11 -0
- package/components/pn-marketweb-header.js +1206 -0
- package/components/pn-marketweb-header.js.map +1 -0
- package/components/pn-marketweb-icon.js +1 -1
- package/components/pn-marketweb-siteheader-login-button2.js +1 -1
- package/components/pn-marketweb-siteheader-login-linklist2.js +1 -1
- package/components/pn-marketweb-siteheader-login-linklist2.js.map +1 -1
- package/components/pn-marketweb-siteheader-login-mypage-button.js +1 -1
- package/components/pn-marketweb-siteheader-login-profileselection2.js +1 -1
- package/components/pn-marketweb-siteheader-login-profileselection2.js.map +1 -1
- package/components/pn-marketweb-siteheader-login2.js +4 -2
- package/components/pn-marketweb-siteheader-login2.js.map +1 -1
- package/components/pn-marketweb-siteheader-unified-login2.js +1 -1
- package/components/pn-marketweb-siteheader.js +5 -197
- package/components/pn-marketweb-siteheader.js.map +1 -1
- package/components/pn-marketweb-table.js +1 -1
- package/components/pn-media-block.js +1 -1
- package/components/pn-pex-pricefinder.js +1 -1
- package/components/pn-product-card2.js +1 -1
- package/components/pn-product-pricelist-result.js +1 -1
- package/components/pn-product-pricelist.js +2 -2
- package/components/pn-product-tile-info2.js +1 -1
- package/components/pn-product-tile.js +1 -1
- package/components/pn-profile-modal-customernumber.js +1 -1
- package/components/pn-profile-modal-profile.js +2 -2
- package/components/pn-profile-modal-type.js +1 -1
- package/components/pn-profile-modal.js +1 -1
- package/components/pn-profile-selector-option.js +1 -1
- package/components/pn-profile-selector.js +1 -1
- package/components/pn-proxio-findprice-result2.js +2 -2
- package/components/pn-proxio-findprice.js +3 -3
- package/components/pn-proxio-pricegroup.js +2 -2
- package/components/pn-proxio-productcard-description2.js +1 -1
- package/components/pn-proxio-productcard-information2.js +1 -1
- package/components/pn-proxio-productcard2.js +1 -1
- package/components/pn-qr-code-generator2.js +1 -1
- package/components/pn-sidenav-level.js +1 -1
- package/components/pn-sidenav-link.js +1 -1
- package/components/pn-sidenav-togglebutton.js +1 -1
- package/components/pn-sidenav.js +1 -1
- package/components/pn-site-footer-col2.js +1 -1
- package/components/pn-site-footer2.js +1 -1
- package/components/pn-site-selector-item2.js +2 -2
- package/components/pn-site-selector-item2.js.map +1 -1
- package/components/pn-site-selector2.js +4 -2
- package/components/pn-site-selector2.js.map +1 -1
- package/components/pn-swan2.js +1 -1
- package/components/pn-titletag2.js +1 -1
- package/components/pn-usp-promoter.js +1 -1
- package/components/translations.js +189 -14
- package/components/translations.js.map +1 -1
- package/components/translations2.js +21 -0
- package/components/translations2.js.map +1 -0
- package/esm/header-theme-d09b64c7.js +234 -0
- package/esm/header-theme-d09b64c7.js.map +1 -0
- package/esm/index-c0a4d8bd.js +24 -16
- package/esm/loader.js +1 -1
- package/esm/pn-app-banner.entry.js +1 -1
- package/esm/pn-breakpoints.entry.js +1 -1
- package/esm/pn-chat-message_2.entry.js +2 -2
- package/esm/pn-chat.entry.js +2 -2
- package/esm/pn-customernumber-selector-option.entry.js +1 -1
- package/esm/pn-customernumber-selector.entry.js +1 -1
- package/esm/pn-find-price-result.entry.js +1 -1
- package/esm/pn-find-price.entry.js +2 -2
- package/esm/pn-find-service-and-price-result.entry.js +1 -1
- package/esm/pn-find-service-and-price.entry.js +1 -1
- package/esm/pn-hero-block-international.entry.js +1 -1
- package/esm/{pn-language-selector_9.entry.js → pn-language-selector_13.entry.js} +381 -22
- package/esm/pn-language-selector_13.entry.js.map +1 -0
- package/esm/pn-level-up-modal.entry.js +1 -1
- package/esm/pn-level-up.entry.js +2 -2
- package/esm/pn-link-list.entry.js +1 -1
- package/esm/pn-market-web-components.js +1 -1
- package/esm/pn-marketweb-header-main-row_2.entry.js +217 -0
- package/esm/pn-marketweb-header-main-row_2.entry.js.map +1 -0
- package/esm/pn-marketweb-header-skeleton-loader.entry.js +19 -0
- package/esm/pn-marketweb-header-skeleton-loader.entry.js.map +1 -0
- package/esm/pn-marketweb-header-toggle.entry.js +42 -0
- package/esm/pn-marketweb-header-toggle.entry.js.map +1 -0
- package/esm/pn-marketweb-header.entry.js +1039 -0
- package/esm/pn-marketweb-header.entry.js.map +1 -0
- package/esm/pn-marketweb-icon.entry.js +1 -1
- package/esm/{pn-marketweb-siteheader-login-linklist.entry.js → pn-marketweb-siteheader-login-button_2.entry.js} +44 -3
- package/esm/pn-marketweb-siteheader-login-button_2.entry.js.map +1 -0
- package/esm/pn-marketweb-siteheader-login-mypage-button.entry.js +1 -1
- package/esm/pn-marketweb-siteheader.entry.js +5 -197
- package/esm/pn-marketweb-siteheader.entry.js.map +1 -1
- package/esm/pn-marketweb-table.entry.js +1 -1
- package/esm/pn-media-block.entry.js +1 -1
- package/esm/pn-pex-pricefinder.entry.js +1 -1
- package/esm/pn-product-card_3.entry.js +1 -1
- package/esm/pn-product-pricelist-result.entry.js +1 -1
- package/esm/pn-product-pricelist.entry.js +2 -2
- package/esm/pn-product-tile-info_2.entry.js +1 -1
- package/esm/pn-product-tile.entry.js +1 -1
- package/esm/pn-profile-modal-customernumber.entry.js +1 -1
- package/esm/pn-profile-modal-profile.entry.js +2 -2
- package/esm/pn-profile-modal-type.entry.js +1 -1
- package/esm/pn-profile-modal.entry.js +1 -1
- package/esm/pn-profile-selector-option.entry.js +1 -1
- package/esm/pn-profile-selector.entry.js +1 -1
- package/esm/pn-proxio-findprice-result.entry.js +1 -1
- package/esm/pn-proxio-findprice.entry.js +3 -3
- package/esm/pn-proxio-pricegroup.entry.js +1 -1
- package/esm/pn-proxio-productcard_4.entry.js +3 -3
- package/esm/pn-qr-code-generator.entry.js +1 -1
- package/esm/pn-sidenav-level.entry.js +1 -1
- package/esm/pn-sidenav-link.entry.js +1 -1
- package/esm/pn-sidenav-togglebutton.entry.js +1 -1
- package/esm/pn-sidenav.entry.js +1 -1
- package/esm/pn-site-footer_3.entry.js +3 -3
- package/esm/pn-titletag.entry.js +1 -1
- package/esm/pn-usp-promoter.entry.js +1 -1
- package/esm/translations-d2f5804e.js +196 -0
- package/esm/translations-d2f5804e.js.map +1 -0
- package/package.json +13 -6
- package/pn-market-web-components/{p-4a164ef8.entry.js → p-03728b0b.entry.js} +2 -2
- package/pn-market-web-components/p-04f51418.js +2 -0
- package/pn-market-web-components/p-04f51418.js.map +1 -0
- package/pn-market-web-components/{p-e43a36e0.entry.js → p-067c1c2f.entry.js} +2 -2
- package/pn-market-web-components/{p-2616cdc1.entry.js → p-191c8cfc.entry.js} +2 -2
- package/pn-market-web-components/{p-ca003c1f.entry.js → p-1a91c313.entry.js} +2 -2
- package/pn-market-web-components/{p-ab1e3dc2.entry.js → p-1f8304be.entry.js} +2 -2
- package/pn-market-web-components/{p-a3f601cb.entry.js → p-24ffac0a.entry.js} +2 -2
- package/pn-market-web-components/p-3239c36b.entry.js +2 -0
- package/pn-market-web-components/p-3239c36b.entry.js.map +1 -0
- package/pn-market-web-components/{p-12cafd55.entry.js → p-3aa74418.entry.js} +2 -2
- package/pn-market-web-components/p-3d27faee.entry.js +2 -0
- package/pn-market-web-components/{p-9d0ca27b.entry.js.map → p-3d27faee.entry.js.map} +1 -1
- package/pn-market-web-components/p-3e25f431.entry.js +2 -0
- package/pn-market-web-components/p-3e25f431.entry.js.map +1 -0
- package/pn-market-web-components/{p-64f6691d.entry.js → p-42da7c5f.entry.js} +2 -2
- package/pn-market-web-components/{p-f0d423d0.entry.js → p-43748ca2.entry.js} +2 -2
- package/pn-market-web-components/{p-1c644b91.entry.js → p-466958a8.entry.js} +2 -2
- package/pn-market-web-components/{p-150da889.entry.js → p-4ab53d5d.entry.js} +2 -2
- package/pn-market-web-components/{p-118fe47d.entry.js → p-4d595345.entry.js} +2 -2
- package/pn-market-web-components/{p-0f6f715b.entry.js → p-4dac1980.entry.js} +2 -2
- package/pn-market-web-components/{p-a13f1f73.entry.js → p-4fcce83d.entry.js} +2 -2
- package/pn-market-web-components/{p-89fbca3b.entry.js → p-5a51d0b0.entry.js} +2 -2
- package/pn-market-web-components/{p-f4d2d0d3.entry.js → p-61346425.entry.js} +2 -2
- package/pn-market-web-components/{p-6e693269.entry.js → p-6b557670.entry.js} +2 -2
- package/pn-market-web-components/{p-e6d6a752.entry.js → p-70a71854.entry.js} +2 -2
- package/pn-market-web-components/p-75311d67.js +2 -0
- package/pn-market-web-components/p-75311d67.js.map +1 -0
- package/pn-market-web-components/p-756d8d95.entry.js +2 -0
- package/pn-market-web-components/p-756d8d95.entry.js.map +1 -0
- package/pn-market-web-components/{p-c0315c45.entry.js → p-76fb0c21.entry.js} +2 -2
- package/pn-market-web-components/{p-b2b2bae0.entry.js → p-81210644.entry.js} +2 -2
- package/pn-market-web-components/p-81e4d75b.entry.js +2 -0
- package/pn-market-web-components/p-81e4d75b.entry.js.map +1 -0
- package/pn-market-web-components/{p-d0f27361.entry.js → p-8382794b.entry.js} +2 -2
- package/pn-market-web-components/{p-8f25176b.entry.js → p-8519e39e.entry.js} +2 -2
- package/pn-market-web-components/p-8c26c1f2.entry.js +2 -0
- package/pn-market-web-components/p-8c26c1f2.entry.js.map +1 -0
- package/pn-market-web-components/{p-461c8792.entry.js → p-92b6477c.entry.js} +2 -2
- package/pn-market-web-components/{p-0d4d9d90.entry.js → p-9eab8192.entry.js} +2 -2
- package/pn-market-web-components/{p-40e632cc.entry.js → p-a3beee11.entry.js} +2 -2
- package/pn-market-web-components/{p-01fbf1ce.entry.js → p-a6935dc2.entry.js} +2 -2
- package/pn-market-web-components/{p-af646091.entry.js → p-a6dd3e4f.entry.js} +2 -2
- package/pn-market-web-components/{p-6d77e747.entry.js → p-af89c95a.entry.js} +2 -2
- package/pn-market-web-components/p-b318ff19.entry.js +2 -0
- package/pn-market-web-components/{p-0700cb4c.entry.js.map → p-b318ff19.entry.js.map} +1 -1
- package/pn-market-web-components/{p-c89f3d6b.entry.js → p-ba14b0ef.entry.js} +2 -2
- package/pn-market-web-components/{p-c7965104.entry.js → p-ba680948.entry.js} +2 -2
- package/pn-market-web-components/{p-11c6e458.entry.js → p-ba75bfdb.entry.js} +2 -2
- package/pn-market-web-components/{p-4149e715.entry.js → p-c186ec41.entry.js} +2 -2
- package/pn-market-web-components/{p-66c0c8dc.entry.js → p-c38707f9.entry.js} +2 -2
- package/pn-market-web-components/{p-671a8129.entry.js → p-c89cdd5a.entry.js} +2 -2
- package/pn-market-web-components/{p-4d848e18.entry.js → p-e8cd1608.entry.js} +2 -2
- package/pn-market-web-components/{p-4517a3d4.entry.js → p-ef090656.entry.js} +2 -2
- package/pn-market-web-components/p-f23ed5d2.entry.js +2 -0
- package/pn-market-web-components/p-f23ed5d2.entry.js.map +1 -0
- package/pn-market-web-components/{p-bd8ec517.entry.js → p-f3b4c13d.entry.js} +2 -2
- package/pn-market-web-components/{p-ff38b9a5.entry.js → p-f710445f.entry.js} +2 -2
- package/pn-market-web-components/{p-2e585ed5.entry.js → p-fcefe4a4.entry.js} +2 -2
- package/pn-market-web-components/p-fded22b7.entry.js +2 -0
- package/pn-market-web-components/p-fded22b7.entry.js.map +1 -0
- package/pn-market-web-components/{p-32bd2ff8.entry.js → p-ff6118f8.entry.js} +2 -2
- package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
- package/pn-market-web-components/pn-market-web-components.esm.js.map +1 -1
- package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.d.ts +40 -0
- package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.d.ts +3 -0
- package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.d.ts +30 -0
- package/types/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.d.ts +48 -0
- package/types/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.d.ts +34 -0
- package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.d.ts +121 -0
- package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.d.ts +99 -0
- package/types/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.d.ts +108 -0
- package/types/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.d.ts +103 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-i18n.d.ts +16 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-language.d.ts +20 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-menu.d.ts +16 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-theme.d.ts +6 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.d.ts +49 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.d.ts +25 -0
- package/types/components/layout-components/pn-marketweb-header/utils/header-url.d.ts +41 -0
- package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.d.ts +2 -0
- package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-types.d.ts +1 -0
- package/types/components/navigation/pn-language-selector/pn-language-selector.d.ts +1 -0
- package/types/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.d.ts +25 -0
- package/types/components/navigation/pn-site-selector/pn-site-selector.d.ts +1 -0
- package/types/components/widgets/pn-proxio-pricegroup/pn-proxio-pricegroup.d.ts +1 -1
- package/types/components.d.ts +532 -2
- package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.d.ts +7 -0
- package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.d.ts +24 -0
- package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.d.ts +16 -0
- package/umd/pn-marketweb-init.js +1 -1
- package/umd/pn-marketweb-salesforce.js +1 -1
- package/vscode-data.json +421 -0
- package/cjs/pn-language-selector_9.cjs.entry.js +0 -1156
- package/cjs/pn-language-selector_9.cjs.entry.js.map +0 -1
- package/cjs/pn-mainnav-link.cjs.entry.js +0 -45
- package/cjs/pn-mainnav-link.cjs.entry.js.map +0 -1
- package/cjs/pn-mainnav-store-13aaa243.js +0 -22
- package/cjs/pn-mainnav-store-13aaa243.js.map +0 -1
- package/cjs/pn-marketweb-siteheader-login-button_4.cjs.entry.js +0 -366
- package/cjs/pn-marketweb-siteheader-login-button_4.cjs.entry.js.map +0 -1
- package/cjs/pn-marketweb-siteheader-login-linklist.cjs.entry.js.map +0 -1
- package/esm/pn-language-selector_9.entry.js.map +0 -1
- package/esm/pn-mainnav-link.entry.js +0 -41
- package/esm/pn-mainnav-link.entry.js.map +0 -1
- package/esm/pn-mainnav-store-c98d831e.js +0 -19
- package/esm/pn-mainnav-store-c98d831e.js.map +0 -1
- package/esm/pn-marketweb-siteheader-login-button_4.entry.js +0 -359
- package/esm/pn-marketweb-siteheader-login-button_4.entry.js.map +0 -1
- package/esm/pn-marketweb-siteheader-login-linklist.entry.js.map +0 -1
- package/pn-market-web-components/p-022780ab.entry.js +0 -2
- package/pn-market-web-components/p-022780ab.entry.js.map +0 -1
- package/pn-market-web-components/p-0700cb4c.entry.js +0 -2
- package/pn-market-web-components/p-4bc6d49f.entry.js +0 -2
- package/pn-market-web-components/p-4bc6d49f.entry.js.map +0 -1
- package/pn-market-web-components/p-4c8bda8f.entry.js +0 -2
- package/pn-market-web-components/p-4c8bda8f.entry.js.map +0 -1
- package/pn-market-web-components/p-5090bb1d.entry.js +0 -2
- package/pn-market-web-components/p-5090bb1d.entry.js.map +0 -1
- package/pn-market-web-components/p-9d0ca27b.entry.js +0 -2
- package/pn-market-web-components/p-a30de538.entry.js +0 -2
- package/pn-market-web-components/p-a30de538.entry.js.map +0 -1
- package/pn-market-web-components/p-e3b2486a.js +0 -2
- package/pn-market-web-components/p-e3b2486a.js.map +0 -1
- /package/pn-market-web-components/{p-4a164ef8.entry.js.map → p-03728b0b.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-e43a36e0.entry.js.map → p-067c1c2f.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-2616cdc1.entry.js.map → p-191c8cfc.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-ca003c1f.entry.js.map → p-1a91c313.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-ab1e3dc2.entry.js.map → p-1f8304be.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-a3f601cb.entry.js.map → p-24ffac0a.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-12cafd55.entry.js.map → p-3aa74418.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-64f6691d.entry.js.map → p-42da7c5f.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-f0d423d0.entry.js.map → p-43748ca2.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-1c644b91.entry.js.map → p-466958a8.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-150da889.entry.js.map → p-4ab53d5d.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-118fe47d.entry.js.map → p-4d595345.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-0f6f715b.entry.js.map → p-4dac1980.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-a13f1f73.entry.js.map → p-4fcce83d.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-89fbca3b.entry.js.map → p-5a51d0b0.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-f4d2d0d3.entry.js.map → p-61346425.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-6e693269.entry.js.map → p-6b557670.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-e6d6a752.entry.js.map → p-70a71854.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-c0315c45.entry.js.map → p-76fb0c21.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-b2b2bae0.entry.js.map → p-81210644.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-d0f27361.entry.js.map → p-8382794b.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-8f25176b.entry.js.map → p-8519e39e.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-461c8792.entry.js.map → p-92b6477c.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-0d4d9d90.entry.js.map → p-9eab8192.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-40e632cc.entry.js.map → p-a3beee11.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-01fbf1ce.entry.js.map → p-a6935dc2.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-af646091.entry.js.map → p-a6dd3e4f.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-6d77e747.entry.js.map → p-af89c95a.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-c89f3d6b.entry.js.map → p-ba14b0ef.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-c7965104.entry.js.map → p-ba680948.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-11c6e458.entry.js.map → p-ba75bfdb.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-4149e715.entry.js.map → p-c186ec41.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-66c0c8dc.entry.js.map → p-c38707f9.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-671a8129.entry.js.map → p-c89cdd5a.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-4d848e18.entry.js.map → p-e8cd1608.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-4517a3d4.entry.js.map → p-ef090656.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-bd8ec517.entry.js.map → p-f3b4c13d.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-ff38b9a5.entry.js.map → p-f710445f.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-2e585ed5.entry.js.map → p-fcefe4a4.entry.js.map} +0 -0
- /package/pn-market-web-components/{p-32bd2ff8.entry.js.map → p-ff6118f8.entry.js.map} +0 -0
|
@@ -0,0 +1,1039 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, g as getElement, h, F as Fragment, d as Host } from './index-c0a4d8bd.js';
|
|
2
|
+
import { F as FetchHelper } from './FetchHelper-4789695a.js';
|
|
3
|
+
import { s as state } from './pn-marketweb-siteheader-store-69bcd7eb.js';
|
|
4
|
+
import { e as extractToggleableMenuStructure, g as getLanguageOptions, b as buildMenuItemsForMode, p as prependHomeMenuItem, r as resolveHeaderMenuThemes, a as getToggleRootForMenuItems, c as getVisibleMenuGroupsForMode } from './header-theme-d09b64c7.js';
|
|
5
|
+
import { t as translations } from './translations-d2f5804e.js';
|
|
6
|
+
import './index-a0a6fb88.js';
|
|
7
|
+
|
|
8
|
+
const ALLOWED_LANGUAGES = [
|
|
9
|
+
'sv',
|
|
10
|
+
'da',
|
|
11
|
+
'fi',
|
|
12
|
+
'no',
|
|
13
|
+
'en',
|
|
14
|
+
'de',
|
|
15
|
+
'zh',
|
|
16
|
+
'fr',
|
|
17
|
+
'es',
|
|
18
|
+
'it',
|
|
19
|
+
'nl',
|
|
20
|
+
];
|
|
21
|
+
const ALLOWED_MARKETS = [
|
|
22
|
+
'se',
|
|
23
|
+
'dk',
|
|
24
|
+
'fi',
|
|
25
|
+
'no',
|
|
26
|
+
'com',
|
|
27
|
+
'de',
|
|
28
|
+
'tpl',
|
|
29
|
+
'group',
|
|
30
|
+
];
|
|
31
|
+
const WWW_MARKETS = [
|
|
32
|
+
'se',
|
|
33
|
+
'dk',
|
|
34
|
+
'fi',
|
|
35
|
+
'no',
|
|
36
|
+
'de',
|
|
37
|
+
'com',
|
|
38
|
+
];
|
|
39
|
+
const DEVELOPMENT_DOMAINS = [
|
|
40
|
+
'localhost',
|
|
41
|
+
'.local',
|
|
42
|
+
'local.',
|
|
43
|
+
'.dev',
|
|
44
|
+
'dev.',
|
|
45
|
+
];
|
|
46
|
+
const MARKETS = {
|
|
47
|
+
se: {
|
|
48
|
+
fallbackLanguage: 'sv',
|
|
49
|
+
integration: 'se-inte.postnord.com',
|
|
50
|
+
preproduction: 'se-prep.postnord.com',
|
|
51
|
+
production: 'se-prod.postnord.com',
|
|
52
|
+
live: 'www.postnord.se',
|
|
53
|
+
},
|
|
54
|
+
dk: {
|
|
55
|
+
fallbackLanguage: 'da',
|
|
56
|
+
integration: 'dk-inte.postnord.com',
|
|
57
|
+
preproduction: 'dk-prep.postnord.com',
|
|
58
|
+
production: 'dk-prod.postnord.com',
|
|
59
|
+
live: 'www.postnord.dk',
|
|
60
|
+
},
|
|
61
|
+
fi: {
|
|
62
|
+
fallbackLanguage: 'fi',
|
|
63
|
+
integration: 'fi-inte.postnord.com',
|
|
64
|
+
preproduction: 'fi-prep.postnord.com',
|
|
65
|
+
production: 'fi-prod.postnord.com',
|
|
66
|
+
live: 'www.postnord.fi',
|
|
67
|
+
},
|
|
68
|
+
no: {
|
|
69
|
+
fallbackLanguage: 'no',
|
|
70
|
+
integration: 'no-inte.postnord.com',
|
|
71
|
+
preproduction: 'no-prep.postnord.com',
|
|
72
|
+
production: 'no-prod.postnord.com',
|
|
73
|
+
live: 'www.postnord.no',
|
|
74
|
+
},
|
|
75
|
+
com: {
|
|
76
|
+
fallbackLanguage: 'en',
|
|
77
|
+
integration: 'com-inte.postnord.com',
|
|
78
|
+
preproduction: 'com-prep.postnord.com',
|
|
79
|
+
production: 'com-prod.postnord.com',
|
|
80
|
+
live: 'www.postnord.com',
|
|
81
|
+
},
|
|
82
|
+
de: {
|
|
83
|
+
fallbackLanguage: 'en',
|
|
84
|
+
integration: 'de-inte.postnord.com',
|
|
85
|
+
preproduction: 'de-prep.postnord.com',
|
|
86
|
+
production: 'de-prod.postnord.com',
|
|
87
|
+
live: 'www.postnord.de',
|
|
88
|
+
},
|
|
89
|
+
tpl: {
|
|
90
|
+
fallbackLanguage: 'sv',
|
|
91
|
+
integration: 'tpl-inte.postnord.com',
|
|
92
|
+
preproduction: 'tpl-prep.postnord.com',
|
|
93
|
+
production: 'tpl-prod.postnord.com',
|
|
94
|
+
live: 'www.tpl.postnord.com',
|
|
95
|
+
},
|
|
96
|
+
group: {
|
|
97
|
+
fallbackLanguage: 'en',
|
|
98
|
+
integration: 'group-inte.postnord.com',
|
|
99
|
+
preproduction: 'group-prep.postnord.com',
|
|
100
|
+
production: 'group-prod.postnord.com',
|
|
101
|
+
live: 'group.postnord.com',
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
const ENVIRONMENT_ALIASES = {
|
|
105
|
+
integration: 'integration',
|
|
106
|
+
inte: 'integration',
|
|
107
|
+
preproduction: 'preproduction',
|
|
108
|
+
prep: 'preproduction',
|
|
109
|
+
production: 'production',
|
|
110
|
+
prod: 'production',
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
class RefinedMarketWebContextService {
|
|
114
|
+
href;
|
|
115
|
+
doc;
|
|
116
|
+
constructor(options) {
|
|
117
|
+
this.href = options?.href ?? window.location.href;
|
|
118
|
+
this.doc = options?.doc ?? document;
|
|
119
|
+
}
|
|
120
|
+
resolve() {
|
|
121
|
+
const url = new URL(this.href);
|
|
122
|
+
const market = this.resolveMarket(url);
|
|
123
|
+
const environment = this.resolveEnvironment(url);
|
|
124
|
+
const language = this.resolveLanguage(market);
|
|
125
|
+
return {
|
|
126
|
+
market,
|
|
127
|
+
environment,
|
|
128
|
+
language,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
getMarket() {
|
|
132
|
+
return this.resolve().market;
|
|
133
|
+
}
|
|
134
|
+
getEnvironmentName() {
|
|
135
|
+
return this.resolve().environment;
|
|
136
|
+
}
|
|
137
|
+
getLanguage() {
|
|
138
|
+
return this.resolve().language;
|
|
139
|
+
}
|
|
140
|
+
isDevEnvironment() {
|
|
141
|
+
const hostname = new URL(this.href).hostname.toLowerCase();
|
|
142
|
+
return DEVELOPMENT_DOMAINS.some(fragment => hostname.includes(fragment));
|
|
143
|
+
}
|
|
144
|
+
getEndpoint(environment, market) {
|
|
145
|
+
if (environment === 'localhost') {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
const currentHostname = new URL(this.href).hostname.toLowerCase();
|
|
149
|
+
const config = MARKETS[market];
|
|
150
|
+
if (environment === 'production' && currentHostname === config.live.toLowerCase()) {
|
|
151
|
+
return `https://${config.live}`;
|
|
152
|
+
}
|
|
153
|
+
if (environment !== 'production' && currentHostname === config[environment].toLowerCase()) {
|
|
154
|
+
return `https://${config[environment]}`;
|
|
155
|
+
}
|
|
156
|
+
if (environment === 'production') {
|
|
157
|
+
if (WWW_MARKETS.includes(market)) {
|
|
158
|
+
return `https://${config.live}`;
|
|
159
|
+
}
|
|
160
|
+
if (market === 'tpl') {
|
|
161
|
+
return 'https://www.tpl.postnord.com';
|
|
162
|
+
}
|
|
163
|
+
return `https://${config.live}`;
|
|
164
|
+
}
|
|
165
|
+
return `https://${config[environment]}`;
|
|
166
|
+
}
|
|
167
|
+
resolveEnvironment(url) {
|
|
168
|
+
const hostname = url.hostname.toLowerCase();
|
|
169
|
+
const matchedAlias = Object.keys(ENVIRONMENT_ALIASES).find(alias => hostname.includes(`-${alias}`));
|
|
170
|
+
if (matchedAlias) {
|
|
171
|
+
return ENVIRONMENT_ALIASES[matchedAlias];
|
|
172
|
+
}
|
|
173
|
+
const isKnownLiveHost = Object.values(MARKETS).some(config => config.live.toLowerCase() === hostname);
|
|
174
|
+
if (isKnownLiveHost || hostname.includes('www.')) {
|
|
175
|
+
return 'production';
|
|
176
|
+
}
|
|
177
|
+
return 'integration';
|
|
178
|
+
}
|
|
179
|
+
resolveMarket(url) {
|
|
180
|
+
const hostname = url.hostname.toLowerCase();
|
|
181
|
+
const fromLiveDomain = this.resolveMarketFromLiveDomain(hostname);
|
|
182
|
+
if (fromLiveDomain)
|
|
183
|
+
return fromLiveDomain;
|
|
184
|
+
const fromEnvironmentHost = this.resolveMarketFromEnvironmentHost(hostname);
|
|
185
|
+
if (fromEnvironmentHost)
|
|
186
|
+
return fromEnvironmentHost;
|
|
187
|
+
const fromPostnordSubdomain = this.resolveMarketFromPostnordSubdomain(hostname);
|
|
188
|
+
if (fromPostnordSubdomain)
|
|
189
|
+
return fromPostnordSubdomain;
|
|
190
|
+
if (this.isDevEnvironment()) {
|
|
191
|
+
const fromDevUrl = this.resolveMarketFromDevelopmentUrl(url);
|
|
192
|
+
if (fromDevUrl)
|
|
193
|
+
return fromDevUrl;
|
|
194
|
+
}
|
|
195
|
+
return 'se';
|
|
196
|
+
}
|
|
197
|
+
resolveLanguage(market) {
|
|
198
|
+
const candidates = [
|
|
199
|
+
this.doc?.documentElement?.getAttribute('lang'),
|
|
200
|
+
this.doc?.querySelector('meta[http-equiv="content-language"]')?.getAttribute('content'),
|
|
201
|
+
this.doc?.querySelector('meta[property="og:locale"]')?.getAttribute('content'),
|
|
202
|
+
this.doc?.querySelector('[lang]')?.getAttribute('lang'),
|
|
203
|
+
];
|
|
204
|
+
for (const candidate of candidates) {
|
|
205
|
+
const normalized = this.normalizeLanguage(candidate);
|
|
206
|
+
if (normalized) {
|
|
207
|
+
return normalized;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return MARKETS[market].fallbackLanguage;
|
|
211
|
+
}
|
|
212
|
+
normalizeLanguage(value) {
|
|
213
|
+
if (!value) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
const normalized = value.trim().toLowerCase().split(/[-_]/)[0];
|
|
217
|
+
return ALLOWED_LANGUAGES.includes(normalized)
|
|
218
|
+
? normalized
|
|
219
|
+
: undefined;
|
|
220
|
+
}
|
|
221
|
+
resolveMarketFromLiveDomain(hostname) {
|
|
222
|
+
const matched = Object.entries(MARKETS).find(([, config]) => config.live.toLowerCase() === hostname);
|
|
223
|
+
return matched?.[0];
|
|
224
|
+
}
|
|
225
|
+
resolveMarketFromEnvironmentHost(hostname) {
|
|
226
|
+
const matched = Object.entries(MARKETS).find(([, config]) => [config.integration, config.preproduction, config.production].some(envHost => envHost.toLowerCase() === hostname));
|
|
227
|
+
return matched?.[0];
|
|
228
|
+
}
|
|
229
|
+
resolveMarketFromPostnordSubdomain(hostname) {
|
|
230
|
+
if (hostname.includes('www')) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
if (!hostname.includes('.postnord.')) {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
const postnordIndex = hostname.indexOf('.postnord.');
|
|
237
|
+
const beforePostnord = hostname.substring(0, postnordIndex);
|
|
238
|
+
const parts = beforePostnord.split('.').filter(Boolean);
|
|
239
|
+
if (parts.length === 0) {
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
const closestSubdomain = parts[parts.length - 1];
|
|
243
|
+
return this.isMarketName(closestSubdomain) ? closestSubdomain : undefined;
|
|
244
|
+
}
|
|
245
|
+
resolveMarketFromDevelopmentUrl(url) {
|
|
246
|
+
const target = `${url.hostname}${url.pathname}`.toLowerCase();
|
|
247
|
+
const matchedMarket = ALLOWED_MARKETS.find(market => {
|
|
248
|
+
const patterns = [
|
|
249
|
+
`/${market}/`,
|
|
250
|
+
`/${market}`,
|
|
251
|
+
`.${market}.`,
|
|
252
|
+
`.${market}/`,
|
|
253
|
+
`${market}.`,
|
|
254
|
+
];
|
|
255
|
+
return patterns.some(pattern => target.includes(pattern));
|
|
256
|
+
});
|
|
257
|
+
if (matchedMarket) {
|
|
258
|
+
return matchedMarket;
|
|
259
|
+
}
|
|
260
|
+
const matchedByFallbackLanguage = Object.entries(MARKETS).find(([, config]) => {
|
|
261
|
+
const language = config.fallbackLanguage.toLowerCase();
|
|
262
|
+
const patterns = [
|
|
263
|
+
`/${language}/`,
|
|
264
|
+
`/${language}`,
|
|
265
|
+
`.${language}.`,
|
|
266
|
+
`.${language}/`,
|
|
267
|
+
`${language}.`,
|
|
268
|
+
];
|
|
269
|
+
return patterns.some(pattern => target.includes(pattern));
|
|
270
|
+
});
|
|
271
|
+
return matchedByFallbackLanguage?.[0];
|
|
272
|
+
}
|
|
273
|
+
isMarketName(value) {
|
|
274
|
+
return ALLOWED_MARKETS.includes(value);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Removes duplicated language segments from generated URLs.
|
|
280
|
+
*
|
|
281
|
+
* Example:
|
|
282
|
+
* /sv/sv/page -> /sv/page
|
|
283
|
+
*
|
|
284
|
+
* This protects against incorrectly concatenated site-domain-based URLs.
|
|
285
|
+
*/
|
|
286
|
+
function removeDoubleLanguage(url, language) {
|
|
287
|
+
if (!language) {
|
|
288
|
+
return url;
|
|
289
|
+
}
|
|
290
|
+
const languageSegment = language.toLowerCase() + '/';
|
|
291
|
+
const doubleLanguageSegment = '/' + languageSegment + languageSegment;
|
|
292
|
+
if (url.includes(doubleLanguageSegment)) {
|
|
293
|
+
return url.replace(doubleLanguageSegment, '/' + languageSegment);
|
|
294
|
+
}
|
|
295
|
+
return url;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Resolves a menu/login href to an absolute site-relative URL when needed.
|
|
299
|
+
*
|
|
300
|
+
* What it does:
|
|
301
|
+
* - Leaves fully-qualified http/https URLs unchanged
|
|
302
|
+
* - Prefixes relative URLs with the current site definition domain
|
|
303
|
+
* - Cleans up accidental double language segments
|
|
304
|
+
*/
|
|
305
|
+
function adjustHref(href, siteDefinition, language) {
|
|
306
|
+
if (!href) {
|
|
307
|
+
return href;
|
|
308
|
+
}
|
|
309
|
+
if (href.indexOf('http') === 0) {
|
|
310
|
+
return href;
|
|
311
|
+
}
|
|
312
|
+
const siteUrl = siteDefinition?.url ?? '';
|
|
313
|
+
const domainUrl = siteUrl.lastIndexOf('/') === siteUrl.length - 1
|
|
314
|
+
? siteUrl.substring(0, siteUrl.length - 1)
|
|
315
|
+
: siteUrl;
|
|
316
|
+
return removeDoubleLanguage(domainUrl + href, language);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Recursively adjusts a menu item and all child menu items so that
|
|
320
|
+
* relative URLs become site-domain-aware absolute URLs.
|
|
321
|
+
*
|
|
322
|
+
* This returns a new object rather than mutating the original API item.
|
|
323
|
+
*/
|
|
324
|
+
function adjustMenuItemUrls(item, siteDefinition, language) {
|
|
325
|
+
return {
|
|
326
|
+
...item,
|
|
327
|
+
href: adjustHref(item.href, siteDefinition, language),
|
|
328
|
+
children: (item.children ?? []).map(child => adjustMenuItemUrls(child, siteDefinition, language)),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Adjusts login dialog links so that relative URLs are resolved against
|
|
333
|
+
* the active site domain.
|
|
334
|
+
*
|
|
335
|
+
* This is used when siteDomainInUrls is enabled.
|
|
336
|
+
*/
|
|
337
|
+
function adjustLoginDialogUrls(loginDialog, siteDefinition, language) {
|
|
338
|
+
if (!loginDialog) {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
...loginDialog,
|
|
343
|
+
loggedInLinks: (loginDialog.loggedInLinks ?? []).map(item => ({
|
|
344
|
+
...item,
|
|
345
|
+
href: adjustHref(item.href, siteDefinition, language),
|
|
346
|
+
})),
|
|
347
|
+
loginMenuLinks: (loginDialog.loginMenuLinks ?? []).map(item => ({
|
|
348
|
+
...item,
|
|
349
|
+
href: adjustHref(item.href, siteDefinition, language),
|
|
350
|
+
})),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Navigates to the provided href when available.
|
|
355
|
+
*/
|
|
356
|
+
function navigateToHref(href) {
|
|
357
|
+
if (!href) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
window.location.href = href;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Navigates to a menu item's href when available.
|
|
364
|
+
*/
|
|
365
|
+
function navigateToMenuItem(item) {
|
|
366
|
+
navigateToHref(item?.href);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Maps backend header data into the internal renderable view model.
|
|
371
|
+
*
|
|
372
|
+
* This mapper is the normalization boundary between the backend header payload
|
|
373
|
+
* and the UI-facing header view model.
|
|
374
|
+
*
|
|
375
|
+
* Top-level menu interpretation:
|
|
376
|
+
* - all items except the last = switchable root menus
|
|
377
|
+
* - last item = shared/common root
|
|
378
|
+
*
|
|
379
|
+
* These semantics are inferred by position, not by stable backend identifiers.
|
|
380
|
+
*
|
|
381
|
+
* Responsibilities
|
|
382
|
+
* ----------------
|
|
383
|
+
* - normalize top-level backend payload sections
|
|
384
|
+
* - optionally adjust relative URLs against the site domain
|
|
385
|
+
* - detect whether the backend menu supports menu switching
|
|
386
|
+
* - preserve the raw normalized menu structure for the wrapper component
|
|
387
|
+
* - prepare a flat `menuItems` list for simpler rendering paths
|
|
388
|
+
*
|
|
389
|
+
* Important
|
|
390
|
+
* ---------
|
|
391
|
+
* - The switchable root items themselves are not intended to be rendered as
|
|
392
|
+
* visible main navigation entries
|
|
393
|
+
* - Visible navigation is derived from:
|
|
394
|
+
* - active root children
|
|
395
|
+
* - plus shared/common root children
|
|
396
|
+
* - If only a shared/common root exists, its children are rendered flat
|
|
397
|
+
* - The wrapper component may choose either:
|
|
398
|
+
* - `menuItems` for flat rendering
|
|
399
|
+
* - or `rawMenuItems` + menu helpers for grouped rendering
|
|
400
|
+
*/
|
|
401
|
+
function mapHeaderDataToViewModel(data, options) {
|
|
402
|
+
if (!data || typeof data !== 'object') {
|
|
403
|
+
return {
|
|
404
|
+
siteDefinition: null,
|
|
405
|
+
menuItems: [],
|
|
406
|
+
search: null,
|
|
407
|
+
siteSelector: null,
|
|
408
|
+
languageSelector: null,
|
|
409
|
+
languageOptions: [],
|
|
410
|
+
loginDialog: null,
|
|
411
|
+
homePageLink: '/',
|
|
412
|
+
hasMenuSwitching: false,
|
|
413
|
+
menuModeOptions: [],
|
|
414
|
+
defaultMenuMode: 0,
|
|
415
|
+
rawMenuItems: [],
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
const siteDefinition = data.sitedefinition ?? null;
|
|
419
|
+
/**
|
|
420
|
+
* Keep a normalized copy of the backend menu structure.
|
|
421
|
+
*
|
|
422
|
+
* This raw structure is preserved because the wrapper component may need the
|
|
423
|
+
* original top-level roots in order to:
|
|
424
|
+
* - switch active menu mode
|
|
425
|
+
* - render grouped navigation
|
|
426
|
+
* - resolve mode navigation targets
|
|
427
|
+
*
|
|
428
|
+
* Top-level semantics are positional:
|
|
429
|
+
* - all items except the last = switchable root menus
|
|
430
|
+
* - last item = shared/common root
|
|
431
|
+
*/
|
|
432
|
+
const rawMenuItems = (data.mainMenu?.menuItems ?? []).map(item => options.siteDomainInUrls
|
|
433
|
+
? adjustMenuItemUrls(item, siteDefinition, options.language)
|
|
434
|
+
: { ...item });
|
|
435
|
+
const toggleStructure = extractToggleableMenuStructure(rawMenuItems);
|
|
436
|
+
/**
|
|
437
|
+
* `menuItems` is kept as a flat convenience list for render paths that do
|
|
438
|
+
* not need to reason about root menus explicitly.
|
|
439
|
+
*
|
|
440
|
+
* This flat list contains:
|
|
441
|
+
* - active-mode primary items when switchable roots exist
|
|
442
|
+
* - plus shared/common items
|
|
443
|
+
*
|
|
444
|
+
* If only a shared/common root exists, its children are rendered flat.
|
|
445
|
+
*/
|
|
446
|
+
let menuItems = buildMenuItemsForMode(toggleStructure, 0);
|
|
447
|
+
menuItems = prependHomeMenuItem(menuItems, options.i18n, siteDefinition?.url ?? '/', options.hideHomeMenuItem);
|
|
448
|
+
const search = {
|
|
449
|
+
...(data.search ?? {}),
|
|
450
|
+
AutocompleteEndpoint: options.autocompleteEndpoint ?? '',
|
|
451
|
+
};
|
|
452
|
+
const siteSelector = data.siteSelectorViewModel ?? null;
|
|
453
|
+
const languageSelector = data.languageSelectorViewModel ?? null;
|
|
454
|
+
const languageOptions = getLanguageOptions(languageSelector);
|
|
455
|
+
const loginDialog = options.siteDomainInUrls
|
|
456
|
+
? adjustLoginDialogUrls(data.loginViewModel ?? null, siteDefinition, options.language)
|
|
457
|
+
: data.loginViewModel ?? null;
|
|
458
|
+
return {
|
|
459
|
+
siteDefinition,
|
|
460
|
+
menuItems,
|
|
461
|
+
search,
|
|
462
|
+
siteSelector,
|
|
463
|
+
languageSelector,
|
|
464
|
+
languageOptions,
|
|
465
|
+
loginDialog,
|
|
466
|
+
homePageLink: siteDefinition?.url ?? document.location.hostname,
|
|
467
|
+
hasMenuSwitching: toggleStructure.hasMenuSwitching,
|
|
468
|
+
menuModeOptions: toggleStructure.menuModeOptions,
|
|
469
|
+
defaultMenuMode: 0,
|
|
470
|
+
rawMenuItems,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Safe fallback i18n object used before translations have been resolved,
|
|
476
|
+
* or if a language is missing from the translation table.
|
|
477
|
+
*/
|
|
478
|
+
const defaultHeaderI18n = {
|
|
479
|
+
searchlabel: '',
|
|
480
|
+
searchplaceholder: '',
|
|
481
|
+
searchbuttontext: '',
|
|
482
|
+
menuHomeButton: '',
|
|
483
|
+
menuGoBackButton: '',
|
|
484
|
+
mainMenuButton: '',
|
|
485
|
+
menuStartButton: '',
|
|
486
|
+
profileSelectionFlyoutHeading: '',
|
|
487
|
+
unifiedLoginButton: '',
|
|
488
|
+
unifiedMyPagesButton: '',
|
|
489
|
+
home: 'Home',
|
|
490
|
+
};
|
|
491
|
+
/**
|
|
492
|
+
* Resolves the i18n object for the current language and applies overrides.
|
|
493
|
+
*
|
|
494
|
+
* What it does:
|
|
495
|
+
* - Looks up translation values for the selected language
|
|
496
|
+
* - Falls back to a safe default object if the language is missing
|
|
497
|
+
* - Allows the search placeholder to be overridden by a prop
|
|
498
|
+
* - Ensures "home" always has a non-empty fallback value
|
|
499
|
+
*/
|
|
500
|
+
function resolveHeaderTranslations(language, searchPlaceholder) {
|
|
501
|
+
const resolved = (language && translations[language]) ? translations[language] : defaultHeaderI18n;
|
|
502
|
+
return {
|
|
503
|
+
...defaultHeaderI18n,
|
|
504
|
+
...resolved,
|
|
505
|
+
searchplaceholder: searchPlaceholder || resolved.searchplaceholder || '',
|
|
506
|
+
home: resolved.home && resolved.home.trim() !== '' ? resolved.home : 'Home',
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Service responsible for:
|
|
512
|
+
* - resolving the effective header context
|
|
513
|
+
* - building the fetch URL for the header endpoint
|
|
514
|
+
* - loading header data from the backend
|
|
515
|
+
* - mapping backend data into a renderable header state
|
|
516
|
+
*
|
|
517
|
+
* This service uses the refined context service as the source of truth
|
|
518
|
+
* for market/language/environment resolution.
|
|
519
|
+
*/
|
|
520
|
+
class PnMarketwebHeaderService {
|
|
521
|
+
fetchHelper;
|
|
522
|
+
href;
|
|
523
|
+
doc;
|
|
524
|
+
/**
|
|
525
|
+
* Fixed backend path for loading header data.
|
|
526
|
+
* This is appended to the resolved endpoint domain.
|
|
527
|
+
*/
|
|
528
|
+
endpointPath = '/api/navigation/toggle-header';
|
|
529
|
+
constructor(fetchHelper, href = window.location.href, doc = document) {
|
|
530
|
+
this.fetchHelper = fetchHelper;
|
|
531
|
+
this.href = href;
|
|
532
|
+
this.doc = doc;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Resolves the effective header context.
|
|
536
|
+
*
|
|
537
|
+
* What it does:
|
|
538
|
+
* - uses the RefinedMarketWebContextService to resolve context from the current URL/document
|
|
539
|
+
* - lets explicit input values override resolved values when provided
|
|
540
|
+
* - resolves endpoint from environment + market when endpoint is not explicitly passed in
|
|
541
|
+
* - keeps pageId as part of the final header request context
|
|
542
|
+
*/
|
|
543
|
+
async resolveContext(input) {
|
|
544
|
+
const contextService = new RefinedMarketWebContextService({
|
|
545
|
+
href: this.href,
|
|
546
|
+
doc: this.doc,
|
|
547
|
+
});
|
|
548
|
+
const resolvedContext = contextService.resolve();
|
|
549
|
+
const market = input.market ?? resolvedContext.market;
|
|
550
|
+
const language = input.language ?? resolvedContext.language;
|
|
551
|
+
const environment = input.environment ?? resolvedContext.environment;
|
|
552
|
+
const endpoint = input.endpoint && input.endpoint.trim() !== ''
|
|
553
|
+
? input.endpoint
|
|
554
|
+
: contextService.getEndpoint(environment, market);
|
|
555
|
+
return {
|
|
556
|
+
market,
|
|
557
|
+
language,
|
|
558
|
+
environment,
|
|
559
|
+
endpoint,
|
|
560
|
+
pageId: input.pageId ?? '',
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Builds the final request URL used to fetch header JSON.
|
|
565
|
+
*
|
|
566
|
+
* What it does:
|
|
567
|
+
* - removes a trailing slash from the endpoint base if needed
|
|
568
|
+
* - appends the fixed header endpoint path
|
|
569
|
+
* - adds query parameters for market, language and current page
|
|
570
|
+
*/
|
|
571
|
+
buildFetchUrl(context) {
|
|
572
|
+
const endpointBase = context.endpoint.lastIndexOf('/') === context.endpoint.length - 1
|
|
573
|
+
? context.endpoint.substring(0, context.endpoint.length - 1)
|
|
574
|
+
: context.endpoint;
|
|
575
|
+
return `${endpointBase}${this.endpointPath}?market=${context.market}&language=${context.language}¤tPage=${context.pageId ?? ''}`;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Fetches header data from the backend.
|
|
579
|
+
*
|
|
580
|
+
* Returns null when required context is missing.
|
|
581
|
+
*/
|
|
582
|
+
async fetchHeaderData(context, cache = false) {
|
|
583
|
+
if (!context.market || !context.language || context.endpoint == null) {
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
const fetchUrl = this.buildFetchUrl(context);
|
|
587
|
+
const response = await this.fetchHelper.fetchJson(fetchUrl, { mode: 'cors' }, cache);
|
|
588
|
+
if (!response) {
|
|
589
|
+
return null;
|
|
590
|
+
}
|
|
591
|
+
return 'value' in response ? response.value : response;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Builds i18n for the current language + presentation overrides.
|
|
595
|
+
*/
|
|
596
|
+
resolveI18n(language, searchPlaceholder = '') {
|
|
597
|
+
if (!language) {
|
|
598
|
+
return defaultHeaderI18n;
|
|
599
|
+
}
|
|
600
|
+
return resolveHeaderTranslations(language, searchPlaceholder);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Maps raw header data into the current UI view model.
|
|
604
|
+
*/
|
|
605
|
+
mapViewModel(rawHeaderData, input) {
|
|
606
|
+
return mapHeaderDataToViewModel(rawHeaderData, {
|
|
607
|
+
language: input.language ?? undefined,
|
|
608
|
+
hideHomeMenuItem: input.hideHomeMenuItem,
|
|
609
|
+
siteDomainInUrls: input.siteDomainInUrls,
|
|
610
|
+
autocompleteEndpoint: input.autocompleteEndpoint,
|
|
611
|
+
i18n: input.i18n,
|
|
612
|
+
});
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Resolves context, fetches backend data and builds the final header state.
|
|
616
|
+
*/
|
|
617
|
+
async loadHeaderState(input) {
|
|
618
|
+
const context = await this.resolveContext({
|
|
619
|
+
market: input.market,
|
|
620
|
+
language: input.language,
|
|
621
|
+
environment: input.environment,
|
|
622
|
+
endpoint: input.endpoint,
|
|
623
|
+
pageId: input.pageId,
|
|
624
|
+
});
|
|
625
|
+
const i18n = this.resolveI18n(context.language, input.searchPlaceholder);
|
|
626
|
+
const rawHeaderData = await this.fetchHeaderData(context, input.cache ?? false);
|
|
627
|
+
if (!rawHeaderData) {
|
|
628
|
+
return {
|
|
629
|
+
context,
|
|
630
|
+
rawHeaderData: null,
|
|
631
|
+
vm: null,
|
|
632
|
+
i18n,
|
|
633
|
+
status: 'error',
|
|
634
|
+
activeMenuMode: 0, /* default to first mode */
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
const vm = this.mapViewModel(rawHeaderData, {
|
|
638
|
+
language: context.language,
|
|
639
|
+
hideHomeMenuItem: input.hideHomeMenuItem,
|
|
640
|
+
siteDomainInUrls: input.siteDomainInUrls,
|
|
641
|
+
autocompleteEndpoint: input.autocompleteEndpoint,
|
|
642
|
+
i18n,
|
|
643
|
+
});
|
|
644
|
+
return {
|
|
645
|
+
context,
|
|
646
|
+
rawHeaderData,
|
|
647
|
+
vm,
|
|
648
|
+
i18n,
|
|
649
|
+
status: 'ready',
|
|
650
|
+
activeMenuMode: vm.defaultMenuMode
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Rebuilds the UI state from already-fetched raw backend data.
|
|
655
|
+
* Use this when presentation-only inputs change and a refetch is not needed.
|
|
656
|
+
*/
|
|
657
|
+
remapHeaderState(input) {
|
|
658
|
+
const i18n = this.resolveI18n(input.language ?? input.context.language, input.searchPlaceholder);
|
|
659
|
+
if (!input.rawHeaderData) {
|
|
660
|
+
return {
|
|
661
|
+
context: input.context,
|
|
662
|
+
rawHeaderData: null,
|
|
663
|
+
vm: null,
|
|
664
|
+
i18n,
|
|
665
|
+
status: 'error',
|
|
666
|
+
activeMenuMode: input.currentActiveMenuMode,
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
const vm = this.mapViewModel(input.rawHeaderData, {
|
|
670
|
+
language: input.language ?? input.context.language,
|
|
671
|
+
hideHomeMenuItem: input.hideHomeMenuItem,
|
|
672
|
+
siteDomainInUrls: input.siteDomainInUrls,
|
|
673
|
+
autocompleteEndpoint: input.autocompleteEndpoint,
|
|
674
|
+
i18n,
|
|
675
|
+
});
|
|
676
|
+
return {
|
|
677
|
+
context: input.context,
|
|
678
|
+
rawHeaderData: input.rawHeaderData,
|
|
679
|
+
vm,
|
|
680
|
+
i18n,
|
|
681
|
+
status: 'ready',
|
|
682
|
+
activeMenuMode: input.currentActiveMenuMode,
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
const STORAGE_KEY = 'pn-marketweb-header:menu-mode';
|
|
688
|
+
/**
|
|
689
|
+
* Returns the previously selected menu mode from localStorage.
|
|
690
|
+
*
|
|
691
|
+
* Returns null if:
|
|
692
|
+
* - nothing is stored
|
|
693
|
+
* - value is invalid
|
|
694
|
+
* - storage is unavailable
|
|
695
|
+
*/
|
|
696
|
+
function getStoredHeaderMenuMode() {
|
|
697
|
+
if (typeof window === 'undefined') {
|
|
698
|
+
return null;
|
|
699
|
+
}
|
|
700
|
+
try {
|
|
701
|
+
const value = window.localStorage.getItem(STORAGE_KEY);
|
|
702
|
+
if (value == null) {
|
|
703
|
+
return null;
|
|
704
|
+
}
|
|
705
|
+
const parsed = Number(value);
|
|
706
|
+
if (Number.isInteger(parsed) && parsed >= 0) {
|
|
707
|
+
return parsed;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
catch {
|
|
711
|
+
// intentionally ignored
|
|
712
|
+
}
|
|
713
|
+
return null;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Persists the selected menu mode in localStorage.
|
|
717
|
+
*
|
|
718
|
+
* Storage failures are intentionally ignored.
|
|
719
|
+
*/
|
|
720
|
+
function storeHeaderMenuMode(mode) {
|
|
721
|
+
if (typeof window === 'undefined') {
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
try {
|
|
725
|
+
window.localStorage.setItem(STORAGE_KEY, String(mode));
|
|
726
|
+
}
|
|
727
|
+
catch {
|
|
728
|
+
// intentionally ignored
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Resolves the effective initial menu mode.
|
|
733
|
+
*
|
|
734
|
+
* Priority:
|
|
735
|
+
* 1. Stored user preference
|
|
736
|
+
* 2. Server-provided initial mode
|
|
737
|
+
* 3. Fallback to first mode (index 0)
|
|
738
|
+
*/
|
|
739
|
+
function resolveInitialHeaderMenuMode(hasMenuSwitching, initialActiveMenuMode) {
|
|
740
|
+
if (!hasMenuSwitching) {
|
|
741
|
+
return 0;
|
|
742
|
+
}
|
|
743
|
+
const storedMode = getStoredHeaderMenuMode();
|
|
744
|
+
if (typeof storedMode === 'number') {
|
|
745
|
+
return storedMode;
|
|
746
|
+
}
|
|
747
|
+
return initialActiveMenuMode ?? 0;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
const pnMarketwebHeaderCss = "pn-button-dropdown .pn-button-dropdown>pn-button>.pn-button{min-height:initial}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}@media screen and (max-width: 767px){.sr-only-mobile{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}}pn-marketweb-header{display:block;background-color:var(--siteheader-bg, #ffffff);color:var(--siteheader-text-color, #000000);--siteheader-bg:#ffffff;--siteheader-text-color:#000000;--siteheader-shadow:0 0.06rem 0.18rem rgba(0, 0, 0, 0.1), 0 0.32rem 0.72rem rgba(0, 0, 0, 0.13);--siteheader-row-border-color:#f3f2f2;--siteheader-row-padding-inline:1.6rem;--siteheader-row-min-height:2em;--siteheader-row-main-min-height:5.6rem;--siteheader-top-row-bg:transparent;--siteheader-top-row-border-color:#f3f2f2;--siteheader-top-text-color:#000000;--siteheader-top-link-color:#000000;--siteheader-top-icon-fill:currentColor;--siteheader-main-row-bg-mobile:#ffffff;--siteheader-main-row-bg-tablet:#ffffff;--siteheader-logo-color:#00a0d6;--siteheader-mainnav-top-position-mobile:3.5em;--siteheader-mainnav-link-hover-effect-color:#e0f8ff;--siteheader-button-font-weight:400;--siteheader-button-padding:0.5rem;--siteheader-button-radius:0.8rem;--siteheader-button-hover-bg:#e0f8ff;--siteheader-button-hover-text-color:#000000;--siteheader-toggle-color:#005d92;--siteheader-toggle-hover-color:#000000;--siteheader-toggle-active-color:#000000;--siteheader-toggle-active-underline-color:#00a0d6;--siteheader-mainnav-divider-color:#d3cecb;--siteheader-search-max-width:30rem;--siteheader-search-min-width:23.3rem;--siteheader-search-input-bg:#ffffff;--siteheader-search-input-color:#000000;--siteheader-search-placeholder-color:#000000;--siteheader-search-button-bg:#ffffff;--siteheader-search-icon-fill:currentColor}body[data-siteheader-menuopen=true]{max-height:100vh;overflow:hidden}@media screen and (min-width: 1024px){body[data-siteheader-menuopen=true]{max-height:initial;overflow:initial}}pn-marketweb-header header{position:relative;z-index:1000;display:flex;flex-direction:column;background-color:var(--siteheader-bg, #ffffff);color:var(--siteheader-text-color, #000000);box-shadow:var(--siteheader-shadow, 0 0.06rem 0.18rem rgba(0, 0, 0, 0.1), 0 0.32rem 0.72rem rgba(0, 0, 0, 0.13))}pn-marketweb-header .siteheader-row{display:flex;flex-flow:row;align-items:center;width:100%;min-height:var(--siteheader-row-min-height, 2em);padding-inline:var(--siteheader-row-padding-inline, 1.6rem)}pn-marketweb-header .siteheader-row:not(:last-child){border-bottom:0.1rem solid var(--siteheader-row-border-color, #f3f2f2)}pn-marketweb-header .siteheader-row-top{display:none}pn-marketweb-header .siteheader-row-main{display:flex;flex-direction:row;align-items:center;justify-content:space-between;max-width:100%;min-height:var(--siteheader-row-main-min-height, 5.6rem);padding-inline:var(--siteheader-row-padding-inline, 1.6rem);overflow:visible}pn-marketweb-header .siteheader-logocontainer{display:flex;align-items:center;z-index:1}pn-marketweb-header .siteheader-logolink{display:flex;align-items:center;height:100%;max-height:6.4rem}pn-marketweb-header .siteheader-logolink:hover,pn-marketweb-header .siteheader-logolink:focus,pn-marketweb-header .siteheader-logolink:active{box-shadow:none;text-decoration:none}pn-marketweb-header .siteheader-logo{display:block;color:var(--siteheader-logo-color)}pn-marketweb-header .siteheader-row>pn-marketweb-siteheader-search{display:none}pn-marketweb-header pn-spinner{display:none}pn-marketweb-header pn-button-dropdown:not(.hydrated) .pn-button-dropdown-container{display:none}pn-marketweb-header .siteheader-row pn-button button:hover{color:var(--siteheader-button-hover-text-color, #000000)}pn-marketweb-header .siteheader-row pn-button button:hover .pn-button-bg,pn-marketweb-header .siteheader-row pn-button button:hover .pn-button-bg::after{background-color:var(--siteheader-button-hover-bg, #e0f8ff)}pn-marketweb-header pn-button button{font-weight:var(--siteheader-button-font-weight, 400) !important;padding:var(--siteheader-button-padding, 0.5rem) !important}pn-marketweb-header pn-button button .pn-button-bg::after{border-radius:var(--siteheader-button-radius, 0.8rem) !important}@media screen and (min-width: 769px){pn-marketweb-header{--siteheader-row-min-height:3.2em;--siteheader-row-main-min-height:3.2em}pn-marketweb-header .siteheader-row{justify-content:space-between}pn-marketweb-header .siteheader-row-top{display:flex}pn-marketweb-header .siteheader-row>pn-marketweb-siteheader-search{display:block;width:100%;min-width:var(--siteheader-search-min-width, 23.3rem);max-width:var(--siteheader-search-max-width, 30rem)}}@media screen and (min-width: 1024px){pn-marketweb-header .siteheader-row-main{margin-top:auto;overflow:visible}}pn-marketweb-header[data-theme=business]{--siteheader-bg:#0d234b;--siteheader-text-color:#ffffff;--siteheader-row-border-color:#0d234b;--siteheader-top-row-bg:#0d234b;--siteheader-top-row-border-color:#0d234b;--siteheader-top-text-color:#ffffff;--siteheader-top-link-color:#ffffff;--siteheader-top-icon-fill:#ffffff;--siteheader-main-row-bg-mobile:#0d234b;--siteheader-main-row-bg-tablet:#ffffff;--siteheader-button-hover-bg:#ffffff;--siteheader-button-hover-text-color:#000000;--siteheader-logo-color:#00a0d6;--siteheader-cart-countindicator-color:#000000;--siteheader-cart-icon-color:#ffffff;--siteheader-cart-countindicator-background:#ffffff;--siteheader-cart-link-color:#ffffff;--siteheader-toggle-color:#ffffff;--siteheader-toggle-hover-color:#ffffff;--siteheader-toggle-active-color:#ffffff;--siteheader-toggle-active-underline-color:#ffffff;--siteheader-search-input-bg:#ffffff;--siteheader-search-input-color:#0d234b;--siteheader-search-placeholder-color:#0d234b;--siteheader-search-button-bg:#ffffff;--siteheader-search-icon-fill:#0d234b;--siteheader-mainnav-list-heading-color:#000000;--siteheader-mainnav-link-hover-effect-color:#0d234b;--siteheader-mainnav-link-active-effect-color:#0d234b;--siteheader-mainnav-level-2-border-top-left-radius-desktop:0;--siteheader-mainnav-level-2-border-top-right-radius-desktop:0;--siteheader-mainnav-link-active-desktop-color:#0d234b;--siteheader-mainnav-link-level1-indicator-color:#0d234b;--siteheader-mainnav-link-level1-indicator-active-color:#0d234b;--siteheader-mainnav-link-level1-border-bottom:0.1rem solid #e9e6e5;--siteheader-mainnav-link-level2-border-bottom:0.1rem solid #e9e6e5;--siteheader-login-profileselection-heading-color:#000000;--siteheader-login-profileselection-user-name-color:#000000;--siteheader-login-profileselection-description-color:#5e554a;--siteheader-login-profileselection-divider-background:#005d92;--siteheader-login-profileselection-profileoption-link-background:#ffffff;--siteheader-login-linklist-heading-color:#000000}";
|
|
751
|
+
const PnMarketwebHeaderStyle0 = pnMarketwebHeaderCss;
|
|
752
|
+
|
|
753
|
+
const PnMarketwebHeader = class {
|
|
754
|
+
constructor(hostRef) {
|
|
755
|
+
registerInstance(this, hostRef);
|
|
756
|
+
this.changeLanguage = createEvent(this, "changeLanguage", 7);
|
|
757
|
+
this.changeMarket = createEvent(this, "changeMarket", 7);
|
|
758
|
+
this.initialActiveMenuMode = 0;
|
|
759
|
+
this.menuThemes = undefined;
|
|
760
|
+
this.market = null;
|
|
761
|
+
this.language = null;
|
|
762
|
+
this.environment = null;
|
|
763
|
+
this.endpoint = null;
|
|
764
|
+
this.siteid = null;
|
|
765
|
+
this.pageId = '';
|
|
766
|
+
this.userToken = '';
|
|
767
|
+
this.userFullname = '';
|
|
768
|
+
this.userLoggedin = false;
|
|
769
|
+
this.hideSiteSelector = false;
|
|
770
|
+
this.hideHomeMenuItem = false;
|
|
771
|
+
this.hideLanguageSelector = false;
|
|
772
|
+
this.hideSearch = false;
|
|
773
|
+
this.hideLogin = false;
|
|
774
|
+
this.showProfileSelection = false;
|
|
775
|
+
this.showUnifiedLogin = false;
|
|
776
|
+
this.siteDomainInUrls = false;
|
|
777
|
+
this.autocompleteEndpoint = '';
|
|
778
|
+
this.sessionForward = false;
|
|
779
|
+
this.cache = false;
|
|
780
|
+
this.searchPlaceholder = '';
|
|
781
|
+
this.spaMode = false;
|
|
782
|
+
this.checkUserLoggedInStateInterval = 0;
|
|
783
|
+
this.useMarketwebLogin = false;
|
|
784
|
+
this.navigateOnMenuToggle = true;
|
|
785
|
+
this.vm = null;
|
|
786
|
+
this.i18n = defaultHeaderI18n;
|
|
787
|
+
this.status = 'loading';
|
|
788
|
+
this.minimizeSearch = false;
|
|
789
|
+
this.loggedIn = false;
|
|
790
|
+
this.activeMenuMode = 0;
|
|
791
|
+
}
|
|
792
|
+
get hostElement() { return getElement(this); }
|
|
793
|
+
/** Guard used to prevent watchers from reloading during initial setup. */
|
|
794
|
+
isInitializing = false;
|
|
795
|
+
/** Cached raw backend payload so UI-only prop changes can remap without refetching. */
|
|
796
|
+
rawHeaderData = null;
|
|
797
|
+
/** Main nav element reference used for overflow calculation. */
|
|
798
|
+
mainNavEl;
|
|
799
|
+
/** Emitted when the language changes. */
|
|
800
|
+
changeLanguage;
|
|
801
|
+
/** Emitted when the market changes. */
|
|
802
|
+
changeMarket;
|
|
803
|
+
/** Shared helper for backend requests. */
|
|
804
|
+
fetchHelper = new FetchHelper('marketweb-header');
|
|
805
|
+
/** Service for context resolution and header-data fetching. */
|
|
806
|
+
headerService = new PnMarketwebHeaderService(this.fetchHelper);
|
|
807
|
+
hasResolvedInitialMenuMode = false;
|
|
808
|
+
async componentWillLoad() {
|
|
809
|
+
await this.loadHeader();
|
|
810
|
+
}
|
|
811
|
+
onLanguageSelectorChange(e) {
|
|
812
|
+
this.language = e.detail;
|
|
813
|
+
window.dispatchEvent(new CustomEvent('marketweb-languagechange', { detail: this.language }));
|
|
814
|
+
}
|
|
815
|
+
async onLanguageChange() {
|
|
816
|
+
if (this.isInitializing || !this.language) {
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
this.changeLanguage.emit(this.language);
|
|
820
|
+
await this.loadHeader();
|
|
821
|
+
}
|
|
822
|
+
async onMarketChange() {
|
|
823
|
+
if (this.isInitializing || !this.market) {
|
|
824
|
+
return;
|
|
825
|
+
}
|
|
826
|
+
this.changeMarket.emit(this.market);
|
|
827
|
+
await this.loadHeader();
|
|
828
|
+
}
|
|
829
|
+
async onEnvironmentChange() {
|
|
830
|
+
if (this.isInitializing || !this.environment) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
await this.loadHeader();
|
|
834
|
+
}
|
|
835
|
+
async onEndpointChange() {
|
|
836
|
+
if (this.isInitializing) {
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
839
|
+
await this.loadHeader();
|
|
840
|
+
}
|
|
841
|
+
async onPageIdChange() {
|
|
842
|
+
if (this.isInitializing) {
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
await this.loadHeader();
|
|
846
|
+
}
|
|
847
|
+
onPresentationInputChange() {
|
|
848
|
+
if (this.isInitializing) {
|
|
849
|
+
return;
|
|
850
|
+
}
|
|
851
|
+
this.remapViewModel();
|
|
852
|
+
}
|
|
853
|
+
onLoginStateChange(e) {
|
|
854
|
+
if (typeof e.detail?.loggedIn === 'boolean') {
|
|
855
|
+
this.loggedIn = e.detail.loggedIn;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
handleResize() {
|
|
859
|
+
requestAnimationFrame(() => {
|
|
860
|
+
this.checkMenuOverflow();
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
get menuThemeList() {
|
|
864
|
+
return resolveHeaderMenuThemes(this.menuThemes, this.vm?.menuModeOptions);
|
|
865
|
+
}
|
|
866
|
+
get logoUrl() {
|
|
867
|
+
return this.vm?.menuModeOptions?.[this.activeMenuMode]?.href ?? '/';
|
|
868
|
+
}
|
|
869
|
+
async loadHeader() {
|
|
870
|
+
this.status = 'loading';
|
|
871
|
+
this.isInitializing = true;
|
|
872
|
+
try {
|
|
873
|
+
const result = await this.headerService.loadHeaderState({
|
|
874
|
+
market: this.market,
|
|
875
|
+
language: this.language,
|
|
876
|
+
environment: this.environment,
|
|
877
|
+
endpoint: this.endpoint,
|
|
878
|
+
pageId: this.pageId,
|
|
879
|
+
cache: this.cache,
|
|
880
|
+
hideHomeMenuItem: this.hideHomeMenuItem,
|
|
881
|
+
siteDomainInUrls: this.siteDomainInUrls,
|
|
882
|
+
autocompleteEndpoint: this.autocompleteEndpoint,
|
|
883
|
+
searchPlaceholder: this.searchPlaceholder,
|
|
884
|
+
});
|
|
885
|
+
this.applyHeaderState(result);
|
|
886
|
+
requestAnimationFrame(() => {
|
|
887
|
+
this.checkMenuOverflow();
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
catch (error) {
|
|
891
|
+
console.error('[pn-marketweb-header] Failed to load header', error);
|
|
892
|
+
this.rawHeaderData = null;
|
|
893
|
+
this.vm = null;
|
|
894
|
+
this.status = 'error';
|
|
895
|
+
}
|
|
896
|
+
finally {
|
|
897
|
+
this.isInitializing = false;
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
remapViewModel() {
|
|
901
|
+
const context = {
|
|
902
|
+
market: this.market,
|
|
903
|
+
language: this.language,
|
|
904
|
+
environment: this.environment,
|
|
905
|
+
endpoint: this.endpoint,
|
|
906
|
+
pageId: this.pageId ?? '',
|
|
907
|
+
};
|
|
908
|
+
const result = this.headerService.remapHeaderState({
|
|
909
|
+
context,
|
|
910
|
+
rawHeaderData: this.rawHeaderData,
|
|
911
|
+
language: this.language,
|
|
912
|
+
hideHomeMenuItem: this.hideHomeMenuItem,
|
|
913
|
+
siteDomainInUrls: this.siteDomainInUrls,
|
|
914
|
+
autocompleteEndpoint: this.autocompleteEndpoint,
|
|
915
|
+
searchPlaceholder: this.searchPlaceholder,
|
|
916
|
+
currentActiveMenuMode: this.activeMenuMode,
|
|
917
|
+
});
|
|
918
|
+
this.applyHeaderState(result);
|
|
919
|
+
requestAnimationFrame(() => {
|
|
920
|
+
this.checkMenuOverflow();
|
|
921
|
+
});
|
|
922
|
+
}
|
|
923
|
+
applyHeaderState(result) {
|
|
924
|
+
this.market = result.context.market;
|
|
925
|
+
this.language = result.context.language;
|
|
926
|
+
this.environment = result.context.environment;
|
|
927
|
+
this.endpoint = result.context.endpoint;
|
|
928
|
+
this.rawHeaderData = result.rawHeaderData;
|
|
929
|
+
this.vm = result.vm;
|
|
930
|
+
this.i18n = result.i18n;
|
|
931
|
+
this.status = result.status;
|
|
932
|
+
if (!result.vm?.hasMenuSwitching) {
|
|
933
|
+
this.activeMenuMode = 0;
|
|
934
|
+
this.hasResolvedInitialMenuMode = false;
|
|
935
|
+
}
|
|
936
|
+
else if (!this.hasResolvedInitialMenuMode) {
|
|
937
|
+
this.activeMenuMode = resolveInitialHeaderMenuMode(true, this.initialActiveMenuMode);
|
|
938
|
+
this.hasResolvedInitialMenuMode = true;
|
|
939
|
+
}
|
|
940
|
+
if (state.loginManager && result.vm?.siteDefinition?.url) {
|
|
941
|
+
state.loginManager.setSiteUrl(result.vm.siteDefinition.url);
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
checkMenuOverflow() {
|
|
945
|
+
const mainNavEl = this.mainNavEl;
|
|
946
|
+
if (!mainNavEl) {
|
|
947
|
+
return;
|
|
948
|
+
}
|
|
949
|
+
const firstMenuLevel = mainNavEl.querySelector('pn-mainnav-level');
|
|
950
|
+
if (!firstMenuLevel) {
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
953
|
+
const navContainer = firstMenuLevel.parentElement;
|
|
954
|
+
if (!navContainer) {
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
const availableWidth = navContainer.clientWidth;
|
|
958
|
+
const requiredWidth = firstMenuLevel.scrollWidth;
|
|
959
|
+
this.minimizeSearch = requiredWidth > availableWidth;
|
|
960
|
+
}
|
|
961
|
+
isUserLoggedIn() {
|
|
962
|
+
return this.loggedIn || this.userLoggedin;
|
|
963
|
+
}
|
|
964
|
+
adjustSiteSelectorUrl(href) {
|
|
965
|
+
if (!this.isUserLoggedIn()) {
|
|
966
|
+
return href;
|
|
967
|
+
}
|
|
968
|
+
const loginDomains = ['portal.postnord.com'];
|
|
969
|
+
const matchedHref = loginDomains.some(domain => href.includes(domain));
|
|
970
|
+
if (!matchedHref) {
|
|
971
|
+
return href;
|
|
972
|
+
}
|
|
973
|
+
if (state.loginManager) {
|
|
974
|
+
return state.loginManager.getLoginUrl(href);
|
|
975
|
+
}
|
|
976
|
+
return href;
|
|
977
|
+
}
|
|
978
|
+
onMenuToggleChange = (e) => {
|
|
979
|
+
const nextMode = e.detail;
|
|
980
|
+
if (nextMode === this.activeMenuMode) {
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
983
|
+
this.activeMenuMode = nextMode;
|
|
984
|
+
storeHeaderMenuMode(nextMode);
|
|
985
|
+
if (!this.navigateOnMenuToggle || !this.vm?.rawMenuItems.length) {
|
|
986
|
+
return;
|
|
987
|
+
}
|
|
988
|
+
const targetRoot = getToggleRootForMenuItems(this.vm.rawMenuItems, nextMode);
|
|
989
|
+
navigateToMenuItem(targetRoot);
|
|
990
|
+
};
|
|
991
|
+
getVisibleMenuGroups(vm) {
|
|
992
|
+
if (!vm.rawMenuItems.length) {
|
|
993
|
+
return {
|
|
994
|
+
primaryItems: vm.menuItems,
|
|
995
|
+
sharedItems: [],
|
|
996
|
+
};
|
|
997
|
+
}
|
|
998
|
+
const structure = extractToggleableMenuStructure(vm.rawMenuItems);
|
|
999
|
+
if (structure.modeRoots.length === 0) {
|
|
1000
|
+
return {
|
|
1001
|
+
primaryItems: vm.menuItems,
|
|
1002
|
+
sharedItems: [],
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1005
|
+
const groups = getVisibleMenuGroupsForMode(vm.rawMenuItems, this.activeMenuMode);
|
|
1006
|
+
return {
|
|
1007
|
+
primaryItems: prependHomeMenuItem(groups.primaryItems, this.i18n, vm.siteDefinition?.url ?? '/', this.hideHomeMenuItem),
|
|
1008
|
+
sharedItems: groups.sharedItems,
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
render() {
|
|
1012
|
+
const vm = this.vm;
|
|
1013
|
+
const i18n = this.i18n;
|
|
1014
|
+
const activeTheme = this.menuThemeList[this.activeMenuMode] ?? 'private';
|
|
1015
|
+
const logoUrl = this.logoUrl;
|
|
1016
|
+
const menuGroups = vm
|
|
1017
|
+
? this.getVisibleMenuGroups(vm)
|
|
1018
|
+
: { primaryItems: [], sharedItems: [] };
|
|
1019
|
+
return (h(Host, { key: '77b50a06702c9c8aee59392c7ebcf392d0e93ace', language: this.language ?? undefined, market: this.market ?? undefined, environment: this.environment ?? undefined, "data-status": this.status, "data-mode": this.activeMenuMode, "data-theme": activeTheme }, h("header", { key: 'f17a9126e62264bcbc596802394d8a0eb64809d7' }, vm && (h(Fragment, { key: 'e4d0c6cbb175bd545c37011e8a26040e293b5078' }, h("pn-marketweb-header-top-row", { key: 'f20e51e813cd52f09a223d860e04759f9d277183', vm: vm, i18n: i18n, language: this.language ?? undefined, siteid: this.siteid ?? undefined, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, hideSiteSelector: this.hideSiteSelector, hideLanguageSelector: this.hideLanguageSelector, hideSearch: this.hideSearch, hideLogin: this.hideLogin, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, spaMode: this.spaMode, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, menuToggleChangeHandler: this.onMenuToggleChange, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: 'c0025425b08f233bc8ef6c9db59c516b1c2c8d05', name: "header-top-left", slot: "header-top-left" }), h("slot", { key: '822354a2c86ca56f4a7e6926492a5202e82d0d2e', name: "header-top-right-start", slot: "header-top-right-start" }), h("slot", { key: '68364a475418c6bb6baba867f9b78bc2f7cd3c92', name: "toprightend", slot: "toprightend" })), h("slot", { key: 'e49bc7c21f51abb86b05e6a986163f6b8848c425', name: "siteheader-menu-top-button" }), h("pn-marketweb-header-main-row", { key: 'a56827628a3f649546881449479df0d7721da5b2', vm: vm, i18n: i18n, market: this.market ?? undefined, language: this.language ?? undefined, siteid: this.siteid ?? undefined, hideSearch: this.hideSearch, hideLogin: this.hideLogin, hideLanguageSelector: this.hideLanguageSelector, hideSiteSelector: this.hideSiteSelector, minimizeSearch: this.minimizeSearch, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, primaryItems: menuGroups.primaryItems, sharedItems: menuGroups.sharedItems, showMenuDivider: menuGroups.primaryItems.length > 0 && menuGroups.sharedItems.length > 0, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, spaMode: this.spaMode, menuToggleChangeHandler: this.onMenuToggleChange, mainNavRefHandler: (el) => {
|
|
1020
|
+
this.mainNavEl = el;
|
|
1021
|
+
}, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: '624d401daf67b3af80f3708d8321f541547f3225', name: "header-bottom-button", slot: "header-bottom-button" }), h("slot", { key: '5bf770f2882a239a3a45b511af696fc87bbf861d', name: "menu-footer-cta", slot: "menu-footer-cta" })))))));
|
|
1022
|
+
}
|
|
1023
|
+
static get watchers() { return {
|
|
1024
|
+
"language": ["onLanguageChange"],
|
|
1025
|
+
"market": ["onMarketChange"],
|
|
1026
|
+
"environment": ["onEnvironmentChange"],
|
|
1027
|
+
"endpoint": ["onEndpointChange"],
|
|
1028
|
+
"pageId": ["onPageIdChange"],
|
|
1029
|
+
"hideHomeMenuItem": ["onPresentationInputChange"],
|
|
1030
|
+
"siteDomainInUrls": ["onPresentationInputChange"],
|
|
1031
|
+
"autocompleteEndpoint": ["onPresentationInputChange"],
|
|
1032
|
+
"searchPlaceholder": ["onPresentationInputChange"]
|
|
1033
|
+
}; }
|
|
1034
|
+
};
|
|
1035
|
+
PnMarketwebHeader.style = PnMarketwebHeaderStyle0;
|
|
1036
|
+
|
|
1037
|
+
export { PnMarketwebHeader as pn_marketweb_header };
|
|
1038
|
+
|
|
1039
|
+
//# sourceMappingURL=pn-marketweb-header.entry.js.map
|