@postnord/pn-marketweb-components 1.0.4 → 1.0.8

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 (229) hide show
  1. package/cjs/convert-57b3dd5e.js +1730 -0
  2. package/cjs/{index-0f43b450.js → index-b58d2618.js} +82 -0
  3. package/cjs/index-f472d191.js +181 -0
  4. package/cjs/loader.cjs.js +2 -2
  5. package/cjs/pn-choice-button_2.cjs.entry.js +78 -0
  6. package/cjs/pn-find-service-and-price-store-56d8b760.js +23 -0
  7. package/cjs/pn-find-service-and-price.cjs.entry.js +263 -0
  8. package/cjs/pn-language-selector_9.cjs.entry.js +646 -0
  9. package/cjs/pn-mainnav-link.cjs.entry.js +45 -0
  10. package/cjs/pn-mainnav-store-dda9827f.js +18 -0
  11. package/cjs/pn-market-web-components.cjs.js +2 -2
  12. package/cjs/pn-marketweb-sitefooter.cjs.entry.js +145 -0
  13. package/cjs/{pn-siteheader.cjs.entry.js → pn-marketweb-siteheader.cjs.entry.js} +8 -8
  14. package/cjs/pn-product-pricelist-result.cjs.entry.js +45 -0
  15. package/cjs/pn-product-pricelist-store-e4f8503b.js +20 -0
  16. package/cjs/pn-product-pricelist.cjs.entry.js +219 -0
  17. package/cjs/pn-product-tile_3.cjs.entry.js +49 -0
  18. package/cjs/pn-site-footer_2.cjs.entry.js +36 -0
  19. package/collection/collection-manifest.json +22 -3
  20. package/collection/components/input/pn-choice-button/choice-button.stories.js +34 -0
  21. package/collection/components/input/pn-choice-button/pn-choice-button.css +66 -0
  22. package/collection/components/input/pn-choice-button/pn-choice-button.js +170 -0
  23. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter-types.js +10 -0
  24. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.css +0 -0
  25. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.js +166 -0
  26. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.stories.js +54 -0
  27. package/collection/components/layout-components/{pn-siteheader → pn-marketweb-sitefooter}/translations.js +0 -0
  28. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.css +34 -0
  29. package/collection/components/layout-components/{pn-siteheader/pn-siteheader-login.js → pn-marketweb-siteheader/pn-marketweb-siteheader-login.js} +6 -6
  30. package/collection/components/layout-components/{pn-siteheader/pn-siteheader-loginmanager.js → pn-marketweb-siteheader/pn-marketweb-siteheader-loginmanager.js} +0 -0
  31. package/collection/components/layout-components/{pn-siteheader/pn-siteheader-search.css → pn-marketweb-siteheader/pn-marketweb-siteheader-search.css} +0 -0
  32. package/collection/components/layout-components/{pn-siteheader/pn-siteheader-search.js → pn-marketweb-siteheader/pn-marketweb-siteheader-search.js} +5 -6
  33. package/collection/components/layout-components/{pn-siteheader/pn-siteheader-types.js → pn-marketweb-siteheader/pn-marketweb-siteheader-types.js} +0 -0
  34. package/collection/components/layout-components/{pn-siteheader/pn-siteheader.css → pn-marketweb-siteheader/pn-marketweb-siteheader.css} +21 -21
  35. package/collection/components/layout-components/{pn-siteheader/pn-siteheader.js → pn-marketweb-siteheader/pn-marketweb-siteheader.js} +7 -7
  36. package/collection/components/layout-components/{pn-siteheader/pn-siteheader.stories.js → pn-marketweb-siteheader/pn-marketweb-siteheader.stories.js} +2 -2
  37. package/collection/components/layout-components/pn-marketweb-siteheader/translations.js +47 -0
  38. package/collection/components/navigation/pn-language-selector/language-selector.stories.js +43 -0
  39. package/collection/components/navigation/pn-language-selector/pn-language-selector-option.css +74 -0
  40. package/collection/components/navigation/pn-language-selector/pn-language-selector-option.js +148 -0
  41. package/collection/components/navigation/pn-language-selector/pn-language-selector-types.js +1 -0
  42. package/collection/components/navigation/pn-language-selector/pn-language-selector.css +32 -0
  43. package/collection/components/navigation/pn-language-selector/pn-language-selector.js +92 -0
  44. package/collection/components/navigation/pn-language-selector/translations.js +17 -0
  45. package/collection/components/navigation/pn-mainnav/main-nav.stories.js +92 -0
  46. package/collection/components/navigation/pn-mainnav/pn-main-nav-mockdata.js +5851 -0
  47. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.css +139 -0
  48. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.js +93 -0
  49. package/collection/components/navigation/pn-mainnav/pn-mainnav-link.css +221 -0
  50. package/collection/components/navigation/pn-mainnav/pn-mainnav-link.js +126 -0
  51. package/collection/components/navigation/pn-mainnav/pn-mainnav-list.css +51 -0
  52. package/collection/components/navigation/pn-mainnav/pn-mainnav-list.js +46 -0
  53. package/collection/components/navigation/pn-mainnav/pn-mainnav-store.js +14 -0
  54. package/collection/components/navigation/pn-mainnav/pn-mainnav.css +100 -0
  55. package/collection/components/navigation/pn-mainnav/pn-mainnav.js +200 -0
  56. package/collection/components/navigation/pn-mainnav/translations.js +32 -0
  57. package/collection/components/navigation/pn-mainnav/types.js +1 -0
  58. package/collection/components/navigation/pn-site-footer/pn-site-footer-col.css +20 -0
  59. package/collection/components/navigation/pn-site-footer/pn-site-footer-col.js +14 -0
  60. package/collection/components/navigation/pn-site-footer/pn-site-footer.css +72 -0
  61. package/collection/components/navigation/pn-site-footer/pn-site-footer.js +50 -0
  62. package/collection/components/navigation/pn-site-footer/site-footer.stories.js +87 -0
  63. package/collection/components/navigation/pn-site-selector/pn-site-selector-i18n.js +18 -0
  64. package/collection/components/navigation/pn-site-selector/pn-site-selector-item.css +62 -0
  65. package/collection/components/navigation/pn-site-selector/pn-site-selector-item.js +103 -0
  66. package/collection/components/navigation/pn-site-selector/pn-site-selector-types.js +1 -0
  67. package/collection/components/navigation/pn-site-selector/pn-site-selector.css +29 -0
  68. package/collection/components/navigation/pn-site-selector/pn-site-selector.js +96 -0
  69. package/collection/components/navigation/pn-site-selector/site-selector.stories.js +35 -0
  70. package/collection/components/widgets/pn-find-service-and-price/data.js +53 -0
  71. package/collection/components/widgets/pn-find-service-and-price/find-service-and-price.stories.js +27 -0
  72. package/collection/components/widgets/pn-find-service-and-price/libs/convertnode.js +58 -0
  73. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-result.css +0 -0
  74. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-result.js +101 -0
  75. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-store.js +20 -0
  76. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-translations.js +71 -0
  77. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price-types.js +1 -0
  78. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price.css +56 -0
  79. package/collection/components/widgets/pn-find-service-and-price/pn-find-service-and-price.js +236 -0
  80. package/collection/components/widgets/pn-find-service-and-price/runconvert.js +2 -0
  81. package/collection/components/widgets/pn-product-pricelist/data.js +53 -0
  82. package/collection/components/widgets/pn-product-pricelist/libs/convert.js +43 -0
  83. package/collection/components/widgets/pn-product-pricelist/libs/convertnode.js +58 -0
  84. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-result.css +0 -0
  85. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-result.js +101 -0
  86. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-store.js +17 -0
  87. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-translations.js +56 -0
  88. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist-types.js +1 -0
  89. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist.css +55 -0
  90. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist.js +231 -0
  91. package/collection/components/widgets/pn-product-pricelist/pn-product-pricelist.stories.js +35 -0
  92. package/collection/components/widgets/pn-product-pricelist/runconvert.js +2 -0
  93. package/collection/components/widgets/pn-product-tile/pn-product-tile-info.css +3 -0
  94. package/collection/components/widgets/pn-product-tile/pn-product-tile-info.js +70 -0
  95. package/collection/components/widgets/pn-product-tile/pn-product-tile-price.css +23 -0
  96. package/collection/components/widgets/pn-product-tile/pn-product-tile-price.js +94 -0
  97. package/collection/components/widgets/pn-product-tile/pn-product-tile.css +48 -0
  98. package/collection/components/widgets/pn-product-tile/pn-product-tile.js +21 -0
  99. package/collection/components/widgets/pn-product-tile/product-tile.stories.js +50 -0
  100. package/collection/globals/shared/productprice/convert.js +43 -0
  101. package/collection/globals/shared/productprice/product-price-types.js +1 -0
  102. package/custom-elements/index.d.ts +126 -12
  103. package/custom-elements/index.js +3179 -24
  104. package/esm/convert-b49a0857.js +1728 -0
  105. package/esm/{index-1e3839a0.js → index-52dc19ca.js} +79 -1
  106. package/esm/index-7c277874.js +179 -0
  107. package/esm/loader.js +2 -2
  108. package/esm/pn-choice-button_2.entry.js +73 -0
  109. package/esm/pn-find-service-and-price-store-d02cbfe1.js +21 -0
  110. package/esm/pn-find-service-and-price.entry.js +259 -0
  111. package/esm/pn-language-selector_9.entry.js +634 -0
  112. package/esm/pn-mainnav-link.entry.js +41 -0
  113. package/esm/pn-mainnav-store-a0726338.js +15 -0
  114. package/esm/pn-market-web-components.js +2 -2
  115. package/esm/pn-marketweb-sitefooter.entry.js +141 -0
  116. package/esm/{pn-siteheader.entry.js → pn-marketweb-siteheader.entry.js} +8 -8
  117. package/esm/pn-product-pricelist-result.entry.js +41 -0
  118. package/esm/pn-product-pricelist-store-6259b354.js +18 -0
  119. package/esm/pn-product-pricelist.entry.js +215 -0
  120. package/esm/pn-product-tile_3.entry.js +43 -0
  121. package/esm/pn-site-footer_2.entry.js +31 -0
  122. package/esm-es5/convert-b49a0857.js +13 -0
  123. package/esm-es5/index-52dc19ca.js +1 -0
  124. package/esm-es5/index-7c277874.js +1 -0
  125. package/esm-es5/loader.js +1 -1
  126. package/esm-es5/pn-choice-button_2.entry.js +1 -0
  127. package/esm-es5/pn-find-service-and-price-store-d02cbfe1.js +1 -0
  128. package/esm-es5/pn-find-service-and-price.entry.js +1 -0
  129. package/esm-es5/pn-language-selector_9.entry.js +1 -0
  130. package/esm-es5/pn-mainnav-link.entry.js +1 -0
  131. package/esm-es5/pn-mainnav-store-a0726338.js +1 -0
  132. package/esm-es5/pn-market-web-components.js +1 -1
  133. package/esm-es5/pn-marketweb-sitefooter.entry.js +1 -0
  134. package/esm-es5/pn-marketweb-siteheader.entry.js +1 -0
  135. package/esm-es5/pn-product-pricelist-result.entry.js +1 -0
  136. package/esm-es5/pn-product-pricelist-store-6259b354.js +1 -0
  137. package/esm-es5/pn-product-pricelist.entry.js +1 -0
  138. package/esm-es5/pn-product-tile_3.entry.js +1 -0
  139. package/esm-es5/pn-site-footer_2.entry.js +1 -0
  140. package/package.json +6 -3
  141. package/pn-market-web-components/p-05d06f7f.system.js +1 -0
  142. package/pn-market-web-components/p-0a756d7d.system.entry.js +1 -0
  143. package/pn-market-web-components/p-21e0e386.js +13 -0
  144. package/pn-market-web-components/p-27502f43.system.entry.js +1 -0
  145. package/pn-market-web-components/p-3ae134bf.system.entry.js +1 -0
  146. package/pn-market-web-components/p-3ae74105.system.entry.js +1 -0
  147. package/pn-market-web-components/p-43bb8707.system.js +1 -0
  148. package/pn-market-web-components/p-46018354.system.js +1 -0
  149. package/pn-market-web-components/p-4b4ee8d5.system.entry.js +1 -0
  150. package/pn-market-web-components/p-4bf9a9ff.js +1 -0
  151. package/pn-market-web-components/p-57a1db89.system.entry.js +1 -0
  152. package/pn-market-web-components/p-5f1ad0b7.entry.js +1 -0
  153. package/pn-market-web-components/p-62700d6e.system.js +1 -0
  154. package/pn-market-web-components/p-7331d3bb.system.js +1 -0
  155. package/pn-market-web-components/p-80fd4dd9.system.entry.js +1 -0
  156. package/pn-market-web-components/p-91624bd5.system.js +13 -0
  157. package/pn-market-web-components/p-926fc962.js +1 -0
  158. package/pn-market-web-components/p-986d3894.entry.js +1 -0
  159. package/pn-market-web-components/p-a04d0ba4.entry.js +1 -0
  160. package/pn-market-web-components/p-a5179982.system.entry.js +1 -0
  161. package/pn-market-web-components/p-af861bb5.js +1 -0
  162. package/pn-market-web-components/p-b129cc27.system.js +1 -0
  163. package/pn-market-web-components/p-b4904bdb.system.entry.js +1 -0
  164. package/pn-market-web-components/p-ba704cbf.entry.js +1 -0
  165. package/pn-market-web-components/p-ba8e9dfe.entry.js +1 -0
  166. package/pn-market-web-components/p-be245b29.entry.js +1 -0
  167. package/pn-market-web-components/p-bfc523fc.js +1 -0
  168. package/pn-market-web-components/p-ce136600.js +1 -0
  169. package/pn-market-web-components/p-d3590589.entry.js +1 -0
  170. package/pn-market-web-components/p-e367b055.system.entry.js +1 -0
  171. package/pn-market-web-components/p-e377410f.entry.js +1 -0
  172. package/pn-market-web-components/p-ec95bda3.entry.js +1 -0
  173. package/pn-market-web-components/p-fee1d1c9.entry.js +1 -0
  174. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  175. package/pn-market-web-components/pn-market-web-components.js +1 -1
  176. package/types/components/input/pn-choice-button/pn-choice-button.d.ts +20 -0
  177. package/types/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter-types.d.ts +21 -0
  178. package/types/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.d.ts +23 -0
  179. package/types/components/layout-components/{pn-siteheader → pn-marketweb-sitefooter}/translations.d.ts +0 -0
  180. package/types/components/layout-components/{pn-siteheader/pn-siteheader-login.d.ts → pn-marketweb-siteheader/pn-marketweb-siteheader-login.d.ts} +3 -3
  181. package/types/components/layout-components/{pn-siteheader/pn-siteheader-loginmanager.d.ts → pn-marketweb-siteheader/pn-marketweb-siteheader-loginmanager.d.ts} +0 -0
  182. package/types/components/layout-components/{pn-siteheader/pn-siteheader-search.d.ts → pn-marketweb-siteheader/pn-marketweb-siteheader-search.d.ts} +2 -2
  183. package/types/components/layout-components/{pn-siteheader/pn-siteheader-types.d.ts → pn-marketweb-siteheader/pn-marketweb-siteheader-types.d.ts} +0 -0
  184. package/types/components/layout-components/{pn-siteheader/pn-siteheader.d.ts → pn-marketweb-siteheader/pn-marketweb-siteheader.d.ts} +2 -2
  185. package/types/components/layout-components/pn-marketweb-siteheader/translations.d.ts +47 -0
  186. package/types/components/navigation/pn-language-selector/pn-language-selector-option.d.ts +12 -0
  187. package/types/components/navigation/pn-language-selector/pn-language-selector-types.d.ts +9 -0
  188. package/types/components/navigation/pn-language-selector/pn-language-selector.d.ts +15 -0
  189. package/types/components/navigation/pn-language-selector/translations.d.ts +17 -0
  190. package/types/components/navigation/pn-mainnav/pn-mainnav-level.d.ts +15 -0
  191. package/types/components/navigation/pn-mainnav/pn-mainnav-link.d.ts +19 -0
  192. package/types/components/navigation/pn-mainnav/pn-mainnav-list.d.ts +7 -0
  193. package/types/components/navigation/pn-mainnav/pn-mainnav-store.d.ts +21 -0
  194. package/types/components/navigation/pn-mainnav/pn-mainnav.d.ts +24 -0
  195. package/types/components/navigation/pn-mainnav/translations.d.ts +32 -0
  196. package/types/components/navigation/pn-mainnav/types.d.ts +6 -0
  197. package/types/components/navigation/pn-site-footer/pn-site-footer-col.d.ts +3 -0
  198. package/types/components/navigation/pn-site-footer/pn-site-footer.d.ts +6 -0
  199. package/types/components/navigation/pn-site-selector/pn-site-selector-item.d.ts +7 -0
  200. package/types/components/navigation/pn-site-selector/pn-site-selector-types.d.ts +3 -0
  201. package/types/components/navigation/pn-site-selector/pn-site-selector.d.ts +12 -0
  202. package/types/components/widgets/pn-find-service-and-price/pn-find-service-and-price-result.d.ts +9 -0
  203. package/types/components/widgets/pn-find-service-and-price/pn-find-service-and-price-store.d.ts +33 -0
  204. package/types/components/widgets/pn-find-service-and-price/pn-find-service-and-price-translations.d.ts +71 -0
  205. package/types/components/widgets/pn-find-service-and-price/pn-find-service-and-price-types.d.ts +29 -0
  206. package/types/components/widgets/pn-find-service-and-price/pn-find-service-and-price.d.ts +18 -0
  207. package/types/components/widgets/pn-product-pricelist/pn-product-pricelist-result.d.ts +9 -0
  208. package/types/components/widgets/pn-product-pricelist/pn-product-pricelist-store.d.ts +27 -0
  209. package/types/components/widgets/pn-product-pricelist/pn-product-pricelist-translations.d.ts +56 -0
  210. package/types/components/widgets/pn-product-pricelist/pn-product-pricelist-types.d.ts +16 -0
  211. package/types/components/widgets/pn-product-pricelist/pn-product-pricelist.d.ts +20 -0
  212. package/types/components/widgets/pn-product-tile/pn-product-tile-info.d.ts +6 -0
  213. package/types/components/widgets/pn-product-tile/pn-product-tile-price.d.ts +7 -0
  214. package/types/components/widgets/pn-product-tile/pn-product-tile.d.ts +3 -0
  215. package/types/components.d.ts +486 -28
  216. package/types/globals/shared/productprice/product-price-types.d.ts +19 -0
  217. package/cjs/pn-siteheader-login_2.cjs.entry.js +0 -295
  218. package/collection/components/layout-components/pn-siteheader/pn-siteheader-login.css +0 -34
  219. package/esm/pn-siteheader-login_2.entry.js +0 -290
  220. package/esm-es5/index-1e3839a0.js +0 -1
  221. package/esm-es5/pn-siteheader-login_2.entry.js +0 -1
  222. package/esm-es5/pn-siteheader.entry.js +0 -1
  223. package/pn-market-web-components/p-0e743863.system.js +0 -1
  224. package/pn-market-web-components/p-1e159db8.js +0 -1
  225. package/pn-market-web-components/p-2e901469.system.entry.js +0 -1
  226. package/pn-market-web-components/p-4d08fcb9.entry.js +0 -1
  227. package/pn-market-web-components/p-530b52d0.system.js +0 -1
  228. package/pn-market-web-components/p-9a654a14.system.entry.js +0 -1
  229. package/pn-market-web-components/p-a1045531.entry.js +0 -1
