@swisspost/internet-header 1.10.0 → 1.12.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 (512) hide show
  1. package/dist/cjs/{if.component-51d000af.js → if.component-2cd3c1ff.js} +1 -1
  2. package/dist/cjs/if.component-2cd3c1ff.js.map +1 -0
  3. package/dist/cjs/{index-87874f19.js → index-4bd0adf1.js} +197 -43
  4. package/dist/cjs/index-4bd0adf1.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +36 -0
  6. package/dist/cjs/index.cjs.js.map +1 -1
  7. package/dist/cjs/{klp-widget.controller-7908f551.js → klp-widget.controller-59fd5d5e.js} +1 -1
  8. package/dist/cjs/{klp-widget.controller-7908f551.js.map → klp-widget.controller-59fd5d5e.js.map} +1 -1
  9. package/dist/cjs/{language.service-672abba5.js → language.service-dbe2a435.js} +11 -6
  10. package/dist/cjs/language.service-dbe2a435.js.map +1 -0
  11. package/dist/cjs/loader.cjs.js +3 -12
  12. package/dist/cjs/loader.cjs.js.map +1 -1
  13. package/dist/cjs/post-internet-breadcrumbs-09754c05.js +3616 -0
  14. package/dist/cjs/post-internet-breadcrumbs-09754c05.js.map +1 -0
  15. package/dist/cjs/post-internet-footer-b51276d8.js +161 -0
  16. package/dist/cjs/post-internet-footer-b51276d8.js.map +1 -0
  17. package/dist/cjs/post-internet-header-5962d752.js +828 -0
  18. package/dist/cjs/post-internet-header-5962d752.js.map +1 -0
  19. package/dist/cjs/post-klp-login-widget-d03de512.js +63 -0
  20. package/dist/cjs/post-klp-login-widget-d03de512.js.map +1 -0
  21. package/dist/cjs/post-klp-login-widget.cjs.entry.js +6 -40
  22. package/dist/cjs/post-klp-login-widget.cjs.entry.js.map +1 -1
  23. package/dist/cjs/post-language-switch-9cd31034.js +106 -0
  24. package/dist/cjs/post-language-switch-9cd31034.js.map +1 -0
  25. package/dist/cjs/post-language-switch.cjs.entry.js +8 -99
  26. package/dist/cjs/post-language-switch.cjs.entry.js.map +1 -1
  27. package/dist/cjs/post-logo-5867ad55.js +25 -0
  28. package/dist/cjs/post-logo-5867ad55.js.map +1 -0
  29. package/dist/cjs/post-logo.cjs.entry.js +4 -18
  30. package/dist/cjs/post-logo.cjs.entry.js.map +1 -1
  31. package/dist/cjs/post-main-navigation-ab81aac6.js +240 -0
  32. package/dist/cjs/post-main-navigation-ab81aac6.js.map +1 -0
  33. package/dist/cjs/post-main-navigation.cjs.entry.js +9 -233
  34. package/dist/cjs/post-main-navigation.cjs.entry.js.map +1 -1
  35. package/dist/cjs/post-meta-navigation-0b73779f.js +26 -0
  36. package/dist/cjs/post-meta-navigation-0b73779f.js.map +1 -0
  37. package/dist/cjs/post-meta-navigation.cjs.entry.js +4 -19
  38. package/dist/cjs/post-meta-navigation.cjs.entry.js.map +1 -1
  39. package/dist/cjs/post-search-2232c291.js +597 -0
  40. package/dist/cjs/post-search-2232c291.js.map +1 -0
  41. package/dist/cjs/post-search.cjs.entry.js +11 -570
  42. package/dist/cjs/post-search.cjs.entry.js.map +1 -1
  43. package/dist/cjs/post-skiplinks-3db1d214.js +52 -0
  44. package/dist/cjs/post-skiplinks-3db1d214.js.map +1 -0
  45. package/dist/cjs/post-skiplinks.cjs.entry.js +6 -45
  46. package/dist/cjs/post-skiplinks.cjs.entry.js.map +1 -1
  47. package/dist/cjs/{store-b99affc1.js → store-77668e50.js} +2 -2
  48. package/dist/cjs/store-77668e50.js.map +1 -0
  49. package/dist/cjs/{svg-icon.component-8e05af84.js → svg-icon.component-5965f301.js} +2 -2
  50. package/dist/cjs/svg-icon.component-5965f301.js.map +1 -0
  51. package/dist/cjs/{svg-sprite.component-f1866070.js → svg-sprite.component-4b5677ef.js} +2 -2
  52. package/dist/cjs/svg-sprite.component-4b5677ef.js.map +1 -0
  53. package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js +11 -3608
  54. package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js.map +1 -1
  55. package/dist/cjs/swisspost-internet-footer.cjs.entry.js +6 -154
  56. package/dist/cjs/swisspost-internet-footer.cjs.entry.js.map +1 -1
  57. package/dist/cjs/swisspost-internet-header.cjs.entry.js +10 -823
  58. package/dist/cjs/swisspost-internet-header.cjs.entry.js.map +1 -1
  59. package/dist/cjs/swisspost-internet-header.cjs.js +3 -6
  60. package/dist/cjs/swisspost-internet-header.cjs.js.map +1 -1
  61. package/dist/cjs/{ui.service-e1ebb6d4.js → ui.service-488151be.js} +1 -1
  62. package/dist/cjs/ui.service-488151be.js.map +1 -0
  63. package/dist/cjs/{utils-60853c5d.js → utils-717975e0.js} +1 -1
  64. package/dist/cjs/utils-717975e0.js.map +1 -0
  65. package/dist/collection/assets/i18n/translations.js +5 -0
  66. package/dist/collection/assets/i18n/translations.js.map +1 -1
  67. package/dist/collection/collection-manifest.json +12 -12
  68. package/dist/collection/components/post-internet-breadcrumbs/components/breadcrumb-list.component.js +4 -4
  69. package/dist/collection/components/post-internet-breadcrumbs/components/focus-trap.component.js +2 -2
  70. package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js +4 -4
  71. package/dist/collection/components/post-internet-breadcrumbs/components/middle-links.component.js +2 -2
  72. package/dist/collection/components/post-internet-breadcrumbs/components/overlay.component.js +3 -3
  73. package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.css +2 -2488
  74. package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js +38 -16
  75. package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js.map +1 -1
  76. package/dist/collection/components/post-internet-footer/components/post-footer-block-address.component.js +2 -2
  77. package/dist/collection/components/post-internet-footer/components/post-footer-block-contact.component.js +1 -1
  78. package/dist/collection/components/post-internet-footer/components/post-footer-block-custom.component.js +1 -1
  79. package/dist/collection/components/post-internet-footer/components/post-footer-block-list.component.js +1 -1
  80. package/dist/collection/components/post-internet-footer/components/post-footer-block-socials.component.js +1 -1
  81. package/dist/collection/components/post-internet-footer/post-internet-footer.css +1 -2308
  82. package/dist/collection/components/post-internet-footer/post-internet-footer.js +8 -8
  83. package/dist/collection/components/post-internet-header/logo-animation/logo-animation.js +3 -3
  84. package/dist/collection/components/post-internet-header/post-internet-header.css +1 -403
  85. package/dist/collection/components/post-internet-header/post-internet-header.js +42 -18
  86. package/dist/collection/components/post-internet-header/post-internet-header.js.map +1 -1
  87. package/dist/collection/components/post-klp-login-widget/klp-widget.controller.js +1 -1
  88. package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.css +2 -1451
  89. package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js +48 -7
  90. package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js.map +1 -1
  91. package/dist/collection/components/post-language-switch/components/post-language-switch-list.js +3 -3
  92. package/dist/collection/components/post-language-switch/post-language-switch.css +1 -370
  93. package/dist/collection/components/post-language-switch/post-language-switch.js +11 -9
  94. package/dist/collection/components/post-language-switch/post-language-switch.js.map +1 -1
  95. package/dist/collection/components/post-logo/post-logo.css +1 -265
  96. package/dist/collection/components/post-logo/post-logo.js +2 -2
  97. package/dist/collection/components/post-main-navigation/components/level-one-action.component.js +2 -2
  98. package/dist/collection/components/post-main-navigation/post-main-navigation.css +1 -641
  99. package/dist/collection/components/post-main-navigation/post-main-navigation.js +18 -13
  100. package/dist/collection/components/post-main-navigation/post-main-navigation.js.map +1 -1
  101. package/dist/collection/components/post-meta-navigation/post-meta-navigation.css +1 -345
  102. package/dist/collection/components/post-meta-navigation/post-meta-navigation.js +2 -2
  103. package/dist/collection/components/post-search/post-search.css +19 -2482
  104. package/dist/collection/components/post-search/post-search.js +42 -18
  105. package/dist/collection/components/post-search/post-search.js.map +1 -1
  106. package/dist/collection/components/post-skiplinks/post-skiplinks.css +1 -21
  107. package/dist/collection/components/post-skiplinks/post-skiplinks.js +4 -4
  108. package/dist/collection/components/post-skiplinks/post-skiplinks.js.map +1 -1
  109. package/dist/collection/data/store.js +1 -1
  110. package/dist/collection/index.js +11 -1
  111. package/dist/collection/index.js.map +1 -1
  112. package/dist/collection/services/config.service.js +10 -10
  113. package/dist/collection/services/config.service.js.map +1 -1
  114. package/dist/collection/services/language.service.js +6 -6
  115. package/dist/collection/services/language.service.js.map +1 -1
  116. package/dist/collection/services/route.service.js +4 -4
  117. package/dist/collection/services/route.service.js.map +1 -1
  118. package/dist/collection/services/search/coveo.service.js +3 -3
  119. package/dist/collection/services/search/parcel.service.js +1 -1
  120. package/dist/collection/services/search/places.service.js +3 -3
  121. package/dist/collection/services/search/search.service.js +2 -2
  122. package/dist/collection/utils/highlighted.component.js +1 -1
  123. package/dist/collection/utils/svg-icon.component.js +1 -1
  124. package/dist/collection/utils/svg-sprite.component.js +1 -1
  125. package/dist/components/index.d.ts +6 -0
  126. package/dist/components/index.js +11 -1
  127. package/dist/components/index.js.map +1 -1
  128. package/dist/components/klp-widget.controller.js.map +1 -1
  129. package/dist/components/language.service.js +9 -4
  130. package/dist/components/language.service.js.map +1 -1
  131. package/dist/components/post-klp-login-widget2.js +19 -2
  132. package/dist/components/post-klp-login-widget2.js.map +1 -1
  133. package/dist/components/post-language-switch2.js +1 -1
  134. package/dist/components/post-language-switch2.js.map +1 -1
  135. package/dist/components/post-logo2.js +1 -1
  136. package/dist/components/post-logo2.js.map +1 -1
  137. package/dist/components/post-main-navigation2.js +1 -1
  138. package/dist/components/post-main-navigation2.js.map +1 -1
  139. package/dist/components/post-meta-navigation2.js +1 -1
  140. package/dist/components/post-meta-navigation2.js.map +1 -1
  141. package/dist/components/post-search2.js +22 -2
  142. package/dist/components/post-search2.js.map +1 -1
  143. package/dist/components/post-skiplinks2.js +1 -1
  144. package/dist/components/post-skiplinks2.js.map +1 -1
  145. package/dist/components/store.js.map +1 -1
  146. package/dist/components/svg-icon.component.js.map +1 -1
  147. package/dist/components/svg-sprite.component.js.map +1 -1
  148. package/dist/components/swisspost-internet-breadcrumbs.js +9 -5
  149. package/dist/components/swisspost-internet-breadcrumbs.js.map +1 -1
  150. package/dist/components/swisspost-internet-footer.js +2 -2
  151. package/dist/components/swisspost-internet-footer.js.map +1 -1
  152. package/dist/components/swisspost-internet-header.js +39 -30
  153. package/dist/components/swisspost-internet-header.js.map +1 -1
  154. package/dist/components/ui.service.js.map +1 -1
  155. package/dist/components/utils.js.map +1 -1
  156. package/dist/docs.d.ts +334 -235
  157. package/dist/docs.json +478 -15
  158. package/dist/esm/{if.component-0fe54385.js → if.component-3a779aca.js} +1 -1
  159. package/dist/esm/if.component-3a779aca.js.map +1 -0
  160. package/dist/esm/{index-82f4f02c.js → index-2b83f5e9.js} +197 -43
  161. package/dist/esm/index-2b83f5e9.js.map +1 -0
  162. package/dist/esm/index.js +21 -1
  163. package/dist/esm/index.js.map +1 -1
  164. package/dist/esm/{klp-widget.controller-30d47ff4.js → klp-widget.controller-2a0a5183.js} +1 -1
  165. package/dist/esm/{klp-widget.controller-30d47ff4.js.map → klp-widget.controller-2a0a5183.js.map} +1 -1
  166. package/dist/esm/{language.service-4289815d.js → language.service-501b09a8.js} +11 -6
  167. package/dist/esm/language.service-501b09a8.js.map +1 -0
  168. package/dist/esm/loader.js +4 -13
  169. package/dist/esm/loader.js.map +1 -1
  170. package/dist/esm/post-internet-breadcrumbs-474f625e.js +3614 -0
  171. package/dist/esm/post-internet-breadcrumbs-474f625e.js.map +1 -0
  172. package/dist/esm/post-internet-footer-273b0d8d.js +159 -0
  173. package/dist/esm/post-internet-footer-273b0d8d.js.map +1 -0
  174. package/dist/esm/post-internet-header-a825bfd6.js +826 -0
  175. package/dist/esm/post-internet-header-a825bfd6.js.map +1 -0
  176. package/dist/esm/post-klp-login-widget-b1306336.js +61 -0
  177. package/dist/esm/post-klp-login-widget-b1306336.js.map +1 -0
  178. package/dist/esm/post-klp-login-widget.entry.js +5 -43
  179. package/dist/esm/post-klp-login-widget.entry.js.map +1 -1
  180. package/dist/esm/post-language-switch-fd570b9d.js +104 -0
  181. package/dist/esm/post-language-switch-fd570b9d.js.map +1 -0
  182. package/dist/esm/post-language-switch.entry.js +7 -102
  183. package/dist/esm/post-language-switch.entry.js.map +1 -1
  184. package/dist/esm/post-logo-cde3c44d.js +23 -0
  185. package/dist/esm/post-logo-cde3c44d.js.map +1 -0
  186. package/dist/esm/post-logo.entry.js +3 -21
  187. package/dist/esm/post-logo.entry.js.map +1 -1
  188. package/dist/esm/post-main-navigation-12eaef9f.js +238 -0
  189. package/dist/esm/post-main-navigation-12eaef9f.js.map +1 -0
  190. package/dist/esm/post-main-navigation.entry.js +8 -236
  191. package/dist/esm/post-main-navigation.entry.js.map +1 -1
  192. package/dist/esm/post-meta-navigation-09e9bdc8.js +24 -0
  193. package/dist/esm/post-meta-navigation-09e9bdc8.js.map +1 -0
  194. package/dist/esm/post-meta-navigation.entry.js +3 -22
  195. package/dist/esm/post-meta-navigation.entry.js.map +1 -1
  196. package/dist/esm/post-search-5c3a10ac.js +595 -0
  197. package/dist/esm/post-search-5c3a10ac.js.map +1 -0
  198. package/dist/esm/post-search.entry.js +10 -573
  199. package/dist/esm/post-search.entry.js.map +1 -1
  200. package/dist/esm/post-skiplinks-b3c32a77.js +50 -0
  201. package/dist/esm/post-skiplinks-b3c32a77.js.map +1 -0
  202. package/dist/esm/post-skiplinks.entry.js +5 -48
  203. package/dist/esm/post-skiplinks.entry.js.map +1 -1
  204. package/dist/esm/{store-44830922.js → store-80b19c12.js} +2 -2
  205. package/dist/esm/store-80b19c12.js.map +1 -0
  206. package/dist/esm/{svg-icon.component-f2fda279.js → svg-icon.component-7295f7cc.js} +2 -2
  207. package/dist/esm/svg-icon.component-7295f7cc.js.map +1 -0
  208. package/dist/esm/{svg-sprite.component-c140294e.js → svg-sprite.component-29439a18.js} +2 -2
  209. package/dist/esm/svg-sprite.component-29439a18.js.map +1 -0
  210. package/dist/esm/swisspost-internet-breadcrumbs.entry.js +10 -3611
  211. package/dist/esm/swisspost-internet-breadcrumbs.entry.js.map +1 -1
  212. package/dist/esm/swisspost-internet-footer.entry.js +5 -157
  213. package/dist/esm/swisspost-internet-footer.entry.js.map +1 -1
  214. package/dist/esm/swisspost-internet-header.entry.js +9 -826
  215. package/dist/esm/swisspost-internet-header.entry.js.map +1 -1
  216. package/dist/esm/swisspost-internet-header.js +4 -7
  217. package/dist/esm/swisspost-internet-header.js.map +1 -1
  218. package/dist/esm/{ui.service-2fbc9c45.js → ui.service-a71cf490.js} +1 -1
  219. package/dist/esm/ui.service-a71cf490.js.map +1 -0
  220. package/dist/esm/{utils-ee79122f.js → utils-3a8ff48f.js} +1 -1
  221. package/dist/esm/utils-3a8ff48f.js.map +1 -0
  222. package/dist/esm-es5/bodyScrollLock.esm-afcc00e3.js +1 -1
  223. package/dist/esm-es5/bodyScrollLock.esm-afcc00e3.js.map +1 -1
  224. package/dist/esm-es5/if.component-3a779aca.js +2 -0
  225. package/dist/esm-es5/index-2b83f5e9.js +2 -0
  226. package/dist/esm-es5/index-2b83f5e9.js.map +1 -0
  227. package/dist/esm-es5/index-d2256e06.js +1 -1
  228. package/dist/esm-es5/index.js +1 -1
  229. package/dist/esm-es5/klp-widget.controller-2a0a5183.js +13 -0
  230. package/dist/esm-es5/{klp-widget.controller-30d47ff4.js.map → klp-widget.controller-2a0a5183.js.map} +1 -1
  231. package/dist/esm-es5/language.service-501b09a8.js +2 -0
  232. package/dist/esm-es5/language.service-501b09a8.js.map +1 -0
  233. package/dist/esm-es5/loader.js +1 -1
  234. package/dist/esm-es5/loader.js.map +1 -1
  235. package/dist/esm-es5/post-internet-breadcrumbs-474f625e.js +7 -0
  236. package/dist/esm-es5/post-internet-breadcrumbs-474f625e.js.map +1 -0
  237. package/dist/esm-es5/post-internet-footer-273b0d8d.js +2 -0
  238. package/dist/esm-es5/post-internet-footer-273b0d8d.js.map +1 -0
  239. package/dist/esm-es5/post-internet-header-a825bfd6.js +2 -0
  240. package/dist/esm-es5/post-internet-header-a825bfd6.js.map +1 -0
  241. package/dist/esm-es5/post-klp-login-widget-b1306336.js +2 -0
  242. package/dist/esm-es5/post-klp-login-widget-b1306336.js.map +1 -0
  243. package/dist/esm-es5/post-klp-login-widget.entry.js +1 -1
  244. package/dist/esm-es5/post-klp-login-widget.entry.js.map +1 -1
  245. package/dist/esm-es5/post-language-switch-fd570b9d.js +2 -0
  246. package/dist/esm-es5/post-language-switch-fd570b9d.js.map +1 -0
  247. package/dist/esm-es5/post-language-switch.entry.js +1 -1
  248. package/dist/esm-es5/post-language-switch.entry.js.map +1 -1
  249. package/dist/esm-es5/post-logo-cde3c44d.js +2 -0
  250. package/dist/esm-es5/post-logo-cde3c44d.js.map +1 -0
  251. package/dist/esm-es5/post-logo.entry.js +1 -1
  252. package/dist/esm-es5/post-logo.entry.js.map +1 -1
  253. package/dist/esm-es5/post-main-navigation-12eaef9f.js +2 -0
  254. package/dist/esm-es5/post-main-navigation-12eaef9f.js.map +1 -0
  255. package/dist/esm-es5/post-main-navigation.entry.js +1 -1
  256. package/dist/esm-es5/post-main-navigation.entry.js.map +1 -1
  257. package/dist/esm-es5/post-meta-navigation-09e9bdc8.js +2 -0
  258. package/dist/esm-es5/post-meta-navigation-09e9bdc8.js.map +1 -0
  259. package/dist/esm-es5/post-meta-navigation.entry.js +1 -1
  260. package/dist/esm-es5/post-meta-navigation.entry.js.map +1 -1
  261. package/dist/esm-es5/post-search-5c3a10ac.js +2 -0
  262. package/dist/esm-es5/post-search-5c3a10ac.js.map +1 -0
  263. package/dist/esm-es5/post-search.entry.js +1 -1
  264. package/dist/esm-es5/post-search.entry.js.map +1 -1
  265. package/dist/esm-es5/post-skiplinks-b3c32a77.js +2 -0
  266. package/dist/esm-es5/post-skiplinks-b3c32a77.js.map +1 -0
  267. package/dist/esm-es5/post-skiplinks.entry.js +1 -1
  268. package/dist/esm-es5/post-skiplinks.entry.js.map +1 -1
  269. package/dist/esm-es5/store-80b19c12.js +2 -0
  270. package/dist/esm-es5/store-80b19c12.js.map +1 -0
  271. package/dist/esm-es5/{svg-icon.component-f2fda279.js → svg-icon.component-7295f7cc.js} +2 -2
  272. package/dist/esm-es5/{svg-sprite.component-c140294e.js → svg-sprite.component-29439a18.js} +2 -2
  273. package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js +1 -6
  274. package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js.map +1 -1
  275. package/dist/esm-es5/swisspost-internet-footer.entry.js +1 -1
  276. package/dist/esm-es5/swisspost-internet-footer.entry.js.map +1 -1
  277. package/dist/esm-es5/swisspost-internet-header.entry.js +1 -1
  278. package/dist/esm-es5/swisspost-internet-header.entry.js.map +1 -1
  279. package/dist/esm-es5/swisspost-internet-header.js +1 -1
  280. package/dist/esm-es5/swisspost-internet-header.js.map +1 -1
  281. package/dist/esm-es5/{ui.service-2fbc9c45.js → ui.service-a71cf490.js} +2 -2
  282. package/dist/esm-es5/{utils-ee79122f.js → utils-3a8ff48f.js} +1 -1
  283. package/dist/swisspost-internet-header/index.esm.js +1 -1
  284. package/dist/swisspost-internet-header/p-0096509c.js +2 -0
  285. package/dist/swisspost-internet-header/p-0096509c.js.map +1 -0
  286. package/dist/swisspost-internet-header/p-05eea2be.js +2 -0
  287. package/dist/swisspost-internet-header/p-05eea2be.js.map +1 -0
  288. package/dist/swisspost-internet-header/p-0d61ca4e.system.entry.js +2 -0
  289. package/dist/swisspost-internet-header/{p-0c5624c0.system.js → p-0e776d6e.system.js} +2 -2
  290. package/dist/swisspost-internet-header/p-18e9ce89.system.js +2 -0
  291. package/dist/swisspost-internet-header/p-18e9ce89.system.js.map +1 -0
  292. package/dist/swisspost-internet-header/p-1a9fcba5.entry.js +2 -0
  293. package/dist/swisspost-internet-header/p-1a9fcba5.entry.js.map +1 -0
  294. package/dist/swisspost-internet-header/p-237a408c.entry.js +2 -0
  295. package/dist/swisspost-internet-header/p-237a408c.entry.js.map +1 -0
  296. package/dist/swisspost-internet-header/p-2470951e.js +2 -0
  297. package/dist/swisspost-internet-header/p-2470951e.js.map +1 -0
  298. package/dist/swisspost-internet-header/p-2eb179a7.entry.js +2 -0
  299. package/dist/swisspost-internet-header/p-2eb179a7.entry.js.map +1 -0
  300. package/dist/swisspost-internet-header/p-2fb1a3ce.system.js +2 -0
  301. package/dist/swisspost-internet-header/{p-cf9fb780.system.entry.js.map → p-2fb1a3ce.system.js.map} +1 -1
  302. package/dist/swisspost-internet-header/{p-8bf099a8.js → p-3339310e.js} +1 -1
  303. package/dist/swisspost-internet-header/p-3339310e.js.map +1 -0
  304. package/dist/swisspost-internet-header/p-3672587a.entry.js +2 -0
  305. package/dist/swisspost-internet-header/p-3672587a.entry.js.map +1 -0
  306. package/dist/swisspost-internet-header/p-39785e3d.system.entry.js +2 -0
  307. package/dist/swisspost-internet-header/p-39785e3d.system.entry.js.map +1 -0
  308. package/dist/swisspost-internet-header/p-4248f499.system.entry.js +2 -0
  309. package/dist/swisspost-internet-header/p-4248f499.system.entry.js.map +1 -0
  310. package/dist/swisspost-internet-header/p-56764f7d.system.js +2 -0
  311. package/dist/swisspost-internet-header/{p-a691c791.system.entry.js.map → p-56764f7d.system.js.map} +1 -1
  312. package/dist/swisspost-internet-header/{p-66d1bf9a.js → p-5a897619.js} +2 -2
  313. package/dist/swisspost-internet-header/p-5a897619.js.map +1 -0
  314. package/dist/swisspost-internet-header/p-5adcdd91.system.js +2 -0
  315. package/dist/swisspost-internet-header/p-5adcdd91.system.js.map +1 -0
  316. package/dist/swisspost-internet-header/{p-b762fba9.js → p-60ea6000.js} +2 -2
  317. package/dist/swisspost-internet-header/p-60ea6000.js.map +1 -0
  318. package/dist/swisspost-internet-header/p-6145b5f1.system.js +2 -0
  319. package/dist/swisspost-internet-header/p-6145b5f1.system.js.map +1 -0
  320. package/dist/swisspost-internet-header/p-61528220.js +2 -0
  321. package/dist/swisspost-internet-header/p-61528220.js.map +1 -0
  322. package/dist/swisspost-internet-header/{p-459c3983.js → p-624d732c.js} +2 -2
  323. package/dist/swisspost-internet-header/p-624d732c.js.map +1 -0
  324. package/dist/swisspost-internet-header/p-65ce36ba.entry.js +2 -0
  325. package/dist/swisspost-internet-header/p-65ce36ba.entry.js.map +1 -0
  326. package/dist/swisspost-internet-header/p-70df9137.js +2 -0
  327. package/dist/swisspost-internet-header/p-70df9137.js.map +1 -0
  328. package/dist/swisspost-internet-header/{p-fb82b748.system.js → p-74fea9b8.system.js} +2 -2
  329. package/dist/swisspost-internet-header/p-771114f0.system.js +2 -0
  330. package/dist/swisspost-internet-header/p-771114f0.system.js.map +1 -0
  331. package/dist/swisspost-internet-header/p-78e8a405.js +2 -0
  332. package/dist/swisspost-internet-header/p-78e8a405.js.map +1 -0
  333. package/dist/swisspost-internet-header/p-7a94a2d7.system.js +2 -0
  334. package/dist/swisspost-internet-header/{p-34da85e6.system.entry.js.map → p-7a94a2d7.system.js.map} +1 -1
  335. package/dist/swisspost-internet-header/p-7e78b029.system.entry.js +2 -0
  336. package/dist/swisspost-internet-header/p-7e78b029.system.entry.js.map +1 -0
  337. package/dist/swisspost-internet-header/p-8ddbca59.system.entry.js +2 -0
  338. package/dist/swisspost-internet-header/p-8ddbca59.system.entry.js.map +1 -0
  339. package/dist/swisspost-internet-header/p-96618f42.system.js +2 -0
  340. package/dist/swisspost-internet-header/{p-3c8504b4.system.entry.js.map → p-96618f42.system.js.map} +1 -1
  341. package/dist/swisspost-internet-header/p-986a52bc.system.js +2 -0
  342. package/dist/swisspost-internet-header/p-9af33755.system.js +2 -0
  343. package/dist/swisspost-internet-header/p-9af33755.system.js.map +1 -0
  344. package/dist/swisspost-internet-header/p-9b4d5e90.system.js +1 -1
  345. package/dist/swisspost-internet-header/p-9c385f74.system.js +3 -0
  346. package/dist/swisspost-internet-header/p-9c385f74.system.js.map +1 -0
  347. package/dist/swisspost-internet-header/p-a0f5c014.system.entry.js +2 -0
  348. package/dist/swisspost-internet-header/p-a0f5c014.system.entry.js.map +1 -0
  349. package/dist/swisspost-internet-header/p-a119b38d.js.map +1 -1
  350. package/dist/swisspost-internet-header/p-a290e3e2.system.entry.js +2 -0
  351. package/dist/swisspost-internet-header/p-a290e3e2.system.entry.js.map +1 -0
  352. package/dist/swisspost-internet-header/p-a58fc500.system.entry.js +2 -0
  353. package/dist/swisspost-internet-header/p-a58fc500.system.entry.js.map +1 -0
  354. package/dist/swisspost-internet-header/p-a7de7323.system.js +2 -0
  355. package/dist/swisspost-internet-header/p-aab6679b.js +2 -0
  356. package/dist/swisspost-internet-header/p-aab6679b.js.map +1 -0
  357. package/dist/swisspost-internet-header/{p-bf99c127.system.js → p-ad9a417b.system.js} +2 -2
  358. package/dist/swisspost-internet-header/p-ad9a417b.system.js.map +1 -0
  359. package/dist/swisspost-internet-header/p-aeaa2c26.entry.js +2 -0
  360. package/dist/swisspost-internet-header/p-aeaa2c26.entry.js.map +1 -0
  361. package/dist/swisspost-internet-header/p-b3014611.system.js +1 -1
  362. package/dist/swisspost-internet-header/p-b3014611.system.js.map +1 -1
  363. package/dist/swisspost-internet-header/{p-45db66a6.js → p-bbfd407b.js} +1 -1
  364. package/dist/swisspost-internet-header/p-bbfd407b.js.map +1 -0
  365. package/dist/swisspost-internet-header/p-bcd01683.system.js +13 -0
  366. package/dist/swisspost-internet-header/{p-b4c0cb5a.system.js.map → p-bcd01683.system.js.map} +1 -1
  367. package/dist/swisspost-internet-header/p-c4011fc6.system.entry.js +2 -0
  368. package/dist/swisspost-internet-header/p-c4011fc6.system.entry.js.map +1 -0
  369. package/dist/swisspost-internet-header/p-c7945779.system.js +7 -0
  370. package/dist/swisspost-internet-header/p-c7945779.system.js.map +1 -0
  371. package/dist/swisspost-internet-header/p-c8d9cc8c.js +2 -0
  372. package/dist/swisspost-internet-header/p-c8d9cc8c.js.map +1 -0
  373. package/dist/swisspost-internet-header/p-c99a43b0.entry.js +2 -0
  374. package/dist/swisspost-internet-header/p-c99a43b0.entry.js.map +1 -0
  375. package/dist/swisspost-internet-header/{p-a2f9d462.js → p-cf06f703.js} +1 -1
  376. package/dist/swisspost-internet-header/p-cf06f703.js.map +1 -0
  377. package/dist/swisspost-internet-header/p-d9f67b45.entry.js +2 -0
  378. package/dist/swisspost-internet-header/p-d9f67b45.entry.js.map +1 -0
  379. package/dist/swisspost-internet-header/p-dc8296bd.js +2 -0
  380. package/dist/swisspost-internet-header/p-dc8296bd.js.map +1 -0
  381. package/dist/swisspost-internet-header/p-de27fab4.entry.js +2 -0
  382. package/dist/swisspost-internet-header/p-de27fab4.entry.js.map +1 -0
  383. package/dist/swisspost-internet-header/p-dee824b8.js +2 -0
  384. package/dist/swisspost-internet-header/p-dee824b8.js.map +1 -0
  385. package/dist/swisspost-internet-header/p-e187ba33.js +7 -0
  386. package/dist/swisspost-internet-header/p-e187ba33.js.map +1 -0
  387. package/dist/swisspost-internet-header/p-e2e1c5d4.js +3 -0
  388. package/dist/swisspost-internet-header/p-e2e1c5d4.js.map +1 -0
  389. package/dist/swisspost-internet-header/p-ee5e0cc6.system.js +2 -0
  390. package/dist/swisspost-internet-header/{p-fed8d74d.system.entry.js.map → p-ee5e0cc6.system.js.map} +1 -1
  391. package/dist/swisspost-internet-header/p-f25c234f.entry.js +2 -0
  392. package/dist/swisspost-internet-header/p-f25c234f.entry.js.map +1 -0
  393. package/dist/swisspost-internet-header/{p-edb2802d.system.js → p-f2a43ce2.system.js} +1 -1
  394. package/dist/swisspost-internet-header/p-f2f69ff4.system.js +2 -0
  395. package/dist/swisspost-internet-header/p-f2f69ff4.system.js.map +1 -0
  396. package/dist/swisspost-internet-header/p-f5876cc8.js +2 -0
  397. package/dist/swisspost-internet-header/p-f5876cc8.js.map +1 -0
  398. package/dist/swisspost-internet-header/p-f887c8bb.system.js +1 -1
  399. package/dist/swisspost-internet-header/p-fc2417e7.system.js +2 -0
  400. package/dist/swisspost-internet-header/p-fc2417e7.system.js.map +1 -0
  401. package/dist/swisspost-internet-header/p-fef30370.system.entry.js +2 -0
  402. package/dist/swisspost-internet-header/p-fef30370.system.entry.js.map +1 -0
  403. package/dist/swisspost-internet-header/swisspost-internet-header.css +2 -2
  404. package/dist/swisspost-internet-header/swisspost-internet-header.esm.js +1 -1
  405. package/dist/swisspost-internet-header/swisspost-internet-header.esm.js.map +1 -1
  406. package/dist/swisspost-internet-header/swisspost-internet-header.js +2 -6
  407. package/dist/types/assets/i18n/translations.d.ts +5 -0
  408. package/dist/types/components/post-internet-breadcrumbs/post-internet-breadcrumbs.d.ts +5 -1
  409. package/dist/types/components/post-internet-header/post-internet-header.d.ts +4 -0
  410. package/dist/types/components/post-klp-login-widget/post-klp-login-widget.d.ts +5 -1
  411. package/dist/types/components/post-search/post-search.d.ts +6 -0
  412. package/dist/types/components/post-skiplinks/post-skiplinks.d.ts +1 -1
  413. package/dist/types/components.d.ts +70 -0
  414. package/dist/types/index.d.ts +10 -0
  415. package/dist/types/services/language.service.d.ts +5 -0
  416. package/dist/types/stencil-public-runtime.d.ts +38 -5
  417. package/loader/index.d.ts +1 -1
  418. package/package.json +12 -14
  419. package/dist/cjs/if.component-51d000af.js.map +0 -1
  420. package/dist/cjs/index-87874f19.js.map +0 -1
  421. package/dist/cjs/language.service-672abba5.js.map +0 -1
  422. package/dist/cjs/store-b99affc1.js.map +0 -1
  423. package/dist/cjs/svg-icon.component-8e05af84.js.map +0 -1
  424. package/dist/cjs/svg-sprite.component-f1866070.js.map +0 -1
  425. package/dist/cjs/ui.service-e1ebb6d4.js.map +0 -1
  426. package/dist/cjs/utils-60853c5d.js.map +0 -1
  427. package/dist/esm/if.component-0fe54385.js.map +0 -1
  428. package/dist/esm/index-82f4f02c.js.map +0 -1
  429. package/dist/esm/language.service-4289815d.js.map +0 -1
  430. package/dist/esm/polyfills/css-shim.js +0 -1
  431. package/dist/esm/store-44830922.js.map +0 -1
  432. package/dist/esm/svg-icon.component-f2fda279.js.map +0 -1
  433. package/dist/esm/svg-sprite.component-c140294e.js.map +0 -1
  434. package/dist/esm/ui.service-2fbc9c45.js.map +0 -1
  435. package/dist/esm/utils-ee79122f.js.map +0 -1
  436. package/dist/esm-es5/if.component-0fe54385.js +0 -2
  437. package/dist/esm-es5/index-82f4f02c.js +0 -2
  438. package/dist/esm-es5/index-82f4f02c.js.map +0 -1
  439. package/dist/esm-es5/klp-widget.controller-30d47ff4.js +0 -13
  440. package/dist/esm-es5/language.service-4289815d.js +0 -2
  441. package/dist/esm-es5/language.service-4289815d.js.map +0 -1
  442. package/dist/esm-es5/store-44830922.js +0 -2
  443. package/dist/esm-es5/store-44830922.js.map +0 -1
  444. package/dist/swisspost-internet-header/p-02df8ca4.entry.js +0 -2
  445. package/dist/swisspost-internet-header/p-02df8ca4.entry.js.map +0 -1
  446. package/dist/swisspost-internet-header/p-0de024c6.system.entry.js +0 -2
  447. package/dist/swisspost-internet-header/p-0de024c6.system.entry.js.map +0 -1
  448. package/dist/swisspost-internet-header/p-11d05acc.js +0 -2
  449. package/dist/swisspost-internet-header/p-11d05acc.js.map +0 -1
  450. package/dist/swisspost-internet-header/p-1d455921.system.js +0 -3
  451. package/dist/swisspost-internet-header/p-1d455921.system.js.map +0 -1
  452. package/dist/swisspost-internet-header/p-1ec4e0ee.system.js +0 -2
  453. package/dist/swisspost-internet-header/p-1ec4e0ee.system.js.map +0 -1
  454. package/dist/swisspost-internet-header/p-2ab12ef9.entry.js +0 -2
  455. package/dist/swisspost-internet-header/p-2ab12ef9.entry.js.map +0 -1
  456. package/dist/swisspost-internet-header/p-33f6c69f.entry.js +0 -2
  457. package/dist/swisspost-internet-header/p-33f6c69f.entry.js.map +0 -1
  458. package/dist/swisspost-internet-header/p-34da85e6.system.entry.js +0 -2
  459. package/dist/swisspost-internet-header/p-3c8504b4.system.entry.js +0 -2
  460. package/dist/swisspost-internet-header/p-3cfe4534.entry.js +0 -2
  461. package/dist/swisspost-internet-header/p-3cfe4534.entry.js.map +0 -1
  462. package/dist/swisspost-internet-header/p-43320028.system.entry.js +0 -2
  463. package/dist/swisspost-internet-header/p-43320028.system.entry.js.map +0 -1
  464. package/dist/swisspost-internet-header/p-459c3983.js.map +0 -1
  465. package/dist/swisspost-internet-header/p-45db66a6.js.map +0 -1
  466. package/dist/swisspost-internet-header/p-50ea2036.system.js +0 -2
  467. package/dist/swisspost-internet-header/p-51c15273.entry.js +0 -2
  468. package/dist/swisspost-internet-header/p-51c15273.entry.js.map +0 -1
  469. package/dist/swisspost-internet-header/p-55bfdf22.system.js +0 -2
  470. package/dist/swisspost-internet-header/p-55fbc914.entry.js +0 -2
  471. package/dist/swisspost-internet-header/p-55fbc914.entry.js.map +0 -1
  472. package/dist/swisspost-internet-header/p-5d893017.system.js +0 -2
  473. package/dist/swisspost-internet-header/p-5d893017.system.js.map +0 -1
  474. package/dist/swisspost-internet-header/p-66d1bf9a.js.map +0 -1
  475. package/dist/swisspost-internet-header/p-6bb07a80.entry.js +0 -2
  476. package/dist/swisspost-internet-header/p-6bb07a80.entry.js.map +0 -1
  477. package/dist/swisspost-internet-header/p-6dc0fc47.system.entry.js +0 -2
  478. package/dist/swisspost-internet-header/p-6dc0fc47.system.entry.js.map +0 -1
  479. package/dist/swisspost-internet-header/p-75dde9a2.entry.js +0 -7
  480. package/dist/swisspost-internet-header/p-75dde9a2.entry.js.map +0 -1
  481. package/dist/swisspost-internet-header/p-781ea7c2.system.entry.js +0 -2
  482. package/dist/swisspost-internet-header/p-781ea7c2.system.entry.js.map +0 -1
  483. package/dist/swisspost-internet-header/p-88aac12c.system.js +0 -2
  484. package/dist/swisspost-internet-header/p-8bf099a8.js.map +0 -1
  485. package/dist/swisspost-internet-header/p-8e0a4d18.js +0 -3
  486. package/dist/swisspost-internet-header/p-8e0a4d18.js.map +0 -1
  487. package/dist/swisspost-internet-header/p-a2f9d462.js.map +0 -1
  488. package/dist/swisspost-internet-header/p-a5f5bb55.js +0 -2
  489. package/dist/swisspost-internet-header/p-a5f5bb55.js.map +0 -1
  490. package/dist/swisspost-internet-header/p-a691c791.system.entry.js +0 -2
  491. package/dist/swisspost-internet-header/p-b4c0cb5a.system.js +0 -13
  492. package/dist/swisspost-internet-header/p-b5758d6a.system.entry.js +0 -7
  493. package/dist/swisspost-internet-header/p-b5758d6a.system.entry.js.map +0 -1
  494. package/dist/swisspost-internet-header/p-b762fba9.js.map +0 -1
  495. package/dist/swisspost-internet-header/p-bf99c127.system.js.map +0 -1
  496. package/dist/swisspost-internet-header/p-cbba35a8.entry.js +0 -2
  497. package/dist/swisspost-internet-header/p-cbba35a8.entry.js.map +0 -1
  498. package/dist/swisspost-internet-header/p-cf9fb780.system.entry.js +0 -2
  499. package/dist/swisspost-internet-header/p-db8023e1.entry.js +0 -2
  500. package/dist/swisspost-internet-header/p-db8023e1.entry.js.map +0 -1
  501. package/dist/swisspost-internet-header/p-fed8d74d.system.entry.js +0 -2
  502. /package/dist/esm-es5/{if.component-0fe54385.js.map → if.component-3a779aca.js.map} +0 -0
  503. /package/dist/esm-es5/{svg-icon.component-f2fda279.js.map → svg-icon.component-7295f7cc.js.map} +0 -0
  504. /package/dist/esm-es5/{svg-sprite.component-c140294e.js.map → svg-sprite.component-29439a18.js.map} +0 -0
  505. /package/dist/esm-es5/{ui.service-2fbc9c45.js.map → ui.service-a71cf490.js.map} +0 -0
  506. /package/dist/esm-es5/{utils-ee79122f.js.map → utils-3a8ff48f.js.map} +0 -0
  507. /package/dist/swisspost-internet-header/{p-50ea2036.system.js.map → p-0d61ca4e.system.entry.js.map} +0 -0
  508. /package/dist/swisspost-internet-header/{p-0c5624c0.system.js.map → p-0e776d6e.system.js.map} +0 -0
  509. /package/dist/swisspost-internet-header/{p-fb82b748.system.js.map → p-74fea9b8.system.js.map} +0 -0
  510. /package/dist/swisspost-internet-header/{p-88aac12c.system.js.map → p-986a52bc.system.js.map} +0 -0
  511. /package/dist/swisspost-internet-header/{p-55bfdf22.system.js.map → p-a7de7323.system.js.map} +0 -0
  512. /package/dist/swisspost-internet-header/{p-edb2802d.system.js.map → p-f2a43ce2.system.js.map} +0 -0
