@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,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}&currentPage=${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