@postnord/pn-marketweb-components 4.3.3 → 4.3.4

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 (24) hide show
  1. package/cjs/loader.cjs.js +1 -1
  2. package/cjs/pn-market-web-components.cjs.js +1 -1
  3. package/cjs/pn-marketweb-header.cjs.entry.js +29 -4
  4. package/cjs/pn-marketweb-header.cjs.entry.js.map +1 -1
  5. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js +53 -4
  6. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.js.map +1 -1
  7. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js +49 -8
  8. package/collection/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.js.map +1 -1
  9. package/components/pn-marketweb-header.js +30 -4
  10. package/components/pn-marketweb-header.js.map +1 -1
  11. package/esm/loader.js +1 -1
  12. package/esm/pn-market-web-components.js +1 -1
  13. package/esm/pn-marketweb-header.entry.js +29 -4
  14. package/esm/pn-marketweb-header.entry.js.map +1 -1
  15. package/package.json +1 -1
  16. package/pn-market-web-components/{p-48e4ce2a.entry.js → p-5c6bdbdd.entry.js} +2 -2
  17. package/pn-market-web-components/p-5c6bdbdd.entry.js.map +1 -0
  18. package/pn-market-web-components/pn-market-web-components.esm.js +1 -1
  19. package/pn-market-web-components/pn-market-web-components.esm.js.map +1 -1
  20. package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.d.ts +4 -0
  21. package/types/components/layout-components/pn-marketweb-header/pn-marketweb-header.stories.d.ts +9 -0
  22. package/types/components.d.ts +8 -0
  23. package/vscode-data.json +4 -0
  24. package/pn-market-web-components/p-48e4ce2a.entry.js.map +0 -1
