@postnord/pn-marketweb-components 1.0.3 → 1.0.7

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