@@ -0,0 +1,634 @@
1
+ import { r as registerInstance, h, a as Host, c as getElement, e as createEvent } from './index-52dc19ca.js';
2
+ import { s as state, o as onChange } from './pn-mainnav-store-a0726338.js';
3
+ import './index-7c277874.js';
4
+
5
+ const translations$1 = {
6
+ 'sv': {
7
+ "heading": "Språk",
8
+ },
9
+ 'en': {
10
+ "heading": "Language"
11
+ },
12
+ 'da': {
13
+ "heading": "Sprog"
14
+ },
15
+ 'no': {
16
+ "heading": "Språk"
17
+ },
18
+ 'fi': {
19
+ "heading": "Kieli"
20
+ }
21
+ };
22
+
23
+ const pnLanguageSelectorCss = ".languageselector{position:relative}.languageselector-togglebtn{cursor:pointer;border:0;padding:0.64rem 0;background-color:#FFFFFF;color:#005D92;font-size:1.6rem}.languageselector-togglebtn:hover,.languageselector-togglebtn:focus,.languageselector-togglebtn:active{color:#0D234B;text-decoration:underline}.languageselector-togglebtn svg{width:1.9rem;height:1.9rem}.languageselector-title{padding:0.8rem 1.6rem;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.languageselector-list{margin:0;padding:0;list-style:none}";
24
+
25
+ const PnlanguageSelector = class {
26
+ constructor(hostRef) {
27
+ registerInstance(this, hostRef);
28
+ /* Current language code */
29
+ this.value = "";
30
+ this.selectedLanguageName = "";
31
+ this.options = [];
32
+ }
33
+ componentWillLoad() {
34
+ this.setTranslations();
35
+ }
36
+ componentDidLoad() {
37
+ this.initialize();
38
+ }
39
+ initialize() {
40
+ const options = [].slice.apply(this.hostElement.querySelectorAll("pn-language-selector-option"));
41
+ options.map((option) => {
42
+ // Set current label of language selector
43
+ if (option.getAttribute("code") == this.value || option.getAttribute("selected") == "true") {
44
+ this.selectedLanguageName = option.getAttribute("name");
45
+ }
46
+ // Bind event listener for when a user change language
47
+ option.addEventListener("setCurrentLanguage", (event) => {
48
+ this.onSetCurrentLanguage(event.detail);
49
+ });
50
+ });
51
+ }
52
+ onSetCurrentLanguage(option) {
53
+ this.value = option.code;
54
+ this.selectedLanguageName = option.name;
55
+ }
56
+ setTranslations() {
57
+ if (translations$1[this.value]) {
58
+ this.i18n = translations$1[this.value];
59
+ }
60
+ }
61
+ onValueChange() {
62
+ var _a;
63
+ const components = (_a = this.hostElement.querySelectorAll("pn-language-selector-option")) !== null && _a !== void 0 ? _a : [];
64
+ components.forEach((component) => {
65
+ // Pass values as props into slotted components
66
+ // component.setAttribute("current-language", this.value);
67
+ component.setAttribute("selected", (component.getAttribute("code") === this.value) + '');
68
+ });
69
+ }
70
+ render() {
71
+ return (h(Host, null, h("pn-nav-dropdown", { label: this.selectedLanguageName, icon: "globe" }, h("nav", { class: "languageselector-nav", "aria-label": this.i18n.heading }, h("strong", { class: "languageselector-title" }, this.i18n.heading), h("div", { class: "languageselector-list", role: "list" }, h("slot", null))))));
72
+ }
73
+ get hostElement() { return getElement(this); }
74
+ static get watchers() { return {
75
+ "value": ["onValueChange"]
76
+ }; }
77
+ };
78
+ PnlanguageSelector.style = pnLanguageSelectorCss;
79
+
80
+ const pnLanguageSelectorOptionCss = "pn-language-selector-option{margin:0;padding:0;list-style:none}.languageselector-button,.languageselector-link{width:100%;padding:1.1rem 1.6rem 1.1rem 1.4rem;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:relative;text-decoration:none;border:0;cursor:pointer;background-color:#FFFFFF;color:#005D92;font-size:1.6rem;font-weight:bold;border-radius:0}.languageselector-button:hover,.languageselector-button:focus,.languageselector-button:active,.languageselector-link:hover,.languageselector-link:focus,.languageselector-link:active{color:#0D234B;text-decoration:underline;-webkit-box-shadow:none;box-shadow:none;background-color:#F3F2F2;color:#005D92;outline:none}.languageselector-itemtext{display:inline-block;margin-left:1rem}.languageselector-radio-outer{background:#fff;border:0.1em solid #D3CECB;border-radius:50%;height:1.5em;width:1.5em;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;-webkit-transition:border 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-box-shadow 0.1s;transition:border 0.2s ease-in-out, background-color 0.2s ease-in-out, -webkit-box-shadow 0.1s;transition:border 0.2s ease-in-out, background-color 0.2s ease-in-out, box-shadow 0.1s;transition:border 0.2s ease-in-out, background-color 0.2s ease-in-out, box-shadow 0.1s, -webkit-box-shadow 0.1s;cursor:pointer}.languageselector-radio-outer:focus>.languageselector-radio-outer,.languageselector-radio-outer:active>.languageselector-radio-outer{-webkit-box-shadow:0 0 0 0.1rem white, 0 0 0 0.3rem #005D92;box-shadow:0 0 0 0.1rem white, 0 0 0 0.3rem #005D92}.languageselector-radio-outer:hover>.languageselector-radio-outer{border:0.1rem solid #005D92;background:#E0F8FF}[selected=true] .languageselector-radio-outer{border:0.1rem solid #005D92}.languageselector-radio-inner{-webkit-transform:scale(0);transform:scale(0);height:1em;width:1em;background-color:#005D92;border-radius:50%;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transition:-webkit-transform 0.1s cubic-bezier(0.64, 0.01, 0.67, 0.92);transition:-webkit-transform 0.1s cubic-bezier(0.64, 0.01, 0.67, 0.92);transition:transform 0.1s cubic-bezier(0.64, 0.01, 0.67, 0.92);transition:transform 0.1s cubic-bezier(0.64, 0.01, 0.67, 0.92), -webkit-transform 0.1s cubic-bezier(0.64, 0.01, 0.67, 0.92)}[selected=true] .languageselector-radio-inner{-webkit-transform:scale(1);transform:scale(1)}";
81
+
82
+ const PnlanguageSelectorOption = class {
83
+ constructor(hostRef) {
84
+ registerInstance(this, hostRef);
85
+ this.setCurrentLanguage = createEvent(this, "setCurrentLanguage", 7);
86
+ /** What you write in the comment block above each prop is what ends up in the description fields in the prop table in the documentation */
87
+ this.name = "";
88
+ this.code = "";
89
+ this.url = "";
90
+ this.selected = false;
91
+ }
92
+ onOptionClick() {
93
+ const currentlanguage = {
94
+ name: this.name,
95
+ code: this.code,
96
+ url: this.url,
97
+ current: true
98
+ };
99
+ this.setCurrentLanguage.emit(currentlanguage);
100
+ }
101
+ render() {
102
+ return (h(Host, { role: "listitem", selected: (this.selected) + '', code: this.code, name: this.name }, !this.url ? (h("button", { class: "languageselector-button", "data-langcode": this.code, onClick: this.onOptionClick.bind(this) }, h("span", { class: "languageselector-radio-outer" }, h("span", { class: "languageselector-radio-inner" })), h("span", { class: "languageselector-itemtext" }, this.name, " - ", this.code))) : (h("a", { href: this.url, target: "_self", class: "languageselector-link", "data-langcode": this.code }, h("span", { class: "languageselector-radio-outer" }, h("span", { class: "languageselector-radio-inner" })), h("span", { class: "languageselector-itemtext" }, this.name, " - ", this.code)))));
103
+ }
104
+ };
105
+ PnlanguageSelectorOption.style = pnLanguageSelectorOptionCss;
106
+
107
+ const translations = {
108
+ 'sv': {
109
+ "menuHomeButton": "Hem",
110
+ "menuGoBackButton": "Gå tillbaka",
111
+ "mainMenuButton": "Meny",
112
+ "menuStartButton": "Start"
113
+ },
114
+ 'en': {
115
+ "menuHomeButton": "Home",
116
+ "menuGoBackButton": "Go back",
117
+ "mainMenuButton": "Menu",
118
+ "menuStartButton": "Start"
119
+ },
120
+ 'da': {
121
+ "menuHomeButton": "Hjem",
122
+ "menuGoBackButton": "Gå tilbage",
123
+ "mainMenuButton": "Menu",
124
+ "menuStartButton": "Start"
125
+ },
126
+ 'no': {
127
+ "menuHomeButton": "Hjem",
128
+ "menuGoBackButton": "Gå tilbake",
129
+ "mainMenuButton": "Meny",
130
+ "menuStartButton": "Start"
131
+ },
132
+ 'fi': {
133
+ "menuHomeButton": "Koti",
134
+ "menuGoBackButton": "Mene takaisin",
135
+ "mainMenuButton": "Valikko",
136
+ "menuStartButton": "Alkaa"
137
+ }
138
+ };
139
+
140
+ const pnMainnavCss = "pn-mainnav{display:-ms-flexbox;display:flex;-ms-flex-flow:row-reverse;flex-flow:row-reverse;position:relative;width:100%;min-height:5.1rem}@media screen and (min-width: 48em){pn-mainnav{-ms-flex-flow:row;flex-flow:row}}@media screen and (min-width: 64em){pn-mainnav{-ms-flex-flow:column;flex-flow:column}}@media screen and (min-width: 64em){pn-mainnav [slot=footer]{display:none}}pn-mainnav>nav{height:auto;width:100vw;background-color:#FFFFFF;z-index:2;-webkit-transform:translateX(100vw);transform:translateX(100vw);-webkit-transition:-webkit-transform 0.2s 0s;transition:-webkit-transform 0.2s 0s;transition:transform 0.2s 0s;transition:transform 0.2s 0s, -webkit-transform 0.2s 0s;-webkit-transition-property:visibility, -webkit-transform;transition-property:visibility, -webkit-transform;transition-property:transform, visibility;transition-property:transform, visibility, -webkit-transform;display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;visibility:hidden;position:fixed;top:3em;bottom:0;left:0}@media screen and (min-width: 48em){pn-mainnav>nav{top:6.3em}}pn-mainnav>nav[data-menu-open=true]{visibility:visible;-webkit-transform:translateX(0);transform:translateX(0)}@media screen and (min-width: 64em){pn-mainnav>nav{-ms-flex-flow:row-reverse;flex-flow:row-reverse;top:0;position:static;height:auto;width:100%;-ms-flex-pack:justify;justify-content:space-between;visibility:visible;-webkit-transform:translateX(0);transform:translateX(0)}}pn-mainnav>nav a{text-decoration:none}pn-mainnav>nav button{cursor:pointer}.mainnav-toggle{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-item-align:center;align-self:center}@media screen and (min-width: 64em){.mainnav-toggle{display:none}}.mainnav-toggle>button{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background-color:#005D92;color:#FFFFFF;border-radius:2.4rem;border:none;padding:0.6rem 1.6rem;cursor:pointer;font-size:1.6rem}.mainnav-toggle>button:focus{outline:0}.mainnav-toggle>button pn-icon{margin-left:0.8rem;display:block}.mainnav-toggle>button svg{display:block;margin:-0.2rem -0.5rem -0.2rem 0;height:1.9rem;width:1.9rem}";
141
+
142
+ const PnMainnav = class {
143
+ constructor(hostRef) {
144
+ registerInstance(this, hostRef);
145
+ this.menuLanguageChange = createEvent(this, "menuLanguageChange", 7);
146
+ this.marketChange = createEvent(this, "marketChange", 7);
147
+ /** Specifies which market we want to fetch navigation for (se,dk,fi,no,com) */
148
+ this.market = "se";
149
+ /** Specifies which language we want to show navigation in (sv,da,fi,no,en) */
150
+ this.language = "sv";
151
+ /** Specifies which endpoint we should read information from */
152
+ this.navigationId = "mainnav";
153
+ /** Specifies which endpoint we should read information from */
154
+ this.openMenu = false;
155
+ }
156
+ componentWillLoad() {
157
+ this.init();
158
+ document.removeEventListener("mousedown", this._onClickOutside.bind(this));
159
+ document.addEventListener("mousedown", this._onClickOutside.bind(this));
160
+ }
161
+ async init() {
162
+ this.setLanguage();
163
+ this.setMarket();
164
+ }
165
+ _onClickOutside(event) {
166
+ const clickedOutside = !this.hostElement.contains(event.target);
167
+ if (clickedOutside) {
168
+ state.openLevel = "";
169
+ }
170
+ }
171
+ setLanguage() {
172
+ this.menuLanguageChange.emit(this.language);
173
+ }
174
+ setMarket() {
175
+ this.marketChange.emit(this.market);
176
+ }
177
+ onLanguageChange(event) {
178
+ if (translations[event.detail]) {
179
+ state.i18n = translations[event.detail];
180
+ }
181
+ }
182
+ setOpenMenu() {
183
+ state.openMenu = (!state.openMenu);
184
+ }
185
+ onOpenMenuLevelChange(event) {
186
+ state.openLevel = event.detail;
187
+ }
188
+ render() {
189
+ return (h(Host, null, h("div", { class: "mainnav-toggle" }, h("button", { "aria-controls": this.navigationId, "aria-expanded": state.openMenu + '', onClick: this.setOpenMenu.bind(this) }, state.i18n.mainMenuButton, h("pn-icon", { symbol: state.openMenu ? "close" : "bars", color: "white" }))), h("nav", { class: "mainnav", role: "navigation", "data-menu-open": state.openMenu + '', id: this.navigationId }, h("slot", null))));
190
+ }
191
+ get hostElement() { return getElement(this); }
192
+ };
193
+ PnMainnav.style = pnMainnavCss;
194
+
195
+ const pnMainnavLevelCss = "pn-mainnav-level{display:block}pn-mainnav-level[data-level=\"1\"]{width:100%;right:0;overflow-y:scroll;overflow-x:hidden;-ms-flex:1;flex:1}@media screen and (min-width: 64em){pn-mainnav-level[data-level=\"1\"]{width:auto;overflow:initial}pn-mainnav-level[data-level=\"1\"]::-webkit-scrollbar{display:none}}pn-mainnav-level[data-level=\"2\"]{position:absolute;top:0;bottom:0;left:0;width:100vw;padding:0;background-color:#FFFFFF;z-index:1;-webkit-transform:translateX(100vw);transform:translateX(100vw);-webkit-transition:-webkit-transform 0.2s 0s;transition:-webkit-transform 0.2s 0s;transition:transform 0.2s 0s;transition:transform 0.2s 0s, -webkit-transform 0.2s 0s;-webkit-transition-property:visibility, -webkit-transform;transition-property:visibility, -webkit-transform;transition-property:transform, visibility;transition-property:transform, visibility, -webkit-transform;overflow:scroll;visibility:hidden}@media screen and (min-width: 64em){pn-mainnav-level[data-level=\"2\"]{left:0;top:calc(100% + 1rem);bottom:auto;border-radius:1.6rem;width:auto;padding:1.6rem 1.6rem 0 1.6rem;-webkit-box-shadow:0 0.06rem 0.18rem rgba(0, 0, 0, 0.1), 0 0.32rem 0.72rem rgba(0, 0, 0, 0.13);-moz-box-shadow:0 0.06rem 0.18rem rgba(0, 0, 0, 0.1), 0 0.32rem 0.72rem rgba(0, 0, 0, 0.13);box-shadow:0 0.06rem 0.18rem rgba(0, 0, 0, 0.1), 0 0.32rem 0.72rem rgba(0, 0, 0, 0.13);height:auto;z-index:3;display:none}pn-mainnav-level[data-level=\"2\"][data-menuitem-rightaligned=true]{right:0;left:unset}}@media screen and (max-height: 33.125em){pn-mainnav-level[data-level=\"2\"]{-ms-overflow-style:none;scrollbar-width:none}pn-mainnav-level[data-level=\"2\"]::-webkit-scrollbar{display:none}}pn-mainnav-level[data-level=\"2\"][aria-hidden=false]{-webkit-transform:translateX(0);transform:translateX(0);visibility:visible}@media screen and (min-width: 64em){pn-mainnav-level[data-level=\"2\"][aria-hidden=false]{display:block;overflow:visible}pn-mainnav-level[data-level=\"2\"][aria-hidden=false]:not([data-level-listcount=\"1\"]){display:grid;grid-template-columns:minmax(12em, 20em) 1fr;grid-template-rows:auto auto;gap:0px 1.6rem;grid-template-areas:\"top top\" \"left right\"}}@media screen and (min-width: 64em){pn-mainnav-level[data-level=\"2\"][data-level-alignment=left]{right:0;left:unset}}@media screen and (min-width: 64em){pn-mainnav-level[data-level=\"2\"][data-level-alignment=center]{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}}pn-mainnav-level[data-level=\"2\"] a{color:#005D92;text-decoration:none}.mainnav-level-header{grid-area:top}.mainnav-level-header>label{position:absolute;width:0.1rem;height:0.1rem;padding:0;margin:-0.1rem;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;white-space:nowrap}.mainnav-level-header>button{display:block;position:relative;border:none;background-color:transparent;color:#005D92;padding:2.4rem 0 2.4rem 6.2rem;width:100%;text-align:left}@media screen and (min-width: 64em){.mainnav-level-header>button{display:none;speak:none}}.mainnav-level-header>button>pn-icon{speak:none;position:absolute;height:2.4rem;width:2.4rem;left:3rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}[data-level=\"2\"] .mainnav-level-header>pn-mainnav-link>a{font-size:2.4rem}";
196
+
197
+ const PnMainnavLevel = class {
198
+ constructor(hostRef) {
199
+ registerInstance(this, hostRef);
200
+ this.level = 1;
201
+ this.levelId = "";
202
+ this.isOpen = false;
203
+ this.parentName = "";
204
+ this.parentHref = "";
205
+ this.parentLinkId = "";
206
+ this.listCount = 0;
207
+ this.alignment = "right";
208
+ }
209
+ async componentWillLoad() {
210
+ this.listCount = this.hostElement.querySelectorAll(":scope > pn-mainnav-list").length;
211
+ if (this.hostElement.parentElement.tagName.toLowerCase() !== 'nav') {
212
+ this.level = 2;
213
+ }
214
+ if (this.hostElement.parentElement.tagName.toLowerCase() === 'pn-mainnav-link') {
215
+ this.parentName = this.hostElement.parentElement.getAttribute('name') + '';
216
+ this.parentHref = this.hostElement.parentElement.getAttribute('href') + '';
217
+ this.parentLinkId = this.hostElement.parentElement.getAttribute('linkid') + '';
218
+ const parentLinkName = this.parentName.toLowerCase().replace(/\W/gi, '_');
219
+ this.levelId = `mainnav-lvl${this.level}-${parentLinkName}`;
220
+ }
221
+ onChange("openLevel", () => {
222
+ this.onChangeOpenLevel();
223
+ });
224
+ }
225
+ onOpen() {
226
+ if (this.level === 2) {
227
+ requestAnimationFrame(() => {
228
+ const levelClientRect = this.hostElement.getClientRects()[0];
229
+ if (!levelClientRect) {
230
+ return;
231
+ }
232
+ const navElm = this.hostElement.parentElement.parentElement.parentElement.parentElement;
233
+ if (navElm && navElm.tagName.toLowerCase() === "nav") {
234
+ const navClientRect = navElm.getClientRects()[0];
235
+ if (!navClientRect) {
236
+ return;
237
+ }
238
+ if (levelClientRect.right > navClientRect.width) {
239
+ const levelParentRect = this.hostElement.parentElement.getClientRects()[0];
240
+ if ((levelParentRect.left - levelClientRect.width) < 0) {
241
+ this.alignment = "center";
242
+ }
243
+ else {
244
+ this.alignment = "left";
245
+ }
246
+ }
247
+ }
248
+ });
249
+ }
250
+ }
251
+ onChangeOpenLevel() {
252
+ this.isOpen = state.openLevel === this.levelId;
253
+ }
254
+ render() {
255
+ return (h(Host, Object.assign({ role: "navigation" }, ((this.level > 1 && this.levelId) ? { 'aria-hidden': (!this.isOpen) + '' } : {}), { "data-level-listcount": this.listCount + '', "data-level-alignment": this.alignment, "data-level": this.level + '' }, (this.levelId ? { id: this.levelId } : {})), (this.level > 1) ? (h("div", { class: "mainnav-level-header" }, h("label", { htmlFor: this.levelId }, state.i18n.menuGoBackButton), h("button", { class: "secondlevel-backbtn", onClick: () => state.openLevel = '', "aria-expanded": (state.openLevel === this.levelId) + '' }, h("pn-icon", { symbol: "arrow-left", color: "blue700" }), state.i18n.menuStartButton), (this.parentHref && this.parentName) ? h("pn-mainnav-link", { href: this.parentHref, name: this.parentName, linkid: this.parentLinkId }) : null)) : null, h("slot", null), h("slot", { name: "additional" }), h("slot", { name: "footer" })));
256
+ }
257
+ get hostElement() { return getElement(this); }
258
+ static get watchers() { return {
259
+ "isOpen": ["onOpen"]
260
+ }; }
261
+ };
262
+ PnMainnavLevel.style = pnMainnavLevelCss;
263
+
264
+ const pnMainnavListCss = "pn-mainnav-list{display:block;overflow:visible;list-style:none;margin:0;padding:0;grid-area:right}@media screen and (min-width: 64em){pn-mainnav-list+pn-mainnav-list{grid-area:left;border-right:0.1rem solid #D3CECB;margin-bottom:1.6rem;margin-right:-0.7rem;padding-right:0.7rem}}[data-level=\"1\"]>pn-mainnav-list{overflow:scroll;-webkit-overflow-scrolling:touch}@media screen and (min-width: 64em){[data-level=\"1\"]>pn-mainnav-list{height:100%;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;overflow:visible;padding:0}}@media screen and (min-width: 64em){[data-level=\"2\"]>pn-mainnav-list[data-navlist-showcolumns=true]{-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:1.6rem;-moz-column-gap:1.6rem;column-gap:1.6rem;padding-bottom:1.6rem}}.mainnav-list-heading{display:none;font-weight:bold;-webkit-column-span:all;-moz-column-span:all;column-span:all;font-size:1.8rem;padding:1.4rem 1.4rem 1.4rem 4.8rem}@media screen and (min-width: 64em){.mainnav-list-heading{display:block;padding:0 1.4rem 1.4rem 1.4rem}}";
265
+
266
+ const PnMainnavList = class {
267
+ constructor(hostRef) {
268
+ registerInstance(this, hostRef);
269
+ this.heading = "";
270
+ this.linkCount = 0;
271
+ }
272
+ componentWillLoad() {
273
+ this.linkCount = this.hostElement.querySelectorAll(":scope > pn-mainnav-link").length;
274
+ }
275
+ render() {
276
+ return (h(Host, { class: "mainnav-list", role: "list", "data-navlist-itemcount": this.linkCount + '', "data-navlist-showcolumns": (this.linkCount >= 8) + '' }, (this.heading) ? h("div", { class: "mainnav-list-heading" }, this.heading) : null, h("slot", null)));
277
+ }
278
+ get hostElement() { return getElement(this); }
279
+ };
280
+ PnMainnavList.style = pnMainnavListCss;
281
+
282
+ class PNLoginManager {
283
+ constructor(options = null) {
284
+ var _a;
285
+ this.eventTarget = (window !== null && window !== void 0 ? window : document === null || document === void 0 ? void 0 : document.body);
286
+ this.endpoint = "";
287
+ this.storagePrefix = "pn-user";
288
+ this.baseUrls = {
289
+ at: 'https://atportal.postnord.com/api/unified-login/backend',
290
+ prod: 'https://portal.postnord.com/api/unified-login/backend',
291
+ };
292
+ this.events = {
293
+ loginstatechange: "loginstatechange"
294
+ };
295
+ this.endpoints = {
296
+ authorizationEndpoint: `/authorization`,
297
+ tokenExchangeEndpoint: `/token`,
298
+ userInfoEndpoint: `/user`,
299
+ logoutEndpoint: `/logout`,
300
+ };
301
+ this.keys = {
302
+ token: 'token',
303
+ user: 'user',
304
+ expire: 'expire',
305
+ expireDate: 'expiredate'
306
+ };
307
+ this.store = {
308
+ get: (key) => {
309
+ const value = window.sessionStorage.getItem(`${this.storagePrefix}-${key}`);
310
+ if (!value) {
311
+ return value;
312
+ }
313
+ if (value.indexOf('{') === 0) {
314
+ try {
315
+ return JSON.parse(value);
316
+ }
317
+ catch (e) {
318
+ }
319
+ }
320
+ if (value.indexOf(',') !== -1) {
321
+ return value.split(',');
322
+ }
323
+ return value;
324
+ },
325
+ set: (key, value) => {
326
+ if (typeof value === "object" && typeof value.length === "undefined") {
327
+ window.sessionStorage.setItem(`${this.storagePrefix}-${key}`, JSON.stringify(value));
328
+ return;
329
+ }
330
+ window.sessionStorage.setItem(`${this.storagePrefix}-${key}`, value);
331
+ },
332
+ remove: (key) => {
333
+ window.sessionStorage.removeItem(`${this.storagePrefix}-${key}`);
334
+ },
335
+ };
336
+ if (!options) {
337
+ return;
338
+ }
339
+ this.eventTarget = (options.eventTarget) ? options.eventTarget : this.eventTarget;
340
+ this.endpoint = options.endpoint ? options.endpoint : `${window.location.protocol}//${window.location.host}`;
341
+ (_a = this.storagePrefix) !== null && _a !== void 0 ? _a : (this.storagePrefix = options.storagePrefix);
342
+ }
343
+ init() {
344
+ this.checkParameters();
345
+ this.checkExpireTime();
346
+ if (this.store.get(this.keys.token) && !this.store.get(this.keys.user)) {
347
+ this.fetchUserInfo();
348
+ }
349
+ this.loginStateChange();
350
+ }
351
+ isLoggedIn() {
352
+ const isLoggedIn = (this.store.get(this.keys.token) && this.store.get(this.keys.user)) ? true : false;
353
+ return isLoggedIn;
354
+ }
355
+ getLoginUrl(redirectPage = "") {
356
+ const currentPage = window.location.href;
357
+ redirectPage = redirectPage ? redirectPage : currentPage;
358
+ return `${this.getBaseUrl()}${this.endpoints.authorizationEndpoint}?redirectionUrl=${redirectPage}`;
359
+ }
360
+ getLogoutUrl(redirectPage = "") {
361
+ const currentPage = window.location.href;
362
+ redirectPage = redirectPage ? redirectPage : currentPage;
363
+ return `${this.getBaseUrl()}${this.endpoints.logoutEndpoint}?redirectionUrl=${redirectPage}&authorization=${this.store.get(this.keys.token)}`;
364
+ }
365
+ getUserInfo() {
366
+ if (this.isLoggedIn()) {
367
+ return this.store.get(this.keys.user);
368
+ }
369
+ }
370
+ getEventTarget() {
371
+ return this.eventTarget;
372
+ }
373
+ checkExpireTime() {
374
+ const expire = this.store.get(this.keys.expire);
375
+ if (!expire) {
376
+ return;
377
+ }
378
+ const now = new Date();
379
+ const expireDate = new Date(Math.floor(parseInt(expire, 10) * 1000));
380
+ if (now > expireDate) {
381
+ console.info('Login time has expired');
382
+ this.clearUserData();
383
+ this.loginStateChange();
384
+ }
385
+ }
386
+ checkParameters() {
387
+ if (!(window === null || window === void 0 ? void 0 : window.location)) {
388
+ return;
389
+ }
390
+ const params = new URLSearchParams(window.location.search);
391
+ if (params.get("oneTimeCode")) {
392
+ const oneTimeCode = params.get("oneTimeCode");
393
+ this.getToken(oneTimeCode);
394
+ const currentHref = window.location.href;
395
+ const paramPrefix = (currentHref.indexOf('?oneTimeCode') !== -1) ? "?" : "&";
396
+ history.replaceState({}, document.querySelector('title').innerText, currentHref.replace(`${paramPrefix}oneTimeCode=${oneTimeCode}`, ''));
397
+ }
398
+ }
399
+ async fetchUserInfo() {
400
+ const token = this.store.get(this.keys.token);
401
+ const reqConfig = {
402
+ method: 'GET',
403
+ headers: {
404
+ 'Accept': 'application/json',
405
+ 'Content-Type': 'application/json',
406
+ 'Authorization': token
407
+ },
408
+ };
409
+ const response = await fetch(`${this.getBaseUrl()}${this.endpoints.userInfoEndpoint}`, reqConfig);
410
+ const data = await response.json();
411
+ if (data) {
412
+ try {
413
+ const { idToken, expiryTime } = data;
414
+ const userInfo = this.parseUserInfo(idToken);
415
+ this.store.set(this.keys.user, userInfo);
416
+ // 10 Min early expire
417
+ this.store.set(this.keys.expire, expiryTime);
418
+ this.store.set(this.keys.expireDate, new Date(Math.floor(parseInt(expiryTime, 10) * 1000)));
419
+ this.loginStateChange();
420
+ }
421
+ catch (e) {
422
+ console.error('Unable to get user information', e);
423
+ }
424
+ }
425
+ }
426
+ clearUserData() {
427
+ this.store.remove(this.keys.user);
428
+ this.store.remove(this.keys.token);
429
+ this.store.remove(this.keys.expire);
430
+ this.store.remove(this.keys.expireDate);
431
+ }
432
+ async getToken(oneTimeCode) {
433
+ this.clearUserData();
434
+ const response = await fetch(`${this.getBaseUrl()}${this.endpoints.tokenExchangeEndpoint}?oneTimeCode=${oneTimeCode}`);
435
+ const { token } = await response.json();
436
+ if (typeof token === "string" && token) {
437
+ this.store.set(this.keys.token, token);
438
+ }
439
+ this.fetchUserInfo();
440
+ }
441
+ loginStateChange() {
442
+ if (!this.eventTarget) {
443
+ return;
444
+ }
445
+ this.eventTarget.dispatchEvent(new CustomEvent(this.events.loginstatechange, {
446
+ detail: this.isLoggedIn()
447
+ }));
448
+ }
449
+ getBaseUrl() {
450
+ const atEnvironments = ["localhost", "integration.", 'local.'];
451
+ const useATEnv = atEnvironments.filter(x => this.endpoint.indexOf(x) !== -1).length > 0;
452
+ if (useATEnv) {
453
+ return this.baseUrls.at;
454
+ }
455
+ return this.baseUrls.prod;
456
+ }
457
+ parseUserInfo(idToken) {
458
+ var base64Url = idToken.split('.')[1];
459
+ var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
460
+ var jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
461
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
462
+ }).join(''));
463
+ return JSON.parse(jsonPayload);
464
+ }
465
+ }
466
+
467
+ const pnMarketwebSiteheaderLoginCss = "pn-marketweb-siteheader-login{padding:1rem 0;margin-right:1.6rem}pn-marketweb-siteheader-login strong{padding:0.8rem 1.6rem;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}pn-marketweb-siteheader-login ul,pn-marketweb-siteheader-login li{list-style:none;margin:0;padding:0}pn-marketweb-siteheader-login li{padding:0.8rem 1.6rem}pn-marketweb-siteheader-login li a{display:block;width:100%}pn-marketweb-siteheader-login li a[tabindex],pn-marketweb-siteheader-login li a[style]{text-decoration:none}pn-marketweb-siteheader-login li pn-button{display:block;width:100%}pn-marketweb-siteheader-login pn-nav-dropdown{display:none}pn-marketweb-siteheader-login.hydrated pn-nav-dropdown{display:block}";
468
+
469
+ const PnMarketwebSiteheaderLogin = class {
470
+ constructor(hostRef) {
471
+ registerInstance(this, hostRef);
472
+ /** Specifies which endpoint domain we should load from */
473
+ this.endpoint = "";
474
+ // Login dialog
475
+ this.loginDialog = null;
476
+ this.loginManager = null;
477
+ this.loggedIn = false;
478
+ this.toggleButtonText = "";
479
+ }
480
+ componentWillLoad() {
481
+ this.loginManager = new PNLoginManager({ endpoint: this.endpoint, eventTarget: this.hostElement });
482
+ this.init();
483
+ }
484
+ async init() {
485
+ this.toggleButtonText = this.loginDialog.loginMenuLinkText;
486
+ this.hostElement.addEventListener(this.loginManager.events.loginstatechange, this.onLoginStateChange.bind(this));
487
+ this.loginManager.init();
488
+ this.setToggleButtonText();
489
+ }
490
+ setToggleButtonText() {
491
+ const userInfo = this.loginManager.getUserInfo();
492
+ if (this.loggedIn) {
493
+ if (userInfo === null || userInfo === void 0 ? void 0 : userInfo.given_name) {
494
+ this.toggleButtonText = userInfo.given_name + ((userInfo === null || userInfo === void 0 ? void 0 : userInfo.family_name) ? ` ${userInfo === null || userInfo === void 0 ? void 0 : userInfo.family_name}` : "");
495
+ }
496
+ else {
497
+ this.toggleButtonText = this.loginDialog.loggedInButtonText;
498
+ }
499
+ }
500
+ else {
501
+ this.toggleButtonText = this.loginDialog.loginMenuLinkText;
502
+ }
503
+ }
504
+ onLoginStateChange(e) {
505
+ this.loggedIn = e.detail;
506
+ this.setToggleButtonText();
507
+ }
508
+ render() {
509
+ var _a, _b, _c;
510
+ if (!this.loginDialog) {
511
+ return;
512
+ }
513
+ return (h("pn-nav-dropdown", { label: this.toggleButtonText, icon: "user", class: "siteheader-logindialog" }, (!this.loginDialog.overrideLoginMenu) ?
514
+ h("div", { "data-loggedin": this.loggedIn + '' }, (!this.loggedIn) ?
515
+ h("div", null, (_a = this.loginDialog.loginTitle) !== null && _a !== void 0 ? _a : h("strong", null, this.loginDialog.loginTitle), ((_b = this.loginDialog.loginMenuLinks) === null || _b === void 0 ? void 0 : _b.length) > 0 ?
516
+ h("ul", null, this.loginDialog.loginMenuLinks.map((link, i) => {
517
+ const href = (i === 0 && !link.href) ? this.loginManager.getLoginUrl() : link.href;
518
+ return (h("li", null, h("a", Object.assign({ href: href }, (link.openInNewWindow && { target: '_blank' })), h("pn-button", { appearance: (link.primaryLinkApperance ? "dark" : "light") }, link.linkText))));
519
+ }))
520
+ : (h("ul", null, h("li", null, h("a", { href: this.loginManager.getLoginUrl(this.loginDialog.loginUrl), target: "_top" }, h("pn-button", null, this.loginDialog.loginLinkText))), h("li", null, h("a", { href: this.loginDialog.registerUrl, target: "_top" }, h("pn-button", { appearance: "light", variant: "outlined" }, this.loginDialog.createLoginLinkText))))))
521
+ :
522
+ h("div", null, h("ul", null, this.loginDialog.loggedInLinks.map((link) => {
523
+ const isLogoutLink = link.href.indexOf('logout');
524
+ const href = (isLogoutLink) ? this.loginManager.getLogoutUrl(link.href.replace('logout', '')) : link.href;
525
+ return (h("li", null, h("a", Object.assign({ href: href }, (link.openInNewWindow && { target: '_blank' })), h("pn-button", { appearance: (link.primaryLinkApperance ? "dark" : "light"), onClick: () => {
526
+ if (isLogoutLink) {
527
+ this.loginManager.clearUserData();
528
+ }
529
+ } }, link.linkText))));
530
+ }))))
531
+ :
532
+ h("div", null, h("ul", null, (_c = this.loginDialog.loginMenuLinks) === null || _c === void 0 ? void 0 : _c.map(link => h("li", null, h("a", { href: link.href, target: link.openInNewWindow ? "_blank" : "_self", class: "btn btn-link" }, link.linkText)))))));
533
+ }
534
+ get hostElement() { return getElement(this); }
535
+ };
536
+ PnMarketwebSiteheaderLogin.style = pnMarketwebSiteheaderLoginCss;
537
+
538
+ const pnMarketwebSiteheaderSearchCss = ".siteheader-search a{display:none}@media screen and (min-width: 48em){.siteheader-search a{display:block}}.siteheader-search pn-search-field.button-icon pn-button,.siteheader-search pn-button{display:-ms-inline-flexbox;display:inline-flex}.siteheader-search pn-search-field.button-icon pn-button button,.siteheader-search pn-button button{-ms-flex-item-align:center;align-self:center;padding:0;height:2.3em;width:2.3em;line-height:0;min-height:unset;min-width:unset}.siteheader-search pn-search-field.button-icon pn-button pn-icon,.siteheader-search pn-button pn-icon{margin-left:0}.siteheader-search form{-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;width:auto;-ms-flex:none;flex:none;display:-ms-flexbox;display:flex;padding:0;margin:0 0 0 0.4rem;position:relative}@media screen and (min-width: 60em){.siteheader-search form{margin-right:1.6rem}}.siteheader-search form pn-search-field{min-width:13.5em}.siteheader-search form pn-search-field .input-container{-ms-flex-item-align:center;align-self:center}.siteheader-search form pn-search-field input{height:auto;min-height:1em;padding:0.6em 0.75em}";
539
+
540
+ const PnMarketwebSiteheaderSearch = class {
541
+ constructor(hostRef) {
542
+ registerInstance(this, hostRef);
543
+ // Display option, show only link
544
+ this.showOnlyLink = false;
545
+ // Hide search option
546
+ this.hideSearch = false;
547
+ // Search data
548
+ this.search = {};
549
+ }
550
+ componentWillLoad() {
551
+ }
552
+ render() {
553
+ if (!this.search.formActionUrl || this.hideSearch) {
554
+ return;
555
+ }
556
+ return (h("div", { class: "siteheader-search" }, (this.showOnlyLink) ? (h("a", { href: this.search.formActionUrl, title: this.i18n.searchlabel }, h("pn-button", { appearance: "light", icon: "search" }))) :
557
+ (h("form", { method: "get", action: this.search.formActionUrl, role: "search" }, h("pn-search-field", { label: this.i18n.searchlabel, name: "q", button: "icon", onSearch: () => {
558
+ const form = this.hostElement.querySelector('form');
559
+ if (form) {
560
+ form.submit();
561
+ }
562
+ }, placeholder: this.i18n.searchplaceholder })))));
563
+ }
564
+ get hostElement() { return getElement(this); }
565
+ };
566
+ PnMarketwebSiteheaderSearch.style = pnMarketwebSiteheaderSearchCss;
567
+
568
+ const languageData = {
569
+ 'sv': {
570
+ "navlabel": "Webbplatsväljare",
571
+ },
572
+ 'en': {
573
+ "navlabel": "Website selector",
574
+ },
575
+ 'da': {
576
+ "navlabel": "Webstedsvælger",
577
+ },
578
+ 'no': {
579
+ "navlabel": "Nettstedsvelger",
580
+ },
581
+ 'fi': {
582
+ "navlabel": "Verkkosivun valitsin",
583
+ }
584
+ };
585
+
586
+ const pnSiteSelectorCss = "pn-site-selector{display:-ms-flexbox;display:flex;position:relative;-ms-flex-pack:center;justify-content:center}@media screen and (min-width: 75em){pn-site-selector{display:block}}.siteselector-heading{display:block;padding:0;margin-bottom:1.6rem}@media screen and (min-width: 75em){.siteselector-heading{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-top:0.8rem}}.siteselector-list{list-style:none;margin:0;padding:0}";
587
+
588
+ const PnSiteSelector = class {
589
+ constructor(hostRef) {
590
+ registerInstance(this, hostRef);
591
+ /* Site selector Button text */
592
+ this.buttontext = "postnord.se";
593
+ /* Site selector flyout title */
594
+ this.heading = "PostNord";
595
+ /** Specifies which language we want to show navigation in (sv,da,fi,no,en) */
596
+ this.language = "sv";
597
+ this.i18n = { navlabel: "Site selector" };
598
+ }
599
+ componentWillLoad() {
600
+ this.setLanguage();
601
+ }
602
+ setLanguage() {
603
+ if (languageData[this.language]) {
604
+ this.i18n = languageData[this.language];
605
+ }
606
+ }
607
+ render() {
608
+ return (h(Host, null, h("pn-nav-dropdown", { label: this.buttontext, icon: "angle-small-down" }, h("nav", { class: "siteselector-nav", "aria-label": this.i18n.navlabel }, this.heading ? (h("strong", { class: "siteselector-heading" }, this.heading)) : null, h("ul", { class: "siteselector-list" }, h("slot", null))))));
609
+ }
610
+ get hostElement() { return getElement(this); }
611
+ };
612
+ PnSiteSelector.style = pnSiteSelectorCss;
613
+
614
+ const pnSiteSelectorItemCss = "pn-site-selector-item{display:block}pn-site-selector-item>div,pn-site-selector-item>a{padding:0.8rem 0;display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;position:relative}.siteselector-item-link{border-radius:0;text-decoration:none;color:#005D92;-ms-flex-direction:row;flex-direction:row}.siteselector-item-link:hover,.siteselector-item-link:focus{background-color:#F3F2F2;color:#005D92;text-decoration:underline;outline:none;-webkit-box-shadow:none;box-shadow:none}.siteselector-item-link:active{background-color:#F3F2F2;color:#00A0D6;outline:none}.siteselector-item-link>span{-ms-flex-positive:1;flex-grow:1}.siteselector-item-link pn-icon{right:3.2rem;height:1.9rem;width:1.9rem;-ms-flex-item-align:center;align-self:center}.siteselector-item-link pn-icon svg{width:100%;height:auto}.siteselector-item-title{display:block}.siteselector-item-description{color:#2D2013;font-size:1.28rem}a:hover>.siteselector-item-description,a:focus>.siteselector-item-description{background-color:#F3F2F2;color:#005D92;text-decoration:underline;outline:none}a:active>.siteselector-item-description{background-color:#F3F2F2;color:#00A0D6;outline:none}";
615
+
616
+ const PnSiteSelectorItem = class {
617
+ constructor(hostRef) {
618
+ registerInstance(this, hostRef);
619
+ /* Link URL */
620
+ this.url = "";
621
+ /* Link title */
622
+ this.heading = "";
623
+ /* Link description */
624
+ this.description = "";
625
+ /* Open link in new window */
626
+ this.newwindow = false;
627
+ }
628
+ render() {
629
+ return (h(Host, { role: "listitem" }, this.url ? (h("a", { class: "siteselector-item-link", href: this.url, target: this.newwindow ? "_blank" : "self", rel: this.newwindow ? "nofollow noopener" : "" }, h("span", null, this.heading && (h("span", { class: "siteselector-item-title" }, this.heading)), this.description && (h("small", { class: "siteselector-item-description" }, this.description))), h("pn-icon", { symbol: "angle-small-right", color: "blue700" }))) : (h("div", null, this.heading && (h("span", { class: "siteselector-item-title" }, this.heading)), this.description && (h("small", { class: "siteselector-item-description" }, this.description))))));
630
+ }
631
+ };
632
+ PnSiteSelectorItem.style = pnSiteSelectorItemCss;
633
+
634
+ export { PnlanguageSelector as pn_language_selector, PnlanguageSelectorOption as pn_language_selector_option, PnMainnav as pn_mainnav, PnMainnavLevel as pn_mainnav_level, PnMainnavList as pn_mainnav_list, PnMarketwebSiteheaderLogin as pn_marketweb_siteheader_login, PnMarketwebSiteheaderSearch as pn_marketweb_siteheader_search, PnSiteSelector as pn_site_selector, PnSiteSelectorItem as pn_site_selector_item };