@@ -21,6 +21,7 @@ import { navigateToMenuItem } from "./utils/header-url";
21
21
  export class PnMarketwebHeader {
22
22
  constructor() {
23
23
  this.initialActiveMenuMode = 0;
24
+ this.forceThemeAndToggle = -1;
24
25
  this.menuThemes = undefined;
25
26
  this.market = null;
26
27
  this.language = null;
@@ -139,6 +140,19 @@ export class PnMarketwebHeader {
139
140
  get logoUrl() {
140
141
  return this.vm?.menuModeOptions?.[this.activeMenuMode]?.href ?? '/';
141
142
  }
143
+ get hasForcedThemeAndToggle() {
144
+ return Number.isInteger(this.forceThemeAndToggle) && this.forceThemeAndToggle !== -1;
145
+ }
146
+ validateMenuModeIndex(mode) {
147
+ const optionCount = this.vm?.menuModeOptions?.length ?? 0;
148
+ if (!this.vm?.hasMenuSwitching || optionCount === 0) {
149
+ return 0;
150
+ }
151
+ if (!Number.isInteger(mode) || mode < 0) {
152
+ return 0;
153
+ }
154
+ return Math.min(mode, optionCount - 1);
155
+ }
142
156
  async loadHeader() {
143
157
  this.status = 'loading';
144
158
  this.isInitializing = true;
@@ -202,14 +216,22 @@ export class PnMarketwebHeader {
202
216
  this.vm = result.vm;
203
217
  this.i18n = result.i18n;
204
218
  this.status = result.status;
205
- if (!result.vm?.hasMenuSwitching) {
219
+ if (this.hasForcedThemeAndToggle) {
220
+ this.activeMenuMode = this.validateMenuModeIndex(this.forceThemeAndToggle);
221
+ this.hasResolvedInitialMenuMode = true;
222
+ storeHeaderMenuMode(this.activeMenuMode);
223
+ }
224
+ else if (!result.vm?.hasMenuSwitching) {
206
225
  this.activeMenuMode = 0;
207
226
  this.hasResolvedInitialMenuMode = false;
208
227
  }
209
228
  else if (!this.hasResolvedInitialMenuMode) {
210
- this.activeMenuMode = resolveInitialHeaderMenuMode(true, this.initialActiveMenuMode);
229
+ this.activeMenuMode = this.validateMenuModeIndex(resolveInitialHeaderMenuMode(true, this.initialActiveMenuMode));
211
230
  this.hasResolvedInitialMenuMode = true;
212
231
  }
232
+ else {
233
+ this.activeMenuMode = this.validateMenuModeIndex(this.activeMenuMode);
234
+ }
213
235
  if (headerState.loginManager && result.vm?.siteDefinition?.url) {
214
236
  headerState.loginManager.setSiteUrl(result.vm.siteDefinition.url);
215
237
  }
@@ -249,6 +271,9 @@ export class PnMarketwebHeader {
249
271
  return href;
250
272
  }
251
273
  onMenuToggleChange = (e) => {
274
+ if (this.hasForcedThemeAndToggle) {
275
+ return;
276
+ }
252
277
  const nextMode = e.detail;
253
278
  if (nextMode === this.activeMenuMode) {
254
279
  return;
@@ -289,9 +314,9 @@ export class PnMarketwebHeader {
289
314
  const menuGroups = vm
290
315
  ? this.getVisibleMenuGroups(vm)
291
316
  : { primaryItems: [], sharedItems: [] };
292
- return (h(Host, { key: '77b50a06702c9c8aee59392c7ebcf392d0e93ace', language: this.language ?? undefined, market: this.market ?? undefined, environment: this.environment ?? undefined, "data-status": this.status, "data-mode": this.activeMenuMode, "data-theme": activeTheme }, h("header", { key: 'f17a9126e62264bcbc596802394d8a0eb64809d7' }, vm && (h(Fragment, { key: 'e4d0c6cbb175bd545c37011e8a26040e293b5078' }, h("pn-marketweb-header-top-row", { key: 'f20e51e813cd52f09a223d860e04759f9d277183', vm: vm, i18n: i18n, language: this.language ?? undefined, siteid: this.siteid ?? undefined, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, hideSiteSelector: this.hideSiteSelector, hideLanguageSelector: this.hideLanguageSelector, hideSearch: this.hideSearch, hideLogin: this.hideLogin, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, spaMode: this.spaMode, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, menuToggleChangeHandler: this.onMenuToggleChange, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: 'c0025425b08f233bc8ef6c9db59c516b1c2c8d05', name: "header-top-left", slot: "header-top-left" }), h("slot", { key: '822354a2c86ca56f4a7e6926492a5202e82d0d2e', name: "header-top-right-start", slot: "header-top-right-start" }), h("slot", { key: '68364a475418c6bb6baba867f9b78bc2f7cd3c92', name: "toprightend", slot: "toprightend" })), h("slot", { key: 'e49bc7c21f51abb86b05e6a986163f6b8848c425', name: "siteheader-menu-top-button" }), h("pn-marketweb-header-main-row", { key: 'a56827628a3f649546881449479df0d7721da5b2', vm: vm, i18n: i18n, market: this.market ?? undefined, language: this.language ?? undefined, siteid: this.siteid ?? undefined, hideSearch: this.hideSearch, hideLogin: this.hideLogin, hideLanguageSelector: this.hideLanguageSelector, hideSiteSelector: this.hideSiteSelector, minimizeSearch: this.minimizeSearch, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, primaryItems: menuGroups.primaryItems, sharedItems: menuGroups.sharedItems, showMenuDivider: menuGroups.primaryItems.length > 0 && menuGroups.sharedItems.length > 0, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, spaMode: this.spaMode, menuToggleChangeHandler: this.onMenuToggleChange, mainNavRefHandler: (el) => {
317
+ return (h(Host, { key: '7caa2d55c8bc19bc5acdcc0561fec5c91ebdb7dd', language: this.language ?? undefined, market: this.market ?? undefined, environment: this.environment ?? undefined, "data-status": this.status, "data-mode": this.activeMenuMode, "data-theme": activeTheme }, h("header", { key: 'd447734933c534ffb13215dd663b60410bd83519' }, vm && (h(Fragment, { key: '30d8f6f7ab3f8eec2210461366336829b4807a83' }, h("pn-marketweb-header-top-row", { key: '53ebe5f1f76fe18de4f64fc11e353e67bdaad6a2', vm: vm, i18n: i18n, language: this.language ?? undefined, siteid: this.siteid ?? undefined, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, hideSiteSelector: this.hideSiteSelector, hideLanguageSelector: this.hideLanguageSelector, hideSearch: this.hideSearch, hideLogin: this.hideLogin, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, spaMode: this.spaMode, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, menuToggleChangeHandler: this.onMenuToggleChange, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: 'd84e74d802d4367d2d1c3771d0efa92317332799', name: "header-top-left", slot: "header-top-left" }), h("slot", { key: 'a110554e38f6d169088a242c5675d07235980e7f', name: "header-top-right-start", slot: "header-top-right-start" }), h("slot", { key: '69067f8a28274bf64af01d5375a180930a00ba2e', name: "toprightend", slot: "toprightend" })), h("slot", { key: '731ba47be6e196907022abcba67ed6a1ecb8d935', name: "siteheader-menu-top-button" }), h("pn-marketweb-header-main-row", { key: '1a715c580147fc6e93a79e5cdef265f939613951', vm: vm, i18n: i18n, market: this.market ?? undefined, language: this.language ?? undefined, siteid: this.siteid ?? undefined, hideSearch: this.hideSearch, hideLogin: this.hideLogin, hideLanguageSelector: this.hideLanguageSelector, hideSiteSelector: this.hideSiteSelector, minimizeSearch: this.minimizeSearch, activeMenuMode: this.activeMenuMode, theme: activeTheme, navigateOnMenuToggle: this.navigateOnMenuToggle, primaryItems: menuGroups.primaryItems, sharedItems: menuGroups.sharedItems, showMenuDivider: menuGroups.primaryItems.length > 0 && menuGroups.sharedItems.length > 0, userToken: this.userToken, userFullname: this.userFullname, userLoggedin: this.userLoggedin, endpoint: this.endpoint ?? undefined, environment: this.environment ?? undefined, showProfileSelection: this.showProfileSelection, showUnifiedLogin: this.showUnifiedLogin, checkUserLoggedInStateInterval: this.checkUserLoggedInStateInterval, useMarketwebLogin: this.useMarketwebLogin, spaMode: this.spaMode, menuToggleChangeHandler: this.onMenuToggleChange, mainNavRefHandler: (el) => {
293
318
  this.mainNavEl = el;
294
- }, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: '673017970d5f273a2810acc09d47744cfdda19e6', name: "mobile-toprightend", slot: "mobile-toprightend" }), h("slot", { key: '86493520b39dd5c0fbe4a371e3503cfdcc51e8bf', name: "header-bottom-button", slot: "header-bottom-button" }), h("slot", { key: '1fa6a9440a1f2b4bcb081fbc5c7ce3bb31a6bb63', name: "menu-footer-cta", slot: "menu-footer-cta" })))))));
319
+ }, adjustSiteSelectorUrl: (href) => this.adjustSiteSelectorUrl(href), logoUrl: logoUrl }, h("slot", { key: '087be6bb7f4b908553824dd4d31484b069594207', name: "mobile-toprightend", slot: "mobile-toprightend" }), h("slot", { key: 'c9bc4540e9eb9f2ca7b46cc627c72f1e6cedb7ea', name: "header-bottom-button", slot: "header-bottom-button" }), h("slot", { key: 'ee3c12f27ae29c7f735758d0983161c96f8ce271', name: "menu-footer-cta", slot: "menu-footer-cta" })))))));
295
320
  }
296
321
  static get is() { return "pn-marketweb-header"; }
297
322
  static get originalStyleUrls() {
@@ -330,6 +355,30 @@ export class PnMarketwebHeader {
330
355
  "reflect": false,
331
356
  "defaultValue": "0"
332
357
  },
358
+ "forceThemeAndToggle": {
359
+ "type": "number",
360
+ "mutable": false,
361
+ "complexType": {
362
+ "original": "HeaderMenuMode",
363
+ "resolved": "number",
364
+ "references": {
365
+ "HeaderMenuMode": {
366
+ "location": "import",
367
+ "path": "./types/pn-marketweb-header.types",
368
+ "id": "src/components/layout-components/pn-marketweb-header/types/pn-marketweb-header.types.ts::HeaderMenuMode"
369
+ }
370
+ }
371
+ },
372
+ "required": false,
373
+ "optional": false,
374
+ "docs": {
375
+ "tags": [],
376
+ "text": "The index of the top menu toggle page item to force the theme and active toggle. It has the highest priority on selecting the theme and active toggler"
377
+ },
378
+ "attribute": "force-theme-and-toggle",
379
+ "reflect": false,
380
+ "defaultValue": "-1"
381
+ },
333
382
  "menuThemes": {
334
383
  "type": "string",
335
384
  "mutable": false,
@@ -1 +1 @@
1
- {"version":3,"file":"pn-marketweb-header.js","sourceRoot":"","sources":["../../../../src/components/layout-components/pn-marketweb-header/pn-marketweb-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\n\nimport { FetchHelper } from '../../../globals/FetchHelper';\nimport type {\n EnvironmentName,\n MarketName,\n} from '../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.types';\nimport {\n state as headerState,\n} from '../pn-marketweb-siteheader/pn-marketweb-siteheader-store';\nimport {\n MenuItem,\n SiteHeaderI18N,\n} from '../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\nimport {\n HeaderStateResult,\n PnMarketwebHeaderService,\n} from './services/pn-marketweb-header.service';\nimport type {\n HeaderApiPayload,\n HeaderMenuMode,\n HeaderViewModel,\n} from './types/pn-marketweb-header.types';\nimport { defaultHeaderI18n } from './utils/header-i18n';\nimport { prependHomeMenuItem } from './utils/header-menu';\nimport {\n type HeaderTheme,\n resolveHeaderMenuThemes,\n} from './utils/header-theme';\nimport {\n extractToggleableMenuStructure,\n getToggleRootForMenuItems,\n getVisibleMenuGroupsForMode,\n} from './utils/header-toggle-menu';\nimport {\n resolveInitialHeaderMenuMode,\n storeHeaderMenuMode,\n} from './utils/header-toggle-menu.storage';\nimport { navigateToMenuItem } from './utils/header-url';\n\n/**\n * New marketweb header wrapper.\n *\n * Responsibilities:\n * - resolve runtime context\n * - fetch header data\n * - map backend data into a renderable view model\n * - render the layout using existing leaf/header components\n * - owns the active menu mode when a switchable menu structure exists\n */\n@Component({\n tag: 'pn-marketweb-header',\n styleUrl: 'pn-marketweb-header.scss',\n})\nexport class PnMarketwebHeader {\n @Element() hostElement: HTMLElement;\n\n @Prop() initialActiveMenuMode: HeaderMenuMode = 0;\n\n /** Optional menu theme labels, e.g. ['Business', 'Private']. passed in as a sting via cms */\n @Prop() menuThemes?: string;\n\n /** Market to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) market: MarketName | null = null;\n\n /** Language to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) language: string | null = null;\n\n /** Environment to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) environment: EnvironmentName | null = null;\n\n /** Explicit endpoint override. When omitted it is resolved from market + environment. */\n @Prop() endpoint: string | null = null;\n\n /** Current site id (guid), forwarded into the search component. */\n @Prop() siteid: string | null = null;\n\n /** Current page id forwarded to the header backend endpoint. */\n @Prop() pageId: string = '';\n\n /** Access token passed from backend. */\n @Prop() userToken: string = '';\n\n /** User full name from backend. */\n @Prop() userFullname: string = '';\n\n /** User logged in state from backend. */\n @Prop({ reflect: true }) userLoggedin: boolean = false;\n\n /** Hides the site selector when true. */\n @Prop({ reflect: true }) hideSiteSelector: boolean = false;\n\n /** Hides the generated home menu item when true. */\n @Prop({ reflect: true }) hideHomeMenuItem: boolean = false;\n\n /** Hides the language selector when true. */\n @Prop({ reflect: true }) hideLanguageSelector: boolean = false;\n\n /** Hides search when true. */\n @Prop({ reflect: true }) hideSearch: boolean = false;\n\n /** Hides login when true. */\n @Prop({ reflect: true }) hideLogin: boolean = false;\n\n /** Enables profile selection presentation in the login component. */\n @Prop({ reflect: true }) showProfileSelection: boolean = false;\n\n /** Enables unified login presentation in the login component. */\n @Prop() showUnifiedLogin: boolean = false;\n\n /** Adjust relative URLs against the site domain when true. */\n @Prop() siteDomainInUrls: boolean = false;\n\n /** Autocomplete endpoint forwarded into the search view model. */\n @Prop() autocompleteEndpoint: string = '';\n\n /** Whether session forwarding should be attempted after login state changes. */\n @Prop() sessionForward: boolean = false;\n\n /** Enables cached requests in FetchHelper when true. */\n @Prop() cache: boolean = false;\n\n /** Optional override for translated search placeholder text. */\n @Prop() searchPlaceholder: string = '';\n\n /** When true, language selector options should not navigate directly by URL. */\n @Prop() spaMode: boolean = false;\n\n /** Interval forwarded to the login component for login state checks. */\n @Prop() checkUserLoggedInStateInterval: number = 0;\n\n /** Enables marketweb login mode in the login component. */\n @Prop() useMarketwebLogin: boolean = false;\n\n /** When true, changing menu mode navigates to the selected root href. */\n @Prop() navigateOnMenuToggle: boolean = true;\n\n /** The mapped UI state used for rendering the header. */\n @State() vm: HeaderViewModel | null = null;\n\n /** Current translations for the active language. */\n @State() i18n: SiteHeaderI18N = defaultHeaderI18n;\n\n /** Simple loading state for the wrapper. */\n @State() status: 'idle' | 'loading' | 'ready' | 'error' = 'loading';\n\n /** Whether the main search should collapse to a compact version. */\n @State() minimizeSearch: boolean = false;\n\n /** Internal login state used for special link handling. */\n @State() loggedIn: boolean = false;\n\n /** Active menu mode when the backend structure supports menu switching. */\n @State() activeMenuMode: HeaderMenuMode = 0;\n\n /** Guard used to prevent watchers from reloading during initial setup. */\n private isInitializing = false;\n\n /** Cached raw backend payload so UI-only prop changes can remap without refetching. */\n private rawHeaderData: HeaderApiPayload | null = null;\n\n /** Main nav element reference used for overflow calculation. */\n private mainNavEl?: HTMLElement;\n\n /** Emitted when the language changes. */\n @Event() changeLanguage: EventEmitter<string>;\n\n /** Emitted when the market changes. */\n @Event() changeMarket: EventEmitter<MarketName>;\n\n /** Shared helper for backend requests. */\n private fetchHelper = new FetchHelper('marketweb-header');\n\n /** Service for context resolution and header-data fetching. */\n private headerService = new PnMarketwebHeaderService(this.fetchHelper);\n\n private hasResolvedInitialMenuMode = false;\n\n async componentWillLoad() {\n await this.loadHeader();\n }\n\n @Listen('setLanguage')\n onLanguageSelectorChange(e: CustomEvent<string>) {\n this.language = e.detail;\n window.dispatchEvent(new CustomEvent('marketweb-languagechange', { detail: this.language }));\n }\n\n @Watch('language')\n async onLanguageChange() {\n if (this.isInitializing || !this.language) {\n return;\n }\n\n this.changeLanguage.emit(this.language);\n await this.loadHeader();\n }\n\n @Watch('market')\n async onMarketChange() {\n if (this.isInitializing || !this.market) {\n return;\n }\n\n this.changeMarket.emit(this.market);\n await this.loadHeader();\n }\n\n @Watch('environment')\n async onEnvironmentChange() {\n if (this.isInitializing || !this.environment) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('endpoint')\n async onEndpointChange() {\n if (this.isInitializing) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('pageId')\n async onPageIdChange() {\n if (this.isInitializing) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('hideHomeMenuItem')\n @Watch('siteDomainInUrls')\n @Watch('autocompleteEndpoint')\n @Watch('searchPlaceholder')\n onPresentationInputChange() {\n if (this.isInitializing) {\n return;\n }\n\n this.remapViewModel();\n }\n\n @Listen('loginStateChange')\n onLoginStateChange(e: CustomEvent<{ loggedIn?: boolean; token?: string }>) {\n if (typeof e.detail?.loggedIn === 'boolean') {\n this.loggedIn = e.detail.loggedIn;\n }\n\n if (e.detail?.loggedIn && e.detail?.token && this.sessionForward) {\n try {\n // fetch('/api/userprofile/sync?token=' + e.detail.token);\n } catch {\n // ignored intentionally\n }\n }\n }\n\n @Listen('resize', { target: 'window' })\n handleResize() {\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n }\n\n private get menuThemeList(): HeaderTheme[] {\n return resolveHeaderMenuThemes(\n this.menuThemes,\n this.vm?.menuModeOptions\n );\n }\n\n\n private get logoUrl(): string {\n return this.vm?.menuModeOptions?.[this.activeMenuMode]?.href ?? '/';\n }\n\n private async loadHeader() {\n this.status = 'loading';\n this.isInitializing = true;\n\n try {\n const result = await this.headerService.loadHeaderState({\n market: this.market,\n language: this.language,\n environment: this.environment,\n endpoint: this.endpoint,\n pageId: this.pageId,\n cache: this.cache,\n hideHomeMenuItem: this.hideHomeMenuItem,\n siteDomainInUrls: this.siteDomainInUrls,\n autocompleteEndpoint: this.autocompleteEndpoint,\n searchPlaceholder: this.searchPlaceholder,\n });\n\n this.applyHeaderState(result);\n\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n } catch (error) {\n console.error('[pn-marketweb-header] Failed to load header', error);\n this.rawHeaderData = null;\n this.vm = null;\n this.status = 'error';\n } finally {\n this.isInitializing = false;\n }\n }\n\n private remapViewModel() {\n const context = {\n market: this.market,\n language: this.language,\n environment: this.environment,\n endpoint: this.endpoint,\n pageId: this.pageId ?? '',\n };\n\n const result = this.headerService.remapHeaderState({\n context,\n rawHeaderData: this.rawHeaderData,\n language: this.language,\n hideHomeMenuItem: this.hideHomeMenuItem,\n siteDomainInUrls: this.siteDomainInUrls,\n autocompleteEndpoint: this.autocompleteEndpoint,\n searchPlaceholder: this.searchPlaceholder,\n currentActiveMenuMode: this.activeMenuMode,\n });\n\n this.applyHeaderState(result);\n\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n }\n\n private applyHeaderState(result: HeaderStateResult) {\n this.market = result.context.market;\n this.language = result.context.language;\n this.environment = result.context.environment;\n this.endpoint = result.context.endpoint;\n\n this.rawHeaderData = result.rawHeaderData;\n this.vm = result.vm;\n this.i18n = result.i18n;\n this.status = result.status;\n\n if (!result.vm?.hasMenuSwitching) {\n this.activeMenuMode = 0;\n this.hasResolvedInitialMenuMode = false;\n } else if (!this.hasResolvedInitialMenuMode) {\n this.activeMenuMode = resolveInitialHeaderMenuMode(\n true,\n this.initialActiveMenuMode,\n );\n this.hasResolvedInitialMenuMode = true;\n }\n\n if (headerState.loginManager && result.vm?.siteDefinition?.url) {\n headerState.loginManager.setSiteUrl(result.vm.siteDefinition.url);\n }\n }\n\n private checkMenuOverflow() {\n const mainNavEl = this.mainNavEl;\n if (!mainNavEl) {\n return;\n }\n\n const firstMenuLevel = mainNavEl.querySelector('pn-mainnav-level') as HTMLElement | null;\n if (!firstMenuLevel) {\n return;\n }\n\n const navContainer = firstMenuLevel.parentElement;\n if (!navContainer) {\n return;\n }\n\n const availableWidth = navContainer.clientWidth;\n const requiredWidth = firstMenuLevel.scrollWidth;\n\n this.minimizeSearch = requiredWidth > availableWidth;\n }\n\n private isUserLoggedIn() {\n return this.loggedIn || this.userLoggedin;\n }\n\n private adjustSiteSelectorUrl(href: string): string {\n if (!this.isUserLoggedIn()) {\n return href;\n }\n\n const loginDomains = ['portal.postnord.com'];\n const matchedHref = loginDomains.some(domain => href.includes(domain));\n\n if (!matchedHref) {\n return href;\n }\n\n if (headerState.loginManager) {\n return headerState.loginManager.getLoginUrl(href);\n }\n\n return href;\n }\n\n private onMenuToggleChange = (e: CustomEvent<HeaderMenuMode>) => {\n const nextMode = e.detail;\n\n if (nextMode === this.activeMenuMode) {\n return;\n }\n\n this.activeMenuMode = nextMode;\n storeHeaderMenuMode(nextMode);\n\n if (!this.navigateOnMenuToggle || !this.vm?.rawMenuItems.length) {\n return;\n }\n\n const targetRoot = getToggleRootForMenuItems(this.vm.rawMenuItems, nextMode);\n navigateToMenuItem(targetRoot);\n };\n\n private getVisibleMenuGroups(vm: HeaderViewModel): {\n primaryItems: MenuItem[];\n sharedItems: MenuItem[];\n } {\n if (!vm.rawMenuItems.length) {\n return {\n primaryItems: vm.menuItems,\n sharedItems: [],\n };\n }\n\n const structure = extractToggleableMenuStructure(vm.rawMenuItems);\n\n if (structure.modeRoots.length === 0) {\n return {\n primaryItems: vm.menuItems,\n sharedItems: [],\n };\n }\n\n const groups = getVisibleMenuGroupsForMode(vm.rawMenuItems, this.activeMenuMode);\n\n return {\n primaryItems: prependHomeMenuItem(\n groups.primaryItems,\n this.i18n,\n vm.siteDefinition?.url ?? '/',\n this.hideHomeMenuItem,\n ),\n sharedItems: groups.sharedItems,\n };\n }\n\n\n\n\n render() {\n const vm = this.vm;\n const i18n = this.i18n;\n\n const activeTheme: HeaderTheme =\n this.menuThemeList[this.activeMenuMode] ?? 'private';\n\n const logoUrl = this.logoUrl;\n\n const menuGroups = vm\n ? this.getVisibleMenuGroups(vm)\n : { primaryItems: [] as MenuItem[], sharedItems: [] as MenuItem[] };\n\n\n return (\n <Host\n language={this.language ?? undefined}\n market={this.market ?? undefined}\n environment={this.environment ?? undefined}\n data-status={this.status}\n data-mode={this.activeMenuMode}\n data-theme={activeTheme}\n >\n <header>\n {vm && (\n <Fragment>\n <pn-marketweb-header-top-row\n vm={vm}\n i18n={i18n}\n language={this.language ?? undefined}\n siteid={this.siteid ?? undefined}\n endpoint={this.endpoint ?? undefined}\n environment={this.environment ?? undefined}\n userToken={this.userToken}\n userFullname={this.userFullname}\n userLoggedin={this.userLoggedin}\n hideSiteSelector={this.hideSiteSelector}\n hideLanguageSelector={this.hideLanguageSelector}\n hideSearch={this.hideSearch}\n hideLogin={this.hideLogin}\n showProfileSelection={this.showProfileSelection}\n showUnifiedLogin={this.showUnifiedLogin}\n spaMode={this.spaMode}\n checkUserLoggedInStateInterval={this.checkUserLoggedInStateInterval}\n useMarketwebLogin={this.useMarketwebLogin}\n activeMenuMode={this.activeMenuMode}\n theme={activeTheme}\n navigateOnMenuToggle={this.navigateOnMenuToggle}\n menuToggleChangeHandler={this.onMenuToggleChange}\n adjustSiteSelectorUrl={(href: string) => this.adjustSiteSelectorUrl(href)}\n logoUrl={logoUrl}\n >\n <slot name=\"header-top-left\" slot=\"header-top-left\"></slot>\n <slot name=\"header-top-right-start\" slot=\"header-top-right-start\"></slot>\n <slot name=\"toprightend\" slot=\"toprightend\"></slot>\n </pn-marketweb-header-top-row>\n\n <slot name=\"siteheader-menu-top-button\"></slot>\n\n <pn-marketweb-header-main-row\n vm={vm}\n i18n={i18n}\n market={this.market ?? undefined}\n language={this.language ?? undefined}\n siteid={this.siteid ?? undefined}\n hideSearch={this.hideSearch}\n hideLogin={this.hideLogin}\n hideLanguageSelector={this.hideLanguageSelector}\n hideSiteSelector={this.hideSiteSelector}\n minimizeSearch={this.minimizeSearch}\n activeMenuMode={this.activeMenuMode}\n theme={activeTheme}\n navigateOnMenuToggle={this.navigateOnMenuToggle}\n primaryItems={menuGroups.primaryItems}\n sharedItems={menuGroups.sharedItems}\n showMenuDivider={menuGroups.primaryItems.length > 0 && menuGroups.sharedItems.length > 0}\n userToken={this.userToken}\n userFullname={this.userFullname}\n userLoggedin={this.userLoggedin}\n endpoint={this.endpoint ?? undefined}\n environment={this.environment ?? undefined}\n showProfileSelection={this.showProfileSelection}\n showUnifiedLogin={this.showUnifiedLogin}\n checkUserLoggedInStateInterval={this.checkUserLoggedInStateInterval}\n useMarketwebLogin={this.useMarketwebLogin}\n spaMode={this.spaMode}\n menuToggleChangeHandler={this.onMenuToggleChange}\n mainNavRefHandler={(el: HTMLElement | undefined) => {\n this.mainNavEl = el;\n }}\n adjustSiteSelectorUrl={(href: string) => this.adjustSiteSelectorUrl(href)}\n logoUrl={logoUrl}\n >\n <slot name=\"mobile-toprightend\" slot=\"mobile-toprightend\"></slot>\n <slot name=\"header-bottom-button\" slot=\"header-bottom-button\"></slot>\n <slot name=\"menu-footer-cta\" slot=\"menu-footer-cta\"></slot>\n </pn-marketweb-header-main-row>\n\n </Fragment>\n )}\n </header>\n </Host>\n );\n }\n}"]}
1
+ {"version":3,"file":"pn-marketweb-header.js","sourceRoot":"","sources":["../../../../src/components/layout-components/pn-marketweb-header/pn-marketweb-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\n\nimport { FetchHelper } from '../../../globals/FetchHelper';\nimport type {\n EnvironmentName,\n MarketName,\n} from '../../../services/pn-refined-marketweb-context/pn-refined-marketweb-context.types';\nimport {\n state as headerState,\n} from '../pn-marketweb-siteheader/pn-marketweb-siteheader-store';\nimport {\n MenuItem,\n SiteHeaderI18N,\n} from '../pn-marketweb-siteheader/pn-marketweb-siteheader-types';\nimport {\n HeaderStateResult,\n PnMarketwebHeaderService,\n} from './services/pn-marketweb-header.service';\nimport type {\n HeaderApiPayload,\n HeaderMenuMode,\n HeaderViewModel,\n} from './types/pn-marketweb-header.types';\nimport { defaultHeaderI18n } from './utils/header-i18n';\nimport { prependHomeMenuItem } from './utils/header-menu';\nimport {\n type HeaderTheme,\n resolveHeaderMenuThemes,\n} from './utils/header-theme';\nimport {\n extractToggleableMenuStructure,\n getToggleRootForMenuItems,\n getVisibleMenuGroupsForMode,\n} from './utils/header-toggle-menu';\nimport {\n resolveInitialHeaderMenuMode,\n storeHeaderMenuMode,\n} from './utils/header-toggle-menu.storage';\nimport { navigateToMenuItem } from './utils/header-url';\n\n/**\n * New marketweb header wrapper.\n *\n * Responsibilities:\n * - resolve runtime context\n * - fetch header data\n * - map backend data into a renderable view model\n * - render the layout using existing leaf/header components\n * - owns the active menu mode when a switchable menu structure exists\n */\n@Component({\n tag: 'pn-marketweb-header',\n styleUrl: 'pn-marketweb-header.scss',\n})\nexport class PnMarketwebHeader {\n @Element() hostElement: HTMLElement;\n\n @Prop() initialActiveMenuMode: HeaderMenuMode = 0;\n \n /** The index of the top menu toggle page item to force the theme and active toggle. It has the highest priority on selecting the theme and active toggler */\n @Prop() forceThemeAndToggle: HeaderMenuMode = -1;\n\n /** Optional menu theme labels, e.g. ['Business', 'Private']. passed in as a sting via cms */\n @Prop() menuThemes?: string;\n\n /** Market to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) market: MarketName | null = null;\n\n /** Language to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) language: string | null = null;\n\n /** Environment to use for the header. Falls back to refined context resolution when omitted. */\n @Prop({ mutable: true, reflect: true }) environment: EnvironmentName | null = null;\n\n /** Explicit endpoint override. When omitted it is resolved from market + environment. */\n @Prop() endpoint: string | null = null;\n\n /** Current site id (guid), forwarded into the search component. */\n @Prop() siteid: string | null = null;\n\n /** Current page id forwarded to the header backend endpoint. */\n @Prop() pageId: string = '';\n\n /** Access token passed from backend. */\n @Prop() userToken: string = '';\n\n /** User full name from backend. */\n @Prop() userFullname: string = '';\n\n /** User logged in state from backend. */\n @Prop({ reflect: true }) userLoggedin: boolean = false;\n\n /** Hides the site selector when true. */\n @Prop({ reflect: true }) hideSiteSelector: boolean = false;\n\n /** Hides the generated home menu item when true. */\n @Prop({ reflect: true }) hideHomeMenuItem: boolean = false;\n\n /** Hides the language selector when true. */\n @Prop({ reflect: true }) hideLanguageSelector: boolean = false;\n\n /** Hides search when true. */\n @Prop({ reflect: true }) hideSearch: boolean = false;\n\n /** Hides login when true. */\n @Prop({ reflect: true }) hideLogin: boolean = false;\n\n /** Enables profile selection presentation in the login component. */\n @Prop({ reflect: true }) showProfileSelection: boolean = false;\n\n /** Enables unified login presentation in the login component. */\n @Prop() showUnifiedLogin: boolean = false;\n\n /** Adjust relative URLs against the site domain when true. */\n @Prop() siteDomainInUrls: boolean = false;\n\n /** Autocomplete endpoint forwarded into the search view model. */\n @Prop() autocompleteEndpoint: string = '';\n\n /** Whether session forwarding should be attempted after login state changes. */\n @Prop() sessionForward: boolean = false;\n\n /** Enables cached requests in FetchHelper when true. */\n @Prop() cache: boolean = false;\n\n /** Optional override for translated search placeholder text. */\n @Prop() searchPlaceholder: string = '';\n\n /** When true, language selector options should not navigate directly by URL. */\n @Prop() spaMode: boolean = false;\n\n /** Interval forwarded to the login component for login state checks. */\n @Prop() checkUserLoggedInStateInterval: number = 0;\n\n /** Enables marketweb login mode in the login component. */\n @Prop() useMarketwebLogin: boolean = false;\n\n /** When true, changing menu mode navigates to the selected root href. */\n @Prop() navigateOnMenuToggle: boolean = true;\n\n /** The mapped UI state used for rendering the header. */\n @State() vm: HeaderViewModel | null = null;\n\n /** Current translations for the active language. */\n @State() i18n: SiteHeaderI18N = defaultHeaderI18n;\n\n /** Simple loading state for the wrapper. */\n @State() status: 'idle' | 'loading' | 'ready' | 'error' = 'loading';\n\n /** Whether the main search should collapse to a compact version. */\n @State() minimizeSearch: boolean = false;\n\n /** Internal login state used for special link handling. */\n @State() loggedIn: boolean = false;\n\n /** Active menu mode when the backend structure supports menu switching. */\n @State() activeMenuMode: HeaderMenuMode = 0;\n\n /** Guard used to prevent watchers from reloading during initial setup. */\n private isInitializing = false;\n\n /** Cached raw backend payload so UI-only prop changes can remap without refetching. */\n private rawHeaderData: HeaderApiPayload | null = null;\n\n /** Main nav element reference used for overflow calculation. */\n private mainNavEl?: HTMLElement;\n\n /** Emitted when the language changes. */\n @Event() changeLanguage: EventEmitter<string>;\n\n /** Emitted when the market changes. */\n @Event() changeMarket: EventEmitter<MarketName>;\n\n /** Shared helper for backend requests. */\n private fetchHelper = new FetchHelper('marketweb-header');\n\n /** Service for context resolution and header-data fetching. */\n private headerService = new PnMarketwebHeaderService(this.fetchHelper);\n\n private hasResolvedInitialMenuMode = false;\n\n async componentWillLoad() {\n await this.loadHeader();\n }\n\n @Listen('setLanguage')\n onLanguageSelectorChange(e: CustomEvent<string>) {\n this.language = e.detail;\n window.dispatchEvent(new CustomEvent('marketweb-languagechange', { detail: this.language }));\n }\n\n @Watch('language')\n async onLanguageChange() {\n if (this.isInitializing || !this.language) {\n return;\n }\n\n this.changeLanguage.emit(this.language);\n await this.loadHeader();\n }\n\n @Watch('market')\n async onMarketChange() {\n if (this.isInitializing || !this.market) {\n return;\n }\n\n this.changeMarket.emit(this.market);\n await this.loadHeader();\n }\n\n @Watch('environment')\n async onEnvironmentChange() {\n if (this.isInitializing || !this.environment) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('endpoint')\n async onEndpointChange() {\n if (this.isInitializing) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('pageId')\n async onPageIdChange() {\n if (this.isInitializing) {\n return;\n }\n\n await this.loadHeader();\n }\n\n @Watch('hideHomeMenuItem')\n @Watch('siteDomainInUrls')\n @Watch('autocompleteEndpoint')\n @Watch('searchPlaceholder')\n onPresentationInputChange() {\n if (this.isInitializing) {\n return;\n }\n\n this.remapViewModel();\n }\n\n @Listen('loginStateChange')\n onLoginStateChange(e: CustomEvent<{ loggedIn?: boolean; token?: string }>) {\n if (typeof e.detail?.loggedIn === 'boolean') {\n this.loggedIn = e.detail.loggedIn;\n }\n\n if (e.detail?.loggedIn && e.detail?.token && this.sessionForward) {\n try {\n // fetch('/api/userprofile/sync?token=' + e.detail.token);\n } catch {\n // ignored intentionally\n }\n }\n }\n\n @Listen('resize', { target: 'window' })\n handleResize() {\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n }\n\n private get menuThemeList(): HeaderTheme[] {\n return resolveHeaderMenuThemes(\n this.menuThemes,\n this.vm?.menuModeOptions\n );\n }\n\n\n private get logoUrl(): string {\n return this.vm?.menuModeOptions?.[this.activeMenuMode]?.href ?? '/';\n }\n\n private get hasForcedThemeAndToggle(): boolean {\n return Number.isInteger(this.forceThemeAndToggle) && this.forceThemeAndToggle !== -1;\n }\n\n private validateMenuModeIndex(mode: HeaderMenuMode): HeaderMenuMode {\n const optionCount = this.vm?.menuModeOptions?.length ?? 0;\n\n if (!this.vm?.hasMenuSwitching || optionCount === 0) {\n return 0;\n }\n\n if (!Number.isInteger(mode) || mode < 0) {\n return 0;\n }\n\n return Math.min(mode, optionCount - 1);\n }\n\n private async loadHeader() {\n this.status = 'loading';\n this.isInitializing = true;\n\n try {\n const result = await this.headerService.loadHeaderState({\n market: this.market,\n language: this.language,\n environment: this.environment,\n endpoint: this.endpoint,\n pageId: this.pageId,\n cache: this.cache,\n hideHomeMenuItem: this.hideHomeMenuItem,\n siteDomainInUrls: this.siteDomainInUrls,\n autocompleteEndpoint: this.autocompleteEndpoint,\n searchPlaceholder: this.searchPlaceholder,\n });\n\n this.applyHeaderState(result);\n\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n } catch (error) {\n console.error('[pn-marketweb-header] Failed to load header', error);\n this.rawHeaderData = null;\n this.vm = null;\n this.status = 'error';\n } finally {\n this.isInitializing = false;\n }\n }\n\n private remapViewModel() {\n const context = {\n market: this.market,\n language: this.language,\n environment: this.environment,\n endpoint: this.endpoint,\n pageId: this.pageId ?? '',\n };\n\n const result = this.headerService.remapHeaderState({\n context,\n rawHeaderData: this.rawHeaderData,\n language: this.language,\n hideHomeMenuItem: this.hideHomeMenuItem,\n siteDomainInUrls: this.siteDomainInUrls,\n autocompleteEndpoint: this.autocompleteEndpoint,\n searchPlaceholder: this.searchPlaceholder,\n currentActiveMenuMode: this.activeMenuMode,\n });\n\n this.applyHeaderState(result);\n\n requestAnimationFrame(() => {\n this.checkMenuOverflow();\n });\n }\n\n private applyHeaderState(result: HeaderStateResult) {\n this.market = result.context.market;\n this.language = result.context.language;\n this.environment = result.context.environment;\n this.endpoint = result.context.endpoint;\n\n this.rawHeaderData = result.rawHeaderData;\n this.vm = result.vm;\n this.i18n = result.i18n;\n this.status = result.status;\n\n if (this.hasForcedThemeAndToggle) {\n this.activeMenuMode = this.validateMenuModeIndex(this.forceThemeAndToggle);\n this.hasResolvedInitialMenuMode = true;\n storeHeaderMenuMode(this.activeMenuMode);\n }\n else if (!result.vm?.hasMenuSwitching) {\n this.activeMenuMode = 0;\n this.hasResolvedInitialMenuMode = false;\n }\n else if (!this.hasResolvedInitialMenuMode) {\n this.activeMenuMode = this.validateMenuModeIndex(\n resolveInitialHeaderMenuMode(\n true,\n this.initialActiveMenuMode,\n )\n );\n this.hasResolvedInitialMenuMode = true;\n }\n else {\n this.activeMenuMode = this.validateMenuModeIndex(this.activeMenuMode);\n }\n\n if (headerState.loginManager && result.vm?.siteDefinition?.url) {\n headerState.loginManager.setSiteUrl(result.vm.siteDefinition.url);\n }\n }\n\n private checkMenuOverflow() {\n const mainNavEl = this.mainNavEl;\n if (!mainNavEl) {\n return;\n }\n\n const firstMenuLevel = mainNavEl.querySelector('pn-mainnav-level') as HTMLElement | null;\n if (!firstMenuLevel) {\n return;\n }\n\n const navContainer = firstMenuLevel.parentElement;\n if (!navContainer) {\n return;\n }\n\n const availableWidth = navContainer.clientWidth;\n const requiredWidth = firstMenuLevel.scrollWidth;\n\n this.minimizeSearch = requiredWidth > availableWidth;\n }\n\n private isUserLoggedIn() {\n return this.loggedIn || this.userLoggedin;\n }\n\n private adjustSiteSelectorUrl(href: string): string {\n if (!this.isUserLoggedIn()) {\n return href;\n }\n\n const loginDomains = ['portal.postnord.com'];\n const matchedHref = loginDomains.some(domain => href.includes(domain));\n\n if (!matchedHref) {\n return href;\n }\n\n if (headerState.loginManager) {\n return headerState.loginManager.getLoginUrl(href);\n }\n\n return href;\n }\n\n private onMenuToggleChange = (e: CustomEvent<HeaderMenuMode>) => {\n if (this.hasForcedThemeAndToggle) {\n return;\n }\n\n const nextMode = e.detail;\n\n if (nextMode === this.activeMenuMode) {\n return;\n }\n\n this.activeMenuMode = nextMode;\n storeHeaderMenuMode(nextMode);\n\n if (!this.navigateOnMenuToggle || !this.vm?.rawMenuItems.length) {\n return;\n }\n\n const targetRoot = getToggleRootForMenuItems(this.vm.rawMenuItems, nextMode);\n navigateToMenuItem(targetRoot);\n };\n\n private getVisibleMenuGroups(vm: HeaderViewModel): {\n primaryItems: MenuItem[];\n sharedItems: MenuItem[];\n } {\n if (!vm.rawMenuItems.length) {\n return {\n primaryItems: vm.menuItems,\n sharedItems: [],\n };\n }\n\n const structure = extractToggleableMenuStructure(vm.rawMenuItems);\n\n if (structure.modeRoots.length === 0) {\n return {\n primaryItems: vm.menuItems,\n sharedItems: [],\n };\n }\n\n const groups = getVisibleMenuGroupsForMode(vm.rawMenuItems, this.activeMenuMode);\n\n return {\n primaryItems: prependHomeMenuItem(\n groups.primaryItems,\n this.i18n,\n vm.siteDefinition?.url ?? '/',\n this.hideHomeMenuItem,\n ),\n sharedItems: groups.sharedItems,\n };\n }\n\n\n\n\n render() {\n const vm = this.vm;\n const i18n = this.i18n;\n\n const activeTheme: HeaderTheme =\n this.menuThemeList[this.activeMenuMode] ?? 'private';\n\n const logoUrl = this.logoUrl;\n\n const menuGroups = vm\n ? this.getVisibleMenuGroups(vm)\n : { primaryItems: [] as MenuItem[], sharedItems: [] as MenuItem[] };\n\n\n return (\n <Host\n language={this.language ?? undefined}\n market={this.market ?? undefined}\n environment={this.environment ?? undefined}\n data-status={this.status}\n data-mode={this.activeMenuMode}\n data-theme={activeTheme}\n >\n <header>\n {vm && (\n <Fragment>\n <pn-marketweb-header-top-row\n vm={vm}\n i18n={i18n}\n language={this.language ?? undefined}\n siteid={this.siteid ?? undefined}\n endpoint={this.endpoint ?? undefined}\n environment={this.environment ?? undefined}\n userToken={this.userToken}\n userFullname={this.userFullname}\n userLoggedin={this.userLoggedin}\n hideSiteSelector={this.hideSiteSelector}\n hideLanguageSelector={this.hideLanguageSelector}\n hideSearch={this.hideSearch}\n hideLogin={this.hideLogin}\n showProfileSelection={this.showProfileSelection}\n showUnifiedLogin={this.showUnifiedLogin}\n spaMode={this.spaMode}\n checkUserLoggedInStateInterval={this.checkUserLoggedInStateInterval}\n useMarketwebLogin={this.useMarketwebLogin}\n activeMenuMode={this.activeMenuMode}\n theme={activeTheme}\n navigateOnMenuToggle={this.navigateOnMenuToggle}\n menuToggleChangeHandler={this.onMenuToggleChange}\n adjustSiteSelectorUrl={(href: string) => this.adjustSiteSelectorUrl(href)}\n logoUrl={logoUrl}\n >\n <slot name=\"header-top-left\" slot=\"header-top-left\"></slot>\n <slot name=\"header-top-right-start\" slot=\"header-top-right-start\"></slot>\n <slot name=\"toprightend\" slot=\"toprightend\"></slot>\n </pn-marketweb-header-top-row>\n\n <slot name=\"siteheader-menu-top-button\"></slot>\n\n <pn-marketweb-header-main-row\n vm={vm}\n i18n={i18n}\n market={this.market ?? undefined}\n language={this.language ?? undefined}\n siteid={this.siteid ?? undefined}\n hideSearch={this.hideSearch}\n hideLogin={this.hideLogin}\n hideLanguageSelector={this.hideLanguageSelector}\n hideSiteSelector={this.hideSiteSelector}\n minimizeSearch={this.minimizeSearch}\n activeMenuMode={this.activeMenuMode}\n theme={activeTheme}\n navigateOnMenuToggle={this.navigateOnMenuToggle}\n primaryItems={menuGroups.primaryItems}\n sharedItems={menuGroups.sharedItems}\n showMenuDivider={menuGroups.primaryItems.length > 0 && menuGroups.sharedItems.length > 0}\n userToken={this.userToken}\n userFullname={this.userFullname}\n userLoggedin={this.userLoggedin}\n endpoint={this.endpoint ?? undefined}\n environment={this.environment ?? undefined}\n showProfileSelection={this.showProfileSelection}\n showUnifiedLogin={this.showUnifiedLogin}\n checkUserLoggedInStateInterval={this.checkUserLoggedInStateInterval}\n useMarketwebLogin={this.useMarketwebLogin}\n spaMode={this.spaMode}\n menuToggleChangeHandler={this.onMenuToggleChange}\n mainNavRefHandler={(el: HTMLElement | undefined) => {\n this.mainNavEl = el;\n }}\n adjustSiteSelectorUrl={(href: string) => this.adjustSiteSelectorUrl(href)}\n logoUrl={logoUrl}\n >\n <slot name=\"mobile-toprightend\" slot=\"mobile-toprightend\"></slot>\n <slot name=\"header-bottom-button\" slot=\"header-bottom-button\"></slot>\n <slot name=\"menu-footer-cta\" slot=\"menu-footer-cta\"></slot>\n </pn-marketweb-header-main-row>\n\n </Fragment>\n )}\n </header>\n </Host>\n );\n }\n}"]}
@@ -164,11 +164,15 @@ const DEFAULT_MOCKED_RESPONSE = createMockedResponse([
164
164
  createMenuItem('Private', '/private/', 'root-private', [
165
165
  createLeaf('Skicka', '/private/skicka/', 'private-send', 1),
166
166
  createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),
167
- ]),
167
+ ], 0, {
168
+ toggleTheme: 'private',
169
+ }),
168
170
  createMenuItem('Business', '/business/', 'root-business', [
169
171
  createLeaf('Boka frakt', '/business/boka-frakt/', 'business-book', 1),
170
172
  createLeaf('Spåra', '/business/spåra/', 'business-track', 1),
171
- ]),
173
+ ], 0, {
174
+ toggleTheme: 'business',
175
+ }),
172
176
  createMenuItem('Shared', '/', 'root-shared', [
173
177
  createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),
174
178
  createLeaf('Handla online', '/handla-online/', 'shared-shop', 1),
@@ -183,15 +187,21 @@ const THREE_MODES_MOCKED_RESPONSE = createMockedResponse([
183
187
  createMenuItem('Private', '/private/', 'root-private', [
184
188
  createLeaf('Skicka', '/private/skicka/', 'private-send', 1),
185
189
  createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),
186
- ]),
190
+ ], 0, {
191
+ toggleTheme: 'private',
192
+ }),
187
193
  createMenuItem('Business', '/business/', 'root-business', [
188
194
  createLeaf('Boka frakt', '/business/boka-frakt/', 'business-book', 1),
189
195
  createLeaf('Portal', '/business/portal/', 'business-portal', 1),
190
- ]),
196
+ ], 0, {
197
+ toggleTheme: 'business',
198
+ }),
191
199
  createMenuItem('Partners', '/partners/', 'root-partners', [
192
200
  createLeaf('Integrationer', '/partners/integrationer/', 'partners-integrations', 1),
193
201
  createLeaf('API-dokumentation', '/partners/api/', 'partners-api', 1),
194
- ]),
202
+ ], 0, {
203
+ toggleTheme: 'business',
204
+ }),
195
205
  createMenuItem('Shared', '/', 'root-shared', [
196
206
  createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),
197
207
  createLeaf('Om oss', '/om-oss/', 'shared-about', 1),
@@ -207,7 +217,9 @@ const ONE_MODE_MOCKED_RESPONSE = createMockedResponse([
207
217
  createMenuItem('Private', '/private/', 'root-private', [
208
218
  createLeaf('Skicka', '/private/skicka/', 'private-send', 1),
209
219
  createLeaf('Ta emot', '/private/ta-emot/', 'private-receive', 1),
210
- ]),
220
+ ], 0, {
221
+ toggleTheme: 'private',
222
+ }),
211
223
  createMenuItem('Shared', '/', 'root-shared', [
212
224
  createLeaf('Kundservice', '/kundservice/', 'shared-support', 1),
213
225
  createLeaf('Handla online', '/handla-online/', 'shared-shop', 1),
@@ -252,7 +264,9 @@ const NESTED_SUBMENU_MOCKED_RESPONSE = createMockedResponse([
252
264
  isMegaMenuParent: false,
253
265
  hasChildren: true,
254
266
  }),
255
- ]),
267
+ ], 0, {
268
+ toggleTheme: 'private',
269
+ }),
256
270
  createMenuItem('Business', '/business/', 'root-business', [
257
271
  createMenuItem('Boka frakt', '/business/boka-frakt/', 'business-book', [
258
272
  createLeaf('Inrikes företag', '/business/boka-frakt/inrikes/', 'business-book-domestic', 2),
@@ -273,7 +287,9 @@ const NESTED_SUBMENU_MOCKED_RESPONSE = createMockedResponse([
273
287
  createPromotedMenuItem('Sök brevlåda eller serviceställe', 'https://se-inte.postnord.com/vara-verktyg/sok-brevlada-eller-servicestalle/', '/link/1ecca245984d4ea99a4bd28390577d52.aspx'),
274
288
  ],
275
289
  }),
276
- ]),
290
+ ], 0, {
291
+ toggleTheme: 'business',
292
+ }),
277
293
  createMenuItem('Shared', '/', 'root-shared', [
278
294
  createMenuItem('Kundservice', '/kundservice/', 'shared-support', [
279
295
  createLeaf('Vanliga frågor', '/kundservice/fragor/', 'shared-support-faq', 2),
@@ -302,6 +318,7 @@ const meta = {
302
318
  market: { control: 'text' },
303
319
  language: { control: 'text' },
304
320
  initialActiveMenuMode: { control: 'number' },
321
+ forceThemeAndToggle: { control: 'number' },
305
322
  environment: {
306
323
  control: 'select',
307
324
  options: ['production', 'preproduction', 'integration', 'localhost'],
@@ -419,6 +436,7 @@ function createHeaderElement(args) {
419
436
  const header = document.createElement('pn-marketweb-header');
420
437
  header.market = args.market;
421
438
  header.initialActiveMenuMode = args.initialActiveMenuMode;
439
+ header.forceThemeAndToggle = args.forceThemeAndToggle;
422
440
  header.menuThemes = args.menuThemes;
423
441
  header.language = args.language;
424
442
  header.environment = args.environment;
@@ -488,6 +506,7 @@ const DEFAULT_ARGS = {
488
506
  language: 'sv',
489
507
  environment: 'localhost',
490
508
  initialActiveMenuMode: 0,
509
+ forceThemeAndToggle: -1,
491
510
  endpoint: 'https://storybook.local',
492
511
  pageId: '9',
493
512
  siteid: '',
@@ -567,6 +586,28 @@ export const StartOnSecondMode = {
567
586
  mockedResponse: DEFAULT_MOCKED_RESPONSE,
568
587
  },
569
588
  };
589
+ /**
590
+ * Same baseline structure, but force the first mode and its theme.
591
+ */
592
+ export const ForceFirstModeAndTheme = {
593
+ render: args => renderHeaderStory(args),
594
+ args: {
595
+ ...DEFAULT_ARGS,
596
+ forceThemeAndToggle: 0,
597
+ mockedResponse: DEFAULT_MOCKED_RESPONSE,
598
+ },
599
+ };
600
+ /**
601
+ * Same baseline structure, but force the second mode and its theme.
602
+ */
603
+ export const ForceSecondModeAndTheme = {
604
+ render: args => renderHeaderStory(args),
605
+ args: {
606
+ ...DEFAULT_ARGS,
607
+ forceThemeAndToggle: 1,
608
+ mockedResponse: DEFAULT_MOCKED_RESPONSE,
609
+ },
610
+ };
570
611
  /**
571
612
  * Same baseline structure, but allow real navigation hrefs on mode change.
572
613
  * Mostly useful for checking rendered links rather than interacting in Storybook.