@@ -1,16 +1,17 @@
1
- import { Host, h } from '@stencil/core';
2
- import { throttle } from 'throttle-debounce';
3
- import { disableBodyScroll, enableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';
4
- import { state } from '../../data/store';
5
- import { getSearchRedirectUrl, equalizeArrays } from '../../services/search/search.service';
6
- import { getCoveoSuggestions } from '../../services/search/coveo.service';
7
- import { getPlacesUrl, highlightPlacesString, queryPlaces, } from '../../services/search/places.service';
8
- import { userPrefersReducedMotion, elementHasTransition } from '../../services/ui.service';
9
- import { HighlightedText } from '../../utils/highlighted.component';
10
- import { SvgSprite } from '../../utils/svg-sprite.component';
11
- import { SvgIcon } from '../../utils/svg-icon.component';
12
- import { getParcelSuggestion } from '../../services/search/parcel.service';
13
- import { If } from '../../utils/if.component';
1
+ import { h, Host } from "@stencil/core";
2
+ import { throttle } from "throttle-debounce";
3
+ import { clearAllBodyScrollLocks, disableBodyScroll, enableBodyScroll } from "body-scroll-lock";
4
+ import { state } from "../../data/store";
5
+ import { equalizeArrays, getSearchRedirectUrl } from "../../services/search/search.service";
6
+ import { getCoveoSuggestions } from "../../services/search/coveo.service";
7
+ import { getPlacesUrl, highlightPlacesString, queryPlaces, } from "../../services/search/places.service";
8
+ import { elementHasTransition, userPrefersReducedMotion } from "../../services/ui.service";
9
+ import { HighlightedText } from "../../utils/highlighted.component";
10
+ import { SvgSprite } from "../../utils/svg-sprite.component";
11
+ import { SvgIcon } from "../../utils/svg-icon.component";
12
+ import { getParcelSuggestion } from "../../services/search/parcel.service";
13
+ import { If } from "../../utils/if.component";
14
+ import { translate } from "../../services/language.service";
14
15
  export class PostSearch {
15
16
  constructor() {
16
17
  this.searchDropdownOpen = false;
@@ -127,6 +128,15 @@ export class PostSearch {
127
128
  return;
128
129
  }
129
130
  const query = this.searchBox.value.trim();
131
+ // shows or hides clearButton depending on the content of the searchbar
132
+ if (this.clearButton) {
133
+ if (query !== '') {
134
+ this.clearButton.style.visibility = 'visible';
135
+ }
136
+ else {
137
+ this.clearButton.style.visibility = 'hidden';
138
+ }
139
+ }
130
140
  const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([
131
141
  queryPlaces(query),
132
142
  getCoveoSuggestions(query),
@@ -143,6 +153,16 @@ export class PostSearch {
143
153
  }
144
154
  this.deselectSuggestion();
145
155
  }
156
+ /**
157
+ * clear Search box
158
+ * calls handleSearchInput to update/remove suggestions
159
+ */
160
+ handleClearSearchBox() {
161
+ if (this.searchBox !== undefined) {
162
+ this.searchBox.value = '';
163
+ this.handleSearchInput();
164
+ }
165
+ }
146
166
  /**
147
167
  * Start search on enter
148
168
  * @param event
@@ -268,7 +288,7 @@ export class PostSearch {
268
288
  const showPortalRecommendations = ((_b = this.searchBox) === null || _b === void 0 ? void 0 : _b.value) === '' && ((_c = search.searchRecommendations) === null || _c === void 0 ? void 0 : _c.links.length) > 0;
269
289
  return (h(Host, { role: "search" }, h(SvgSprite, null), h("div", { class: "search" }, h("button", { id: "post-internet-header-search-button", class: "search-button", type: "button", "aria-expanded": `${this.searchDropdownOpen}`, onClick: e => void this.toggleDropdown(e) }, h("span", { class: "visually-hidden" }, this.searchDropdownOpen
270
290
  ? translations.searchToggleExpanded
271
- : translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", role: "searchbox", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => void this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => void this.startSearch(), class: "start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { id: "post-internet-header-search-recommendations-title", class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions(), "aria-labelledby": showPortalRecommendations
291
+ : translations.searchToggle), h(SvgIcon, { name: this.searchDropdownOpen ? 'pi-close' : 'pi-search' })), h(If, { condition: this.searchDropdownOpen }, h("div", { class: "flyout", ref: e => (this.searchFlyout = e) }, h("div", { class: "container box" }, h("div", { class: "row" }, h("div", { class: "col-xs-12 col-md-10 col-lg-8" }, h("div", { class: "form-group form-floating" }, h("input", { type: "text", role: "searchbox", id: "searchBox", class: "form-control form-control-lg", placeholder: translations.flyoutSearchBoxFloatingLabel, autocomplete: "off", ref: el => (this.searchBox = el), onInput: () => void this.handleSearchInput(), onKeyDown: e => this.handleKeyDown(e) }), h("label", { htmlFor: "searchBox" }, translations.flyoutSearchBoxFloatingLabel), h("button", { onClick: () => this.handleClearSearchBox(), class: "clear-search-button", type: "reset", id: "clearButton", ref: el => (this.clearButton = el) }, h("span", { class: "visually-hidden" }, translate('Delete search term')), h(SvgIcon, { name: "pi-close" })), h("button", { onClick: () => void this.startSearch(), class: "start-search-button" }, h("span", { class: "visually-hidden" }, translations.searchSubmit), h(SvgIcon, { name: "pi-search" }))), showPortalRecommendations && (h("h2", { id: "post-internet-header-search-recommendations-title", class: "bold" }, search.searchRecommendations.title)), h("ul", { class: "suggestions no-list", onMouseLeave: () => this.handleMouseLeaveSuggestions(), "aria-labelledby": showPortalRecommendations
272
292
  ? 'post-internet-header-search-recommendations-title'
273
293
  : undefined }, showPortalRecommendations &&
274
294
  search.searchRecommendations.links.map(recommendation => (h("li", { key: recommendation.href }, h("a", { class: "nav-link search-recommendation", href: new URL(recommendation.href, 'https://post.ch').href, "data-suggestion-text": recommendation.label, onMouseEnter: e => this.handleMouseEnterSuggestion(e), onClick: () => this.trackRecommendationClick(recommendation) }, h("span", { class: "search-recommendation__icon", innerHTML: recommendation.inlineSvg }), h("span", null, recommendation.label))))), isParcelTrackingNr && (h("li", null, h("a", { class: "nav-link parcel-suggestion", href: this.parcelSuggestion.url, "data-suggestion-text": (_d = this.searchBox) === null || _d === void 0 ? void 0 : _d.value, onMouseEnter: e => this.handleMouseEnterSuggestion(e) }, h(SvgIcon, { name: "pi-letter-parcel" }), h("span", { class: "bold" }, (_f = (_e = this.parcelSuggestion) === null || _e === void 0 ? void 0 : _e.sending) === null || _f === void 0 ? void 0 :
@@ -325,7 +345,8 @@ export class PostSearch {
325
345
  "references": {
326
346
  "DropdownEvent": {
327
347
  "location": "import",
328
- "path": "../../models/header.model"
348
+ "path": "../../models/header.model",
349
+ "id": "src/models/header.model.ts::DropdownEvent"
329
350
  }
330
351
  }
331
352
  }
@@ -345,7 +366,8 @@ export class PostSearch {
345
366
  }],
346
367
  "references": {
347
368
  "Promise": {
348
- "location": "global"
369
+ "location": "global",
370
+ "id": "global::Promise"
349
371
  }
350
372
  },
351
373
  "return": "Promise<boolean>"
@@ -367,10 +389,12 @@ export class PostSearch {
367
389
  "parameters": [],
368
390
  "references": {
369
391
  "Promise": {
370
- "location": "global"
392
+ "location": "global",
393
+ "id": "global::Promise"
371
394
  },
372
395
  "HTMLElement": {
373
- "location": "global"
396
+ "location": "global",
397
+ "id": "global::HTMLElement"
374
398
  }
375
399
  },
376
400
  "return": "Promise<void>"
@@ -1 +1 @@
1
- {"version":3,"file":"post-search.js","sourceRoot":"","sources":["../../../../src/components/post-search/post-search.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, State, Event, EventEmitter, Method, Element } from '@stencil/core';\nimport { throttle } from 'throttle-debounce';\nimport { disableBodyScroll, enableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport { state } from '../../data/store';\nimport { CoveoCompletion } from '../../models/coveo.model';\nimport { GeocodeLocation } from '../../models/geocode.model';\nimport { TagManagerDataLayer } from '../../models/general.model';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n ISearchRecommendation,\n IsFocusable,\n} from '../../models/header.model';\nimport { getSearchRedirectUrl, equalizeArrays } from '../../services/search/search.service';\nimport { getCoveoSuggestions } from '../../services/search/coveo.service';\nimport {\n getPlacesUrl,\n highlightPlacesString,\n queryPlaces,\n} from '../../services/search/places.service';\nimport { userPrefersReducedMotion, elementHasTransition } from '../../services/ui.service';\nimport { HighlightedText } from '../../utils/highlighted.component';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { TrackAndTraceInfo } from '../../models/track-and-trace.model';\nimport { getParcelSuggestion } from '../../services/search/parcel.service';\nimport { If } from '../../utils/if.component';\n\n@Component({\n tag: 'post-search',\n styleUrl: 'post-search.scss',\n shadow: true,\n})\nexport class PostSearch implements HasDropdown, IsFocusable {\n @State() searchDropdownOpen = false;\n @State() coveoSuggestions: CoveoCompletion[] = [];\n @State() placeSuggestions: GeocodeLocation[] = [];\n @State() parcelSuggestion: (TrackAndTraceInfo & { url: string }) | null = null;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Element() host: DropdownElement;\n private searchBox?: HTMLInputElement;\n private searchFlyout: HTMLElement | undefined;\n private throttledResize: throttle<() => void>;\n\n connectedCallback() {\n this.throttledResize = throttle(300, () => this.handleResize());\n window.addEventListener('resize', this.throttledResize, { passive: true });\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this.throttledResize);\n clearAllBodyScrollLocks();\n }\n\n componentWillUpdate() {\n // Check if search flyout got set to close\n if (this.searchFlyout && !this.searchDropdownOpen) {\n this.searchFlyout.classList.remove('open');\n\n // Check if element has transition applied and whether user prefers to see animations or not\n if (elementHasTransition(this.searchFlyout, 'transform') && !userPrefersReducedMotion()) {\n // Wait for CSS transition 'transform' to end before continuing\n return new Promise<boolean>(resolve => {\n if (this.searchFlyout === undefined) {\n return resolve(true);\n }\n\n this.searchFlyout.addEventListener('transitionend', event => {\n if (event.propertyName === 'transform') {\n resolve(true);\n }\n });\n });\n }\n }\n }\n\n componentDidUpdate() {\n // Search flyout got set to open\n if (this.searchFlyout && this.searchDropdownOpen) {\n // Force browser to redraw/refresh DOM before adding 'open' class\n this.searchFlyout.getBoundingClientRect();\n this.searchFlyout.classList.add('open');\n }\n\n // Focus on the searchBox whenever the dropdown is opened\n if (this.searchDropdownOpen && this.searchBox) {\n this.searchBox.focus({ preventScroll: true });\n }\n }\n\n public async toggleDropdown(event?: Event): Promise<boolean>;\n public async toggleDropdown(force?: boolean): Promise<boolean>;\n\n /**\n * Toggle the dropdown and optionally force an open/closed state\n * @param force Boolean to force open/closed state\n * @returns Boolean indicating open state of the component\n */\n @Method()\n async toggleDropdown(force?: unknown) {\n this.searchDropdownOpen =\n force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;\n this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });\n\n if (!this.searchDropdownOpen) {\n // Reset suggestions when dropdown closes\n this.coveoSuggestions = [];\n this.placeSuggestions = [];\n if (this.searchBox) this.searchBox.value = '';\n void this.setFocus();\n } else {\n // Get basic suggestions when dropdown opens\n try {\n this.coveoSuggestions = await getCoveoSuggestions('');\n } catch {}\n }\n\n this.setBodyScroll();\n\n return this.searchDropdownOpen;\n }\n\n /**\n * Sets the focus on the search button\n */\n @Method()\n public async setFocus() {\n const shadowRoot = this.host.shadowRoot;\n if (shadowRoot === null) {\n return;\n }\n const toggleButton = shadowRoot.querySelector<HTMLElement>('.search-button');\n if (toggleButton) {\n toggleButton.focus();\n }\n }\n\n private handleResize() {\n // Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls\n if (this.searchDropdownOpen) {\n this.setBodyScroll();\n }\n }\n\n /**\n * Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)\n */\n private setBodyScroll() {\n if(!this.searchFlyout) {\n return;\n }\n\n if (this.searchDropdownOpen && window.innerWidth < 1024) {\n disableBodyScroll(this.searchFlyout);\n } else {\n enableBodyScroll(this.searchFlyout);\n }\n }\n\n /**\n * Fetch suggestions from all available sources\n */\n private async handleSearchInput() {\n if (this.searchBox === undefined || state.localizedConfig?.header.search === undefined) {\n return;\n }\n const query = this.searchBox.value.trim();\n\n const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([\n queryPlaces(query),\n getCoveoSuggestions(query),\n getParcelSuggestion(query, state.localizedConfig.header.search),\n ]);\n\n this.parcelSuggestion = trackAndTraceInfo;\n\n // Parcel suggestion is more important than any other\n if (trackAndTraceInfo) {\n this.placeSuggestions = [];\n this.coveoSuggestions = [];\n } else {\n [this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(\n coveoSuggestions,\n placeSuggestions,\n 7,\n );\n }\n\n this.deselectSuggestion();\n }\n\n /**\n * Start search on enter\n * @param event\n */\n private handleKeyDown(event: KeyboardEvent) {\n if (this.searchFlyout === undefined) {\n return;\n }\n\n const selectedSuggestion = this.searchFlyout.querySelector<HTMLElement>(\n '.suggestions > li > a.selected',\n );\n const selectedHref = selectedSuggestion?.getAttribute('href') ?? null;\n const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');\n\n switch (event.key.toLowerCase()) {\n case 'enter':\n if (selectedHref !== null) {\n window.location.href = selectedHref;\n } else {\n void this.startSearch();\n }\n\n break;\n case 'arrowdown':\n this.deselectSuggestion();\n\n if (selectedSuggestion?.parentElement?.nextElementSibling?.firstElementChild) {\n // Select next suggestion if there's any, otherwise none will be selected\n selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add(\n 'selected',\n );\n // If there are any suggestions, select first suggestion in list\n } else if (suggestions.length > 0) {\n suggestions[0].classList.add('selected');\n }\n\n this.updateSearchBoxWithSuggestion();\n\n break;\n case 'arrowup':\n this.deselectSuggestion();\n\n if (selectedSuggestion?.parentElement?.previousElementSibling?.firstElementChild) {\n // Select previous suggestion if there's any, otherwise none will be selected\n\n selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add(\n 'selected',\n );\n // If there are any suggestions, select last suggestion in list\n } else if (suggestions.length > 0) {\n suggestions[suggestions.length - 1].classList.add('selected');\n }\n\n this.updateSearchBoxWithSuggestion();\n\n break;\n }\n }\n\n /**\n * Set selected suggestion on mouse enter\n * @param event\n */\n private handleMouseEnterSuggestion(event: MouseEvent) {\n this.deselectSuggestion();\n\n // Set hovered suggestion element as selected\n (event.target as HTMLElement).classList.add('selected');\n }\n\n /**\n * Set selected suggestion on mouse enter\n * @param event\n */\n private handleMouseLeaveSuggestions() {\n this.deselectSuggestion();\n }\n\n /**\n * Deselect any previously selected suggestion\n */\n private deselectSuggestion() {\n if (this.searchFlyout === undefined) return;\n\n const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');\n\n if (selectedSuggestion) {\n selectedSuggestion.classList.remove('selected');\n }\n }\n\n /**\n * Update search box with selected suggestion\n */\n private updateSearchBoxWithSuggestion() {\n if (this.searchFlyout === undefined) return;\n\n // Get the newly selected suggestion\n const selectedSuggestion = this.searchFlyout.querySelector<HTMLElement>(\n '.suggestions > li > a.selected',\n );\n const suggestedText = selectedSuggestion?.dataset.suggestionText;\n\n // Update search box value with selected suggestion text\n if (suggestedText !== undefined && this.searchBox) {\n this.searchBox.value = suggestedText;\n }\n }\n\n /**\n * Redirect to the post search page\n */\n private async startSearch() {\n if (this.searchBox && state.localizedConfig?.header.search) {\n const redirectUrl = await getSearchRedirectUrl(\n this.searchBox.value.trim(),\n state.localizedConfig.header.search,\n );\n if (!redirectUrl) return;\n window.location.href = redirectUrl;\n }\n }\n\n private trackRecommendationClick(recommendation: ISearchRecommendation) {\n if (!('dataLayer' in window)) return;\n\n const trackingAttributes = recommendation.additionalAttributes.reduce((acc, curr) => {\n acc[curr.name] = curr.value;\n return acc;\n }, {});\n\n (window.dataLayer as TagManagerDataLayer).push({\n event: trackingAttributes['data-event'],\n text: trackingAttributes['data-text'],\n link_url: trackingAttributes['data-linkurl'],\n label: trackingAttributes['data-label'],\n type: trackingAttributes['data-type'],\n });\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) {\n return;\n }\n const { translations, search } = state.localizedConfig.header;\n const isParcelTrackingNr = this.parcelSuggestion && 'sending' in this.parcelSuggestion;\n const showPortalRecommendations =\n this.searchBox?.value === '' && search.searchRecommendations?.links.length > 0;\n\n return (\n <Host role=\"search\">\n <SvgSprite />\n <div class=\"search\">\n <button\n id=\"post-internet-header-search-button\"\n class=\"search-button\"\n type=\"button\"\n aria-expanded={`${this.searchDropdownOpen}`}\n onClick={e => void this.toggleDropdown(e)}\n >\n <span class=\"visually-hidden\">\n {this.searchDropdownOpen\n ? translations.searchToggleExpanded\n : translations.searchToggle}\n </span>\n <SvgIcon name={this.searchDropdownOpen ? 'pi-close' : 'pi-search'} />\n </button>\n <If condition={this.searchDropdownOpen}>\n <div class=\"flyout\" ref={e => (this.searchFlyout = e)}>\n <div class=\"container box\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-md-10 col-lg-8\">\n <div class=\"form-group form-floating\">\n <input\n type=\"text\"\n role=\"searchbox\"\n id=\"searchBox\"\n class=\"form-control form-control-lg\"\n placeholder={translations.flyoutSearchBoxFloatingLabel}\n autocomplete=\"off\"\n ref={el => (this.searchBox = el)}\n onInput={() => void this.handleSearchInput()}\n onKeyDown={e => this.handleKeyDown(e)}\n />\n <label htmlFor=\"searchBox\">{translations.flyoutSearchBoxFloatingLabel}</label>\n <button onClick={() => void this.startSearch()} class=\"start-search-button\">\n <span class=\"visually-hidden\">{translations.searchSubmit}</span>\n <SvgIcon name=\"pi-search\" />\n </button>\n </div>\n {showPortalRecommendations && (\n <h2 id=\"post-internet-header-search-recommendations-title\" class=\"bold\">\n {search.searchRecommendations.title}\n </h2>\n )}\n <ul\n class=\"suggestions no-list\"\n onMouseLeave={() => this.handleMouseLeaveSuggestions()}\n aria-labelledby={\n showPortalRecommendations\n ? 'post-internet-header-search-recommendations-title'\n : undefined\n }\n >\n {showPortalRecommendations &&\n search.searchRecommendations.links.map(recommendation => (\n <li key={recommendation.href}>\n <a\n class=\"nav-link search-recommendation\"\n href={new URL(recommendation.href, 'https://post.ch').href}\n data-suggestion-text={recommendation.label}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n onClick={() => this.trackRecommendationClick(recommendation)}\n >\n <span\n class=\"search-recommendation__icon\"\n innerHTML={recommendation.inlineSvg}\n ></span>\n <span>{recommendation.label}</span>\n </a>\n </li>\n ))}\n {isParcelTrackingNr && (\n <li>\n <a\n class=\"nav-link parcel-suggestion\"\n href={this.parcelSuggestion!.url}\n data-suggestion-text={this.searchBox?.value}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-letter-parcel\" />\n <span class=\"bold\">{this.parcelSuggestion?.sending?.id}:&nbsp;</span>\n <span>\n {[\n this.parcelSuggestion?.sending?.product,\n ' ' + this.parcelSuggestion?.sending?.recipient.zipcode,\n ' ' + this.parcelSuggestion?.sending?.recipient.city,\n ', ' + this.parcelSuggestion?.sending?.state,\n ]\n .filter(s => s !== '' && s !== ' ')\n .join('')}\n </span>\n </a>\n </li>\n )}\n {!showPortalRecommendations &&\n this.coveoSuggestions &&\n this.coveoSuggestions.map(suggestion => (\n <li key={suggestion.objectId}>\n <a\n class=\"nav-link\"\n href={suggestion.redirectUrl}\n data-suggestion-text={suggestion.expression}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-search\" />\n <HighlightedText text={suggestion.highlighted} />\n </a>\n </li>\n ))}\n {!showPortalRecommendations &&\n this.placeSuggestions &&\n this.placeSuggestions.map(suggestion => (\n <li key={suggestion.id}>\n <a\n class=\"nav-link\"\n href={getPlacesUrl(suggestion)}\n data-suggestion-text={suggestion.name}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-place\" />\n <HighlightedText\n text={highlightPlacesString(\n this.searchBox?.value?.trim(),\n suggestion.name,\n )}\n />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n </div>\n </If>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"post-search.js","sourceRoot":"","sources":["../../../../src/components/post-search/post-search.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, h, Host, Method, State } from '@stencil/core';\nimport { throttle } from 'throttle-debounce';\nimport { clearAllBodyScrollLocks, disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { state } from '../../data/store';\nimport { CoveoCompletion } from '../../models/coveo.model';\nimport { GeocodeLocation } from '../../models/geocode.model';\nimport { TagManagerDataLayer } from '../../models/general.model';\nimport {\n DropdownElement,\n DropdownEvent,\n HasDropdown,\n ISearchRecommendation,\n IsFocusable,\n} from '../../models/header.model';\nimport { equalizeArrays, getSearchRedirectUrl } from '../../services/search/search.service';\nimport { getCoveoSuggestions } from '../../services/search/coveo.service';\nimport {\n getPlacesUrl,\n highlightPlacesString,\n queryPlaces,\n} from '../../services/search/places.service';\nimport { elementHasTransition, userPrefersReducedMotion } from '../../services/ui.service';\nimport { HighlightedText } from '../../utils/highlighted.component';\nimport { SvgSprite } from '../../utils/svg-sprite.component';\nimport { SvgIcon } from '../../utils/svg-icon.component';\nimport { TrackAndTraceInfo } from '../../models/track-and-trace.model';\nimport { getParcelSuggestion } from '../../services/search/parcel.service';\nimport { If } from '../../utils/if.component';\nimport { translate } from '../../services/language.service';\n\n@Component({\n tag: 'post-search',\n styleUrl: 'post-search.scss',\n shadow: true,\n})\nexport class PostSearch implements HasDropdown, IsFocusable {\n @State() searchDropdownOpen = false;\n @State() coveoSuggestions: CoveoCompletion[] = [];\n @State() placeSuggestions: GeocodeLocation[] = [];\n @State() parcelSuggestion: (TrackAndTraceInfo & { url: string }) | null = null;\n @Event() dropdownToggled: EventEmitter<DropdownEvent>;\n @Element() host: DropdownElement;\n private searchBox?: HTMLInputElement;\n private searchFlyout: HTMLElement | undefined;\n private throttledResize: throttle<() => void>;\n private clearButton?: HTMLButtonElement;\n\n connectedCallback() {\n this.throttledResize = throttle(300, () => this.handleResize());\n window.addEventListener('resize', this.throttledResize, { passive: true });\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this.throttledResize);\n clearAllBodyScrollLocks();\n }\n\n componentWillUpdate() {\n // Check if search flyout got set to close\n if (this.searchFlyout && !this.searchDropdownOpen) {\n this.searchFlyout.classList.remove('open');\n\n // Check if element has transition applied and whether user prefers to see animations or not\n if (elementHasTransition(this.searchFlyout, 'transform') && !userPrefersReducedMotion()) {\n // Wait for CSS transition 'transform' to end before continuing\n return new Promise<boolean>(resolve => {\n if (this.searchFlyout === undefined) {\n return resolve(true);\n }\n\n this.searchFlyout.addEventListener('transitionend', event => {\n if (event.propertyName === 'transform') {\n resolve(true);\n }\n });\n });\n }\n }\n }\n\n componentDidUpdate() {\n // Search flyout got set to open\n if (this.searchFlyout && this.searchDropdownOpen) {\n // Force browser to redraw/refresh DOM before adding 'open' class\n this.searchFlyout.getBoundingClientRect();\n this.searchFlyout.classList.add('open');\n }\n\n // Focus on the searchBox whenever the dropdown is opened\n if (this.searchDropdownOpen && this.searchBox) {\n this.searchBox.focus({ preventScroll: true });\n }\n }\n\n public async toggleDropdown(event?: Event): Promise<boolean>;\n public async toggleDropdown(force?: boolean): Promise<boolean>;\n\n /**\n * Toggle the dropdown and optionally force an open/closed state\n * @param force Boolean to force open/closed state\n * @returns Boolean indicating open state of the component\n */\n @Method()\n async toggleDropdown(force?: unknown) {\n this.searchDropdownOpen =\n force === undefined || typeof force !== 'boolean' ? !this.searchDropdownOpen : force;\n this.dropdownToggled.emit({ open: this.searchDropdownOpen, element: this.host });\n\n if (!this.searchDropdownOpen) {\n // Reset suggestions when dropdown closes\n this.coveoSuggestions = [];\n this.placeSuggestions = [];\n if (this.searchBox) this.searchBox.value = '';\n void this.setFocus();\n } else {\n // Get basic suggestions when dropdown opens\n try {\n this.coveoSuggestions = await getCoveoSuggestions('');\n } catch {}\n }\n\n this.setBodyScroll();\n\n return this.searchDropdownOpen;\n }\n\n /**\n * Sets the focus on the search button\n */\n @Method()\n public async setFocus() {\n const shadowRoot = this.host.shadowRoot;\n if (shadowRoot === null) {\n return;\n }\n const toggleButton = shadowRoot.querySelector<HTMLElement>('.search-button');\n if (toggleButton) {\n toggleButton.focus();\n }\n }\n\n private handleResize() {\n // Only enable/disable body scroll on resize if the search dropdown is open, otherwise this could lead to side effects in other controls\n if (this.searchDropdownOpen) {\n this.setBodyScroll();\n }\n }\n\n /**\n * Disable or re-enable body scrolling, depending on whether search dropdown is open or closed in mobile view (width < 1024px)\n */\n private setBodyScroll() {\n if (!this.searchFlyout) {\n return;\n }\n\n if (this.searchDropdownOpen && window.innerWidth < 1024) {\n disableBodyScroll(this.searchFlyout);\n } else {\n enableBodyScroll(this.searchFlyout);\n }\n }\n\n /**\n * Fetch suggestions from all available sources\n */\n private async handleSearchInput() {\n if (this.searchBox === undefined || state.localizedConfig?.header.search === undefined) {\n return;\n }\n const query = this.searchBox.value.trim();\n\n // shows or hides clearButton depending on the content of the searchbar\n if (this.clearButton) {\n if (query !== '') {\n this.clearButton.style.visibility = 'visible';\n } else {\n this.clearButton.style.visibility = 'hidden';\n }\n }\n\n const [placeSuggestions, coveoSuggestions, trackAndTraceInfo] = await Promise.all([\n queryPlaces(query),\n getCoveoSuggestions(query),\n getParcelSuggestion(query, state.localizedConfig.header.search),\n ]);\n\n this.parcelSuggestion = trackAndTraceInfo;\n\n // Parcel suggestion is more important than any other\n if (trackAndTraceInfo) {\n this.placeSuggestions = [];\n this.coveoSuggestions = [];\n } else {\n [this.coveoSuggestions, this.placeSuggestions] = equalizeArrays(\n coveoSuggestions,\n placeSuggestions,\n 7,\n );\n }\n\n this.deselectSuggestion();\n }\n\n /**\n * clear Search box\n * calls handleSearchInput to update/remove suggestions\n */\n private handleClearSearchBox() {\n if (this.searchBox !== undefined) {\n this.searchBox.value = '';\n this.handleSearchInput();\n }\n }\n\n /**\n * Start search on enter\n * @param event\n */\n private handleKeyDown(event: KeyboardEvent) {\n if (this.searchFlyout === undefined) {\n return;\n }\n\n const selectedSuggestion = this.searchFlyout.querySelector<HTMLElement>(\n '.suggestions > li > a.selected',\n );\n const selectedHref = selectedSuggestion?.getAttribute('href') ?? null;\n const suggestions = this.searchFlyout.querySelectorAll('.suggestions > li > a');\n\n switch (event.key.toLowerCase()) {\n case 'enter':\n if (selectedHref !== null) {\n window.location.href = selectedHref;\n } else {\n void this.startSearch();\n }\n\n break;\n case 'arrowdown':\n this.deselectSuggestion();\n\n if (selectedSuggestion?.parentElement?.nextElementSibling?.firstElementChild) {\n // Select next suggestion if there's any, otherwise none will be selected\n selectedSuggestion.parentElement.nextElementSibling.firstElementChild.classList.add(\n 'selected',\n );\n // If there are any suggestions, select first suggestion in list\n } else if (suggestions.length > 0) {\n suggestions[0].classList.add('selected');\n }\n\n this.updateSearchBoxWithSuggestion();\n\n break;\n case 'arrowup':\n this.deselectSuggestion();\n\n if (selectedSuggestion?.parentElement?.previousElementSibling?.firstElementChild) {\n // Select previous suggestion if there's any, otherwise none will be selected\n\n selectedSuggestion.parentElement.previousElementSibling.firstElementChild.classList.add(\n 'selected',\n );\n // If there are any suggestions, select last suggestion in list\n } else if (suggestions.length > 0) {\n suggestions[suggestions.length - 1].classList.add('selected');\n }\n\n this.updateSearchBoxWithSuggestion();\n\n break;\n }\n }\n\n /**\n * Set selected suggestion on mouse enter\n * @param event\n */\n private handleMouseEnterSuggestion(event: MouseEvent) {\n this.deselectSuggestion();\n\n // Set hovered suggestion element as selected\n (event.target as HTMLElement).classList.add('selected');\n }\n\n /**\n * Set selected suggestion on mouse enter\n * @param event\n */\n private handleMouseLeaveSuggestions() {\n this.deselectSuggestion();\n }\n\n /**\n * Deselect any previously selected suggestion\n */\n private deselectSuggestion() {\n if (this.searchFlyout === undefined) return;\n\n const selectedSuggestion = this.searchFlyout.querySelector('.suggestions .selected');\n\n if (selectedSuggestion) {\n selectedSuggestion.classList.remove('selected');\n }\n }\n\n /**\n * Update search box with selected suggestion\n */\n private updateSearchBoxWithSuggestion() {\n if (this.searchFlyout === undefined) return;\n\n // Get the newly selected suggestion\n const selectedSuggestion = this.searchFlyout.querySelector<HTMLElement>(\n '.suggestions > li > a.selected',\n );\n const suggestedText = selectedSuggestion?.dataset.suggestionText;\n\n // Update search box value with selected suggestion text\n if (suggestedText !== undefined && this.searchBox) {\n this.searchBox.value = suggestedText;\n }\n }\n\n /**\n * Redirect to the post search page\n */\n private async startSearch() {\n if (this.searchBox && state.localizedConfig?.header.search) {\n const redirectUrl = await getSearchRedirectUrl(\n this.searchBox.value.trim(),\n state.localizedConfig.header.search,\n );\n if (!redirectUrl) return;\n window.location.href = redirectUrl;\n }\n }\n\n private trackRecommendationClick(recommendation: ISearchRecommendation) {\n if (!('dataLayer' in window)) return;\n\n const trackingAttributes = recommendation.additionalAttributes.reduce((acc, curr) => {\n acc[curr.name] = curr.value;\n return acc;\n }, {});\n\n (window.dataLayer as TagManagerDataLayer).push({\n event: trackingAttributes['data-event'],\n text: trackingAttributes['data-text'],\n link_url: trackingAttributes['data-linkurl'],\n label: trackingAttributes['data-label'],\n type: trackingAttributes['data-type'],\n });\n }\n\n render() {\n if (state.localizedConfig?.header === undefined) {\n return;\n }\n const { translations, search } = state.localizedConfig.header;\n const isParcelTrackingNr = this.parcelSuggestion && 'sending' in this.parcelSuggestion;\n const showPortalRecommendations =\n this.searchBox?.value === '' && search.searchRecommendations?.links.length > 0;\n\n return (\n <Host role=\"search\">\n <SvgSprite />\n <div class=\"search\">\n <button\n id=\"post-internet-header-search-button\"\n class=\"search-button\"\n type=\"button\"\n aria-expanded={`${this.searchDropdownOpen}`}\n onClick={e => void this.toggleDropdown(e)}\n >\n <span class=\"visually-hidden\">\n {this.searchDropdownOpen\n ? translations.searchToggleExpanded\n : translations.searchToggle}\n </span>\n <SvgIcon name={this.searchDropdownOpen ? 'pi-close' : 'pi-search'} />\n </button>\n <If condition={this.searchDropdownOpen}>\n <div class=\"flyout\" ref={e => (this.searchFlyout = e)}>\n <div class=\"container box\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-md-10 col-lg-8\">\n <div class=\"form-group form-floating\">\n <input\n type=\"text\"\n role=\"searchbox\"\n id=\"searchBox\"\n class=\"form-control form-control-lg\"\n placeholder={translations.flyoutSearchBoxFloatingLabel}\n autocomplete=\"off\"\n ref={el => (this.searchBox = el)}\n onInput={() => void this.handleSearchInput()}\n onKeyDown={e => this.handleKeyDown(e)}\n />\n <label htmlFor=\"searchBox\">{translations.flyoutSearchBoxFloatingLabel}</label>\n <button\n onClick={() => this.handleClearSearchBox()}\n class=\"clear-search-button\"\n type=\"reset\"\n id=\"clearButton\"\n ref={el => (this.clearButton = el)}\n >\n <span class=\"visually-hidden\">{translate('Delete search term')}</span>\n <SvgIcon name=\"pi-close\" />\n </button>\n <button onClick={() => void this.startSearch()} class=\"start-search-button\">\n <span class=\"visually-hidden\">{translations.searchSubmit}</span>\n <SvgIcon name=\"pi-search\" />\n </button>\n </div>\n {showPortalRecommendations && (\n <h2 id=\"post-internet-header-search-recommendations-title\" class=\"bold\">\n {search.searchRecommendations.title}\n </h2>\n )}\n <ul\n class=\"suggestions no-list\"\n onMouseLeave={() => this.handleMouseLeaveSuggestions()}\n aria-labelledby={\n showPortalRecommendations\n ? 'post-internet-header-search-recommendations-title'\n : undefined\n }\n >\n {showPortalRecommendations &&\n search.searchRecommendations.links.map(recommendation => (\n <li key={recommendation.href}>\n <a\n class=\"nav-link search-recommendation\"\n href={new URL(recommendation.href, 'https://post.ch').href}\n data-suggestion-text={recommendation.label}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n onClick={() => this.trackRecommendationClick(recommendation)}\n >\n <span\n class=\"search-recommendation__icon\"\n innerHTML={recommendation.inlineSvg}\n ></span>\n <span>{recommendation.label}</span>\n </a>\n </li>\n ))}\n {isParcelTrackingNr && (\n <li>\n <a\n class=\"nav-link parcel-suggestion\"\n href={this.parcelSuggestion!.url}\n data-suggestion-text={this.searchBox?.value}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-letter-parcel\" />\n <span class=\"bold\">{this.parcelSuggestion?.sending?.id}:&nbsp;</span>\n <span>\n {[\n this.parcelSuggestion?.sending?.product,\n ' ' + this.parcelSuggestion?.sending?.recipient.zipcode,\n ' ' + this.parcelSuggestion?.sending?.recipient.city,\n ', ' + this.parcelSuggestion?.sending?.state,\n ]\n .filter(s => s !== '' && s !== ' ')\n .join('')}\n </span>\n </a>\n </li>\n )}\n {!showPortalRecommendations &&\n this.coveoSuggestions &&\n this.coveoSuggestions.map(suggestion => (\n <li key={suggestion.objectId}>\n <a\n class=\"nav-link\"\n href={suggestion.redirectUrl}\n data-suggestion-text={suggestion.expression}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-search\" />\n <HighlightedText text={suggestion.highlighted} />\n </a>\n </li>\n ))}\n {!showPortalRecommendations &&\n this.placeSuggestions &&\n this.placeSuggestions.map(suggestion => (\n <li key={suggestion.id}>\n <a\n class=\"nav-link\"\n href={getPlacesUrl(suggestion)}\n data-suggestion-text={suggestion.name}\n onMouseEnter={e => this.handleMouseEnterSuggestion(e)}\n >\n <SvgIcon name=\"pi-place\" />\n <HighlightedText\n text={highlightPlacesString(\n this.searchBox?.value?.trim(),\n suggestion.name,\n )}\n />\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n </div>\n </If>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,21 +1 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- .skiplinks a {
6
- position: absolute;
7
- top: 0.5rem;
8
- left: 0.5rem;
9
- clip: rect(0 0 0 0);
10
- width: 1px;
11
- overflow: hidden;
12
- display: flex;
13
- align-items: center;
14
- padding: 0.25rem;
15
- background: white;
16
- }
17
- .skiplinks a:focus-visible {
18
- position: absolute;
19
- clip: unset;
20
- width: auto;
21
- }
1
+ :host{display:block}.skiplinks a{position:absolute;top:.5rem;left:.5rem;clip:rect(0 0 0 0);width:1px;overflow:hidden;display:flex;align-items:center;padding:.25rem;background:#fff}.skiplinks a:focus-visible{position:absolute;clip:unset;width:auto}
@@ -1,7 +1,7 @@
1
- import { Host, h } from '@stencil/core';
2
- import { state } from '../../data/store';
3
- import { translate } from '../../services/language.service';
4
- import { SvgIcon } from '../../utils/svg-icon.component';
1
+ import { h, Host } from "@stencil/core";
2
+ import { state } from "../../data/store";
3
+ import { translate } from "../../services/language.service";
4
+ import { SvgIcon } from "../../utils/svg-icon.component";
5
5
  export class PostSkiplinks {
6
6
  getMainId() {
7
7
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"post-skiplinks.js","sourceRoot":"","sources":["../../../../src/components/post-skiplinks/post-skiplinks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, Element } from '@stencil/core';\nimport { state } from '../../data/store';\nimport { FocusableElement } from '../../models/header.model';\nimport { translate } from '../../services/language.service';\nimport { SvgIcon } from '../../utils/svg-icon.component';\n\n@Component({\n tag: 'post-skiplinks',\n styleUrl: 'post-skiplinks.scss',\n shadow: false,\n})\nexport class PostSkiplinks {\n @Element() host: HTMLElement;\n\n private getMainId() {\n return document.querySelector('main[id]')?.getAttribute('id');\n }\n\n private setFocus(tagname: string) {\n const rootHost = this.host.closest('.post-internet-header');\n if (!rootHost) {\n return;\n }\n\n const focusable = rootHost.querySelector<FocusableElement>(tagname);\n if (focusable) {\n focusable.setFocus();\n }\n }\n\n private focusMain() {\n this.setFocus('post-main-navigation');\n }\n\n private focusSearch() {\n this.setFocus('post-search');\n }\n\n private focusLogin() {\n this.setFocus('post-klp-login-widget');\n }\n\n render() {\n const config = state.localizedConfig?.header;\n const mainId = this.getMainId();\n\n if (config === undefined) {\n return;\n }\n\n return (\n <Host>\n <div class=\"skiplinks\">\n <ul class=\"no-list\" aria-label={translate('Skip Links')}>\n <li>\n <a class=\"nav-link\" href={config.logo.logoLink}>\n <span>{config.logo.logoLinkTitle}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n <li>\n <a class=\"nav-link\" href=\"#post-internet-header-main-navigation\" onClick={() => this.focusMain()}>\n <span>{config.translations.navMainAriaLabel}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n {mainId ? (\n <li>\n <a class=\"nav-link\" href={`#${mainId}`}>\n <span>{translate('Go to main content')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n {state.search ? (\n <li>\n <a class=\"nav-link\" href=\"#post-internet-header-search-button\" onClick={() => this.focusSearch()}>\n <span>{translate('Go to search')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n {state.login ? (\n <li>\n <a class=\"nav-link\" href=\"#post-klp-login-widget\" onClick={() => this.focusLogin()}>\n <span>{translate('Go to login')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n </ul>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"post-skiplinks.js","sourceRoot":"","sources":["../../../../src/components/post-skiplinks/post-skiplinks.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, h, Host } from '@stencil/core';\nimport { state } from '../../data/store';\nimport { FocusableElement } from '../../models/header.model';\nimport { translate } from '../../services/language.service';\nimport { SvgIcon } from '../../utils/svg-icon.component';\n\n@Component({\n tag: 'post-skiplinks',\n styleUrl: 'post-skiplinks.scss',\n shadow: false,\n})\nexport class PostSkiplinks {\n @Element() host: HTMLPostSkiplinksElement;\n\n private getMainId() {\n return document.querySelector('main[id]')?.getAttribute('id');\n }\n\n private setFocus(tagname: string) {\n const rootHost = this.host.closest('.post-internet-header');\n if (!rootHost) {\n return;\n }\n\n const focusable = rootHost.querySelector<FocusableElement>(tagname);\n if (focusable) {\n focusable.setFocus();\n }\n }\n\n private focusMain() {\n this.setFocus('post-main-navigation');\n }\n\n private focusSearch() {\n this.setFocus('post-search');\n }\n\n private focusLogin() {\n this.setFocus('post-klp-login-widget');\n }\n\n render() {\n const config = state.localizedConfig?.header;\n const mainId = this.getMainId();\n\n if (config === undefined) {\n return;\n }\n\n return (\n <Host>\n <div class=\"skiplinks\">\n <ul class=\"no-list\" aria-label={translate('Skip Links')}>\n <li>\n <a class=\"nav-link\" href={config.logo.logoLink}>\n <span>{config.logo.logoLinkTitle}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n <li>\n <a\n class=\"nav-link\"\n href=\"#post-internet-header-main-navigation\"\n onClick={() => this.focusMain()}\n >\n <span>{config.translations.navMainAriaLabel}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n {mainId ? (\n <li>\n <a class=\"nav-link\" href={`#${mainId}`}>\n <span>{translate('Go to main content')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n {state.search ? (\n <li>\n <a\n class=\"nav-link\"\n href=\"#post-internet-header-search-button\"\n onClick={() => this.focusSearch()}\n >\n <span>{translate('Go to search')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n {state.login ? (\n <li>\n <a class=\"nav-link\" href=\"#post-klp-login-widget\" onClick={() => this.focusLogin()}>\n <span>{translate('Go to login')}</span>\n <SvgIcon name=\"pi-pointy-arrow-right\" />\n </a>\n </li>\n ) : null}\n </ul>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { createStore } from '@stencil/store';
1
+ import { createStore } from "@stencil/store";
2
2
  export const { state, reset, dispose } = createStore({
3
3
  projectId: null,
4
4
  currentLanguage: null,
@@ -1,2 +1,12 @@
1
- export {};
1
+ // Export every single component so it gets included in the dist output
2
+ export { PostInternetHeader } from './components/post-internet-header/post-internet-header';
3
+ export { PostInternetBreadcrumbs } from './components/post-internet-breadcrumbs/post-internet-breadcrumbs';
4
+ export { PostInternetFooter } from './components/post-internet-footer/post-internet-footer';
5
+ export { PostSkiplinks } from './components/post-skiplinks/post-skiplinks';
6
+ export { PostMetaNavigation } from './components/post-meta-navigation/post-meta-navigation';
7
+ export { PostLanguageSwitch } from './components/post-language-switch/post-language-switch';
8
+ export { PostLogo } from './components/post-logo/post-logo';
9
+ export { PostMainNavigation } from './components/post-main-navigation/post-main-navigation';
10
+ export { PostSearch } from './components/post-search/post-search';
11
+ export { PostKlpLoginWidget } from './components/post-klp-login-widget/post-klp-login-widget';
2
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"","sourcesContent":["export { Components, JSX } from './components';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kEAAkE,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC","sourcesContent":["export { Components, JSX } from './components';\n\n// Export every single component so it gets included in the dist output\nexport { PostInternetHeader } from './components/post-internet-header/post-internet-header';\nexport { PostInternetBreadcrumbs } from './components/post-internet-breadcrumbs/post-internet-breadcrumbs';\nexport { PostInternetFooter } from './components/post-internet-footer/post-internet-footer';\n\nexport { PostSkiplinks } from './components/post-skiplinks/post-skiplinks';\nexport { PostMetaNavigation } from './components/post-meta-navigation/post-meta-navigation';\nexport { PostLanguageSwitch } from './components/post-language-switch/post-language-switch';\nexport { PostLogo } from './components/post-logo/post-logo';\nexport { PostMainNavigation } from './components/post-main-navigation/post-main-navigation';\nexport { PostSearch } from './components/post-search/post-search';\nexport { PostKlpLoginWidget } from './components/post-klp-login-widget/post-klp-login-widget';\n"]}
@@ -1,13 +1,13 @@
1
- import { getUserLang, persistLanguageChoice } from './language.service';
2
- import { uniqueId } from '../utils/utils';
3
- import { markActiveRoute } from './route.service';
1
+ import { getUserLang, persistLanguageChoice } from "./language.service";
2
+ import { uniqueId } from "../utils/utils";
3
+ import { markActiveRoute } from "./route.service";
4
4
  // Prevent double requests
5
5
  let request = null;
6
6
  // Cache the original os flyout to use it for updates
7
7
  let osFlyoutCache = null;
8
8
  const getPPMConfig = () => {
9
9
  const ppmConfigScript = document.querySelector('#PPM_HEADER_DATA');
10
- if (ppmConfigScript === null || ppmConfigScript === void 0 ? void 0 : ppmConfigScript.textContent) {
10
+ if ((ppmConfigScript === null || ppmConfigScript === void 0 ? void 0 : ppmConfigScript.textContent) != null) {
11
11
  return JSON.parse(ppmConfigScript.textContent);
12
12
  }
13
13
  return null;
@@ -30,7 +30,7 @@ export const getLocalizedConfig = async ({ projectId, environment, language, coo
30
30
  lang = document.documentElement.lang;
31
31
  }
32
32
  else {
33
- if (!request) {
33
+ if (request == null) {
34
34
  request = fetchConfig(projectId, environment);
35
35
  }
36
36
  config = await request;
@@ -51,7 +51,7 @@ export const getLocalizedConfig = async ({ projectId, environment, language, coo
51
51
  if (osFlyoutOverrides)
52
52
  localizedConfig.header.navMain = mergeOsFlyoutOverrides(localizedConfig, osFlyoutOverrides);
53
53
  // Mark active route
54
- if (activeRouteProp)
54
+ if (activeRouteProp != null)
55
55
  localizedConfig.header.navMain = markActiveRoute(localizedConfig.header.navMain, activeRouteProp);
56
56
  setMainNavigationIds((_b = localizedConfig === null || localizedConfig === void 0 ? void 0 : localizedConfig.header) === null || _b === void 0 ? void 0 : _b.navMain);
57
57
  // Set the new language choice
@@ -65,7 +65,7 @@ export const getLocalizedConfig = async ({ projectId, environment, language, coo
65
65
  * @returns Merged localized config
66
66
  */
67
67
  export const mergeOsFlyoutOverrides = (config, osFlyoutOverrides) => {
68
- if (!osFlyoutOverrides)
68
+ if (osFlyoutOverrides == null)
69
69
  return config.header.navMain;
70
70
  return config.header.navMain.map(mainNav => {
71
71
  var _a, _b;
@@ -76,9 +76,9 @@ export const mergeOsFlyoutOverrides = (config, osFlyoutOverrides) => {
76
76
  }
77
77
  const mainNavText = (_a = osFlyoutOverrides.text) !== null && _a !== void 0 ? _a : osFlyoutCache.text;
78
78
  const mainNavTitle = (_b = osFlyoutOverrides.title) !== null && _b !== void 0 ? _b : osFlyoutCache.title;
79
- if (!osFlyoutCache.flyout ||
79
+ if (osFlyoutCache.flyout == null ||
80
80
  osFlyoutCache.flyout.length === 0 ||
81
- !osFlyoutOverrides.flyout ||
81
+ osFlyoutOverrides.flyout == null ||
82
82
  osFlyoutOverrides.flyout.length === 0)
83
83
  return Object.assign(Object.assign({}, mainNav), { title: mainNavTitle, text: mainNavText });
84
84
  // Add entries for os flyout columns without overriding existing config
@@ -87,7 +87,7 @@ export const mergeOsFlyoutOverrides = (config, osFlyoutOverrides) => {
87
87
  var _a;
88
88
  const overrides = osFlyoutOverrides.flyout[index];
89
89
  const title = (_a = overrides.title) !== null && _a !== void 0 ? _a : col.title;
90
- const linkList = overrides.linkList ? osFlyoutOverrides.flyout[index].linkList : [];
90
+ const linkList = overrides.linkList != null ? osFlyoutOverrides.flyout[index].linkList : [];
91
91
  return {
92
92
  title,
93
93
  linkList: [...col.linkList, ...linkList],
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/services/config.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Environment,\n IPortalConfig,\n ILocalizedConfig,\n ICustomConfig,\n ILocalizedCustomConfig,\n LocalizedConfigParameters,\n} from '../models/general.model';\nimport { NavMainEntity } from '../models/header.model';\nimport { getUserLang, persistLanguageChoice } from './language.service';\nimport { uniqueId } from '../utils/utils';\nimport { markActiveRoute } from './route.service';\n\n// Prevent double requests\nlet request: Promise<IPortalConfig> | null = null;\n\n// Cache the original os flyout to use it for updates\nlet osFlyoutCache: NavMainEntity | null = null;\n\nconst getPPMConfig = (): ILocalizedConfig | null => {\n const ppmConfigScript = document.querySelector('#PPM_HEADER_DATA');\n\n if (ppmConfigScript?.textContent) {\n return JSON.parse(ppmConfigScript.textContent);\n }\n\n return null;\n};\n\n/**\n * Get a localized config object\n *\n * @param projectId String identifying the project\n * @param language [optional] Preferred language\n * @returns Localized config object\n */\nexport const getLocalizedConfig = async ({\n projectId,\n environment,\n language,\n cookieKey,\n localStorageKey,\n activeRouteProp,\n localizedCustomConfig,\n osFlyoutOverrides,\n}: LocalizedConfigParameters): Promise<ILocalizedConfig> => {\n const ppmConfig = getPPMConfig();\n let localizedConfig: ILocalizedConfig;\n let config: IPortalConfig | null = null;\n let lang: string | undefined;\n\n if (ppmConfig) {\n localizedConfig = ppmConfig;\n lang = document.documentElement.lang;\n } else {\n if (!request) {\n request = fetchConfig(projectId, environment);\n }\n\n config = await request;\n lang = getUserLang(Object.keys(config), language, localStorageKey, cookieKey);\n\n if (lang === undefined) {\n throw new Error('Internet Header: unable to determine current language');\n }\n\n // Clone config for more predictable state updates\n localizedConfig = { ...config[lang] };\n }\n\n // Merge custom config with portal config\n if (localizedCustomConfig) {\n const header = localizedCustomConfig?.header?.navMain\n ? {\n ...localizedConfig.header,\n navMain: [...localizedConfig.header.navMain, ...localizedCustomConfig.header.navMain],\n }\n : localizedConfig.header;\n localizedConfig = {\n ...localizedConfig,\n header,\n };\n }\n\n // Add entries to flyout_os\n if (osFlyoutOverrides)\n localizedConfig.header.navMain = mergeOsFlyoutOverrides(localizedConfig, osFlyoutOverrides);\n\n // Mark active route\n if (activeRouteProp)\n localizedConfig.header.navMain = markActiveRoute(\n localizedConfig.header.navMain,\n activeRouteProp,\n );\n\n setMainNavigationIds(localizedConfig?.header?.navMain);\n\n // Set the new language choice\n persistLanguageChoice(lang, cookieKey, localStorageKey);\n\n return localizedConfig;\n};\n\n/**\n * Merge portal config with custom os flyout overrides\n * @param config Localized config\n * @param osFlyoutOverrides Overrides for the flyout\n * @returns Merged localized config\n */\nexport const mergeOsFlyoutOverrides = (\n config: ILocalizedConfig,\n osFlyoutOverrides: NavMainEntity,\n): NavMainEntity[] => {\n if (!osFlyoutOverrides) return config.header.navMain;\n\n return config.header.navMain.map(mainNav => {\n if (mainNav.id !== 'flyout_os') return mainNav;\n\n if (osFlyoutCache === null) {\n osFlyoutCache = JSON.parse(JSON.stringify(mainNav)) as NavMainEntity;\n }\n\n const mainNavText = osFlyoutOverrides.text ?? osFlyoutCache.text;\n const mainNavTitle = osFlyoutOverrides.title ?? osFlyoutCache.title;\n\n if (\n !osFlyoutCache.flyout ||\n osFlyoutCache.flyout.length === 0 ||\n !osFlyoutOverrides.flyout ||\n osFlyoutOverrides.flyout.length === 0\n )\n return {\n ...mainNav,\n title: mainNavTitle,\n text: mainNavText,\n };\n\n // Add entries for os flyout columns without overriding existing config\n const mainNavFlyout = [\n ...osFlyoutCache.flyout.map((col, index) => {\n const overrides = osFlyoutOverrides.flyout[index];\n const title = overrides.title ?? col.title;\n\n const linkList = overrides.linkList ? osFlyoutOverrides.flyout[index].linkList : [];\n\n return {\n title,\n linkList: [...col.linkList, ...linkList],\n };\n }),\n ...osFlyoutOverrides.flyout.slice(osFlyoutCache.flyout.length),\n ];\n\n return {\n ...mainNav,\n text: mainNavText,\n title: mainNavTitle,\n flyout: mainNavFlyout,\n } as NavMainEntity;\n });\n};\n\n/**\n * Fetch the general config based on project id\n *\n * @returns Promise for Post Portal general config\n */\nexport const fetchConfig = async (\n projectId: string,\n environment: Environment,\n): Promise<IPortalConfig> => {\n // Check if project id is sanitized\n if (!isValidProjectId(projectId)) {\n throw new Error(`Internet Header: invalid project id \"${projectId}\"`);\n }\n\n if (projectId === 'test') {\n environment = 'int01';\n }\n\n let url = generateConfigUrl(projectId, environment);\n\n // Get the config if cache is invalid\n try {\n const res = await fetch(url);\n return (await res.json()) as IPortalConfig;\n } catch (error) {\n throw new Error(`Internet Header: fetching config failed. ${error.message}`);\n }\n};\n\n/**\n * Generate an URL with all necessary query params to get the configuration.\n * Project id \"test\" will return a test configuration\n * @param projectId string\n * @param environment int01, int02 or prod\n * @returns URL pointing to the project config\n */\nexport const generateConfigUrl = (projectId: string, environment: Environment): string => {\n if (projectId === 'test') return 'assets/config/test-configuration.json';\n\n const parsedEnvironment = environment.toLowerCase();\n const isProd = parsedEnvironment === 'prod';\n const host = `https://${isProd ? 'www' : 'int'}.post.ch`;\n try {\n // Use URL to validate the generated URL\n return new URL(\n `${host}/api/headerjs/Json?serviceid=${encodeURIComponent(projectId)}${\n !isProd ? '&environment=' + parsedEnvironment : ''\n }`,\n ).toString();\n } catch (error) {\n throw new Error(`Internet Header: Config URL is invalid.`);\n }\n};\n\n/**\n * Check if project id contains only URL safe characters\n *\n * @param projectId Project Id string\n * @returns The valid project id\n */\nexport const isValidProjectId = (projectId: string): boolean => {\n return projectId !== '' && projectId.length > 0 && /^[a-zA-Z][\\w-]*[a-zA-Z0-9]$/.test(projectId);\n};\n\n/**\n * Get the localized config object from a custom config\n *\n * @param config String or json object of the custom config\n * @param language Specific language\n * @returns Localized custom config object\n */\nexport const getLocalizedCustomConfig = (\n config: string | ICustomConfig,\n language: string,\n): ILocalizedCustomConfig | undefined => {\n let customConfig: ICustomConfig;\n try {\n customConfig = typeof config === 'string' ? JSON.parse(config) : config;\n } catch (error) {\n throw new Error(\n `Internet Header: Custom config is invalid. Make sure your custom config contains valid JSON syntax and matches the definition. `,\n );\n }\n let localizedCustomConfig: ILocalizedCustomConfig | undefined = customConfig[language];\n if (localizedCustomConfig?.header?.navMain)\n setMainNavigationIds(localizedCustomConfig.header.navMain);\n return localizedCustomConfig;\n};\n\n/**\n * Check if mobile header styles are applied or not\n * @returns True if browser is smaller than 1024px\n */\nexport const isMobile = () => window.innerWidth < 1024;\n\n/**\n * Set unique ID's on main navigation entities but conserve flyout_os to be able to\n * identify the online-service flyout, which can be configured by osFlyoutOverrides\n */\nexport const setMainNavigationIds = (navMainEntities: NavMainEntity[]): void => {\n navMainEntities.forEach(navMainEntity => {\n navMainEntity.id = navMainEntity.id === 'flyout_os' ? navMainEntity.id : uniqueId('main-nav-');\n });\n};\n"]}
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/services/config.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Environment,\n IPortalConfig,\n ILocalizedConfig,\n ICustomConfig,\n ILocalizedCustomConfig,\n LocalizedConfigParameters,\n} from '../models/general.model';\nimport { NavMainEntity } from '../models/header.model';\nimport { getUserLang, persistLanguageChoice } from './language.service';\nimport { uniqueId } from '../utils/utils';\nimport { markActiveRoute } from './route.service';\n\n// Prevent double requests\nlet request: Promise<IPortalConfig> | null = null;\n\n// Cache the original os flyout to use it for updates\nlet osFlyoutCache: NavMainEntity | null = null;\n\nconst getPPMConfig = (): ILocalizedConfig | null => {\n const ppmConfigScript = document.querySelector('#PPM_HEADER_DATA');\n\n if (ppmConfigScript?.textContent != null) {\n return JSON.parse(ppmConfigScript.textContent);\n }\n\n return null;\n};\n\n/**\n * Get a localized config object\n *\n * @param projectId String identifying the project\n * @param language [optional] Preferred language\n * @returns Localized config object\n */\nexport const getLocalizedConfig = async ({\n projectId,\n environment,\n language,\n cookieKey,\n localStorageKey,\n activeRouteProp,\n localizedCustomConfig,\n osFlyoutOverrides,\n}: LocalizedConfigParameters): Promise<ILocalizedConfig> => {\n const ppmConfig = getPPMConfig();\n let localizedConfig: ILocalizedConfig;\n let config: IPortalConfig | null = null;\n let lang: string | undefined;\n\n if (ppmConfig) {\n localizedConfig = ppmConfig;\n lang = document.documentElement.lang;\n } else {\n if (request == null) {\n request = fetchConfig(projectId, environment);\n }\n\n config = await request;\n lang = getUserLang(Object.keys(config), language, localStorageKey, cookieKey);\n\n if (lang === undefined) {\n throw new Error('Internet Header: unable to determine current language');\n }\n\n // Clone config for more predictable state updates\n localizedConfig = { ...config[lang] };\n }\n\n // Merge custom config with portal config\n if (localizedCustomConfig) {\n const header = localizedCustomConfig?.header?.navMain\n ? {\n ...localizedConfig.header,\n navMain: [...localizedConfig.header.navMain, ...localizedCustomConfig.header.navMain],\n }\n : localizedConfig.header;\n localizedConfig = {\n ...localizedConfig,\n header,\n };\n }\n\n // Add entries to flyout_os\n if (osFlyoutOverrides)\n localizedConfig.header.navMain = mergeOsFlyoutOverrides(localizedConfig, osFlyoutOverrides);\n\n // Mark active route\n if (activeRouteProp != null)\n localizedConfig.header.navMain = markActiveRoute(\n localizedConfig.header.navMain,\n activeRouteProp,\n );\n\n setMainNavigationIds(localizedConfig?.header?.navMain);\n\n // Set the new language choice\n persistLanguageChoice(lang, cookieKey, localStorageKey);\n\n return localizedConfig;\n};\n\n/**\n * Merge portal config with custom os flyout overrides\n * @param config Localized config\n * @param osFlyoutOverrides Overrides for the flyout\n * @returns Merged localized config\n */\nexport const mergeOsFlyoutOverrides = (\n config: ILocalizedConfig,\n osFlyoutOverrides: NavMainEntity,\n): NavMainEntity[] => {\n if (osFlyoutOverrides == null) return config.header.navMain;\n\n return config.header.navMain.map(mainNav => {\n if (mainNav.id !== 'flyout_os') return mainNav;\n\n if (osFlyoutCache === null) {\n osFlyoutCache = JSON.parse(JSON.stringify(mainNav)) as NavMainEntity;\n }\n\n const mainNavText = osFlyoutOverrides.text ?? osFlyoutCache.text;\n const mainNavTitle = osFlyoutOverrides.title ?? osFlyoutCache.title;\n\n if (\n osFlyoutCache.flyout == null ||\n osFlyoutCache.flyout.length === 0 ||\n osFlyoutOverrides.flyout == null ||\n osFlyoutOverrides.flyout.length === 0\n )\n return {\n ...mainNav,\n title: mainNavTitle,\n text: mainNavText,\n };\n\n // Add entries for os flyout columns without overriding existing config\n const mainNavFlyout = [\n ...osFlyoutCache.flyout.map((col, index) => {\n const overrides = osFlyoutOverrides.flyout[index];\n const title = overrides.title ?? col.title;\n\n const linkList = overrides.linkList != null ? osFlyoutOverrides.flyout[index].linkList : [];\n\n return {\n title,\n linkList: [...col.linkList, ...linkList],\n };\n }),\n ...osFlyoutOverrides.flyout.slice(osFlyoutCache.flyout.length),\n ];\n\n return {\n ...mainNav,\n text: mainNavText,\n title: mainNavTitle,\n flyout: mainNavFlyout,\n } as NavMainEntity;\n });\n};\n\n/**\n * Fetch the general config based on project id\n *\n * @returns Promise for Post Portal general config\n */\nexport const fetchConfig = async (\n projectId: string,\n environment: Environment,\n): Promise<IPortalConfig> => {\n // Check if project id is sanitized\n if (!isValidProjectId(projectId)) {\n throw new Error(`Internet Header: invalid project id \"${projectId}\"`);\n }\n\n if (projectId === 'test') {\n environment = 'int01';\n }\n\n let url = generateConfigUrl(projectId, environment);\n\n // Get the config if cache is invalid\n try {\n const res = await fetch(url);\n return (await res.json()) as IPortalConfig;\n } catch (error) {\n throw new Error(`Internet Header: fetching config failed. ${error.message}`);\n }\n};\n\n/**\n * Generate an URL with all necessary query params to get the configuration.\n * Project id \"test\" will return a test configuration\n * @param projectId string\n * @param environment int01, int02 or prod\n * @returns URL pointing to the project config\n */\nexport const generateConfigUrl = (projectId: string, environment: Environment): string => {\n if (projectId === 'test') return 'assets/config/test-configuration.json';\n\n const parsedEnvironment = environment.toLowerCase();\n const isProd = parsedEnvironment === 'prod';\n const host = `https://${isProd ? 'www' : 'int'}.post.ch`;\n try {\n // Use URL to validate the generated URL\n return new URL(\n `${host}/api/headerjs/Json?serviceid=${encodeURIComponent(projectId)}${\n !isProd ? '&environment=' + parsedEnvironment : ''\n }`,\n ).toString();\n } catch (error) {\n throw new Error(`Internet Header: Config URL is invalid.`);\n }\n};\n\n/**\n * Check if project id contains only URL safe characters\n *\n * @param projectId Project Id string\n * @returns The valid project id\n */\nexport const isValidProjectId = (projectId: string): boolean => {\n return projectId !== '' && projectId.length > 0 && /^[a-zA-Z][\\w-]*[a-zA-Z0-9]$/.test(projectId);\n};\n\n/**\n * Get the localized config object from a custom config\n *\n * @param config String or json object of the custom config\n * @param language Specific language\n * @returns Localized custom config object\n */\nexport const getLocalizedCustomConfig = (\n config: string | ICustomConfig,\n language: string,\n): ILocalizedCustomConfig | undefined => {\n let customConfig: ICustomConfig;\n try {\n customConfig = typeof config === 'string' ? JSON.parse(config) : config;\n } catch (error) {\n throw new Error(\n `Internet Header: Custom config is invalid. Make sure your custom config contains valid JSON syntax and matches the definition. `,\n );\n }\n let localizedCustomConfig: ILocalizedCustomConfig | undefined = customConfig[language];\n if (localizedCustomConfig?.header?.navMain)\n setMainNavigationIds(localizedCustomConfig.header.navMain);\n return localizedCustomConfig;\n};\n\n/**\n * Check if mobile header styles are applied or not\n * @returns True if browser is smaller than 1024px\n */\nexport const isMobile = () => window.innerWidth < 1024;\n\n/**\n * Set unique ID's on main navigation entities but conserve flyout_os to be able to\n * identify the online-service flyout, which can be configured by osFlyoutOverrides\n */\nexport const setMainNavigationIds = (navMainEntities: NavMainEntity[]): void => {\n navMainEntities.forEach(navMainEntity => {\n navMainEntity.id = navMainEntity.id === 'flyout_os' ? navMainEntity.id : uniqueId('main-nav-');\n });\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { translations } from '../assets/i18n/translations';
2
- import { state } from '../data/store';
1
+ import { translations } from "../assets/i18n/translations";
2
+ import { state } from "../data/store";
3
3
  export const getUserLang = (supportedLanguages, implementorPreferredLanguage, localStorageKey, cookieKey) => {
4
4
  // If there are no supported languages, well...
5
5
  if (supportedLanguages.length === 0) {
@@ -33,12 +33,12 @@ export const getUserLang = (supportedLanguages, implementorPreferredLanguage, lo
33
33
  getPreferredLanguageFromBrowser(supportedLanguages),
34
34
  // Check the state
35
35
  state.currentLanguage,
36
- ].filter((lang) => !!lang);
36
+ ].filter((lang) => lang != null);
37
37
  // Check the set of languages to see if it matches
38
38
  // any of the supported languages. Return the first
39
39
  // supported language if there is none set
40
40
  const lang = languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];
41
- if (!lang || lang.length !== 2) {
41
+ if (lang == null || lang.length !== 2) {
42
42
  throw new Error(`Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`);
43
43
  }
44
44
  return lang;
@@ -77,14 +77,14 @@ export const setCookie = (key, value) => {
77
77
  };
78
78
  const getPreferredLanguageFromBrowser = (supportedLanguages) => {
79
79
  // IE & Chrome
80
- if (navigator.language) {
80
+ if (navigator.language != null) {
81
81
  const lang = extractLanguage(navigator.language);
82
82
  if (supportedLanguages.indexOf(lang) !== -1) {
83
83
  return lang;
84
84
  }
85
85
  }
86
86
  // Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.
87
- if (navigator.languages) {
87
+ if (navigator.languages != null) {
88
88
  for (const l of navigator.languages) {
89
89
  const lang = extractLanguage(l);
90
90
  if (supportedLanguages.indexOf(lang) !== -1) {
@@ -1 +1 @@
1
- {"version":3,"file":"language.service.js","sourceRoot":"","sources":["../../../src/services/language.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { translations } from '../assets/i18n/translations';\nimport { state } from '../data/store';\n\nexport const getUserLang = (\n supportedLanguages: string[],\n implementorPreferredLanguage?: string,\n localStorageKey?: string,\n cookieKey?: string,\n) => {\n // If there are no supported languages, well...\n if (supportedLanguages.length === 0) {\n return 'de';\n }\n\n // If there is only one language in the config, use this\n if (supportedLanguages.length === 1) {\n return supportedLanguages[0];\n }\n\n const url = new URL(window.location.href);\n\n /**\n * Build array of possible language definitions in order of importance.\n * At the end is a filter function that will weed out any undefined or null entries.\n */\n let languagesSet: Array<string> = [\n // Check if implementor overrides lang config\n implementorPreferredLanguage,\n\n // Check query string param\n url.searchParams.get('lang'),\n\n // Check url pathname\n url.pathname.split('/').find(segment => supportedLanguages.includes(segment)),\n\n // Check local storage with the key provided\n localStorageKey !== undefined ? window.localStorage.getItem(localStorageKey) : null,\n\n // Check cookies\n getCookie('language'),\n getCookie('lang'),\n cookieKey !== undefined ? getCookie(cookieKey) : null,\n\n // Check document language\n document.documentElement.lang,\n\n // Check browser preferred language\n getPreferredLanguageFromBrowser(supportedLanguages),\n\n // Check the state\n state.currentLanguage,\n ].filter((lang): lang is string => !!lang);\n\n // Check the set of languages to see if it matches\n // any of the supported languages. Return the first\n // supported language if there is none set\n const lang =\n languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];\n\n if (!lang || lang.length !== 2) {\n throw new Error(\n `Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`,\n );\n }\n\n return lang;\n};\n\n/**\n * Persist chosen language to local storage\n * @param lang Currently chose language, two char string\n */\nexport const persistLanguageChoice = (\n lang: string,\n cookieKey?: string,\n localStorageKey?: string,\n) => {\n if (localStorageKey !== undefined) {\n window.localStorage.setItem(localStorageKey, lang);\n }\n\n if (cookieKey !== undefined) {\n setCookie(cookieKey, lang);\n }\n\n state.currentLanguage = lang;\n};\n\n/**\n * Read a cookie by name\n * https://stackoverflow.com/questions/5639346/what-is-the-shortest-function-for-reading-a-cookie-by-name-in-javascript?rq=1\n * @param name Cookie name\n * @returns Cookie value or an empty string\n */\nexport const getCookie = (name: string) => {\n return document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || '';\n};\n\n/**\n * Write a new cookie\n * https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support\n * @param key\n * @param value\n */\nexport const setCookie = (key: string, value: string) => {\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n};\n\nconst getPreferredLanguageFromBrowser = (supportedLanguages: string[]): string | null => {\n // IE & Chrome\n if (navigator.language) {\n const lang = extractLanguage(navigator.language);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n\n // Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.\n if (navigator.languages) {\n for (const l of navigator.languages) {\n const lang = extractLanguage(l);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n }\n\n return null;\n};\n\nconst extractLanguage = (language: string): string => language.substring(0, 2).toLowerCase();\n\n/**\n * Simple translate function for general header UI strings\n *\n * @param key Translation key\n * @param lang Force a language\n * @param translationObject Optionally provide translations\n * @returns Translated string or the key\n */\nexport const translate = (key: string, lang?: string, translationObject = translations) =>\n translationObject[key]?.[lang ?? state.currentLanguage ?? ''] ?? key;\n"]}
1
+ {"version":3,"file":"language.service.js","sourceRoot":"","sources":["../../../src/services/language.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { translations } from '../assets/i18n/translations';\nimport { state } from '../data/store';\n\nexport const getUserLang = (\n supportedLanguages: string[],\n implementorPreferredLanguage?: string,\n localStorageKey?: string,\n cookieKey?: string,\n) => {\n // If there are no supported languages, well...\n if (supportedLanguages.length === 0) {\n return 'de';\n }\n\n // If there is only one language in the config, use this\n if (supportedLanguages.length === 1) {\n return supportedLanguages[0];\n }\n\n const url = new URL(window.location.href);\n\n /**\n * Build array of possible language definitions in order of importance.\n * At the end is a filter function that will weed out any undefined or null entries.\n */\n let languagesSet: Array<string> = [\n // Check if implementor overrides lang config\n implementorPreferredLanguage,\n\n // Check query string param\n url.searchParams.get('lang'),\n\n // Check url pathname\n url.pathname.split('/').find(segment => supportedLanguages.includes(segment)),\n\n // Check local storage with the key provided\n localStorageKey !== undefined ? window.localStorage.getItem(localStorageKey) : null,\n\n // Check cookies\n getCookie('language'),\n getCookie('lang'),\n cookieKey !== undefined ? getCookie(cookieKey) : null,\n\n // Check document language\n document.documentElement.lang,\n\n // Check browser preferred language\n getPreferredLanguageFromBrowser(supportedLanguages),\n\n // Check the state\n state.currentLanguage,\n ].filter((lang): lang is string => lang != null);\n\n // Check the set of languages to see if it matches\n // any of the supported languages. Return the first\n // supported language if there is none set\n const lang =\n languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];\n\n if (lang == null || lang.length !== 2) {\n throw new Error(\n `Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`,\n );\n }\n\n return lang;\n};\n\n/**\n * Persist chosen language to local storage\n * @param lang Currently chose language, two char string\n */\nexport const persistLanguageChoice = (\n lang: string,\n cookieKey?: string,\n localStorageKey?: string,\n) => {\n if (localStorageKey !== undefined) {\n window.localStorage.setItem(localStorageKey, lang);\n }\n\n if (cookieKey !== undefined) {\n setCookie(cookieKey, lang);\n }\n\n state.currentLanguage = lang;\n};\n\n/**\n * Read a cookie by name\n * https://stackoverflow.com/questions/5639346/what-is-the-shortest-function-for-reading-a-cookie-by-name-in-javascript?rq=1\n * @param name Cookie name\n * @returns Cookie value or an empty string\n */\nexport const getCookie = (name: string) => {\n return document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || '';\n};\n\n/**\n * Write a new cookie\n * https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support\n * @param key\n * @param value\n */\nexport const setCookie = (key: string, value: string) => {\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n};\n\nconst getPreferredLanguageFromBrowser = (supportedLanguages: string[]): string | null => {\n // IE & Chrome\n if (navigator.language != null) {\n const lang = extractLanguage(navigator.language);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n\n // Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.\n if (navigator.languages != null) {\n for (const l of navigator.languages) {\n const lang = extractLanguage(l);\n if (supportedLanguages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n }\n\n return null;\n};\n\nconst extractLanguage = (language: string): string => language.substring(0, 2).toLowerCase();\n\n/**\n * Simple translate function for general header UI strings\n *\n * @param key Translation key\n * @param lang Force a language\n * @param translationObject Optionally provide translations\n * @returns Translated string or the key\n */\nexport const translate = (key: string, lang?: string, translationObject = translations) =>\n translationObject[key]?.[lang ?? state.currentLanguage ?? ''] ?? key;\n"]}