@postnord/pn-marketweb-components 1.0.17 → 1.0.21

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 (78) hide show
  1. package/cjs/MarketWebContextService-420668a7.js +166 -0
  2. package/cjs/loader.cjs.js +1 -1
  3. package/cjs/pn-filter-checkbox.cjs.entry.js +67 -0
  4. package/cjs/pn-language-selector_9.cjs.entry.js +34 -11
  5. package/cjs/pn-mainnav-link.cjs.entry.js +1 -1
  6. package/cjs/{pn-mainnav-store-661b0b11.js → pn-mainnav-store-87a95686.js} +1 -0
  7. package/cjs/pn-market-web-components.cjs.js +1 -1
  8. package/cjs/pn-marketweb-sitefooter.cjs.entry.js +48 -6
  9. package/cjs/pn-marketweb-siteheader.cjs.entry.js +62 -9
  10. package/collection/collection-manifest.json +1 -0
  11. package/collection/components/input/pn-filter-checkbox/checkbox.stories.js +34 -0
  12. package/collection/components/input/pn-filter-checkbox/pn-filter-checkbox.css +73 -0
  13. package/collection/components/input/pn-filter-checkbox/pn-filter-checkbox.js +183 -0
  14. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.js +75 -12
  15. package/collection/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.stories.js +16 -0
  16. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader-login.js +8 -1
  17. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.js +172 -68
  18. package/collection/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.stories.js +23 -12
  19. package/collection/components/navigation/pn-language-selector/pn-language-selector.js +28 -7
  20. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.css +3 -0
  21. package/collection/components/navigation/pn-mainnav/pn-mainnav-level.js +5 -1
  22. package/collection/components/navigation/pn-mainnav/pn-mainnav-store.js +1 -0
  23. package/collection/components/navigation/pn-mainnav/pn-mainnav.js +1 -1
  24. package/collection/components/navigation/pn-site-selector/pn-site-selector.js +6 -6
  25. package/collection/globals/MarketWebContextService.js +163 -0
  26. package/custom-elements/index.d.ts +6 -0
  27. package/custom-elements/index.js +376 -32
  28. package/esm/MarketWebContextService-9a201388.js +164 -0
  29. package/esm/loader.js +1 -1
  30. package/esm/pn-filter-checkbox.entry.js +63 -0
  31. package/esm/pn-language-selector_9.entry.js +34 -11
  32. package/esm/pn-mainnav-link.entry.js +1 -1
  33. package/esm/{pn-mainnav-store-4b030e31.js → pn-mainnav-store-8e518460.js} +1 -0
  34. package/esm/pn-market-web-components.js +1 -1
  35. package/esm/pn-marketweb-sitefooter.entry.js +48 -6
  36. package/esm/pn-marketweb-siteheader.entry.js +63 -10
  37. package/esm-es5/MarketWebContextService-9a201388.js +1 -0
  38. package/esm-es5/loader.js +1 -1
  39. package/esm-es5/pn-filter-checkbox.entry.js +1 -0
  40. package/esm-es5/pn-language-selector_9.entry.js +1 -1
  41. package/esm-es5/pn-mainnav-link.entry.js +1 -1
  42. package/esm-es5/pn-mainnav-store-8e518460.js +1 -0
  43. package/esm-es5/pn-market-web-components.js +1 -1
  44. package/esm-es5/pn-marketweb-sitefooter.entry.js +1 -1
  45. package/esm-es5/pn-marketweb-siteheader.entry.js +1 -1
  46. package/package.json +2 -2
  47. package/pn-market-web-components/p-02eed66e.system.entry.js +1 -0
  48. package/pn-market-web-components/{p-facf4ecb.system.entry.js → p-251d44f2.system.entry.js} +1 -1
  49. package/pn-market-web-components/p-25bdf3f8.system.js +1 -1
  50. package/pn-market-web-components/p-2da203c9.system.entry.js +1 -0
  51. package/pn-market-web-components/p-363a27ff.entry.js +1 -0
  52. package/pn-market-web-components/p-582dbd9c.entry.js +1 -0
  53. package/pn-market-web-components/p-64dc840d.js +1 -0
  54. package/pn-market-web-components/p-86a9f853.system.js +1 -0
  55. package/pn-market-web-components/p-8c072330.entry.js +1 -0
  56. package/pn-market-web-components/p-8d62c46f.system.entry.js +1 -0
  57. package/pn-market-web-components/p-8dad5ed9.js +1 -0
  58. package/pn-market-web-components/p-a320fe58.system.js +1 -0
  59. package/pn-market-web-components/p-ae0e5fd8.entry.js +1 -0
  60. package/pn-market-web-components/{p-f7d60229.entry.js → p-e220ea83.entry.js} +1 -1
  61. package/pn-market-web-components/p-ecfabe25.system.entry.js +1 -0
  62. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  63. package/types/components/input/pn-filter-checkbox/pn-filter-checkbox.d.ts +22 -0
  64. package/types/components/layout-components/pn-marketweb-sitefooter/pn-marketweb-sitefooter.d.ts +5 -0
  65. package/types/components/layout-components/pn-marketweb-siteheader/pn-marketweb-siteheader.d.ts +8 -0
  66. package/types/components/navigation/pn-language-selector/pn-language-selector.d.ts +2 -0
  67. package/types/components/navigation/pn-mainnav/pn-mainnav-store.d.ts +2 -0
  68. package/types/components.d.ts +61 -0
  69. package/types/globals/MarketWebContextService.d.ts +51 -0
  70. package/esm-es5/pn-mainnav-store-4b030e31.js +0 -1
  71. package/pn-market-web-components/p-6b735c44.system.js +0 -1
  72. package/pn-market-web-components/p-a74e5481.js +0 -1
  73. package/pn-market-web-components/p-b80600a3.system.entry.js +0 -1
  74. package/pn-market-web-components/p-cc6e3bcb.entry.js +0 -1
  75. package/pn-market-web-components/p-d2da364d.system.entry.js +0 -1
  76. package/pn-market-web-components/p-ed135751.entry.js +0 -1
  77. package/pn-market-web-components/p-f55ad3f8.system.entry.js +0 -1
  78. package/pn-market-web-components/p-f5dddd2d.entry.js +0 -1
@@ -34,6 +34,68 @@ let PnChoiceButton$1 = class extends HTMLElement {
34
34
  static get style() { return pnChoiceButtonCss; }
35
35
  };
36
36
 
