@postnord/pn-marketweb-components 4.2.4 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) 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/pn-versa-card.cjs.entry.js +1 -1
  63. package/cjs/pn-versa-card.cjs.entry.js.map +1 -1
  64. package/cjs/translations-9510f11c.js +198 -0
  65. package/cjs/translations-9510f11c.js.map +1 -0
  66. package/collection/collection-manifest.json +5 -0
  67. package/collection/components/cards/pn-versa-card/pn-versa-card.css +27 -2
  68. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.css +204 -0
  69. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.js +658 -0
  70. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.js.map +1 -0
  71. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.css +217 -0
  72. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.js +20 -0
  73. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.js.map +1 -0
  74. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.css +115 -0
  75. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.js +520 -0
  76. package/collection/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.js.map +1 -0
  77. package/collection/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.js +37 -0
  78. package/collection/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.js.map +1 -0
  79. package/collection/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.js +109 -0
  80. package/collection/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.js.map +1 -0
  81. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.css +225 -0
  82. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js +916 -0
  83. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js.map +1 -0
  84. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js +638 -0
  85. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js.map +1 -0
  86. package/collection/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.js +180 -0
  87. package/collection/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.js.map +1 -0
  88. package/collection/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.js +2 -0
  89. package/collection/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.js.map +1 -0
  90. package/collection/components/layout-components/pn-marketweb-header/utils/header-i18n.js +37 -0
  91. package/collection/components/layout-components/pn-marketweb-header/utils/header-i18n.js.map +1 -0
  92. package/collection/components/layout-components/pn-marketweb-header/utils/header-language.js +46 -0
  93. package/collection/components/layout-components/pn-marketweb-header/utils/header-language.js.map +1 -0
  94. package/collection/components/layout-components/pn-marketweb-header/utils/header-menu.js +36 -0
  95. package/collection/components/layout-components/pn-marketweb-header/utils/header-menu.js.map +1 -0
  96. package/collection/components/layout-components/pn-marketweb-header/utils/header-theme.js +48 -0
  97. package/collection/components/layout-components/pn-marketweb-header/utils/header-theme.js.map +1 -0
  98. package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.js +101 -0
  99. package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.js.map +1 -0
  100. package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.js +63 -0
  101. package/collection/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.js.map +1 -0
  102. package/collection/components/layout-components/pn-marketweb-header/utils/header-url.js +91 -0
  103. package/collection/components/layout-components/pn-marketweb-header/utils/header-url.js.map +1 -0
  104. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-button.js +1 -1
  105. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-linklist.css +34 -12
  106. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-mypage-button.js +1 -1
  107. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login-profileselection.css +36 -15
  108. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.css +27 -13
  109. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js +29 -4
  110. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js.map +1 -1
  111. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-types.js.map +1 -1
  112. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-unified-login.js +1 -1
  113. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.js +4 -4
  114. package/collection/components/media/pn-media-block/pn-media-block.js +1 -1
  115. package/collection/components/minor/pn-app-banner/pn-app-banner.js +1 -1
  116. package/collection/components/minor/pn-marketweb-icon/pn-marketweb-icon.js +1 -1
  117. package/collection/components/minor/pn-swan/pn-swan.js +1 -1
  118. package/collection/components/minor/pn-titletag/pn-titletag.js +1 -1
  119. package/collection/components/navigation/pn-language-selector/pn-language-selector-option.css +25 -12
  120. package/collection/components/navigation/pn-language-selector/pn-language-selector-option.js +1 -1
  121. package/collection/components/navigation/pn-language-selector/pn-language-selector.css +17 -5
  122. package/collection/components/navigation/pn-language-selector/pn-language-selector.js +22 -3
  123. package/collection/components/navigation/pn-language-selector/pn-language-selector.js.map +1 -1
  124. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.css +37 -17
  125. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.js +2 -2
  126. package/collection/components/navigation/pn-mainnav/pn-mainnav-link.css +81 -33
  127. package/collection/components/navigation/pn-mainnav/pn-mainnav-link.js +1 -1
  128. package/collection/components/navigation/pn-mainnav/pn-mainnav-list.css +12 -2
  129. package/collection/components/navigation/pn-mainnav/pn-mainnav-list.js +1 -1
  130. package/collection/components/navigation/pn-mainnav/pn-mainnav.css +35 -22
  131. package/collection/components/navigation/pn-mainnav/pn-mainnav.js +1 -1
  132. package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.css +80 -0
  133. package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.js +147 -0
  134. package/collection/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.js.map +1 -0
  135. package/collection/components/navigation/pn-sidenav/pn-sidenav-level.js +1 -1
  136. package/collection/components/navigation/pn-sidenav/pn-sidenav-link.js +1 -1
  137. package/collection/components/navigation/pn-sidenav/pn-sidenav-togglebutton.js +1 -1
  138. package/collection/components/navigation/pn-sidenav/pn-sidenav.js +1 -1
  139. package/collection/components/navigation/pn-site-footer/pn-site-footer-col.js +1 -1
  140. package/collection/components/navigation/pn-site-footer/pn-site-footer.js +1 -1
  141. package/collection/components/navigation/pn-site-selector/pn-site-selector-item.css +16 -12
  142. package/collection/components/navigation/pn-site-selector/pn-site-selector-item.js +1 -1
  143. package/collection/components/navigation/pn-site-selector/pn-site-selector.css +15 -0
  144. package/collection/components/navigation/pn-site-selector/pn-site-selector.js +22 -3
  145. package/collection/components/navigation/pn-site-selector/pn-site-selector.js.map +1 -1
  146. package/collection/components/profile/pn-customernumber-selector/pn-customernumber-selector-option.js +1 -1
  147. package/collection/components/profile/pn-customernumber-selector/pn-customernumber-selector.js +1 -1
  148. package/collection/components/profile/pn-profile-modal/pn-profile-modal-customernumber.js +1 -1
  149. package/collection/components/profile/pn-profile-modal/pn-profile-modal-profile.js +2 -2
  150. package/collection/components/profile/pn-profile-modal/pn-profile-modal-type.js +1 -1
  151. package/collection/components/profile/pn-profile-modal/pn-profile-modal.js +1 -1
  152. package/collection/components/profile/pn-profile-selector/pn-profile-selector-option.js +1 -1
  153. package/collection/components/profile/pn-profile-selector/pn-profile-selector.js +1 -1
  154. package/collection/components/utilities/pn-breakpoints/pn-breakpoints.js +1 -1
  155. package/collection/components/widgets/pn-chat/pn-chat-message/pn-chat-message.js +1 -1
  156. package/collection/components/widgets/pn-chat/pn-chat.js +2 -2
  157. package/collection/components/widgets/pn-find-price/pn-find-price-result.js +1 -1
  158. package/collection/components/widgets/pn-find-price/pn-find-price.js +2 -2
  159. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-result.js +1 -1
  160. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price.js +1 -1
  161. package/collection/components/widgets/pn-hero-block-international/pn-hero-block-international.js +1 -1
  162. package/collection/components/widgets/pn-level-up/pn-level-up-modal/pn-level-up-modal.js +1 -1
  163. package/collection/components/widgets/pn-level-up/pn-level-up.js +2 -2
  164. package/collection/components/widgets/pn-link-list/pn-link-list.js +1 -1
  165. package/collection/components/widgets/pn-marketweb-carousel/pn-marketweb-carousel.js +1 -1
  166. package/collection/components/widgets/pn-marketweb-table/pn-marketweb-table.js +1 -1
  167. package/collection/components/widgets/pn-pex-pricefinder/pn-pex-pricefinder.js +1 -1
  168. package/collection/components/widgets/pn-product-card/pn-product-card.js +1 -1
  169. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-result.js +1 -1
  170. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist.js +2 -2
  171. package/collection/components/widgets/pn-product-tile/pn-product-tile-info.js +1 -1
  172. package/collection/components/widgets/pn-product-tile/pn-product-tile.js +1 -1
  173. package/collection/components/widgets/pn-proxio-findprice/pn-proxio-findprice-result.js +1 -1
  174. package/collection/components/widgets/pn-proxio-findprice/pn-proxio-findprice.js +3 -3
  175. package/collection/components/widgets/pn-proxio-pricegroup/pn-proxio-pricegroup.js +1 -1
  176. package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard-description.js +1 -1
  177. package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard-information.js +1 -1
  178. package/collection/components/widgets/pn-proxio-productcard/pn-proxio-productcard.js +1 -1
  179. package/collection/components/widgets/pn-qr-code-generator/pn-qr-code-generator.js +1 -1
  180. package/collection/components/widgets/pn-usp-promoter/pn-usp-promoter.js +1 -1
  181. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.js +105 -0
  182. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.js.map +1 -0
  183. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.js +166 -0
  184. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.js.map +1 -0
  185. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.js +2 -0
  186. package/collection/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.js.map +1 -0
  187. package/components/pn-app-banner.js +1 -1
  188. package/components/pn-breakpoints.js +1 -1
  189. package/components/pn-chat-message2.js +1 -1
  190. package/components/pn-chat.js +2 -2
  191. package/components/pn-customernumber-selector-option.js +1 -1
  192. package/components/pn-customernumber-selector.js +1 -1
  193. package/components/pn-find-price-result2.js +1 -1
  194. package/components/pn-find-price.js +2 -2
  195. package/components/pn-find-service-and-price-result2.js +1 -1
  196. package/components/pn-find-service-and-price.js +1 -1
  197. package/components/pn-hero-block-international.js +1 -1
  198. package/components/pn-language-selector-option2.js +2 -2
  199. package/components/pn-language-selector-option2.js.map +1 -1
  200. package/components/pn-language-selector2.js +4 -2
  201. package/components/pn-language-selector2.js.map +1 -1
  202. package/components/pn-level-up-modal2.js +1 -1
  203. package/components/pn-level-up.js +2 -2
  204. package/components/pn-link-list.js +1 -1
  205. package/components/pn-mainnav-level2.js +3 -3
  206. package/components/pn-mainnav-level2.js.map +1 -1
  207. package/components/pn-mainnav-link2.js +2 -2
  208. package/components/pn-mainnav-link2.js.map +1 -1
  209. package/components/pn-mainnav-list2.js +2 -2
  210. package/components/pn-mainnav-list2.js.map +1 -1
  211. package/components/pn-mainnav2.js +2 -2
  212. package/components/pn-mainnav2.js.map +1 -1
  213. package/components/pn-marketweb-carousel2.js +1 -1
  214. package/components/pn-marketweb-header-main-row.d.ts +11 -0
  215. package/components/pn-marketweb-header-main-row.js +8 -0
  216. package/components/pn-marketweb-header-main-row.js.map +1 -0
  217. package/components/pn-marketweb-header-main-row2.js +281 -0
  218. package/components/pn-marketweb-header-main-row2.js.map +1 -0
  219. package/components/pn-marketweb-header-shared.js +192 -0
  220. package/components/pn-marketweb-header-shared.js.map +1 -0
  221. package/components/pn-marketweb-header-skeleton-loader.d.ts +11 -0
  222. package/components/pn-marketweb-header-skeleton-loader.js +37 -0
  223. package/components/pn-marketweb-header-skeleton-loader.js.map +1 -0
  224. package/components/pn-marketweb-header-toggle.d.ts +11 -0
  225. package/components/pn-marketweb-header-toggle.js +8 -0
  226. package/components/pn-marketweb-header-toggle.js.map +1 -0
  227. package/components/pn-marketweb-header-toggle2.js +61 -0
  228. package/components/pn-marketweb-header-toggle2.js.map +1 -0
  229. package/components/pn-marketweb-header-top-row.d.ts +11 -0
  230. package/components/pn-marketweb-header-top-row.js +8 -0
  231. package/components/pn-marketweb-header-top-row.js.map +1 -0
  232. package/components/pn-marketweb-header-top-row2.js +238 -0
  233. package/components/pn-marketweb-header-top-row2.js.map +1 -0
  234. package/components/pn-marketweb-header.d.ts +11 -0
  235. package/components/pn-marketweb-header.js +1206 -0
  236. package/components/pn-marketweb-header.js.map +1 -0
  237. package/components/pn-marketweb-icon.js +1 -1
  238. package/components/pn-marketweb-siteheader-login-button2.js +1 -1
  239. package/components/pn-marketweb-siteheader-login-linklist2.js +1 -1
  240. package/components/pn-marketweb-siteheader-login-linklist2.js.map +1 -1
  241. package/components/pn-marketweb-siteheader-login-mypage-button.js +1 -1
  242. package/components/pn-marketweb-siteheader-login-profileselection2.js +1 -1
  243. package/components/pn-marketweb-siteheader-login-profileselection2.js.map +1 -1
  244. package/components/pn-marketweb-siteheader-login2.js +4 -2
  245. package/components/pn-marketweb-siteheader-login2.js.map +1 -1
  246. package/components/pn-marketweb-siteheader-unified-login2.js +1 -1
  247. package/components/pn-marketweb-siteheader.js +5 -197
  248. package/components/pn-marketweb-siteheader.js.map +1 -1
  249. package/components/pn-marketweb-table.js +1 -1
  250. package/components/pn-media-block.js +1 -1
  251. package/components/pn-pex-pricefinder.js +1 -1
  252. package/components/pn-product-card2.js +1 -1
  253. package/components/pn-product-pricelist-result.js +1 -1
  254. package/components/pn-product-pricelist.js +2 -2
  255. package/components/pn-product-tile-info2.js +1 -1
  256. package/components/pn-product-tile.js +1 -1
  257. package/components/pn-profile-modal-customernumber.js +1 -1
  258. package/components/pn-profile-modal-profile.js +2 -2
  259. package/components/pn-profile-modal-type.js +1 -1
  260. package/components/pn-profile-modal.js +1 -1
  261. package/components/pn-profile-selector-option.js +1 -1
  262. package/components/pn-profile-selector.js +1 -1
  263. package/components/pn-proxio-findprice-result2.js +2 -2
  264. package/components/pn-proxio-findprice.js +3 -3
  265. package/components/pn-proxio-pricegroup.js +2 -2
  266. package/components/pn-proxio-productcard-description2.js +1 -1
  267. package/components/pn-proxio-productcard-information2.js +1 -1
  268. package/components/pn-proxio-productcard2.js +1 -1
  269. package/components/pn-qr-code-generator2.js +1 -1
  270. package/components/pn-sidenav-level.js +1 -1
  271. package/components/pn-sidenav-link.js +1 -1
  272. package/components/pn-sidenav-togglebutton.js +1 -1
  273. package/components/pn-sidenav.js +1 -1
  274. package/components/pn-site-footer-col2.js +1 -1
  275. package/components/pn-site-footer2.js +1 -1
  276. package/components/pn-site-selector-item2.js +2 -2
  277. package/components/pn-site-selector-item2.js.map +1 -1
  278. package/components/pn-site-selector2.js +4 -2
  279. package/components/pn-site-selector2.js.map +1 -1
  280. package/components/pn-swan2.js +1 -1
  281. package/components/pn-titletag2.js +1 -1
  282. package/components/pn-usp-promoter.js +1 -1
  283. package/components/pn-versa-card.js +1 -1
  284. package/components/pn-versa-card.js.map +1 -1
  285. package/components/translations.js +189 -14
  286. package/components/translations.js.map +1 -1
  287. package/components/translations2.js +21 -0
  288. package/components/translations2.js.map +1 -0
  289. package/esm/header-theme-d09b64c7.js +234 -0
  290. package/esm/header-theme-d09b64c7.js.map +1 -0
  291. package/esm/index-c0a4d8bd.js +24 -16
  292. package/esm/loader.js +1 -1
  293. package/esm/pn-app-banner.entry.js +1 -1
  294. package/esm/pn-breakpoints.entry.js +1 -1
  295. package/esm/pn-chat-message_2.entry.js +2 -2
  296. package/esm/pn-chat.entry.js +2 -2
  297. package/esm/pn-customernumber-selector-option.entry.js +1 -1
  298. package/esm/pn-customernumber-selector.entry.js +1 -1
  299. package/esm/pn-find-price-result.entry.js +1 -1
  300. package/esm/pn-find-price.entry.js +2 -2
  301. package/esm/pn-find-service-and-price-result.entry.js +1 -1
  302. package/esm/pn-find-service-and-price.entry.js +1 -1
  303. package/esm/pn-hero-block-international.entry.js +1 -1
  304. package/esm/{pn-language-selector_9.entry.js → pn-language-selector_13.entry.js} +381 -22
  305. package/esm/pn-language-selector_13.entry.js.map +1 -0
  306. package/esm/pn-level-up-modal.entry.js +1 -1
  307. package/esm/pn-level-up.entry.js +2 -2
  308. package/esm/pn-link-list.entry.js +1 -1
  309. package/esm/pn-market-web-components.js +1 -1
  310. package/esm/pn-marketweb-header-main-row_2.entry.js +217 -0
  311. package/esm/pn-marketweb-header-main-row_2.entry.js.map +1 -0
  312. package/esm/pn-marketweb-header-skeleton-loader.entry.js +19 -0
  313. package/esm/pn-marketweb-header-skeleton-loader.entry.js.map +1 -0
  314. package/esm/pn-marketweb-header-toggle.entry.js +42 -0
  315. package/esm/pn-marketweb-header-toggle.entry.js.map +1 -0
  316. package/esm/pn-marketweb-header.entry.js +1039 -0
  317. package/esm/pn-marketweb-header.entry.js.map +1 -0
  318. package/esm/pn-marketweb-icon.entry.js +1 -1
  319. package/esm/{pn-marketweb-siteheader-login-linklist.entry.js → pn-marketweb-siteheader-login-button_2.entry.js} +44 -3
  320. package/esm/pn-marketweb-siteheader-login-button_2.entry.js.map +1 -0
  321. package/esm/pn-marketweb-siteheader-login-mypage-button.entry.js +1 -1
  322. package/esm/pn-marketweb-siteheader.entry.js +5 -197
  323. package/esm/pn-marketweb-siteheader.entry.js.map +1 -1
  324. package/esm/pn-marketweb-table.entry.js +1 -1
  325. package/esm/pn-media-block.entry.js +1 -1
  326. package/esm/pn-pex-pricefinder.entry.js +1 -1
  327. package/esm/pn-product-card_3.entry.js +1 -1
  328. package/esm/pn-product-pricelist-result.entry.js +1 -1
  329. package/esm/pn-product-pricelist.entry.js +2 -2
  330. package/esm/pn-product-tile-info_2.entry.js +1 -1
  331. package/esm/pn-product-tile.entry.js +1 -1
  332. package/esm/pn-profile-modal-customernumber.entry.js +1 -1
  333. package/esm/pn-profile-modal-profile.entry.js +2 -2
  334. package/esm/pn-profile-modal-type.entry.js +1 -1
  335. package/esm/pn-profile-modal.entry.js +1 -1
  336. package/esm/pn-profile-selector-option.entry.js +1 -1
  337. package/esm/pn-profile-selector.entry.js +1 -1
  338. package/esm/pn-proxio-findprice-result.entry.js +1 -1
  339. package/esm/pn-proxio-findprice.entry.js +3 -3
  340. package/esm/pn-proxio-pricegroup.entry.js +1 -1
  341. package/esm/pn-proxio-productcard_4.entry.js +3 -3
  342. package/esm/pn-qr-code-generator.entry.js +1 -1
  343. package/esm/pn-sidenav-level.entry.js +1 -1
  344. package/esm/pn-sidenav-link.entry.js +1 -1
  345. package/esm/pn-sidenav-togglebutton.entry.js +1 -1
  346. package/esm/pn-sidenav.entry.js +1 -1
  347. package/esm/pn-site-footer_3.entry.js +3 -3
  348. package/esm/pn-titletag.entry.js +1 -1
  349. package/esm/pn-usp-promoter.entry.js +1 -1
  350. package/esm/pn-versa-card.entry.js +1 -1
  351. package/esm/pn-versa-card.entry.js.map +1 -1
  352. package/esm/translations-d2f5804e.js +196 -0
  353. package/esm/translations-d2f5804e.js.map +1 -0
  354. package/package.json +1 -1
  355. package/pn-market-web-components/{p-4a164ef8.entry.js → p-03728b0b.entry.js} +2 -2
  356. package/pn-market-web-components/p-04f51418.js +2 -0
  357. package/pn-market-web-components/p-04f51418.js.map +1 -0
  358. package/pn-market-web-components/{p-e43a36e0.entry.js → p-067c1c2f.entry.js} +2 -2
  359. package/pn-market-web-components/p-16570ed2.entry.js +2 -0
  360. package/pn-market-web-components/p-16570ed2.entry.js.map +1 -0
  361. package/pn-market-web-components/{p-2616cdc1.entry.js → p-191c8cfc.entry.js} +2 -2
  362. package/pn-market-web-components/{p-ca003c1f.entry.js → p-1a91c313.entry.js} +2 -2
  363. package/pn-market-web-components/{p-ab1e3dc2.entry.js → p-1f8304be.entry.js} +2 -2
  364. package/pn-market-web-components/{p-a3f601cb.entry.js → p-24ffac0a.entry.js} +2 -2
  365. package/pn-market-web-components/p-3239c36b.entry.js +2 -0
  366. package/pn-market-web-components/p-3239c36b.entry.js.map +1 -0
  367. package/pn-market-web-components/{p-12cafd55.entry.js → p-3aa74418.entry.js} +2 -2
  368. package/pn-market-web-components/p-3d27faee.entry.js +2 -0
  369. package/pn-market-web-components/{p-9d0ca27b.entry.js.map → p-3d27faee.entry.js.map} +1 -1
  370. package/pn-market-web-components/p-3e25f431.entry.js +2 -0
  371. package/pn-market-web-components/p-3e25f431.entry.js.map +1 -0
  372. package/pn-market-web-components/{p-64f6691d.entry.js → p-42da7c5f.entry.js} +2 -2
  373. package/pn-market-web-components/{p-f0d423d0.entry.js → p-43748ca2.entry.js} +2 -2
  374. package/pn-market-web-components/{p-1c644b91.entry.js → p-466958a8.entry.js} +2 -2
  375. package/pn-market-web-components/{p-150da889.entry.js → p-4ab53d5d.entry.js} +2 -2
  376. package/pn-market-web-components/{p-118fe47d.entry.js → p-4d595345.entry.js} +2 -2
  377. package/pn-market-web-components/{p-0f6f715b.entry.js → p-4dac1980.entry.js} +2 -2
  378. package/pn-market-web-components/{p-a13f1f73.entry.js → p-4fcce83d.entry.js} +2 -2
  379. package/pn-market-web-components/{p-89fbca3b.entry.js → p-5a51d0b0.entry.js} +2 -2
  380. package/pn-market-web-components/{p-f4d2d0d3.entry.js → p-61346425.entry.js} +2 -2
  381. package/pn-market-web-components/{p-6e693269.entry.js → p-6b557670.entry.js} +2 -2
  382. package/pn-market-web-components/{p-e6d6a752.entry.js → p-70a71854.entry.js} +2 -2
  383. package/pn-market-web-components/p-75311d67.js +2 -0
  384. package/pn-market-web-components/p-75311d67.js.map +1 -0
  385. package/pn-market-web-components/p-756d8d95.entry.js +2 -0
  386. package/pn-market-web-components/p-756d8d95.entry.js.map +1 -0
  387. package/pn-market-web-components/{p-c0315c45.entry.js → p-76fb0c21.entry.js} +2 -2
  388. package/pn-market-web-components/{p-b2b2bae0.entry.js → p-81210644.entry.js} +2 -2
  389. package/pn-market-web-components/p-81e4d75b.entry.js +2 -0
  390. package/pn-market-web-components/p-81e4d75b.entry.js.map +1 -0
  391. package/pn-market-web-components/{p-d0f27361.entry.js → p-8382794b.entry.js} +2 -2
  392. package/pn-market-web-components/{p-8f25176b.entry.js → p-8519e39e.entry.js} +2 -2
  393. package/pn-market-web-components/p-8c26c1f2.entry.js +2 -0
  394. package/pn-market-web-components/p-8c26c1f2.entry.js.map +1 -0
  395. package/pn-market-web-components/{p-461c8792.entry.js → p-92b6477c.entry.js} +2 -2
  396. package/pn-market-web-components/{p-0d4d9d90.entry.js → p-9eab8192.entry.js} +2 -2
  397. package/pn-market-web-components/{p-40e632cc.entry.js → p-a3beee11.entry.js} +2 -2
  398. package/pn-market-web-components/{p-01fbf1ce.entry.js → p-a6935dc2.entry.js} +2 -2
  399. package/pn-market-web-components/{p-af646091.entry.js → p-a6dd3e4f.entry.js} +2 -2
  400. package/pn-market-web-components/{p-6d77e747.entry.js → p-af89c95a.entry.js} +2 -2
  401. package/pn-market-web-components/p-b318ff19.entry.js +2 -0
  402. package/pn-market-web-components/{p-0700cb4c.entry.js.map → p-b318ff19.entry.js.map} +1 -1
  403. package/pn-market-web-components/{p-c89f3d6b.entry.js → p-ba14b0ef.entry.js} +2 -2
  404. package/pn-market-web-components/{p-c7965104.entry.js → p-ba680948.entry.js} +2 -2
  405. package/pn-market-web-components/{p-11c6e458.entry.js → p-ba75bfdb.entry.js} +2 -2
  406. package/pn-market-web-components/{p-4149e715.entry.js → p-c186ec41.entry.js} +2 -2
  407. package/pn-market-web-components/{p-66c0c8dc.entry.js → p-c38707f9.entry.js} +2 -2
  408. package/pn-market-web-components/{p-671a8129.entry.js → p-c89cdd5a.entry.js} +2 -2
  409. package/pn-market-web-components/{p-4d848e18.entry.js → p-e8cd1608.entry.js} +2 -2
  410. package/pn-market-web-components/{p-4517a3d4.entry.js → p-ef090656.entry.js} +2 -2
  411. package/pn-market-web-components/p-f23ed5d2.entry.js +2 -0
  412. package/pn-market-web-components/p-f23ed5d2.entry.js.map +1 -0
  413. package/pn-market-web-components/{p-bd8ec517.entry.js → p-f3b4c13d.entry.js} +2 -2
  414. package/pn-market-web-components/{p-ff38b9a5.entry.js → p-f710445f.entry.js} +2 -2
  415. package/pn-market-web-components/{p-2e585ed5.entry.js → p-fcefe4a4.entry.js} +2 -2
  416. package/pn-market-web-components/p-fded22b7.entry.js +2 -0
  417. package/pn-market-web-components/p-fded22b7.entry.js.map +1 -0
  418. package/pn-market-web-components/{p-32bd2ff8.entry.js → p-ff6118f8.entry.js} +2 -2
  419. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  420. package/pn-market-web-components/pn-market-web-components.esm.js.map +1 -1
  421. package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-main-row.d.ts +40 -0
  422. package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-skeleton-loader.d.ts +3 -0
  423. package/types/components/layout-components/pn-marketweb-header/components/pn-marketweb-header-top-row.d.ts +30 -0
  424. package/types/components/layout-components/pn-marketweb-header/components/shared/pn-marketweb-header-shared.d.ts +48 -0
  425. package/types/components/layout-components/pn-marketweb-header/mapper/pn-marketweb-header.mapper.d.ts +34 -0
  426. package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.d.ts +121 -0
  427. package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.d.ts +99 -0
  428. package/types/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.d.ts +108 -0
  429. package/types/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.d.ts +103 -0
  430. package/types/components/layout-components/pn-marketweb-header/utils/header-i18n.d.ts +16 -0
  431. package/types/components/layout-components/pn-marketweb-header/utils/header-language.d.ts +20 -0
  432. package/types/components/layout-components/pn-marketweb-header/utils/header-menu.d.ts +16 -0
  433. package/types/components/layout-components/pn-marketweb-header/utils/header-theme.d.ts +6 -0
  434. package/types/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.d.ts +49 -0
  435. package/types/components/layout-components/pn-marketweb-header/utils/header-toggle-menu.storage.d.ts +25 -0
  436. package/types/components/layout-components/pn-marketweb-header/utils/header-url.d.ts +41 -0
  437. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.d.ts +2 -0
  438. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-types.d.ts +1 -0
  439. package/types/components/navigation/pn-language-selector/pn-language-selector.d.ts +1 -0
  440. package/types/components/navigation/pn-marketweb-header-toggle/pn-marketweb-header-toggle.d.ts +25 -0
  441. package/types/components/navigation/pn-site-selector/pn-site-selector.d.ts +1 -0
  442. package/types/components/widgets/pn-proxio-pricegroup/pn-proxio-pricegroup.d.ts +1 -1
  443. package/types/components.d.ts +532 -2
  444. package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.constants.d.ts +7 -0
  445. package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.service.d.ts +24 -0
  446. package/types/services/pn-refined-marketweb-context/pn-refined-marketweb-context.types.d.ts +16 -0
  447. package/umd/pn-marketweb-init.js +1 -1
  448. package/umd/pn-marketweb-salesforce.js +1 -1
  449. package/vscode-data.json +421 -0
  450. package/cjs/pn-language-selector_9.cjs.entry.js +0 -1156
  451. package/cjs/pn-language-selector_9.cjs.entry.js.map +0 -1
  452. package/cjs/pn-mainnav-link.cjs.entry.js +0 -45
  453. package/cjs/pn-mainnav-link.cjs.entry.js.map +0 -1
  454. package/cjs/pn-mainnav-store-13aaa243.js +0 -22
  455. package/cjs/pn-mainnav-store-13aaa243.js.map +0 -1
  456. package/cjs/pn-marketweb-siteheader-login-button_4.cjs.entry.js +0 -366
  457. package/cjs/pn-marketweb-siteheader-login-button_4.cjs.entry.js.map +0 -1
  458. package/cjs/pn-marketweb-siteheader-login-linklist.cjs.entry.js.map +0 -1
  459. package/esm/pn-language-selector_9.entry.js.map +0 -1
  460. package/esm/pn-mainnav-link.entry.js +0 -41
  461. package/esm/pn-mainnav-link.entry.js.map +0 -1
  462. package/esm/pn-mainnav-store-c98d831e.js +0 -19
  463. package/esm/pn-mainnav-store-c98d831e.js.map +0 -1
  464. package/esm/pn-marketweb-siteheader-login-button_4.entry.js +0 -359
  465. package/esm/pn-marketweb-siteheader-login-button_4.entry.js.map +0 -1
  466. package/esm/pn-marketweb-siteheader-login-linklist.entry.js.map +0 -1
  467. package/pn-market-web-components/p-022780ab.entry.js +0 -2
  468. package/pn-market-web-components/p-022780ab.entry.js.map +0 -1
  469. package/pn-market-web-components/p-0700cb4c.entry.js +0 -2
  470. package/pn-market-web-components/p-3c69298b.entry.js +0 -2
  471. package/pn-market-web-components/p-3c69298b.entry.js.map +0 -1
  472. package/pn-market-web-components/p-4bc6d49f.entry.js +0 -2
  473. package/pn-market-web-components/p-4bc6d49f.entry.js.map +0 -1
  474. package/pn-market-web-components/p-4c8bda8f.entry.js +0 -2
  475. package/pn-market-web-components/p-4c8bda8f.entry.js.map +0 -1
  476. package/pn-market-web-components/p-5090bb1d.entry.js +0 -2
  477. package/pn-market-web-components/p-5090bb1d.entry.js.map +0 -1
  478. package/pn-market-web-components/p-9d0ca27b.entry.js +0 -2
  479. package/pn-market-web-components/p-a30de538.entry.js +0 -2
  480. package/pn-market-web-components/p-a30de538.entry.js.map +0 -1
  481. package/pn-market-web-components/p-e3b2486a.js +0 -2
  482. package/pn-market-web-components/p-e3b2486a.js.map +0 -1
  483. /package/pn-market-web-components/{p-4a164ef8.entry.js.map → p-03728b0b.entry.js.map} +0 -0
  484. /package/pn-market-web-components/{p-e43a36e0.entry.js.map → p-067c1c2f.entry.js.map} +0 -0
  485. /package/pn-market-web-components/{p-2616cdc1.entry.js.map → p-191c8cfc.entry.js.map} +0 -0
  486. /package/pn-market-web-components/{p-ca003c1f.entry.js.map → p-1a91c313.entry.js.map} +0 -0
  487. /package/pn-market-web-components/{p-ab1e3dc2.entry.js.map → p-1f8304be.entry.js.map} +0 -0
  488. /package/pn-market-web-components/{p-a3f601cb.entry.js.map → p-24ffac0a.entry.js.map} +0 -0
  489. /package/pn-market-web-components/{p-12cafd55.entry.js.map → p-3aa74418.entry.js.map} +0 -0
  490. /package/pn-market-web-components/{p-64f6691d.entry.js.map → p-42da7c5f.entry.js.map} +0 -0
  491. /package/pn-market-web-components/{p-f0d423d0.entry.js.map → p-43748ca2.entry.js.map} +0 -0
  492. /package/pn-market-web-components/{p-1c644b91.entry.js.map → p-466958a8.entry.js.map} +0 -0
  493. /package/pn-market-web-components/{p-150da889.entry.js.map → p-4ab53d5d.entry.js.map} +0 -0
  494. /package/pn-market-web-components/{p-118fe47d.entry.js.map → p-4d595345.entry.js.map} +0 -0
  495. /package/pn-market-web-components/{p-0f6f715b.entry.js.map → p-4dac1980.entry.js.map} +0 -0
  496. /package/pn-market-web-components/{p-a13f1f73.entry.js.map → p-4fcce83d.entry.js.map} +0 -0
  497. /package/pn-market-web-components/{p-89fbca3b.entry.js.map → p-5a51d0b0.entry.js.map} +0 -0
  498. /package/pn-market-web-components/{p-f4d2d0d3.entry.js.map → p-61346425.entry.js.map} +0 -0
  499. /package/pn-market-web-components/{p-6e693269.entry.js.map → p-6b557670.entry.js.map} +0 -0
  500. /package/pn-market-web-components/{p-e6d6a752.entry.js.map → p-70a71854.entry.js.map} +0 -0
  501. /package/pn-market-web-components/{p-c0315c45.entry.js.map → p-76fb0c21.entry.js.map} +0 -0
  502. /package/pn-market-web-components/{p-b2b2bae0.entry.js.map → p-81210644.entry.js.map} +0 -0
  503. /package/pn-market-web-components/{p-d0f27361.entry.js.map → p-8382794b.entry.js.map} +0 -0
  504. /package/pn-market-web-components/{p-8f25176b.entry.js.map → p-8519e39e.entry.js.map} +0 -0
  505. /package/pn-market-web-components/{p-461c8792.entry.js.map → p-92b6477c.entry.js.map} +0 -0
  506. /package/pn-market-web-components/{p-0d4d9d90.entry.js.map → p-9eab8192.entry.js.map} +0 -0
  507. /package/pn-market-web-components/{p-40e632cc.entry.js.map → p-a3beee11.entry.js.map} +0 -0
  508. /package/pn-market-web-components/{p-01fbf1ce.entry.js.map → p-a6935dc2.entry.js.map} +0 -0
  509. /package/pn-market-web-components/{p-af646091.entry.js.map → p-a6dd3e4f.entry.js.map} +0 -0
  510. /package/pn-market-web-components/{p-6d77e747.entry.js.map → p-af89c95a.entry.js.map} +0 -0
  511. /package/pn-market-web-components/{p-c89f3d6b.entry.js.map → p-ba14b0ef.entry.js.map} +0 -0
  512. /package/pn-market-web-components/{p-c7965104.entry.js.map → p-ba680948.entry.js.map} +0 -0
  513. /package/pn-market-web-components/{p-11c6e458.entry.js.map → p-ba75bfdb.entry.js.map} +0 -0
  514. /package/pn-market-web-components/{p-4149e715.entry.js.map → p-c186ec41.entry.js.map} +0 -0
  515. /package/pn-market-web-components/{p-66c0c8dc.entry.js.map → p-c38707f9.entry.js.map} +0 -0
  516. /package/pn-market-web-components/{p-671a8129.entry.js.map → p-c89cdd5a.entry.js.map} +0 -0
  517. /package/pn-market-web-components/{p-4d848e18.entry.js.map → p-e8cd1608.entry.js.map} +0 -0
  518. /package/pn-market-web-components/{p-4517a3d4.entry.js.map → p-ef090656.entry.js.map} +0 -0
  519. /package/pn-market-web-components/{p-bd8ec517.entry.js.map → p-f3b4c13d.entry.js.map} +0 -0
  520. /package/pn-market-web-components/{p-ff38b9a5.entry.js.map → p-f710445f.entry.js.map} +0 -0
  521. /package/pn-market-web-components/{p-2e585ed5.entry.js.map → p-fcefe4a4.entry.js.map} +0 -0
  522. /package/pn-market-web-components/{p-32bd2ff8.entry.js.map → p-ff6118f8.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pn-marketweb-header.stories.js","sourceRoot":"","sources":["../../../../src/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import { shop } from 'pn-design-assets/pn-assets/icons';\n\nimport type {\n Meta,\n StoryObj,\n} from '@storybook/web-components';\n\nimport type {\n HeaderApiEnvelope,\n HeaderMenuMode,\n} from './types/pn-marketweb-header.types';\n\n/**\n * Story args for pn-marketweb-header.\n *\n * This story:\n * - renders the real pn-marketweb-header\n * - can optionally intercept its backend fetch call\n * - returns a mocked backend envelope when mocking is enabled\n * - lets the actual header component render and control its own menu switcher\n */\ninterface StoryArgs {\n market: string;\n language: string;\n initialActiveMenuMode: HeaderMenuMode;\n menuThemes?: string;\n environment: 'production' | 'preproduction' | 'integration' | 'localhost';\n endpoint: string;\n pageId: string;\n siteid: string;\n userToken: string;\n userFullname: string;\n userLoggedin: boolean;\n hideSiteSelector: boolean;\n hideHomeMenuItem: boolean;\n hideLanguageSelector: boolean;\n hideSearch: boolean;\n hideLogin: boolean;\n showProfileSelection: boolean;\n showUnifiedLogin: boolean;\n siteDomainInUrls: boolean;\n autocompleteEndpoint: string;\n sessionForward: boolean;\n cache: boolean;\n searchPlaceholder: string;\n spaMode: boolean;\n checkUserLoggedInStateInterval: number;\n useMarketwebLogin: boolean;\n navigateOnMenuToggle: boolean;\n\n /**\n * Mocked backend response envelope.\n *\n * This should match the real backend response shape.\n */\n mockedResponse: HeaderApiEnvelope;\n\n /**\n * When true, Storybook intercepts the header fetch and returns mockedResponse.\n * When false, the real endpoint is used.\n */\n useMockedResponse: boolean;\n}\n\nconst ORIGINAL_FETCH = window.fetch.bind(window);\n\n/**\n * Create promoted menuitems for testing purposes\n */\nfunction createPromotedMenuItem(\n linkText: string,\n href: string,\n pageLink = href,\n openInNewWindow = false,\n) {\n return {\n linkText,\n pageLink,\n href,\n openInNewWindow,\n };\n}\n\n\n/**\n * Reusable menu item factory to keep stories compact.\n */\nfunction createMenuItem(\n name: string,\n href: string,\n id: string,\n children: any[] = [],\n level = 0,\n overrides: Record<string, any> = {},\n) {\n return {\n name,\n href,\n id,\n selected: false,\n open: false,\n children,\n navigationHeading: '',\n promotedMenuItemsHeader: '',\n promotedMenuItems: [],\n hasChildren: children.length > 0,\n linkTarget: '',\n trackingId: `${name.toLowerCase().replace(/\\s+/g, '-')}${id}`,\n level,\n isMegaMenuParent: level === 0,\n ...overrides,\n };\n}\n\nfunction createLeaf(\n name: string,\n href: string,\n id: string,\n level = 1,\n) {\n return createMenuItem(name, href, id, [], level, {\n isMegaMenuParent: false,\n });\n}\n\n/**\n * Creates a mocked backend envelope with the supplied top-level menu structure.\n *\n * Structure semantics used by the header:\n * - all items except the last = switchable root menus\n * - last item = shared/common root\n *\n * This mock is intentionally kept trimmed to match the current frontend\n * interfaces, while still preserving the real backend envelope shape.\n */\nfunction createMockedResponse(menuItems: any[]): HeaderApiEnvelope {\n return {\n value: {\n sitedefinition: {\n name: 'Postnord Sweden',\n url: 'https://localhost:51547/',\n },\n search: {\n formActionUrl: 'https://localhost:51547/sok/',\n AutocompleteEndpoint: 'https://localhost:51547/api/search/autocomplete',\n },\n languageSelectorViewModel: {\n currentLanguageNativeName: 'Svenska',\n languages: [\n {\n twoLetterISOLanguageName: 'en',\n nativeName: 'English',\n isCurrent: false,\n },\n {\n twoLetterISOLanguageName: 'sv',\n nativeName: 'Svenska',\n isCurrent: true,\n },\n {\n twoLetterISOLanguageName: 'da',\n nativeName: 'Dansk',\n isCurrent: false,\n },\n ],\n },\n siteSelectorViewModel: {\n siteSelectorButtonText: 'postnord.se',\n siteSelectorTitle: 'PostNord',\n currentSiteTitle: 'postnord.se',\n currentSiteDescription: 'Tjänster och verktyg för att skicka och ta emot din post',\n siteSelections: [\n {\n linkText: 'Portal',\n linkDescription: 'Hantera dina försändelser',\n href: 'https://portal.postnord.com/',\n pageLink: '/portal/',\n openInNewWindow: false,\n },\n {\n linkText: 'postnord.com',\n linkDescription: 'Information om PostNord Koncernen',\n href: 'https://com-inte.postnord.com/sv/',\n pageLink: 'https://com-inte.postnord.com/sv/',\n openInNewWindow: true,\n },\n ],\n },\n loginViewModel: {\n loginMenuLinks: [\n {\n linkText: 'Logga in',\n href: 'https://portal.postnord.com/login?language=sv',\n pageLink: '/login/',\n openInNewWindow: false,\n primaryLinkApperance: true,\n isLogoutLink: false,\n linkType: 'unified',\n },\n ],\n legacyLoginLinks: [\n {\n linkText: 'Logga in',\n href: 'https://portal.postnord.com/login?language=sv',\n pageLink: '/login/',\n openInNewWindow: false,\n primaryLinkApperance: true,\n isLogoutLink: false,\n },\n ],\n loggedInLinks: [\n {\n linkText: 'Logga ut',\n href: 'http://window.location.href/?logout',\n pageLink: '/logout',\n openInNewWindow: false,\n primaryLinkApperance: false,\n isLogoutLink: true,\n },\n ],\n overrideLoginMenu: false,\n loginMenuLinkText: 'Logga in',\n countryCode: 'SE',\n locale: 'sv',\n loginUrl: 'https://portal.postnord.com/login?language=sv',\n registerUrl: 'https://portal.postnord.com/createaccount?market=SE',\n loggedInButtonText: 'My PostNord',\n loginTitle: 'Logga in direkt på:',\n loginLinkText: 'Logga in',\n createLoginLinkText: 'Skapa nytt konto',\n loginInfo:\n '<p>Testing the login <a href=\"/link/0e1d8517b7344986b68152a9a0544460.aspx\">recommendation</a></p>',\n },\n mainMenu: {\n menuItems,\n },\n },\n formatters: [],\n contentTypes: [],\n declaredType: null,\n statusCode: 200,\n };\n}\n\n/**\n * Default structure:\n * - 2 switchable roots\n * - 1 shared/common root\n */\nconst DEFAULT_MOCKED_RESPONSE = createMockedResponse([\n createMenuItem('Private', '/private/', 'root-private', [\n createLeaf('Skicka', '/private/skicka/', 'private-send', 1),\n createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),\n ]),\n createMenuItem('Business', '/business/', 'root-business', [\n createLeaf('Boka frakt', '/business/boka-frakt/', 'business-book', 1),\n createLeaf('Spåra', '/business/spåra/', 'business-track', 1),\n ]),\n createMenuItem('Shared', '/', 'root-shared', [\n createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),\n createLeaf('Handla online', '/handla-online/', 'shared-shop', 1),\n ], 0, {\n isMegaMenuParent: false,\n }),\n]);\n\n/**\n * 3 switchable roots + shared.\n */\nconst THREE_MODES_MOCKED_RESPONSE = createMockedResponse([\n createMenuItem('Private', '/private/', 'root-private', [\n createLeaf('Skicka', '/private/skicka/', 'private-send', 1),\n createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),\n ]),\n createMenuItem('Business', '/business/', 'root-business', [\n createLeaf('Boka frakt', '/business/boka-frakt/', 'business-book', 1),\n createLeaf('Portal', '/business/portal/', 'business-portal', 1),\n ]),\n createMenuItem('Partners', '/partners/', 'root-partners', [\n createLeaf('Integrationer', '/partners/integrationer/', 'partners-integrations', 1),\n createLeaf('API-dokumentation', '/partners/api/', 'partners-api', 1),\n ]),\n createMenuItem('Shared', '/', 'root-shared', [\n createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),\n createLeaf('Om oss', '/om-oss/', 'shared-about', 1),\n ], 0, {\n isMegaMenuParent: false,\n }),\n]);\n\n/**\n * One switchable root + shared.\n * Should not render a switcher because there is only one mode root.\n */\nconst ONE_MODE_MOCKED_RESPONSE = createMockedResponse([\n createMenuItem('Private', '/private/', 'root-private', [\n createLeaf('Skicka', '/private/skicka/', 'private-send', 1),\n createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),\n ]),\n createMenuItem('Shared', '/', 'root-shared', [\n createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),\n createLeaf('Handla online', '/handla-online/', 'shared-shop', 1),\n ], 0, {\n isMegaMenuParent: false,\n }),\n]);\n\n/**\n * Shared-only structure.\n * No switching should be available.\n */\nconst SHARED_ONLY_MOCKED_RESPONSE = createMockedResponse([\n createMenuItem('Shared', '/', 'root-shared', [\n createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),\n createLeaf('Handla online', '/handla-online/', 'shared-shop', 1),\n createLeaf('Om oss', '/om-oss/', 'shared-about', 1),\n ], 0, {\n isMegaMenuParent: false,\n }),\n]);\n\n\n/**\n * Switchable roots + shared, where visible menu items also contain sub-menu items.\n */\nconst NESTED_SUBMENU_MOCKED_RESPONSE = createMockedResponse([\n createMenuItem('Private', '/private/', 'root-private', [\n createMenuItem('Skicka', '/private/skicka/', 'private-send', [\n createLeaf('Inrikes', '/private/skicka/inrikes/', 'private-send-domestic', 2),\n createLeaf('Utrikes', '/private/skicka/utrikes/', 'private-send-international', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n promotedMenuItemsHeader: 'Populärt',\n promotedMenuItems: [\n createPromotedMenuItem(\n 'Skicka paket och brev',\n 'https://se-inte.postnord.com/kop-frakt/',\n '/link/ed3ac8e1d91241e98ca0c9cce544018e.aspx',\n ),\n createPromotedMenuItem(\n 'Sök brevlåda eller serviceställe',\n 'https://se-inte.postnord.com/vara-verktyg/sok-brevlada-eller-servicestalle/',\n '/link/1ecca245984d4ea99a4bd28390577d52.aspx',\n ),\n ],\n }),\n createMenuItem('Ta emot', '/private/ta-emot/', 'private-receive', [\n createLeaf('Paket', '/private/ta-emot/paket/', 'private-receive-packages', 2),\n createLeaf('Brev', '/private/ta-emot/brev/', 'private-receive-letters', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n }),\n ]),\n createMenuItem('Business', '/business/', 'root-business', [\n createMenuItem('Boka frakt', '/business/boka-frakt/', 'business-book', [\n createLeaf('Inrikes företag', '/business/boka-frakt/inrikes/', 'business-book-domestic', 2),\n createLeaf('Utrikes företag', '/business/boka-frakt/utrikes/', 'business-book-international', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n }),\n createMenuItem('Spåra', '/business/spåra/', 'business-track', [\n createLeaf('Spåra paket', '/business/spåra/paket/', 'business-track-packages', 2),\n createLeaf('Spåra pall', '/business/spåra/pall/', 'business-track-pallets', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n promotedMenuItemsHeader: 'Populärt',\n promotedMenuItems: [\n createPromotedMenuItem(\n 'Skicka paket och brev',\n 'https://se-inte.postnord.com/kop-frakt/',\n '/link/ed3ac8e1d91241e98ca0c9cce544018e.aspx',\n ),\n createPromotedMenuItem(\n 'Sök brevlåda eller serviceställe',\n 'https://se-inte.postnord.com/vara-verktyg/sok-brevlada-eller-servicestalle/',\n '/link/1ecca245984d4ea99a4bd28390577d52.aspx',\n ),\n ],\n }),\n ]),\n createMenuItem('Shared', '/', 'root-shared', [\n createMenuItem('Kundservice', '/kundservice/', 'shared-support', [\n createLeaf('Vanliga frågor', '/kundservice/fragor/', 'shared-support-faq', 2),\n createLeaf('Kontakta oss', '/kundservice/kontakta-oss/', 'shared-support-contact', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n }),\n createMenuItem('Handla online', '/handla-online/', 'shared-shop', [\n createLeaf('Frimärken', '/handla-online/frimarken/', 'shared-shop-stamps', 2),\n createLeaf('Emballage', '/handla-online/emballage/', 'shared-shop-packaging', 2),\n ], 1, {\n isMegaMenuParent: false,\n hasChildren: true,\n }),\n ], 0, {\n isMegaMenuParent: false,\n }),\n]);\n\nconst meta: Meta<StoryArgs> = {\n title: 'Marketweb/Header/pn-marketweb-header',\n parameters: {\n layout: 'fullscreen',\n },\n argTypes: {\n market: { control: 'text' },\n language: { control: 'text' },\n initialActiveMenuMode: { control: 'number' },\n environment: {\n control: 'select',\n options: ['production', 'preproduction', 'integration', 'localhost'],\n },\n endpoint: { control: 'text' },\n pageId: { control: 'text' },\n siteid: { control: 'text' },\n userToken: { control: 'text' },\n userFullname: { control: 'text' },\n userLoggedin: { control: 'boolean' },\n hideSiteSelector: { control: 'boolean' },\n hideHomeMenuItem: { control: 'boolean' },\n hideLanguageSelector: { control: 'boolean' },\n hideSearch: { control: 'boolean' },\n hideLogin: { control: 'boolean' },\n showProfileSelection: { control: 'boolean' },\n showUnifiedLogin: { control: 'boolean' },\n siteDomainInUrls: { control: 'boolean' },\n autocompleteEndpoint: { control: 'text' },\n sessionForward: { control: 'boolean' },\n cache: { control: 'boolean' },\n searchPlaceholder: { control: 'text' },\n spaMode: { control: 'boolean' },\n checkUserLoggedInStateInterval: { control: 'number' },\n useMarketwebLogin: { control: 'boolean' },\n navigateOnMenuToggle: { control: 'boolean' },\n useMockedResponse: { control: 'boolean' },\n mockedResponse: {\n control: 'object',\n description: 'Mocked backend response envelope.',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<StoryArgs>;\n\n/**\n * Creates a deep clone of JSON-like mocked data.\n * This avoids accidental mutation across renders.\n */\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\n/**\n * Creates a deep clone of the mocked backend response envelope.\n *\n * The mocked response should match the real backend response shape.\n */\nfunction extractPayload(mockedResponse: HeaderApiEnvelope): HeaderApiEnvelope {\n return cloneJson(mockedResponse);\n}\n\n/**\n * Creates a fetch Response containing mocked JSON.\n */\nfunction createJsonResponse(body: unknown): Response {\n return new Response(JSON.stringify(body), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n}\n\nfunction restoreOriginalFetch(): void {\n window.fetch = ORIGINAL_FETCH;\n}\n\n/**\n * Installs a fetch mock that intercepts header requests and returns the mocked\n * backend envelope.\n *\n * The component still performs a normal fetch from its point of view.\n */\nfunction installHeaderFetchMock(mockedResponse: HeaderApiEnvelope, endpoint: string): void {\n window.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const requestUrl =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.toString()\n : input.url;\n\n const normalizedEndpoint = endpoint.replace(/\\/$/, '');\n const isHeaderRequest =\n requestUrl.includes(`${normalizedEndpoint}/api/navigation/toggle-header`) ||\n requestUrl.includes('/api/navigation/toggle-header');\n\n if (isHeaderRequest) {\n const payload = extractPayload(mockedResponse);\n return createJsonResponse(payload);\n }\n\n return ORIGINAL_FETCH(input as any, init);\n };\n}\n\nfunction createTopRightEndButton(): HTMLAnchorElement {\n const button = document.createElement('a');\n button.setAttribute('slot', 'toprightend');\n button.setAttribute('style', 'align-self:center;justfit-content:center;position:relative;text-decoration:none;color:#005d92;');\n button.innerHTML = `<span>Varukorg</span><pn-icon icon='${shop}' color=\"blue700\" class=\"pn-icon\"></pn-icon>`;\n button.style.cursor = 'pointer';\n button.style.fontSize = '16px';\n return button;\n}\n\nfunction createMenuFooterCta(): HTMLAnchorElement {\n const link = document.createElement('a');\n link.setAttribute('slot', 'menu-footer-cta');\n link.setAttribute('href', '#');\n link.textContent = 'Footer CTA';\n link.style.display = 'inline-block';\n link.style.padding = '8px 12px';\n link.style.borderRadius = '6px';\n link.style.border = '1px solid #ccc';\n link.style.textDecoration = 'none';\n link.style.color = 'inherit';\n return link;\n}\n\n/**\n * Creates the actual header element and assigns props directly.\n *\n * This is important for boolean props like navigateOnMenuToggle.\n */\nfunction createHeaderElement(args: StoryArgs): HTMLElement {\n const header = document.createElement('pn-marketweb-header') as any;\n\n header.market = args.market;\n header.initialActiveMenuMode = args.initialActiveMenuMode;\n header.menuThemes = args.menuThemes;\n header.language = args.language;\n header.environment = args.environment;\n header.endpoint = args.endpoint;\n header.pageId = args.pageId;\n header.siteid = args.siteid;\n header.userToken = args.userToken;\n header.userFullname = args.userFullname;\n header.userLoggedin = args.userLoggedin;\n header.hideSiteSelector = args.hideSiteSelector;\n header.hideHomeMenuItem = args.hideHomeMenuItem;\n header.hideLanguageSelector = args.hideLanguageSelector;\n header.hideSearch = args.hideSearch;\n header.hideLogin = args.hideLogin;\n header.showProfileSelection = args.showProfileSelection;\n header.showUnifiedLogin = args.showUnifiedLogin;\n header.siteDomainInUrls = args.siteDomainInUrls;\n header.autocompleteEndpoint = args.autocompleteEndpoint;\n header.sessionForward = args.sessionForward;\n header.cache = args.cache;\n header.searchPlaceholder = args.searchPlaceholder;\n header.spaMode = args.spaMode;\n header.checkUserLoggedInStateInterval = args.checkUserLoggedInStateInterval;\n header.useMarketwebLogin = args.useMarketwebLogin;\n header.navigateOnMenuToggle = args.navigateOnMenuToggle;\n\n header.appendChild(createTopRightEndButton());\n header.appendChild(createMenuFooterCta());\n\n return header;\n}\n\n/**\n * Renders the Storybook shell and the header.\n *\n * This story intentionally does not include a fake menu switcher.\n * The real pn-marketweb-header should render its own switcher when the menu\n * structure supports multiple switchable root menus.\n */\nfunction renderHeaderStory(args: StoryArgs): HTMLElement {\n restoreOriginalFetch();\n\n if (args.useMockedResponse) {\n installHeaderFetchMock(args.mockedResponse, args.endpoint);\n }\n\n const root = document.createElement('div');\n root.style.minHeight = '100vh';\n root.style.background = '#f5f5f5';\n\n const header = createHeaderElement(args);\n root.appendChild(header);\n\n const main = document.createElement('main');\n main.style.padding = '32px';\n\n const title = document.createElement('h1');\n title.textContent = 'Storybook preview';\n title.style.marginTop = '0';\n\n const paragraph1 = document.createElement('p');\n paragraph1.textContent = args.useMockedResponse\n ? 'This story uses a mocked backend response.'\n : 'This story uses the real backend response from the configured endpoint.';\n\n const paragraph2 = document.createElement('p');\n paragraph2.innerHTML =\n 'In Storybook, <code>navigateOnMenuToggle</code> is disabled by default so you can inspect menu switching without leaving the preview.';\n\n main.appendChild(title);\n main.appendChild(paragraph1);\n main.appendChild(paragraph2);\n\n root.appendChild(main);\n\n return root;\n}\n\nconst DEFAULT_ARGS: Omit<StoryArgs, 'mockedResponse'> = {\n market: 'se',\n language: 'sv',\n environment: 'localhost',\n initialActiveMenuMode: 0,\n endpoint: 'https://storybook.local',\n pageId: '9',\n siteid: '',\n userToken: '',\n userFullname: '',\n userLoggedin: false,\n hideSiteSelector: false,\n hideHomeMenuItem: false,\n hideLanguageSelector: false,\n hideSearch: false,\n hideLogin: false,\n showProfileSelection: true,\n showUnifiedLogin: true,\n siteDomainInUrls: false,\n autocompleteEndpoint: '',\n sessionForward: false,\n cache: false,\n searchPlaceholder: 'Sök',\n spaMode: false,\n checkUserLoggedInStateInterval: 0,\n useMarketwebLogin: false,\n navigateOnMenuToggle: false,\n useMockedResponse: true,\n};\n\n/**\n * Baseline story:\n * - 2 switchable roots\n * - 1 shared root\n */\nexport const TwoModesWithShared: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n mockedResponse: DEFAULT_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Verifies that more than 2 switchable roots are supported.\n */\nexport const ThreeModesWithShared: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n mockedResponse: THREE_MODES_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Only one mode root + shared.\n * The header should not render the menu switcher.\n */\nexport const OneModeWithShared: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n mockedResponse: ONE_MODE_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Shared-only structure.\n * Useful for verifying fallback rendering when no switchable roots exist.\n */\nexport const SharedOnly: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n mockedResponse: SHARED_ONLY_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Same baseline structure, but start on the second mode.\n */\nexport const StartOnSecondMode: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n initialActiveMenuMode: 1,\n mockedResponse: DEFAULT_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Same baseline structure, but allow real navigation hrefs on mode change.\n * Mostly useful for checking rendered links rather than interacting in Storybook.\n */\nexport const NavigationEnabled: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n navigateOnMenuToggle: true,\n mockedResponse: DEFAULT_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Smaller layout story while still using mocked data.\n */\nexport const Minimal: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n hideSiteSelector: true,\n hideLanguageSelector: true,\n hideLogin: true,\n showProfileSelection: false,\n showUnifiedLogin: false,\n mockedResponse: DEFAULT_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Menu items contain nested sub-menu items.\n */\nexport const NestedSubmenuItems: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n mockedResponse: NESTED_SUBMENU_MOCKED_RESPONSE,\n },\n};\n\n/**\n * Uses the real local CMS instead of Storybook fetch mocking.\n */\nexport const LocalCms: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n useMockedResponse: false,\n endpoint: 'https://localhost:51547',\n environment: 'localhost',\n pageId: '9',\n siteid: '',\n mockedResponse: DEFAULT_MOCKED_RESPONSE,\n },\n};\n\n\n/**\n * Uses the real integration CMS instead of Storybook fetch mocking. //FIXME: getting cors-safe data at the moment\n */\nexport const IntegrationCms: Story = {\n render: args => renderHeaderStory(args),\n args: {\n ...DEFAULT_ARGS,\n useMockedResponse: false,\n endpoint: 'https://se-inte.postnord.com',\n environment: 'integration',\n market: 'se',\n language: 'sv',\n pageId: '9',\n // userToken: '6ae6bde345eb68fc0102f4ba256f31e9151db31dc2ea4c23a51917c'\n\n },\n};"]}
@@ -0,0 +1,180 @@
1
+ import { RefinedMarketWebContextService, } from "../../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.service";
2
+ import { mapHeaderDataToViewModel } from "../mapper/pn-marketweb-header.mapper";
3
+ import { defaultHeaderI18n, resolveHeaderTranslations, } from "../utils/header-i18n";
4
+ /**
5
+ * Service responsible for:
6
+ * - resolving the effective header context
7
+ * - building the fetch URL for the header endpoint
8
+ * - loading header data from the backend
9
+ * - mapping backend data into a renderable header state
10
+ *
11
+ * This service uses the refined context service as the source of truth
12
+ * for market/language/environment resolution.
13
+ */
14
+ export class PnMarketwebHeaderService {
15
+ fetchHelper;
16
+ href;
17
+ doc;
18
+ /**
19
+ * Fixed backend path for loading header data.
20
+ * This is appended to the resolved endpoint domain.
21
+ */
22
+ endpointPath = '/api/navigation/toggle-header';
23
+ constructor(fetchHelper, href = window.location.href, doc = document) {
24
+ this.fetchHelper = fetchHelper;
25
+ this.href = href;
26
+ this.doc = doc;
27
+ }
28
+ /**
29
+ * Resolves the effective header context.
30
+ *
31
+ * What it does:
32
+ * - uses the RefinedMarketWebContextService to resolve context from the current URL/document
33
+ * - lets explicit input values override resolved values when provided
34
+ * - resolves endpoint from environment + market when endpoint is not explicitly passed in
35
+ * - keeps pageId as part of the final header request context
36
+ */
37
+ async resolveContext(input) {
38
+ const contextService = new RefinedMarketWebContextService({
39
+ href: this.href,
40
+ doc: this.doc,
41
+ });
42
+ const resolvedContext = contextService.resolve();
43
+ const market = input.market ?? resolvedContext.market;
44
+ const language = input.language ?? resolvedContext.language;
45
+ const environment = input.environment ?? resolvedContext.environment;
46
+ const endpoint = input.endpoint && input.endpoint.trim() !== ''
47
+ ? input.endpoint
48
+ : contextService.getEndpoint(environment, market);
49
+ return {
50
+ market,
51
+ language,
52
+ environment,
53
+ endpoint,
54
+ pageId: input.pageId ?? '',
55
+ };
56
+ }
57
+ /**
58
+ * Builds the final request URL used to fetch header JSON.
59
+ *
60
+ * What it does:
61
+ * - removes a trailing slash from the endpoint base if needed
62
+ * - appends the fixed header endpoint path
63
+ * - adds query parameters for market, language and current page
64
+ */
65
+ buildFetchUrl(context) {
66
+ const endpointBase = context.endpoint.lastIndexOf('/') === context.endpoint.length - 1
67
+ ? context.endpoint.substring(0, context.endpoint.length - 1)
68
+ : context.endpoint;
69
+ return `${endpointBase}${this.endpointPath}?market=${context.market}&language=${context.language}&currentPage=${context.pageId ?? ''}`;
70
+ }
71
+ /**
72
+ * Fetches header data from the backend.
73
+ *
74
+ * Returns null when required context is missing.
75
+ */
76
+ async fetchHeaderData(context, cache = false) {
77
+ if (!context.market || !context.language || context.endpoint == null) {
78
+ return null;
79
+ }
80
+ const fetchUrl = this.buildFetchUrl(context);
81
+ const response = await this.fetchHelper.fetchJson(fetchUrl, { mode: 'cors' }, cache);
82
+ if (!response) {
83
+ return null;
84
+ }
85
+ return 'value' in response ? response.value : response;
86
+ }
87
+ /**
88
+ * Builds i18n for the current language + presentation overrides.
89
+ */
90
+ resolveI18n(language, searchPlaceholder = '') {
91
+ if (!language) {
92
+ return defaultHeaderI18n;
93
+ }
94
+ return resolveHeaderTranslations(language, searchPlaceholder);
95
+ }
96
+ /**
97
+ * Maps raw header data into the current UI view model.
98
+ */
99
+ mapViewModel(rawHeaderData, input) {
100
+ return mapHeaderDataToViewModel(rawHeaderData, {
101
+ language: input.language ?? undefined,
102
+ hideHomeMenuItem: input.hideHomeMenuItem,
103
+ siteDomainInUrls: input.siteDomainInUrls,
104
+ autocompleteEndpoint: input.autocompleteEndpoint,
105
+ i18n: input.i18n,
106
+ });
107
+ }
108
+ /**
109
+ * Resolves context, fetches backend data and builds the final header state.
110
+ */
111
+ async loadHeaderState(input) {
112
+ const context = await this.resolveContext({
113
+ market: input.market,
114
+ language: input.language,
115
+ environment: input.environment,
116
+ endpoint: input.endpoint,
117
+ pageId: input.pageId,
118
+ });
119
+ const i18n = this.resolveI18n(context.language, input.searchPlaceholder);
120
+ const rawHeaderData = await this.fetchHeaderData(context, input.cache ?? false);
121
+ if (!rawHeaderData) {
122
+ return {
123
+ context,
124
+ rawHeaderData: null,
125
+ vm: null,
126
+ i18n,
127
+ status: 'error',
128
+ activeMenuMode: 0, /* default to first mode */
129
+ };
130
+ }
131
+ const vm = this.mapViewModel(rawHeaderData, {
132
+ language: context.language,
133
+ hideHomeMenuItem: input.hideHomeMenuItem,
134
+ siteDomainInUrls: input.siteDomainInUrls,
135
+ autocompleteEndpoint: input.autocompleteEndpoint,
136
+ i18n,
137
+ });
138
+ return {
139
+ context,
140
+ rawHeaderData,
141
+ vm,
142
+ i18n,
143
+ status: 'ready',
144
+ activeMenuMode: vm.defaultMenuMode
145
+ };
146
+ }
147
+ /**
148
+ * Rebuilds the UI state from already-fetched raw backend data.
149
+ * Use this when presentation-only inputs change and a refetch is not needed.
150
+ */
151
+ remapHeaderState(input) {
152
+ const i18n = this.resolveI18n(input.language ?? input.context.language, input.searchPlaceholder);
153
+ if (!input.rawHeaderData) {
154
+ return {
155
+ context: input.context,
156
+ rawHeaderData: null,
157
+ vm: null,
158
+ i18n,
159
+ status: 'error',
160
+ activeMenuMode: input.currentActiveMenuMode,
161
+ };
162
+ }
163
+ const vm = this.mapViewModel(input.rawHeaderData, {
164
+ language: input.language ?? input.context.language,
165
+ hideHomeMenuItem: input.hideHomeMenuItem,
166
+ siteDomainInUrls: input.siteDomainInUrls,
167
+ autocompleteEndpoint: input.autocompleteEndpoint,
168
+ i18n,
169
+ });
170
+ return {
171
+ context: input.context,
172
+ rawHeaderData: input.rawHeaderData,
173
+ vm,
174
+ i18n,
175
+ status: 'ready',
176
+ activeMenuMode: input.currentActiveMenuMode,
177
+ };
178
+ }
179
+ }
180
+ //# sourceMappingURL=pn-marketweb-header.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pn-marketweb-header.service.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/services/pn-marketweb-header.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { FetchHelper } from '../../../../globals/FetchHelper';\nimport {\n RefinedMarketWebContextService,\n} from '../../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.service';\nimport type {\n EnvironmentName,\n MarketName,\n} from '../../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.types';\nimport type {\n SiteHeaderI18N,\n} from '../../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\nimport { mapHeaderDataToViewModel } from '../mapper/pn-marketweb-header.mapper';\nimport type {\n HeaderApiEnvelope,\n HeaderApiPayload,\n HeaderContext,\n HeaderMenuMode,\n HeaderViewModel,\n} from '../types/pn-marketweb-header.types';\nimport {\n defaultHeaderI18n,\n resolveHeaderTranslations,\n} from '../utils/header-i18n';\n\n/**\n * Input used when resolving/fetching/building header state.\n */\nexport interface LoadHeaderStateInput {\n market?: MarketName | null;\n language?: string | null;\n environment?: EnvironmentName | null;\n endpoint?: string | null;\n pageId?: string;\n cache?: boolean;\n hideHomeMenuItem: boolean;\n siteDomainInUrls: boolean;\n autocompleteEndpoint: string;\n searchPlaceholder: string;\n}\n\n/**\n * Result returned from service orchestration methods.\n */\nexport interface HeaderStateResult {\n context: HeaderContext;\n rawHeaderData: HeaderApiPayload | null;\n vm: HeaderViewModel | null;\n i18n: SiteHeaderI18N;\n status: 'ready' | 'error';\n /**\n * The currently active menu mode used by the wrapper component.\n *\n * This is preserved by the service during remaps, but the effective initial\n * value is resolved by the component layer.\n */\n activeMenuMode: HeaderMenuMode;\n}\n\n/**\n * Service responsible for:\n * - resolving the effective header context\n * - building the fetch URL for the header endpoint\n * - loading header data from the backend\n * - mapping backend data into a renderable header state\n *\n * This service uses the refined context service as the source of truth\n * for market/language/environment resolution.\n */\nexport class PnMarketwebHeaderService {\n /**\n * Fixed backend path for loading header data.\n * This is appended to the resolved endpoint domain.\n */\n private endpointPath = '/api/navigation/toggle-header';\n\n constructor(\n private fetchHelper: FetchHelper,\n private href: string = window.location.href,\n private doc: Document = document,\n ) { }\n\n /**\n * Resolves the effective header context.\n *\n * What it does:\n * - uses the RefinedMarketWebContextService to resolve context from the current URL/document\n * - lets explicit input values override resolved values when provided\n * - resolves endpoint from environment + market when endpoint is not explicitly passed in\n * - keeps pageId as part of the final header request context\n */\n private async resolveContext(input: {\n market?: MarketName | null;\n language?: string | null;\n environment?: EnvironmentName | null;\n endpoint?: string | null;\n pageId?: string;\n }): Promise<HeaderContext> {\n const contextService = new RefinedMarketWebContextService({\n href: this.href,\n doc: this.doc,\n });\n\n const resolvedContext = contextService.resolve();\n\n const market = input.market ?? resolvedContext.market;\n const language = input.language ?? resolvedContext.language;\n const environment = input.environment ?? resolvedContext.environment;\n\n const endpoint =\n input.endpoint && input.endpoint.trim() !== ''\n ? input.endpoint\n : contextService.getEndpoint(environment, market);\n\n return {\n market,\n language,\n environment,\n endpoint,\n pageId: input.pageId ?? '',\n };\n }\n\n /**\n * Builds the final request URL used to fetch header JSON.\n *\n * What it does:\n * - removes a trailing slash from the endpoint base if needed\n * - appends the fixed header endpoint path\n * - adds query parameters for market, language and current page\n */\n private buildFetchUrl(context: HeaderContext): string {\n const endpointBase =\n context.endpoint.lastIndexOf('/') === context.endpoint.length - 1\n ? context.endpoint.substring(0, context.endpoint.length - 1)\n : context.endpoint;\n\n return `${endpointBase}${this.endpointPath}?market=${context.market}&language=${context.language}&currentPage=${context.pageId ?? ''}`;\n }\n\n /**\n * Fetches header data from the backend.\n *\n * Returns null when required context is missing.\n */\n private async fetchHeaderData(context: HeaderContext, cache = false): Promise<HeaderApiPayload | null> {\n if (!context.market || !context.language || context.endpoint == null) {\n return null;\n }\n\n const fetchUrl = this.buildFetchUrl(context);\n\n const response = await this.fetchHelper.fetchJson(\n fetchUrl,\n { mode: 'cors' },\n cache,\n ) as HeaderApiEnvelope | HeaderApiPayload | null;\n\n if (!response) {\n return null;\n }\n\n return 'value' in response ? response.value : response;\n }\n\n /**\n * Builds i18n for the current language + presentation overrides.\n */\n private resolveI18n(language?: string | null, searchPlaceholder = ''): SiteHeaderI18N {\n if (!language) {\n return defaultHeaderI18n;\n }\n\n return resolveHeaderTranslations(language, searchPlaceholder);\n }\n\n /**\n * Maps raw header data into the current UI view model.\n */\n private mapViewModel(\n rawHeaderData: HeaderApiPayload,\n input: {\n language?: string | null;\n hideHomeMenuItem: boolean;\n siteDomainInUrls: boolean;\n autocompleteEndpoint: string;\n i18n: SiteHeaderI18N;\n },\n ): HeaderViewModel {\n return mapHeaderDataToViewModel(rawHeaderData, {\n language: input.language ?? undefined,\n hideHomeMenuItem: input.hideHomeMenuItem,\n siteDomainInUrls: input.siteDomainInUrls,\n autocompleteEndpoint: input.autocompleteEndpoint,\n i18n: input.i18n,\n });\n }\n\n /**\n * Resolves context, fetches backend data and builds the final header state.\n */\n public async loadHeaderState(input: LoadHeaderStateInput): Promise<HeaderStateResult> {\n const context = await this.resolveContext({\n market: input.market,\n language: input.language,\n environment: input.environment,\n endpoint: input.endpoint,\n pageId: input.pageId,\n });\n\n const i18n = this.resolveI18n(context.language, input.searchPlaceholder);\n const rawHeaderData = await this.fetchHeaderData(context, input.cache ?? false);\n\n\n if (!rawHeaderData) {\n return {\n context,\n rawHeaderData: null,\n vm: null,\n i18n,\n status: 'error',\n activeMenuMode: 0, /* default to first mode */\n };\n }\n\n const vm = this.mapViewModel(rawHeaderData, {\n language: context.language,\n hideHomeMenuItem: input.hideHomeMenuItem,\n siteDomainInUrls: input.siteDomainInUrls,\n autocompleteEndpoint: input.autocompleteEndpoint,\n i18n,\n });\n\n return {\n context,\n rawHeaderData,\n vm,\n i18n,\n status: 'ready',\n activeMenuMode: vm.defaultMenuMode\n };\n }\n\n /**\n * Rebuilds the UI state from already-fetched raw backend data.\n * Use this when presentation-only inputs change and a refetch is not needed.\n */\n public remapHeaderState(input: {\n context: HeaderContext;\n rawHeaderData: HeaderApiPayload | null;\n language?: string | null;\n hideHomeMenuItem: boolean;\n siteDomainInUrls: boolean;\n autocompleteEndpoint: string;\n searchPlaceholder: string;\n currentActiveMenuMode: HeaderMenuMode;\n }): HeaderStateResult {\n const i18n = this.resolveI18n(input.language ?? input.context.language, input.searchPlaceholder);\n\n if (!input.rawHeaderData) {\n return {\n context: input.context,\n rawHeaderData: null,\n vm: null,\n i18n,\n status: 'error',\n activeMenuMode: input.currentActiveMenuMode,\n };\n }\n\n const vm = this.mapViewModel(input.rawHeaderData, {\n language: input.language ?? input.context.language,\n hideHomeMenuItem: input.hideHomeMenuItem,\n siteDomainInUrls: input.siteDomainInUrls,\n autocompleteEndpoint: input.autocompleteEndpoint,\n i18n,\n });\n\n return {\n context: input.context,\n rawHeaderData: input.rawHeaderData,\n vm,\n i18n,\n status: 'ready',\n activeMenuMode: input.currentActiveMenuMode,\n };\n }\n}"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pn-marketweb-header.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pn-marketweb-header.types.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n EnvironmentName,\n MarketName,\n} from '../../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.types';\nimport {\n LanguageSelector,\n LanguageSelectorItem,\n LoginDialog,\n MenuItem,\n MenuSiteDefinition,\n SiteHeaderI18N,\n SiteHeaderSearch,\n SiteSelector,\n} from '../../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\n\nexport type HeaderMenuMode = number;\n\nexport interface HeaderMenuModeOption {\n index: number;\n label: string;\n href?: string;\n root: MenuItem;\n}\n\nexport interface HeaderMenuStructure {\n hasMenuSwitching: boolean;\n modeRoots: MenuItem[];\n menuModeOptions: HeaderMenuModeOption[];\n sharedRoot: MenuItem | null;\n sharedItems: MenuItem[];\n}\n\nexport interface HeaderMenuGroups {\n primaryItems: MenuItem[];\n sharedItems: MenuItem[];\n}\n\n/**\n * Resolved runtime context used when loading header data.\n * These values may come from explicit props, URL parsing, or environment resolution.\n */\nexport interface HeaderContext {\n market: MarketName;\n language: string;\n environment: EnvironmentName;\n endpoint: string;\n pageId?: string;\n}\n\n\nexport interface HeaderApiPayload {\n sitedefinition: MenuSiteDefinition;\n search: SiteHeaderSearch;\n languageSelectorViewModel: LanguageSelector | null;\n siteSelectorViewModel: SiteSelector | null;\n loginViewModel: LoginDialog | null;\n mainMenu: {\n menuItems: MenuItem[];\n };\n}\n\n/**\n * The raw API response shape returned by /api/navigation/header.\n * This stays close to the backend structure.\n */\nexport interface HeaderApiEnvelope {\n value: HeaderApiPayload;\n formatters?: unknown[];\n contentTypes?: unknown[];\n declaredType?: unknown;\n statusCode?: number;\n}\n\nexport interface HeaderViewModel {\n siteDefinition: MenuSiteDefinition | null;\n menuItems: MenuItem[];\n search: SiteHeaderSearch | null;\n siteSelector: SiteSelector | null;\n languageSelector: LanguageSelector | null;\n languageOptions: LanguageSelectorItem[];\n loginDialog: LoginDialog | null;\n homePageLink: string;\n\n /**\n * Whether the fetched structure supports switching between multiple top-level menu roots.\n *\n * When true:\n * - all top-level menu items except the last are treated as switchable roots\n * - the last top-level item is treated as the shared/common root\n */\n hasMenuSwitching: boolean;\n\n /**\n * Visible labels for the toggle component.\n */\n menuModeOptions: HeaderMenuModeOption[];\n\n /**\n * Default active menu mode index.\n *\n * This index refers to `menuModeOptions` and the corresponding switchable\n * top-level root menu.\n */\n defaultMenuMode: number;\n /**\n * Original normalized top-level menu structure from the backend.\n *\n * Semantics:\n * - all items except the last are switchable root menus\n * - the last item is the shared/common root\n *\n * This is preserved so the wrapper can rebuild visible menu items when the\n * active menu mode changes.\n */\n rawMenuItems: MenuItem[];\n}\n\n/**\n * Options used when mapping raw API data into a renderable view model.\n * These mostly come from component props or derived i18n values.\n */\nexport interface HeaderMapperOptions {\n language: string;\n hideHomeMenuItem: boolean;\n siteDomainInUrls: boolean;\n autocompleteEndpoint?: string;\n i18n: SiteHeaderI18N;\n}"]}
@@ -0,0 +1,37 @@
1
+ import { translations } from "../../pn-marketweb-siteheader/translations";
2
+ /**
3
+ * Safe fallback i18n object used before translations have been resolved,
4
+ * or if a language is missing from the translation table.
5
+ */
6
+ export const defaultHeaderI18n = {
7
+ searchlabel: '',
8
+ searchplaceholder: '',
9
+ searchbuttontext: '',
10
+ menuHomeButton: '',
11
+ menuGoBackButton: '',
12
+ mainMenuButton: '',
13
+ menuStartButton: '',
14
+ profileSelectionFlyoutHeading: '',
15
+ unifiedLoginButton: '',
16
+ unifiedMyPagesButton: '',
17
+ home: 'Home',
18
+ };
19
+ /**
20
+ * Resolves the i18n object for the current language and applies overrides.
21
+ *
22
+ * What it does:
23
+ * - Looks up translation values for the selected language
24
+ * - Falls back to a safe default object if the language is missing
25
+ * - Allows the search placeholder to be overridden by a prop
26
+ * - Ensures "home" always has a non-empty fallback value
27
+ */
28
+ export function resolveHeaderTranslations(language, searchPlaceholder) {
29
+ const resolved = (language && translations[language]) ? translations[language] : defaultHeaderI18n;
30
+ return {
31
+ ...defaultHeaderI18n,
32
+ ...resolved,
33
+ searchplaceholder: searchPlaceholder || resolved.searchplaceholder || '',
34
+ home: resolved.home && resolved.home.trim() !== '' ? resolved.home : 'Home',
35
+ };
36
+ }
37
+ //# sourceMappingURL=header-i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-i18n.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/utils/header-i18n.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC7C,WAAW,EAAE,EAAE;IACf,iBAAiB,EAAE,EAAE;IACrB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,6BAA6B,EAAE,EAAE;IACjC,kBAAkB,EAAE,EAAE;IACtB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,MAAM;CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAiB,EAAE,iBAA0B;IACnF,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAEnG,OAAO;QACH,GAAG,iBAAiB;QACpB,GAAG,QAAQ;QACX,iBAAiB,EAAE,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE;QACxE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;KAC9E,CAAC;AACN,CAAC","sourcesContent":["import {\n SiteHeaderI18N,\n} from '../../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\nimport { translations } from '../../pn-marketweb-siteheader/translations';\n\n/**\n * Safe fallback i18n object used before translations have been resolved,\n * or if a language is missing from the translation table.\n */\nexport const defaultHeaderI18n: SiteHeaderI18N = {\n searchlabel: '',\n searchplaceholder: '',\n searchbuttontext: '',\n menuHomeButton: '',\n menuGoBackButton: '',\n mainMenuButton: '',\n menuStartButton: '',\n profileSelectionFlyoutHeading: '',\n unifiedLoginButton: '',\n unifiedMyPagesButton: '',\n home: 'Home',\n};\n\n/**\n * Resolves the i18n object for the current language and applies overrides.\n *\n * What it does:\n * - Looks up translation values for the selected language\n * - Falls back to a safe default object if the language is missing\n * - Allows the search placeholder to be overridden by a prop\n * - Ensures \"home\" always has a non-empty fallback value\n */\nexport function resolveHeaderTranslations(language?: string, searchPlaceholder?: string): SiteHeaderI18N {\n const resolved = (language && translations[language]) ? translations[language] : defaultHeaderI18n;\n\n return {\n ...defaultHeaderI18n,\n ...resolved,\n searchplaceholder: searchPlaceholder || resolved.searchplaceholder || '',\n home: resolved.home && resolved.home.trim() !== '' ? resolved.home : 'Home',\n };\n}"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Builds the list of language options that should actually be shown.
3
+ *
4
+ * What it does:
5
+ * - Reads the backend-provided language selector model
6
+ * - Checks page <link rel="alternate" hreflang="..."> tags
7
+ * - If hreflang tags exist, only languages with matching tags are shown
8
+ * - If no hreflang tags exist, all backend-provided languages are shown
9
+ */
10
+ export function getLanguageOptions(languageSelector) {
11
+ if (!languageSelector?.languages?.length) {
12
+ return [];
13
+ }
14
+ const hrefLangTags = Array.from(document.querySelectorAll('link[rel="alternate"][hreflang]'));
15
+ const hrefLangs = hrefLangTags.map(tag => {
16
+ let value = tag.getAttribute('hreflang') ?? '';
17
+ if (value.indexOf('en-') !== -1 || value.indexOf('en_') !== -1) {
18
+ value = value.substring(0, 2);
19
+ }
20
+ return value;
21
+ });
22
+ if (!hrefLangs.length) {
23
+ return [...languageSelector.languages];
24
+ }
25
+ return languageSelector.languages.filter(option => hrefLangs.includes(option.twoLetterISOLanguageName));
26
+ }
27
+ /**
28
+ * Resolves the URL for a given language option.
29
+ *
30
+ * What it does:
31
+ * - Returns null in SPA mode so language switching can be handled by events only
32
+ * - Uses an existing hreflang alternate URL if one exists in the document
33
+ * - Otherwise falls back to generating a language URL from the site definition
34
+ */
35
+ export function getLanguageVersionUrl(item, siteDefinition, spaMode) {
36
+ if (spaMode) {
37
+ return null;
38
+ }
39
+ const alternativeTag = document.querySelector(`link[rel="alternate"][hreflang="${item.twoLetterISOLanguageName}"]`);
40
+ if (alternativeTag) {
41
+ return alternativeTag.getAttribute('href');
42
+ }
43
+ const siteUrl = siteDefinition?.url ?? '/';
44
+ return siteUrl + (siteUrl.lastIndexOf('/') !== siteUrl.length - 1 ? '/' : '') + item.twoLetterISOLanguageName;
45
+ }
46
+ //# sourceMappingURL=header-language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-language.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/utils/header-language.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,gBAAyC;IACxE,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACrC,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC9C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,wBAAwB,CAAC,CACtD,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACjC,IAA0B,EAC1B,cAAyC,EACzC,OAAgB;IAEhB,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CACzC,mCAAmC,IAAI,CAAC,wBAAwB,IAAI,CACvE,CAAC;IAEF,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,EAAE,GAAG,IAAI,GAAG,CAAC;IAC3C,OAAO,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAClH,CAAC","sourcesContent":["import {\n LanguageSelector,\n LanguageSelectorItem,\n MenuSiteDefinition,\n} from '../../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\n\n/**\n * Builds the list of language options that should actually be shown.\n *\n * What it does:\n * - Reads the backend-provided language selector model\n * - Checks page <link rel=\"alternate\" hreflang=\"...\"> tags\n * - If hreflang tags exist, only languages with matching tags are shown\n * - If no hreflang tags exist, all backend-provided languages are shown\n */\nexport function getLanguageOptions(languageSelector: LanguageSelector | null): LanguageSelectorItem[] {\n if (!languageSelector?.languages?.length) {\n return [];\n }\n\n const hrefLangTags = Array.from(document.querySelectorAll('link[rel=\"alternate\"][hreflang]'));\n const hrefLangs = hrefLangTags.map(tag => {\n let value = tag.getAttribute('hreflang') ?? '';\n if (value.indexOf('en-') !== -1 || value.indexOf('en_') !== -1) {\n value = value.substring(0, 2);\n }\n return value;\n });\n\n if (!hrefLangs.length) {\n return [...languageSelector.languages];\n }\n\n return languageSelector.languages.filter(option =>\n hrefLangs.includes(option.twoLetterISOLanguageName),\n );\n}\n\n/**\n * Resolves the URL for a given language option.\n *\n * What it does:\n * - Returns null in SPA mode so language switching can be handled by events only\n * - Uses an existing hreflang alternate URL if one exists in the document\n * - Otherwise falls back to generating a language URL from the site definition\n */\nexport function getLanguageVersionUrl(\n item: LanguageSelectorItem,\n siteDefinition: MenuSiteDefinition | null,\n spaMode: boolean,\n): string | null {\n if (spaMode) {\n return null;\n }\n\n const alternativeTag = document.querySelector(\n `link[rel=\"alternate\"][hreflang=\"${item.twoLetterISOLanguageName}\"]`,\n );\n\n if (alternativeTag) {\n return alternativeTag.getAttribute('href');\n }\n\n const siteUrl = siteDefinition?.url ?? '/';\n return siteUrl + (siteUrl.lastIndexOf('/') !== siteUrl.length - 1 ? '/' : '') + item.twoLetterISOLanguageName;\n}"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Adds a Home item at the beginning of the main menu when needed.
3
+ *
4
+ * What it does:
5
+ * - Returns the input untouched when hideHomeMenuItem is true
6
+ * - Avoids adding a duplicate Home item if one already exists first in the list
7
+ * - Otherwise prepends a synthetic Home item using the translated label
8
+ */
9
+ export function prependHomeMenuItem(items, i18n, homeUrl, hideHomeMenuItem) {
10
+ if (hideHomeMenuItem) {
11
+ return items;
12
+ }
13
+ if (items[0]?.name === i18n.menuHomeButton) {
14
+ return items;
15
+ }
16
+ return [
17
+ {
18
+ href: homeUrl,
19
+ name: i18n.menuHomeButton,
20
+ id: 'homelink',
21
+ open: false,
22
+ selected: false,
23
+ children: [],
24
+ },
25
+ ...items,
26
+ ];
27
+ }
28
+ /**
29
+ * Creates a stable-ish tracking id for promoted menu items.
30
+ *
31
+ * This mirrors the old wrapper behavior and is used when rendering promoted links.
32
+ */
33
+ export function promotedItemId(item) {
34
+ return 'promo-' + item.linkText.replace(/[^A-Za-z0-9.\\\/]/gim, '');
35
+ }
36
+ //# sourceMappingURL=header-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-menu.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/utils/header-menu.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAC/B,KAAiB,EACjB,IAAoB,EACpB,OAAe,EACf,gBAAyB;IAEzB,IAAI,gBAAgB,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,IAAI,CAAC,cAAc;YACzB,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE;SACH;QACb,GAAG,KAAK;KACX,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAsB;IACjD,OAAO,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import {\n MenuItem,\n PromotedMenuItem,\n SiteHeaderI18N,\n} from '../../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\n\n/**\n * Adds a Home item at the beginning of the main menu when needed.\n *\n * What it does:\n * - Returns the input untouched when hideHomeMenuItem is true\n * - Avoids adding a duplicate Home item if one already exists first in the list\n * - Otherwise prepends a synthetic Home item using the translated label\n */\nexport function prependHomeMenuItem(\n items: MenuItem[],\n i18n: SiteHeaderI18N,\n homeUrl: string,\n hideHomeMenuItem: boolean,\n): MenuItem[] {\n if (hideHomeMenuItem) {\n return items;\n }\n\n if (items[0]?.name === i18n.menuHomeButton) {\n return items;\n }\n\n return [\n {\n href: homeUrl,\n name: i18n.menuHomeButton,\n id: 'homelink',\n open: false,\n selected: false,\n children: [],\n } as MenuItem,\n ...items,\n ];\n}\n\n/**\n * Creates a stable-ish tracking id for promoted menu items.\n *\n * This mirrors the old wrapper behavior and is used when rendering promoted links.\n */\nexport function promotedItemId(item: PromotedMenuItem): string {\n return 'promo-' + item.linkText.replace(/[^A-Za-z0-9.\\\\\\/]/gim, '');\n}"]}
@@ -0,0 +1,48 @@
1
+ export function normalizeHeaderTheme(theme) {
2
+ switch (theme?.toLowerCase()) {
3
+ case 'business':
4
+ return 'business';
5
+ case 'private':
6
+ return 'private';
7
+ default:
8
+ return 'private';
9
+ }
10
+ }
11
+ export function getAppearanceForTheme(theme) {
12
+ switch (normalizeHeaderTheme(theme)) {
13
+ case 'private':
14
+ return 'light';
15
+ case 'business':
16
+ return 'dark';
17
+ default:
18
+ return 'light';
19
+ }
20
+ }
21
+ export function resolveHeaderMenuThemes(menuThemes, menuModeOptions) {
22
+ //1. Prop override
23
+ if (menuThemes) {
24
+ try {
25
+ const parsed = JSON.parse(menuThemes);
26
+ if (Array.isArray(parsed)) {
27
+ const filtered = parsed
28
+ .filter((item) => typeof item === 'string')
29
+ .map(item => normalizeHeaderTheme(item));
30
+ if (filtered.length > 0) {
31
+ return filtered;
32
+ }
33
+ }
34
+ }
35
+ catch (error) {
36
+ console.warn('[pn-marketweb-header] Invalid menu-themes value', error);
37
+ }
38
+ }
39
+ // 2. Fallback → VM
40
+ if (!Array.isArray(menuModeOptions)) {
41
+ return [];
42
+ }
43
+ return menuModeOptions
44
+ .map(option => option?.root?.toggleTheme)
45
+ .filter((theme) => typeof theme === 'string')
46
+ .map(theme => normalizeHeaderTheme(theme));
47
+ }
48
+ //# sourceMappingURL=header-theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-theme.js","sourceRoot":"","sources":["../../../../../src/components/layout-components/pn-marketweb-header/utils/header-theme.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,QAAQ,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,QAAQ,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA8B,EAC9B,eAAmD;IAEnD,kBAAkB;IAClB,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM;qBACpB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;qBAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAmB,CAAC,CAAC,CAAC;gBAE1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,eAAe;SACnB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC;SACxC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;SAC7D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAC,CAAA;AAE7D,CAAC","sourcesContent":["import type { HeaderMenuModeOption } from '../types/pn-marketweb-header.types';\n\nexport type HeaderTheme = 'business' | 'private';\nexport type HeaderAppearance = 'light' | 'dark';\n\nexport function normalizeHeaderTheme(theme: HeaderTheme): HeaderTheme {\n switch (theme?.toLowerCase()) {\n case 'business':\n return 'business';\n case 'private':\n return 'private';\n default:\n return 'private';\n }\n}\n\nexport function getAppearanceForTheme(theme: HeaderTheme): HeaderAppearance {\n switch (normalizeHeaderTheme(theme)) {\n case 'private':\n return 'light';\n case 'business':\n return 'dark';\n default:\n return 'light';\n }\n}\n\nexport function resolveHeaderMenuThemes(\n menuThemes: string | undefined,\n menuModeOptions: HeaderMenuModeOption[] | undefined\n): HeaderTheme[] {\n //1. Prop override\n if (menuThemes) {\n try {\n const parsed = JSON.parse(menuThemes);\n\n if (Array.isArray(parsed)) {\n const filtered = parsed\n .filter((item): item is string => typeof item === 'string')\n .map(item => normalizeHeaderTheme(item as HeaderTheme));\n\n if (filtered.length > 0) {\n return filtered;\n }\n }\n } catch (error) {\n console.warn('[pn-marketweb-header] Invalid menu-themes value', error);\n }\n }\n\n // 2. Fallback → VM\n if (!Array.isArray(menuModeOptions)) {\n return [];\n }\n\n return menuModeOptions\n .map(option => option?.root?.toggleTheme)\n .filter((theme): theme is string => typeof theme === 'string')\n .map(theme => normalizeHeaderTheme(theme as HeaderTheme))\n\n}"]}