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