37
+ const pnFilterCheckboxCss = ":host{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host input{opacity:0;position:absolute}:host input[type=checkbox]+label.pn-checkbox{width:1.5em;min-width:1.5em;height:1.5em;min-height:1.5em;background:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;position:relative;border:0.1rem solid #969087;cursor:pointer;border-radius:0.4rem;cursor:pointer;-webkit-transition-duration:220ms;transition-duration:220ms;-webkit-transition-timing-function:cubic-bezier(0.79, 0.14, 0.15, 0.86);transition-timing-function:cubic-bezier(0.79, 0.14, 0.15, 0.86);-webkit-transition-property:border, background, -webkit-box-shadow;transition-property:border, background, -webkit-box-shadow;transition-property:border, background, box-shadow;transition-property:border, background, box-shadow, -webkit-box-shadow}:host input[type=checkbox]+label.pn-checkbox svg{width:80%;fill:none}:host input[type=checkbox]+label.pn-checkbox svg polyline{stroke:#FFF;-webkit-transform-origin:0 0;transform-origin:0 0;stroke-linecap:round;stroke-dasharray:23;stroke-dashoffset:23;-webkit-transition-delay:none;transition-delay:none;-webkit-transition:stroke-dashoffset 180ms cubic-bezier(0.79, 0.14, 0.15, 0.86);transition:stroke-dashoffset 180ms cubic-bezier(0.79, 0.14, 0.15, 0.86)}:host input[type=checkbox]:hover+label.pn-checkbox{border:0.1rem solid #005D92;background:#E0F8FF}:host input[type=checkbox]:checked+label.pn-checkbox,:host input[type=checkbox]:indeterminate+label.pn-checkbox{background:#005D92;border:0.1rem solid #005D92}:host input[type=checkbox]:checked+label.pn-checkbox svg polyline,:host input[type=checkbox]:indeterminate+label.pn-checkbox svg polyline{-webkit-transition-delay:220ms;transition-delay:220ms}:host input[type=checkbox]:checked+label.pn-checkbox svg polyline.checkmark-path{stroke-dashoffset:0}:host input[type=checkbox]:indeterminate+label.pn-checkbox svg polyline.indeterminate-path{stroke-dashoffset:0}:host input[type=checkbox]:focus+label.pn-checkbox,:host input[type=checkbox]:active+label.pn-checkbox{-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}:host input[type=checkbox]:disabled+label.pn-checkbox{background-color:#D3CECB;border:0.1rem solid #969087;cursor:not-allowed}:host input[type=checkbox]:disabled+label.pn-checkbox svg polyline{stroke:#969087}:host input[type=checkbox]:disabled:checked+label.pn-checkbox{border:0.1rem solid transparent}:host input[type=checkbox]:disabled:active+label.pn-checkbox{-webkit-box-shadow:none;box-shadow:none}";
38
+
39
+ let PnFilterCheckbox$1 = class extends HTMLElement {
40
+ constructor() {
41
+ super();
42
+ this.__registerHost();
43
+ this.__attachShadow();
44
+ this.disabled = false;
45
+ this.checked = false;
46
+ this.indeterminate = false;
47
+ }
48
+ handlechange() {
49
+ this.indeterminate = false;
50
+ }
51
+ componentDidLoad() {
52
+ this.checkAndSetIndeterminateState();
53
+ this.bindEvents();
54
+ }
55
+ componentDidUpdate() {
56
+ this.checkAndSetIndeterminateState();
57
+ }
58
+ bindEvents() {
59
+ const labels = document.querySelectorAll('label[for="' + this.checkboxid + '"]');
60
+ labels.forEach((label) => {
61
+ label.addEventListener('click', () => {
62
+ this.hostElement.shadowRoot.querySelector('label').click();
63
+ });
64
+ });
65
+ const checkboxInput = this.hostElement.shadowRoot.querySelector('input');
66
+ checkboxInput.addEventListener('change', this.onCheckboxChange.bind(this, checkboxInput));
67
+ }
68
+ onCheckboxChange(checkboxInput) {
69
+ let outsideInput = this.hostElement.querySelector("input.hidden-" + this.checkboxid);
70
+ if (outsideInput) {
71
+ outsideInput.value = (checkboxInput.checked) ? this.value : "";
72
+ }
73
+ }
74
+ checkAndSetIndeterminateState() {
75
+ let checkbox = this.hostElement.querySelector(`#${this.checkboxid}`);
76
+ if (checkbox) {
77
+ checkbox.indeterminate = this.indeterminate;
78
+ }
79
+ }
80
+ renderInputOutsideShadowRoot() {
81
+ var _a;
82
+ let input = this.hostElement.querySelector("input.hidden-" + this.checkboxid);
83
+ if (!input) {
84
+ input = this.hostElement.ownerDocument.createElement("input");
85
+ input.type = "hidden";
86
+ input.classList.add("hidden-" + this.checkboxid);
87
+ this.hostElement.appendChild(input);
88
+ }
89
+ input.name = (_a = this.name) !== null && _a !== void 0 ? _a : this.checkboxid;
90
+ }
91
+ render() {
92
+ this.renderInputOutsideShadowRoot();
93
+ return (h(Host, { checked: this.checked, id: this.checkboxid }, h("input", { type: "checkbox", id: this.checkboxid, value: this.value, name: this.name || this.checkboxid, disabled: this.disabled, checked: this.checked }), h("label", { htmlFor: this.checkboxid, class: "pn-checkbox" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none" }, h("polyline", { class: "checkmark-path", points: "4,12 9,17 20,6", "stroke-width": "3" }), h("polyline", { class: "indeterminate-path", points: "4,12 20,12", "stroke-width": "3" })))));
94
+ }
95
+ get hostElement() { return this; }
96
+ static get style() { return pnFilterCheckboxCss; }
97
+ };
98
+
37
99
  const pnFilterSearchCss = ":host{display:-ms-inline-flexbox;display:inline-flex}:host>pn-button{margin-left:0.35em}:host>pn-button button .pn-button-bg{-webkit-transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, left 0.2s, -webkit-box-shadow 0.1s, -webkit-transform 0.2s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, left 0.2s, -webkit-box-shadow 0.1s, -webkit-transform 0.2s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, box-shadow 0.1s, left 0.2s, transform 0.2s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, box-shadow 0.1s, left 0.2s, transform 0.2s, -webkit-box-shadow 0.1s, -webkit-transform 0.2s}:host>pn-button[data-loading=true] .pn-button-bg{left:0;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, -webkit-box-shadow 0.1s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, -webkit-box-shadow 0.1s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, box-shadow 0.1s;transition:width 0.2s cubic-bezier(0.7, 0, 0.3, 1) 0.2s, background 0.1s, box-shadow 0.1s, -webkit-box-shadow 0.1s}:host>pn-button[data-loading=true] pn-spinner{left:0.75em}:host input{padding:0.75em;min-height:3em;font-size:1em;height:100%;font-weight:500;-webkit-font-smoothing:antialiased;outline:none;border-radius:3em;border:0.1rem solid #5E554A;-webkit-transition:border 0.15s, -webkit-box-shadow 0.15s;transition:border 0.15s, -webkit-box-shadow 0.15s;transition:box-shadow 0.15s, border 0.15s;transition:box-shadow 0.15s, border 0.15s, -webkit-box-shadow 0.15s;color:#000000;width:100%}:host input::-webkit-search-cancel-button{display:none}:host input::-webkit-input-placeholder{color:#969087;font-weight:normal}:host input::-moz-placeholder{color:#969087;font-weight:normal}:host input:-ms-input-placeholder{color:#969087;font-weight:normal}:host input::-ms-input-placeholder{color:#969087;font-weight:normal}:host input::placeholder{color:#969087;font-weight:normal}:host input:focus{border:0.1rem solid #005D92;-webkit-box-shadow:0 0 0 0.2rem #fff, 0 0 0 0.4rem #005D92;box-shadow:0 0 0 0.2rem #fff, 0 0 0 0.4rem #005D92}:host input:hover{border:0.1rem solid #00A0D6}:host input:disabled{background:#F3F2F2;border:none}:host>.input-container{width:100%;position:relative}:host>.input-container .button-container{position:absolute;top:0;right:0;background:transparent;width:3em;height:100%;overflow:hidden;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}:host>.input-container button{position:absolute;left:50%;top:50%;-webkit-transform:translate(100%, -50%);transform:translate(100%, -50%);background:none;border:none;color:#005D92;padding:0.3rem;border-radius:50%;outline:none;-webkit-transition:border 0.1s, background 0.2s, opacity 0.2s, -webkit-box-shadow 0.1s, -webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;transition:border 0.1s, background 0.2s, opacity 0.2s, -webkit-box-shadow 0.1s, -webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;transition:border 0.1s, background 0.2s, box-shadow 0.1s, transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s, opacity 0.2s;transition:border 0.1s, background 0.2s, box-shadow 0.1s, transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s, opacity 0.2s, -webkit-box-shadow 0.1s, -webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;border:0.1rem solid transparent}:host>.input-container button.clear,:host>.input-container button.search{cursor:pointer}:host>.input-container button:focus{-webkit-box-shadow:0 0 0 0.2rem #fff, 0 0 0 0.4rem #005D92;box-shadow:0 0 0 0.2rem #fff, 0 0 0 0.4rem #005D92;background:#8EDDF9}:host>.input-container button:hover{background:#E0F8FF}:host>.input-container button:active{background:#005D92}:host>.input-container button:active pn-icon svg,:host>.input-container button:active pn-icon svg path{fill:white}:host.searching button.search{-webkit-transform:translate(150%, -50%);transform:translate(150%, -50%)}:host.searching button.clear{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}:host.button-none input,:host.button-icon-inline input{padding-right:3.3em}:host.button-none pn-spinner,:host.button-icon-inline pn-spinner{position:absolute;left:50%;top:50%;-webkit-transform:translate(100%, -50%);transform:translate(100%, -50%);-webkit-transition:-webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;transition:-webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;transition:transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s;transition:transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s, -webkit-transform cubic-bezier(0.7, 0, 0.3, 1) 0.2s}:host.button-none button.search,:host.button-icon-inline button.search{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}:host.button-none.loading button,:host.button-icon-inline.loading button{-webkit-transform:translate(100%, -50%);transform:translate(100%, -50%)}:host.button-none.loading pn-spinner,:host.button-icon-inline.loading pn-spinner{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}:host.button-none.searching button.search{-webkit-transform:translate(100%, -50%);transform:translate(100%, -50%)}:host.button-icon>pn-button[data-loading=true] .pn-button-bg{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}";
38
100
 
39
101
  let PnFilterSearch$1 = class extends HTMLElement {
@@ -1302,7 +1364,7 @@ function isInteger(x) {
1302
1364
  return (x | 0) === x;
1303
1365
  }
1304
1366
 
1305
- function URL() {} // URL regexp explanation:
1367
+ function URL$1() {} // URL regexp explanation:
1306
1368
  //
1307
1369
  // /^
1308
1370
  //
@@ -1686,7 +1748,7 @@ function parseValueOfType(value, type, options) {
1686
1748
  value: value
1687
1749
  };
1688
1750
 
1689
- case URL:
1751
+ case URL$1:
1690
1752
  if (typeof value === 'string') {
1691
1753
  if (isURL(value)) {
1692
1754
  return {
@@ -2353,18 +2415,30 @@ let PnlanguageSelector = class extends HTMLElement {
2353
2415
  this.initialize();
2354
2416
  }
2355
2417
  initialize() {
2418
+ this.setSelectedLanguageName();
2419
+ this.addEventBindingsToOptions();
2420
+ }
2421
+ addEventBindingsToOptions() {
2356
2422
  const options = [].slice.apply(this.hostElement.querySelectorAll("pn-language-selector-option"));
2357
2423
  options.map((option) => {
2358
- // Set current label of language selector
2359
- if (option.getAttribute("code") == this.value || option.getAttribute("selected") == "true") {
2360
- this.selectedLanguageName = option.getAttribute("name");
2361
- }
2424
+ option.removeEventListener("setCurrentLanguage", (event) => {
2425
+ this.onSetCurrentLanguage(event.detail);
2426
+ });
2362
2427
  // Bind event listener for when a user change language
2363
2428
  option.addEventListener("setCurrentLanguage", (event) => {
2364
2429
  this.onSetCurrentLanguage(event.detail);
2365
2430
  });
2366
2431
  });
2367
2432
  }
2433
+ setSelectedLanguageName() {
2434
+ const options = [].slice.apply(this.hostElement.querySelectorAll("pn-language-selector-option"));
2435
+ options.map((option) => {
2436
+ // Set current label of language selector
2437
+ if (option.getAttribute("code") == this.value) { // || option.getAttribute("selected") == "true"
2438
+ this.selectedLanguageName = option.getAttribute("name");
2439
+ }
2440
+ });
2441
+ }
2368
2442
  onSetCurrentLanguage(option) {
2369
2443
  this.value = option.code;
2370
2444
  this.selectedLanguageName = option.name;
@@ -2380,15 +2454,18 @@ let PnlanguageSelector = class extends HTMLElement {
2380
2454
  components.forEach((component) => {
2381
2455
  // Pass values as props into slotted components
2382
2456
  // component.setAttribute("current-language", this.value);
2383
- component.setAttribute("selected", (component.getAttribute("code") === this.value) + '');
2457
+ const isSelected = (component.getAttribute("code") === this.value) + '';
2458
+ if ((component.getAttribute('selected') + '') !== isSelected) {
2459
+ component.setAttribute("selected", isSelected);
2460
+ }
2384
2461
  });
2385
2462
  }
2386
2463
  render() {
2387
- 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))))));
2464
+ return (h(Host, { value: this.value }, 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))))));
2388
2465
  }
2389
2466
  get hostElement() { return this; }
2390
2467
  static get watchers() { return {
2391
- "value": ["onValueChange"]
2468
+ "value": ["setSelectedLanguageName", "setTranslations", "onValueChange"]
2392
2469
  }; }
2393
2470
  static get style() { return pnLanguageSelectorCss; }
2394
2471
  };
@@ -2462,6 +2539,7 @@ const translations$4 = {
2462
2539
  // Read more about how stencil stores work here: https://stenciljs.com/docs/stencil-store
2463
2540
  const { state: state$2, onChange: onChange$2 } = createStore({
2464
2541
  openLevel: '',
2542
+ currentLevel: 1,
2465
2543
  openMenu: false,
2466
2544
  i18n: {
2467
2545
  menuHomeButton: '',
@@ -2529,13 +2607,13 @@ let PnMainnav$1 = class extends HTMLElement {
2529
2607
  state$2.openLevel = event.detail;
2530
2608
  }
2531
2609
  render() {
2532
- return (h(Host, null, h("div", { class: "mainnav-toggle" }, h("button", { "aria-controls": this.navigationId, "aria-expanded": state$2.openMenu + '', onClick: this.setMenuOpenState.bind(this) }, state$2.i18n.mainMenuButton, h("pn-icon", { symbol: state$2.openMenu ? "close" : "bars", color: "white" }))), h("nav", { class: "mainnav", "aria-label": this.navLabel, "data-menu-open": state$2.openMenu + '', id: this.navigationId }, h("slot", null))));
2610
+ return (h(Host, null, h("div", { class: "mainnav-toggle" }, h("button", { "aria-controls": this.navigationId, "aria-expanded": state$2.openMenu + '', onClick: this.setMenuOpenState.bind(this) }, state$2.i18n.mainMenuButton, h("pn-icon", { symbol: state$2.openMenu ? "close" : "bars", color: "white" }))), h("nav", { class: "mainnav", "aria-label": this.navLabel, "data-menu-open": state$2.openMenu + '', "data-menu-currentlevel": state$2.currentLevel, id: this.navigationId }, h("slot", null))));
2533
2611
  }
2534
2612
  get hostElement() { return this; }
2535
2613
  static get style() { return pnMainnavCss; }
2536
2614
  };
2537
2615
 
2538
- 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}pn-mainnav-level [slot=top]{display:-ms-flexbox;display:flex}@media screen and (min-width: 48em){pn-mainnav-level [slot=top]{display: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}";
2616
+ 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}pn-mainnav-level [slot=top]{display:-ms-flexbox;display:flex}@media screen and (min-width: 48em){pn-mainnav-level [slot=top]{display:none}}[data-menu-currentlevel=\"2\"] pn-mainnav-level [slot=footer]{display: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}";
2539
2617
 
2540
2618
  let PnMainnavLevel$1 = class extends HTMLElement {
2541
2619
  constructor() {
@@ -2595,9 +2673,13 @@ let PnMainnavLevel$1 = class extends HTMLElement {
2595
2673
  }
2596
2674
  onChangeOpenLevel() {
2597
2675
  this.isOpen = state$2.openLevel === this.levelId;
2676
+ state$2.currentLevel = this.level;
2598
2677
  }
2599
2678
  render() {
2600
- 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$2.i18n.menuGoBackButton), h("button", { class: "secondlevel-backbtn", onClick: () => state$2.openLevel = '', "aria-expanded": (state$2.openLevel === this.levelId) + '' }, h("pn-icon", { symbol: "arrow-left", color: "blue700" }), state$2.i18n.menuStartButton), (this.parentHref && this.parentName) ? h("pn-mainnav-link", { href: this.parentHref, name: this.parentName, linkid: this.parentLinkId }) : null)) : null, h("slot", { name: "top" }), h("slot", null), h("slot", { name: "additional" }), h("slot", { name: "footer" })));
2679
+ 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$2.i18n.menuGoBackButton), h("button", { class: "secondlevel-backbtn", onClick: () => {
2680
+ state$2.openLevel = '';
2681
+ state$2.currentLevel = 1;
2682
+ }, "aria-expanded": (state$2.openLevel === this.levelId) + '' }, h("pn-icon", { symbol: "arrow-left", color: "blue700" }), state$2.i18n.menuStartButton), (this.parentHref && this.parentName) ? h("pn-mainnav-link", { href: this.parentHref, name: this.parentName, linkid: this.parentLinkId }) : null)) : null, h("slot", { name: "top" }), h("slot", null), h("slot", { name: "additional" }), h("slot", { name: "footer" })));
2601
2683
  }
2602
2684
  get hostElement() { return this; }
2603
2685
  static get watchers() { return {
@@ -2710,6 +2792,169 @@ const translations$3 = {
2710
2792
  }
2711
2793
  };
2712
2794
 
2795
+ class MarketWebContextService {
2796
+ constructor(href = window.location.href) {
2797
+ this.href = "";
2798
+ this.market = "";
2799
+ this.language = "";
2800
+ this.environment = "";
2801
+ this.url = null;
2802
+ this.allowedLanguages = ["sv", "da", "fi", "no", "en"];
2803
+ this.allowedMarkets = ["se", "dk", "fi", "no", "com"];
2804
+ this.developmentDomains = ["localhost", ".local", "local.", ".dev", "dev."];
2805
+ this.markets = {
2806
+ "se": {
2807
+ fallbackLanguage: "sv",
2808
+ },
2809
+ "dk": {
2810
+ fallbackLanguage: "da",
2811
+ },
2812
+ "fi": {
2813
+ fallbackLanguage: "fi",
2814
+ },
2815
+ "no": {
2816
+ fallbackLanguage: "no",
2817
+ },
2818
+ "com": {
2819
+ fallbackLanguage: "en",
2820
+ },
2821
+ };
2822
+ this.environmentTypes = ["integration", "preproduction", "production"];
2823
+ this.environments = {
2824
+ "production": {
2825
+ "name": "production",
2826
+ "url": "https://com-production.postnord.com/"
2827
+ },
2828
+ "preproduction": {
2829
+ "name": "preproduction",
2830
+ "url": "https://com-preproduction.postnord.com/"
2831
+ },
2832
+ "integration": {
2833
+ "name": "integration",
2834
+ "url": "https://com-integration.postnord.com/"
2835
+ }
2836
+ };
2837
+ this.href = href;
2838
+ this.url = new URL(this.href);
2839
+ }
2840
+ async getLanguage() {
2841
+ if (this.language) {
2842
+ return this.language;
2843
+ }
2844
+ await this.resolveLanguage();
2845
+ return this.language;
2846
+ }
2847
+ async getMarket() {
2848
+ if (this.market) {
2849
+ return this.market;
2850
+ }
2851
+ await this.resolveMarket();
2852
+ return this.market;
2853
+ }
2854
+ async getEndpoint(environmentName) {
2855
+ if (this.environments[environmentName]) {
2856
+ return this.environments[environmentName].url;
2857
+ }
2858
+ return this.environments.production.url;
2859
+ }
2860
+ async getEnvironmentName() {
2861
+ const likelyEnvironment = this.environmentTypes.filter(x => this.url.hostname.indexOf(('-' + x)) !== -1)[0];
2862
+ if (likelyEnvironment) {
2863
+ this.environment = likelyEnvironment;
2864
+ return this.environment;
2865
+ }
2866
+ if (this.url.hostname.indexOf('www.') !== -1) {
2867
+ this.environment = this.environments.production.name;
2868
+ return this.environment;
2869
+ }
2870
+ this.environment = this.environments.integration.name;
2871
+ return this.environment;
2872
+ }
2873
+ isDevEnvironment() {
2874
+ const matchedDevEnvironment = this.developmentDomains.filter(x => this.url.hostname.indexOf(x) !== -1)[0];
2875
+ return matchedDevEnvironment.length > 0;
2876
+ }
2877
+ async resolveMarket() {
2878
+ // Resolve market from www domains
2879
+ if (this.href.indexOf("//www.") !== -1) {
2880
+ const domainRoot = this.url.hostname.substring(this.url.hostname.lastIndexOf('.') + 1, this.url.hostname.length);
2881
+ if (domainRoot && this.markets[domainRoot]) {
2882
+ this.market = domainRoot;
2883
+ }
2884
+ else {
2885
+ console.warn("Unable to define market from www. domain", this.href);
2886
+ }
2887
+ }
2888
+ // Check if domains are on one of the integration environments
2889
+ const likelyEnvironment = this.environmentTypes.filter(x => this.url.hostname.indexOf(('-' + x)) !== -1);
2890
+ if (!this.market && likelyEnvironment && likelyEnvironment.length > 0) {
2891
+ const matchedEnvironment = likelyEnvironment[0];
2892
+ const marketPrefix = this.url.hostname.substring(0, this.url.hostname.indexOf('-' + matchedEnvironment));
2893
+ if (marketPrefix && this.markets[marketPrefix]) {
2894
+ this.market = marketPrefix;
2895
+ }
2896
+ else {
2897
+ console.warn("Unable to define market from preset environment names", this.href);
2898
+ }
2899
+ }
2900
+ // Check if we're on a development environment
2901
+ if (!this.market) {
2902
+ const matchedDevEnvironment = this.developmentDomains.filter(x => this.url.hostname.indexOf(x) !== -1)[0];
2903
+ if (!matchedDevEnvironment) {
2904
+ // Fallback to first allowed market
2905
+ this.market = this.allowedMarkets[0];
2906
+ return;
2907
+ }
2908
+ const urlWithoutDomain = this.href.replace(matchedDevEnvironment, "");
2909
+ // We see if the dev environment contains something like /dk
2910
+ let matchedMarket = this.allowedMarkets.filter(x => {
2911
+ const typesOfFallback = ['.' + x, x + '.', '/' + x + '/']; // Ex /dk, dk.html, /dk/
2912
+ const matchedTypeOfFallback = typesOfFallback.filter(y => urlWithoutDomain.indexOf(y) !== -1);
2913
+ return matchedTypeOfFallback.length > 0;
2914
+ })[0];
2915
+ if (matchedMarket) {
2916
+ this.market = matchedMarket;
2917
+ }
2918
+ else {
2919
+ // We do a similar filter for subpaths but for language this time
2920
+ let filteredMarket = Object.entries(this.markets).filter((item) => {
2921
+ const typesOfFallback = ['.' + item[1].fallbackLanguage, item[1].fallbackLanguage + '.', '/' + item[1].fallbackLanguage + '/']; // Ex /dk, dk.html, /dk/
2922
+ const matchedTypeOfFallback = typesOfFallback.filter(y => urlWithoutDomain.indexOf(y) !== -1);
2923
+ return matchedTypeOfFallback.length > 0;
2924
+ })[0];
2925
+ if (filteredMarket && filteredMarket[0]) {
2926
+ this.market = filteredMarket[0];
2927
+ }
2928
+ }
2929
+ if (!this.market) {
2930
+ console.info("Was unable to detect market, used fallback");
2931
+ this.market = this.allowedMarkets[0];
2932
+ }
2933
+ }
2934
+ }
2935
+ async resolveLanguage() {
2936
+ var _a, _b, _c, _d;
2937
+ if (this.language) {
2938
+ return;
2939
+ }
2940
+ const potentialLanguages = [
2941
+ (_a = document.querySelector("html[lang]")) === null || _a === void 0 ? void 0 : _a.getAttribute("lang"),
2942
+ (_b = document.querySelector('[http-equiv="content-language"][content]')) === null || _b === void 0 ? void 0 : _b.getAttribute("content"),
2943
+ (_c = document.querySelector('[property="og:locale"][content]')) === null || _c === void 0 ? void 0 : _c.getAttribute("content"),
2944
+ (_d = document.querySelector("[lang]")) === null || _d === void 0 ? void 0 : _d.getAttribute("lang"),
2945
+ ];
2946
+ potentialLanguages.filter(x => x).forEach((language) => {
2947
+ if (this.allowedLanguages.indexOf(language)) {
2948
+ this.language = language;
2949
+ return;
2950
+ }
2951
+ });
2952
+ if (!this.language && this.market) {
2953
+ this.language = this.markets[this.market].fallbackLanguage;
2954
+ }
2955
+ }
2956
+ }
2957
+
2713
2958
  const pnMarketwebSitefooterCss = "";
2714
2959
 
2715
2960
  let PnMarketwebSiteheader$2 = class extends HTMLElement {
@@ -2721,27 +2966,64 @@ let PnMarketwebSiteheader$2 = class extends HTMLElement {
2721
2966
  this.market = "se";
2722
2967
  /** Specifies which language we want to show (sv,da,fi,no,en) */
2723
2968
  this.language = "sv";
2969
+ /** Specifies which environment we're fetching data from. (production, preproduction, integration, localhost) */
2970
+ this.environment = null; //sv
2724
2971
  /** Specifies which endpoint domain we should load from */
2725
- this.endpoint = "";
2972
+ this.endpoint = null;
2726
2973
  this.gotData = false;
2727
2974
  this.fetchingData = false;
2728
2975
  }
2729
2976
  componentWillLoad() {
2730
- this.setTranslations();
2731
- this.init();
2977
+ this.setInitialValues().then(() => {
2978
+ this.init();
2979
+ });
2980
+ }
2981
+ async setInitialValues(href = window.location.href) {
2982
+ var _a;
2983
+ const marketWebContextService = new MarketWebContextService(href);
2984
+ if (this.market === null) {
2985
+ const resolvedMarket = await marketWebContextService.getMarket();
2986
+ this.market = resolvedMarket;
2987
+ }
2988
+ if (this.language === null) {
2989
+ const resolvedMarket = await marketWebContextService.getLanguage();
2990
+ this.language = resolvedMarket;
2991
+ }
2992
+ if (this.environment === null) {
2993
+ this.environment = await marketWebContextService.getEnvironmentName();
2994
+ }
2995
+ if (this.endpoint === null && ((_a = this.environment) === null || _a === void 0 ? void 0 : _a.indexOf('local')) === -1) {
2996
+ this.endpoint = await marketWebContextService.getEndpoint(this.environment);
2997
+ }
2998
+ if (this.endpoint === null) {
2999
+ this.endpoint = "";
3000
+ }
2732
3001
  }
2733
3002
  async init() {
3003
+ this.setTranslations();
2734
3004
  await this.fetchData();
2735
3005
  }
2736
3006
  setTranslations() {
2737
- if (translations$3[this.language]) {
3007
+ if (this.language && translations$3[this.language]) {
2738
3008
  this.i18n = translations$3[this.language];
2739
3009
  }
2740
3010
  }
3011
+ onLanguageChange() {
3012
+ this.setTranslations();
3013
+ this.fetchData();
3014
+ }
3015
+ onMarketChange() {
3016
+ this.fetchData();
3017
+ }
2741
3018
  async fetchData() {
3019
+ if (this.endpoint === null || !this.market || !this.language) {
3020
+ // console.warn(`One or more values where not specified.\nEndpoint: ${this.endpoint}\nMarket: ${this.market}\nLanguage: ${this.language}`)
3021
+ return;
3022
+ }
2742
3023
  this.fetchingData = true;
2743
3024
  const endpointBase = (this.endpoint.lastIndexOf("/") === this.endpoint.length - 1) ? this.endpoint.substring(0, this.endpoint.length - 1) : this.endpoint;
2744
- const response = await fetch(`${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`);
3025
+ const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
3026
+ const response = await fetch(fetchUrl);
2745
3027
  const data = await response.json();
2746
3028
  this.setStateFromData(data);
2747
3029
  }
@@ -2784,7 +3066,7 @@ let PnMarketwebSiteheader$2 = class extends HTMLElement {
2784
3066
  }
2785
3067
  render() {
2786
3068
  var _a, _b, _c, _d, _e;
2787
- return (h(Host, null, h("pn-site-footer", { url: (_b = (_a = this.siteDefinition) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : "" }, (this.gotData && ((_c = this.footerContent) === null || _c === void 0 ? void 0 : _c.columns)) ? this.footerContent.columns.map((column) => (h("pn-site-footer-col", null, h("h3", null, column.heading), column.links ? (h("ul", Object.assign({}, ((column.links && column.links[0] && column.links[0].linkType) && { 'class': 'social-media' })), column.links.map((link) => {
3069
+ return (h(Host, { language: this.language, market: this.market, environment: this.environment }, h("pn-site-footer", { url: (_b = (_a = this.siteDefinition) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : "" }, (this.gotData && ((_c = this.footerContent) === null || _c === void 0 ? void 0 : _c.columns)) ? this.footerContent.columns.map((column) => (h("pn-site-footer-col", null, h("h3", null, column.heading), column.links ? (h("ul", Object.assign({}, ((column.links && column.links[0] && column.links[0].linkType) && { 'class': 'social-media' })), column.links.map((link) => {
2788
3070
  var linkText = link.linkText;
2789
3071
  if (link.linkType) {
2790
3072
  linkText = this.getLinkContentByType(link.linkType);
@@ -2798,6 +3080,10 @@ let PnMarketwebSiteheader$2 = class extends HTMLElement {
2798
3080
  }))) : null))));
2799
3081
  }
2800
3082
  get hostElement() { return this; }
3083
+ static get watchers() { return {
3084
+ "language": ["onLanguageChange"],
3085
+ "market": ["onMarketChange"]
3086
+ }; }
2801
3087
  static get style() { return pnMarketwebSitefooterCss; }
2802
3088
  };
2803
3089
 
@@ -2855,13 +3141,19 @@ let PnMarketwebSiteheader$1 = class extends HTMLElement {
2855
3141
  constructor() {
2856
3142
  super();
2857
3143
  this.__registerHost();
3144
+ this.changeLanguage = createEvent(this, "changeLanguage", 7);
3145
+ this.changeMarket = createEvent(this, "changeMarket", 7);
2858
3146
  this.endpointPath = "/api/navigation/header";
3147
+ // allowedLanguages = ["sv","da","fi","no","en"];
3148
+ // allowedMarkets = ["se","dk","fi","no","com"];
2859
3149
  /** Specifies which market we want to show (se,dk,fi,no,com) */
2860
- this.market = "se";
3150
+ this.market = null; //se
2861
3151
  /** Specifies which language we want to show (sv,da,fi,no,en) */
2862
- this.language = "sv";
3152
+ this.language = null; //sv
3153
+ /** Specifies which environment we're fetching data from. (production, preproduction, integration, localhost) */
3154
+ this.environment = null; //sv
2863
3155
  /** Specifies which endpoint domain we should load from */
2864
- this.endpoint = "";
3156
+ this.endpoint = null;
2865
3157
  /** Hides the site selector if set to true*/
2866
3158
  this.hideSiteSelector = false;
2867
3159
  /** Hides the language selector if set to true*/
@@ -2885,22 +3177,64 @@ let PnMarketwebSiteheader$1 = class extends HTMLElement {
2885
3177
  this.minimizeSearch = false;
2886
3178
  }
2887
3179
  componentWillLoad() {
2888
- this.setTranslations();
2889
- this.init();
3180
+ this.setInitialValues().then(() => {
3181
+ this.init();
3182
+ });
2890
3183
  }
3184
+ async setInitialValues(href = window.location.href) {
3185
+ var _a;
3186
+ const marketWebContextService = new MarketWebContextService(href);
3187
+ if (this.market === null) {
3188
+ const resolvedMarket = await marketWebContextService.getMarket();
3189
+ this.market = resolvedMarket;
3190
+ }
3191
+ if (this.language === null) {
3192
+ const resolvedMarket = await marketWebContextService.getLanguage();
3193
+ this.language = resolvedMarket;
3194
+ }
3195
+ if (this.environment === null) {
3196
+ this.environment = await marketWebContextService.getEnvironmentName();
3197
+ }
3198
+ if (this.endpoint === null && ((_a = this.environment) === null || _a === void 0 ? void 0 : _a.indexOf('local')) === -1) {
3199
+ this.endpoint = await marketWebContextService.getEndpoint(this.environment);
3200
+ }
3201
+ if (this.endpoint === null) {
3202
+ this.endpoint = "";
3203
+ }
3204
+ }
3205
+ // TODO
3206
+ //* Expose market and language attributes when changed internally
3207
+ //* Business logic to select market and language depending on domains / html tag.
3208
+ //* Property to stop language change from changeing url, throw an event instead.
3209
+ //* Fetch new data when langauge or market is changed
2891
3210
  async init() {
3211
+ this.setTranslations();
2892
3212
  await this.fetchData();
2893
3213
  window.setTimeout(() => { this.checkMenuOverflow(); }, 50);
2894
3214
  }
2895
3215
  setTranslations() {
2896
- if (translations$2[this.language]) {
3216
+ if (this.language && translations$2[this.language]) {
2897
3217
  this.i18n = translations$2[this.language];
2898
3218
  }
2899
3219
  }
3220
+ onLanguageChange() {
3221
+ this.setTranslations();
3222
+ this.changeLanguage.emit(this.language);
3223
+ this.fetchData();
3224
+ }
3225
+ onMarketChange() {
3226
+ this.changeMarket.emit(this.market);
3227
+ this.fetchData();
3228
+ }
2900
3229
  async fetchData() {
3230
+ if (this.endpoint === null || !this.market || !this.language) {
3231
+ // console.warn(`One or more values where not specified.\nEndpoint: ${this.endpoint}\nMarket: ${this.market}\nLanguage: ${this.language}`)
3232
+ return;
3233
+ }
2901
3234
  this.fetchingData = true;
2902
3235
  const endpointBase = (this.endpoint.lastIndexOf("/") === this.endpoint.length - 1) ? this.endpoint.substring(0, this.endpoint.length - 1) : this.endpoint;
2903
- const response = await fetch(`${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`);
3236
+ const fetchUrl = `${endpointBase}${this.endpointPath}?market=${this.market}&language=${this.language}`;
3237
+ const response = await fetch(fetchUrl);
2904
3238
  const data = await response.json();
2905
3239
  this.setStateFromData(data);
2906
3240
  }
@@ -2971,7 +3305,7 @@ let PnMarketwebSiteheader$1 = class extends HTMLElement {
2971
3305
  }
2972
3306
  render() {
2973
3307
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2974
- return (h("header", null, h("div", { class: "siteheader-row" }, h("div", { class: "siteheader-topleft" }, h("slot", { name: "topleft" }), !this.hideSiteSelector &&
3308
+ return (h(Host, { language: this.language, market: this.market, environment: this.environment }, h("header", null, h("div", { class: "siteheader-row" }, h("div", { class: "siteheader-topleft" }, h("slot", { name: "topleft" }), !this.hideSiteSelector &&
2975
3309
  h("pn-site-selector", { language: this.language, buttontext: (_b = (_a = this.siteSelector) === null || _a === void 0 ? void 0 : _a.currentSiteTitle) !== null && _b !== void 0 ? _b : 'postnord' }, (this.gotData && ((_c = this.siteSelector) === null || _c === void 0 ? void 0 : _c.currentSiteTitle)) &&
2976
3310
  h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle, description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_d = this.siteSelector) === null || _d === void 0 ? void 0 : _d.siteSelections)) && this.siteSelector.siteSelections.map((site) => h("pn-site-selector-item", { heading: site.linkText, description: site.linkDescription, url: site.href, newwindow: site.openInNewWindow })))), h("div", { class: "siteheader-logocontainer" }, h("a", { href: (_f = (_e = this.siteDefinition) === null || _e === void 0 ? void 0 : _e.url) !== null && _f !== void 0 ? _f : document.location.hostname, title: "Home", class: "siteheader-logolink" }, h("svg", { class: "siteheader-logo", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 141.73 26.65" }, h("path", { d: "M108.84,13.35c0,6.34-5.17,9-10,9S89,19.76,89,13.63c0-6.28,5.08-9,10-9S108.84,7.25,108.84,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.29,3.29,0,0,0,3.42,3.41A3.24,3.24,0,0,0,102.28,13.54Zm-83,0c0,4.83-3.32,8.82-8.49,8.82a6.54,6.54,0,0,1-4.65-1.57v5.86H0V5.16H6.17V6.8a6.43,6.43,0,0,1,5.11-2.18C16.41,4.62,19.31,8.58,19.31,13.54Zm-6.53,0A3.27,3.27,0,0,0,9.4,10,3.28,3.28,0,0,0,6,13.54,3.29,3.29,0,0,0,9.4,16.95,3.24,3.24,0,0,0,12.78,13.54Zm103.69,0.27c0-2.54,1.54-3.32,3.6-3.32a6.56,6.56,0,0,1,2.08.3L122.3,5.1a3.92,3.92,0,0,0-1.45-.18c-3.45,0-4.38,2.18-4.38,2.18V5.16H110.3V21.84h6.17v-8ZM141.73,0V21.84h-6.16V20.21a6.43,6.43,0,0,1-5.11,2.18c-5.14,0-8-4-8-8.91s3.32-8.82,8.49-8.82a6.54,6.54,0,0,1,4.65,1.57v-5Zm-6,13.48a3.28,3.28,0,0,0-3.41-3.41A3.24,3.24,0,0,0,129,13.47,3.4,3.4,0,1,0,135.75,13.47ZM81.35,4.62c-3.6,0-4.9,2.18-4.9,2.18V5.16H70.29V21.84h6.16V13.29c0-2.11.79-3.08,2.69-3.08s2.18,1.57,2.18,3.57v8.07h6.22V11.6C87.55,7,85.34,4.62,81.35,4.62ZM64.07,1.42H57.9V21.84h6.16V10.36H67l2.81-5.2H64.07V1.42ZM50.26,11.21c-2-.3-2.87-0.3-2.87-1.09s0.81-.94,2.42-0.94a16.15,16.15,0,0,1,5.11.91L56,5.41a24.56,24.56,0,0,0-6.13-.75c-5.89,0-9,2.27-9,5.89,0,2.81,1.66,4.47,6.53,5.11,2.06,0.27,2.81.39,2.81,1.15s-0.82,1-2.24,1a16.67,16.67,0,0,1-6-1.3L40.77,21.3a22.14,22.14,0,0,0,6.68,1c6.35,0,9.28-2.24,9.28-5.89C56.72,13.54,55.15,12,50.26,11.21ZM40.19,13.35c0,6.34-5.17,9-10,9s-9.82-2.6-9.82-8.73c0-6.28,5.08-9,10-9S40.19,7.25,40.19,13.35Zm-6.56.18a3.4,3.4,0,1,0-6.8,0,3.28,3.28,0,0,0,3.41,3.41A3.24,3.24,0,0,0,33.63,13.54Z", fill: "#00A0D6", transform: "translate(0 0)" })))), h("div", { class: "siteheader-topright" }, h("slot", { name: "toprightstart" }), (this.gotData && this.loginDialog && !this.hideLogin) && (h("pn-marketweb-siteheader-login", { loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && ((_g = this.languageSelector) === null || _g === void 0 ? void 0 : _g.languages)) && !this.hideLanguageSelector &&
2977
3311
  h("pn-language-selector", { value: this.language }, this.languageSelector.languages.map(language => h("pn-language-selector-option", { name: language.nativeName, code: language.twoLetterISOLanguageName, selected: language.isCurrent, url: this.getLanguageVersionUrl(language) }))), h("slot", { name: "toprightend" }))), h("div", { class: "siteheader-row" }, h("div", { class: "siteheader-menu" }, h("pn-mainnav", { market: this.market, language: this.language, onMenuOpenChange: (e) => {
@@ -2988,9 +3322,13 @@ let PnMarketwebSiteheader$1 = class extends HTMLElement {
2988
3322
  })), h("div", { slot: "footer", class: "siteheader-menu-footer" }, (this.gotData && this.loginDialog && !this.hideLogin) && (h("pn-marketweb-siteheader-login", { loginDialog: this.loginDialog, endpoint: this.endpoint, i18n: this.i18n })), (this.gotData && ((_h = this.languageSelector) === null || _h === void 0 ? void 0 : _h.languages)) && !this.hideLanguageSelector &&
2989
3323
  h("pn-language-selector", { value: this.language }, this.languageSelector.languages.map(language => h("pn-language-selector-option", { name: language.nativeName, code: language.twoLetterISOLanguageName, selected: language.isCurrent, url: this.getLanguageVersionUrl(language) }))), !this.hideSiteSelector &&
2990
3324
  h("pn-site-selector", { language: this.language }, (this.gotData && ((_j = this.siteSelector) === null || _j === void 0 ? void 0 : _j.currentSiteTitle)) &&
2991
- h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle, description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_k = this.siteSelector) === null || _k === void 0 ? void 0 : _k.siteSelections)) && this.siteSelector.siteSelections.map((site) => h("pn-site-selector-item", { heading: site.linkText, description: site.linkDescription, url: site.pageLink, newwindow: site.openInNewWindow })))), h("div", { slot: "top", class: "siteheader-menu-top" }, h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, i18n: this.i18n }))))), h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, "show-only-link": this.minimizeSearch, i18n: this.i18n }))));
3325
+ h("pn-site-selector-item", { heading: this.siteSelector.currentSiteTitle, description: this.siteSelector.currentSiteDescription }), (this.gotData && ((_k = this.siteSelector) === null || _k === void 0 ? void 0 : _k.siteSelections)) && this.siteSelector.siteSelections.map((site) => h("pn-site-selector-item", { heading: site.linkText, description: site.linkDescription, url: site.pageLink, newwindow: site.openInNewWindow })))), h("div", { slot: "top", class: "siteheader-menu-top" }, h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, i18n: this.i18n }))))), h("pn-marketweb-siteheader-search", { search: this.search, "hide-search": this.hideSearch, "show-only-link": this.minimizeSearch, i18n: this.i18n })))));
2992
3326
  }
2993
3327
  get hostElement() { return this; }
3328
+ static get watchers() { return {
3329
+ "language": ["onLanguageChange"],
3330
+ "market": ["onMarketChange"]
3331
+ }; }
2994
3332
  static get style() { return pnMarketwebSiteheaderCss; }
2995
3333
  };
2996
3334
 
@@ -3248,6 +3586,10 @@ let PnMarketwebSiteheaderLogin$1 = class extends HTMLElement {
3248
3586
  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)))))));
3249
3587
  }
3250
3588
  get hostElement() { return this; }
3589
+ static get watchers() { return {
3590
+ "i18n": ["init"],
3591
+ "loginDialog": ["init"]
3592
+ }; }
3251
3593
  static get style() { return pnMarketwebSiteheaderLoginCss; }
3252
3594
  };
3253
3595
 
@@ -3881,17 +4223,18 @@ let PnSiteSelectorItem$1 = class extends HTMLElement {
3881
4223
  };
3882
4224
 
3883
4225
  const PnChoiceButton = /*@__PURE__*/proxyCustomElement(PnChoiceButton$1, [4,"pn-choice-button",{"value":[520],"name":[1],"choiceid":[1],"type":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]);
4226
+ const PnFilterCheckbox = /*@__PURE__*/proxyCustomElement(PnFilterCheckbox$1, [1,"pn-filter-checkbox",{"value":[520],"name":[1],"checkboxid":[1],"disabled":[4],"checked":[4],"indeterminate":[1028]},[[0,"change","handlechange"]]]);
3884
4227
  const PnFilterSearch = /*@__PURE__*/proxyCustomElement(PnFilterSearch$1, [1,"pn-filter-search",{"disabled":[4],"placeholder":[1],"inputid":[1],"name":[1],"autocomplete":[1],"value":[1],"label":[1],"loading":[4],"button":[1],"light":[4]},[[0,"input","inputHandler"]]]);
3885
4228
  const PnFindServiceAndPrice = /*@__PURE__*/proxyCustomElement(PnfindServiceAndPrice, [0,"pn-find-service-and-price",{"source":[1],"language":[1025],"market":[1025],"filteredItems":[32],"postagetype":[32],"weight":[32],"weightvalue":[32],"deliveryscope":[32],"sourceData":[32]}]);
3886
4229
  const PnFindServiceAndPriceResult = /*@__PURE__*/proxyCustomElement(PnfindServiceAndPriceResult, [0,"pn-find-service-and-price-result",{"item":[1040],"shownitems":[16],"weightText":[32]}]);
3887
- const PnLanguageSelector = /*@__PURE__*/proxyCustomElement(PnlanguageSelector, [4,"pn-language-selector",{"value":[1537],"selectedLanguageName":[32],"options":[32],"i18n":[32]}]);
4230
+ const PnLanguageSelector = /*@__PURE__*/proxyCustomElement(PnlanguageSelector, [4,"pn-language-selector",{"value":[513],"selectedLanguageName":[32],"options":[32],"i18n":[32]}]);
3888
4231
  const PnLanguageSelectorOption = /*@__PURE__*/proxyCustomElement(PnlanguageSelectorOption, [0,"pn-language-selector-option",{"name":[1],"code":[1],"url":[1],"selected":[4],"currentLanguage":[1,"current-language"]}]);
3889
4232
  const PnMainnav = /*@__PURE__*/proxyCustomElement(PnMainnav$1, [4,"pn-mainnav",{"market":[1],"language":[1],"navigationId":[1,"navigation-id"],"openMenu":[1028,"open-menu"],"navLabel":[1,"nav-label"]},[[0,"language","setLanguage"],[0,"market","setMarket"],[0,"menuLanguageChange","onLanguageChange"],[0,"setmenuopenstate","setMenuOpenState"],[0,"openMenuLevelChange","onOpenMenuLevelChange"]]]);
3890
4233
  const PnMainnavLevel = /*@__PURE__*/proxyCustomElement(PnMainnavLevel$1, [4,"pn-mainnav-level",{"level":[32],"levelId":[32],"isOpen":[32],"parentName":[32],"parentHref":[32],"parentLinkId":[32],"listCount":[32],"alignment":[32]}]);
3891
4234
  const PnMainnavLink = /*@__PURE__*/proxyCustomElement(PnMainnavLink$1, [4,"pn-mainnav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"levelId":[32],"open":[32],"hasChildren":[32]}]);
3892
4235
  const PnMainnavList = /*@__PURE__*/proxyCustomElement(PnMainnavList$1, [4,"pn-mainnav-list",{"heading":[1],"linkCount":[32]}]);
3893
- const PnMarketwebSitefooter = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheader$2, [0,"pn-marketweb-sitefooter",{"market":[1],"language":[1],"endpoint":[1],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]);
3894
- const PnMarketwebSiteheader = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheader$1, [4,"pn-marketweb-siteheader",{"market":[1],"language":[1],"endpoint":[1],"hideSiteSelector":[1028,"hide-site-selector"],"hideLanguageSelector":[1028,"hide-language-selector"],"hideSearch":[1028,"hide-search"],"hideLogin":[1028,"hide-login"],"i18n":[32],"gotData":[32],"fetchingData":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"loginDialog":[32],"minimizeSearch":[32]},[[9,"resize","handleResize"]]]);
4236
+ const PnMarketwebSitefooter = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheader$2, [0,"pn-marketweb-sitefooter",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"siteDefinition":[32],"footerContent":[32],"i18n":[32],"gotData":[32],"fetchingData":[32]}]);
4237
+ const PnMarketwebSiteheader = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheader$1, [4,"pn-marketweb-siteheader",{"market":[1537],"language":[1537],"environment":[1537],"endpoint":[1],"hideSiteSelector":[1540,"hide-site-selector"],"hideLanguageSelector":[1540,"hide-language-selector"],"hideSearch":[1540,"hide-search"],"hideLogin":[1540,"hide-login"],"i18n":[32],"gotData":[32],"fetchingData":[32],"menuItems":[32],"siteDefinition":[32],"search":[32],"siteSelector":[32],"languageSelector":[32],"loginDialog":[32],"minimizeSearch":[32]},[[9,"resize","handleResize"]]]);
3895
4238
  const PnMarketwebSiteheaderLogin = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheaderLogin$1, [0,"pn-marketweb-siteheader-login",{"endpoint":[1],"i18n":[8,"i-1-8n"],"loginDialog":[1040],"loginManager":[32],"loggedIn":[32],"toggleButtonText":[32]}]);
3896
4239
  const PnMarketwebSiteheaderSearch = /*@__PURE__*/proxyCustomElement(PnMarketwebSiteheaderSearch$1, [0,"pn-marketweb-siteheader-search",{"i18n":[8,"i-1-8n"],"showOnlyLink":[1028,"show-only-link"],"hideSearch":[1028,"hide-search"],"search":[1040]}]);
3897
4240
  const PnProductPricelist = /*@__PURE__*/proxyCustomElement(PnFindProductPricelist, [4,"pn-product-pricelist",{"source":[1],"language":[1025],"market":[1025],"productid":[1],"filteredItems":[32],"sourceData":[32],"gotData":[32],"loading":[32],"postagetype":[32],"weight":[32],"weightvalue":[32]}]);
@@ -3904,12 +4247,13 @@ const PnSidenavLevel = /*@__PURE__*/proxyCustomElement(PnSidenavLevel$1, [4,"pn-
3904
4247
  const PnSidenavLink = /*@__PURE__*/proxyCustomElement(PnSidenavLink$1, [4,"pn-sidenav-link",{"name":[1],"href":[1],"target":[1],"linkid":[1],"icon":[1],"current":[4],"levelId":[32],"open":[32],"hasChildren":[32]}]);
3905
4248
  const PnSiteFooter = /*@__PURE__*/proxyCustomElement(PnSiteFooter$1, [4,"pn-site-footer",{"url":[1]}]);
3906
4249
  const PnSiteFooterCol = /*@__PURE__*/proxyCustomElement(PnSiteFooterCol$1, [4,"pn-site-footer-col"]);
3907
- const PnSiteSelector = /*@__PURE__*/proxyCustomElement(PnSiteSelector$1, [4,"pn-site-selector",{"buttontext":[1],"heading":[1],"language":[1],"i18n":[32]}]);
4250
+ const PnSiteSelector = /*@__PURE__*/proxyCustomElement(PnSiteSelector$1, [4,"pn-site-selector",{"buttontext":[1537],"heading":[1537],"language":[1537],"i18n":[32]}]);
3908
4251
  const PnSiteSelectorItem = /*@__PURE__*/proxyCustomElement(PnSiteSelectorItem$1, [0,"pn-site-selector-item",{"url":[1],"heading":[1],"description":[1],"newwindow":[4]}]);
3909
4252
  const defineCustomElements = (opts) => {
3910
4253
  if (typeof customElements !== 'undefined') {
3911
4254
  [
3912
4255
  PnChoiceButton,
4256
+ PnFilterCheckbox,
3913
4257
  PnFilterSearch,
3914
4258
  PnFindServiceAndPrice,
3915
4259
  PnFindServiceAndPriceResult,
@@ -3943,4 +4287,4 @@ const defineCustomElements = (opts) => {
3943
4287
  }
3944
4288
  };
3945
4289
 
3946
- export { PnChoiceButton, PnFilterSearch, PnFindServiceAndPrice, PnFindServiceAndPriceResult, PnLanguageSelector, PnLanguageSelectorOption, PnMainnav, PnMainnavLevel, PnMainnavLink, PnMainnavList, PnMarketwebSitefooter, PnMarketwebSiteheader, PnMarketwebSiteheaderLogin, PnMarketwebSiteheaderSearch, PnProductPricelist, PnProductPricelistResult, PnProductTile, PnProductTileInfo, PnProductTilePrice, PnSidenav, PnSidenavLevel, PnSidenavLink, PnSiteFooter, PnSiteFooterCol, PnSiteSelector, PnSiteSelectorItem, defineCustomElements };
4290
+ export { PnChoiceButton, PnFilterCheckbox, PnFilterSearch, PnFindServiceAndPrice, PnFindServiceAndPriceResult, PnLanguageSelector, PnLanguageSelectorOption, PnMainnav, PnMainnavLevel, PnMainnavLink, PnMainnavList, PnMarketwebSitefooter, PnMarketwebSiteheader, PnMarketwebSiteheaderLogin, PnMarketwebSiteheaderSearch, PnProductPricelist, PnProductPricelistResult, PnProductTile, PnProductTileInfo, PnProductTilePrice, PnSidenav, PnSidenavLevel, PnSidenavLink, PnSiteFooter, PnSiteFooterCol, PnSiteSelector, PnSiteSelectorItem, defineCustomElements };