weg-shared-layout 0.0.40 → 0.0.42

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 (37) hide show
  1. package/LICENSE +21 -21
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/weg-footer_2.cjs.entry.js +449 -32
  4. package/dist/cjs/weg-shared-layout.cjs.js +1 -1
  5. package/dist/collection/components/weg-footer/icons/instagram.svg +5 -5
  6. package/dist/collection/components/weg-footer/icons/linkedin.svg +3 -3
  7. package/dist/collection/components/weg-footer/icons/tiktok.svg +3 -3
  8. package/dist/collection/components/weg-footer/icons/youtube.svg +4 -4
  9. package/dist/collection/components/weg-footer/weg-footer.css +263 -263
  10. package/dist/collection/components/weg-footer/weg-footer.js +2 -2
  11. package/dist/collection/components/weg-header/weg-header.css +533 -483
  12. package/dist/collection/components/weg-header/weg-header.js +348 -32
  13. package/dist/collection/styles/shared.css +104 -103
  14. package/dist/collection/utils/nav-active.js +121 -0
  15. package/dist/components/weg-footer.js +1 -1
  16. package/dist/components/weg-header.js +1 -1
  17. package/dist/esm/loader.js +1 -1
  18. package/dist/esm/weg-footer_2.entry.js +449 -32
  19. package/dist/esm/weg-shared-layout.js +1 -1
  20. package/dist/types/components/weg-header/weg-header.d.ts +37 -0
  21. package/dist/types/components.d.ts +9 -0
  22. package/dist/types/utils/nav-active.d.ts +20 -0
  23. package/dist/weg-shared-layout/p-877ccc54.entry.js +1 -0
  24. package/dist/weg-shared-layout/weg-shared-layout.esm.js +1 -1
  25. package/docs/README.md +51 -49
  26. package/docs/angular.md +451 -400
  27. package/docs/nextjs.md +312 -302
  28. package/docs/publishing.md +65 -65
  29. package/docs/react.md +287 -257
  30. package/docs/vanilla.md +155 -124
  31. package/package.json +81 -81
  32. package/readme.md +108 -97
  33. package/src/constants/breakpoints.ts +7 -7
  34. package/src/styles/container.css +60 -60
  35. package/dist/weg-shared-layout/p-6f83b24a.entry.js +0 -1
  36. /package/dist/types/Users/{tan/Documents/code → rakin/Documents/WEG/repos}/weg-shared-layout/.stencil/test-utils/axe.d.ts +0 -0
  37. /package/dist/types/Users/{tan/Documents/code → rakin/Documents/WEG/repos}/weg-shared-layout/.stencil/test-utils/viewport.d.ts +0 -0
@@ -95,7 +95,7 @@ function normalizeMenu(input) {
95
95
  return result;
96
96
  }
97
97
 
98
- const sharedCss$1 = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}:root,:host{--weg-container-breakpoint-sm:40rem;--weg-container-breakpoint-md:48rem;--weg-container-breakpoint-lg:64rem;--weg-container-breakpoint-xl:80rem;--weg-container-breakpoint-2xl:86rem;--weg-container-max-vw:95vw;--weg-container-padding-inline:1rem}@media (width >= 48rem){:root,:host{--weg-container-padding-inline:2rem}}.container{width:100%;max-width:var(--weg-container-max-vw);margin-inline:auto;padding-inline:var(--weg-container-padding-inline)}@media (width >= 40rem){.container{max-width:min(var(--weg-container-breakpoint-sm), var(--weg-container-max-vw))}}@media (width >= 48rem){.container{max-width:min(var(--weg-container-breakpoint-md), var(--weg-container-max-vw))}}@media (width >= 64rem){.container{max-width:min(var(--weg-container-breakpoint-lg), var(--weg-container-max-vw))}}@media (width >= 80rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}@media (width >= 86rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}*,*::before,*::after{box-sizing:border-box}:host{display:block;--weg-font-family:ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji';--weg-color-accent:#948eeb}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}`;
98
+ const sharedCss$1 = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}:root,:host{--weg-container-breakpoint-sm:40rem;--weg-container-breakpoint-md:48rem;--weg-container-breakpoint-lg:64rem;--weg-container-breakpoint-xl:80rem;--weg-container-breakpoint-2xl:86rem;--weg-container-max-vw:95vw;--weg-container-padding-inline:1rem}@media (width >= 48rem){:root,:host{--weg-container-padding-inline:2rem}}.container{width:100%;max-width:var(--weg-container-max-vw);margin-inline:auto;padding-inline:var(--weg-container-padding-inline)}@media (width >= 40rem){.container{max-width:min(var(--weg-container-breakpoint-sm), var(--weg-container-max-vw))}}@media (width >= 48rem){.container{max-width:min(var(--weg-container-breakpoint-md), var(--weg-container-max-vw))}}@media (width >= 64rem){.container{max-width:min(var(--weg-container-breakpoint-lg), var(--weg-container-max-vw))}}@media (width >= 80rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}@media (width >= 86rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}*,*::before,*::after{box-sizing:border-box}:host{display:block;--weg-font-family:ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji';--weg-color-accent:#948eeb;--weg-purple-200:#cdcff8}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}`;
99
99
 
100
100
  const wegFooterCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}.footer{background:#030712;color:#ffffff;font-family:var(--weg-font-family);font-weight:300}.footer__inner{display:flex;flex-direction:column;align-items:center;gap:1.25rem;padding-block:2rem;padding-inline:0}@media (width >= 960px){.footer__inner{gap:2.25rem;padding-block:3.5rem}}.social{display:flex;align-items:center;justify-content:center;gap:1rem;flex-wrap:wrap}@media (width >= 960px){.social{gap:1.75rem}}.social__link{width:3rem;height:3rem;display:inline-flex;align-items:center;justify-content:center;border-radius:999rem;background:transparent;color:inherit;text-decoration:none;transition:opacity 150ms ease;outline:none}.social__link:hover{opacity:0.9}.social__link:focus-visible{outline:2px solid rgba(255, 255, 255, 0.9);outline-offset:4px}.social__icon{display:inline-flex;width:3rem;height:3rem}.footer-link{color:#ffffff;font-family:'Open Sans', var(--weg-font-family);font-size:1rem;font-style:normal;font-weight:300;line-height:1.5rem;display:block;width:100%;text-align:center;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;outline:none}@media (width >= 960px){.footer-link{display:inline;width:auto;text-align:left}}.footer-link:hover{opacity:0.9}.footer-link:focus-visible{outline:2px solid rgba(255, 255, 255, 0.9);outline-offset:4px}.legal{width:100%;max-width:860px;text-align:center;font-size:1rem;line-height:1.5rem}@media (width >= 960px){.legal{font-size:1.125rem;line-height:1.75rem}}.legal__p{margin:0}.standard{width:100%;display:flex;flex-direction:column;align-items:center;gap:2.25rem;text-align:center;font-size:1rem;line-height:1.5rem}@media (width >= 960px){.standard{font-size:1.125rem;line-height:1.75rem}}.columns{width:100%;display:grid;grid-template-columns:1fr;gap:0}.columns__col{display:flex;flex-direction:column;align-items:stretch;width:100%;min-width:0}.columns__col:not(:first-child){gap:2rem}.columns__divider{display:block;flex-shrink:0;width:100%;height:1px;margin-top:2rem;background:rgba(255, 255, 255, 0.35)}.columns__links{display:flex;flex-direction:column;align-items:stretch;gap:0.75rem;width:100%;min-width:0;text-align:center}@media (width >= 640px){.columns{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5rem 3rem}.columns__col:not(:first-child){gap:0}.columns__col:nth-child(-n+3):not(:first-child) .columns__divider{display:none}.columns__col:nth-child(n+4) .columns__divider{display:block;width:100%;height:1px;margin:0 0 1.5rem}.footer-link{display:inline;width:auto;text-align:left}.columns__links{align-items:flex-start;text-align:left}}@media (width >= 960px){.columns{display:flex;flex-direction:row;align-items:stretch;justify-content:center;gap:0}.columns__col{flex:1 1 0;flex-direction:row;align-items:stretch}.columns__col:not(:first-child){gap:0}.columns__col:nth-child(-n+3):not(:first-child) .columns__divider,.columns__col:nth-child(n+4) .columns__divider{display:block;width:1px;height:auto;margin:0 1.5rem}.columns__links{flex:1;align-items:flex-start;text-align:left}}`;
101
101
 
@@ -231,7 +231,7 @@ const WegFooter = class {
231
231
  return (h("div", { class: "columns" }, menu.map((links, columnIndex) => (h("div", { class: "columns__col", key: columnIndex }, columnIndex > 0 ? h("div", { class: "columns__divider", "aria-hidden": "true" }) : null, h("nav", { class: "columns__links", "aria-label": `Footer links column ${columnIndex + 1}` }, links.map((l, linkIndex) => (h("a", { class: "footer-link", href: l.href, key: linkIndex, target: linkTarget(l), rel: linkRel(l) }, l.label)))))))));
232
232
  }
233
233
  render() {
234
- return (h("footer", { key: '9cee16848dc91bb3a035c51168d02786626cb717', class: "footer" }, h("div", { key: '7e5b929cb2ffb5f04b96f34154a0b8320fa6c0c2', class: "container footer__inner" }, this.renderSocialLinks(), h("div", { key: '110bebc44f94fd4241675e00a9fb444e933d3311', class: "standard" }, this.renderMenu(), this.renderLegalText()))));
234
+ return (h("footer", { key: '44ce6d694eb145005f006b5a02ec68fe2da8ca44', class: "footer" }, h("div", { key: '43dbb00e195a561a44cd9ae0e843c448dce546bb', class: "container footer__inner" }, this.renderSocialLinks(), h("div", { key: '1ede37520397d4fa63671dccc7e3f83f26ac0955', class: "standard" }, this.renderMenu(), this.renderLegalText()))));
235
235
  }
236
236
  static get watchers() { return {
237
237
  "layout": [{
@@ -248,18 +248,146 @@ const WEG_MD_MEDIA_QUERY = '(width >= 960px)';
248
248
  /** Primary input can hover (excludes most touch-only profiles). */
249
249
  const WEG_HOVER_CAPABLE_MEDIA_QUERY = '(hover: hover)';
250
250
 
251
+ function normalizeNavPath(path) {
252
+ if (!path?.trim())
253
+ return '/';
254
+ let value = path.trim().toLowerCase().split('#')[0];
255
+ if (value.startsWith('http://') || value.startsWith('https://')) {
256
+ try {
257
+ value = new URL(value).pathname;
258
+ }
259
+ catch {
260
+ return '/';
261
+ }
262
+ }
263
+ if (!value.startsWith('/')) {
264
+ value = `/${value}`;
265
+ }
266
+ if (value.length > 1 && value.endsWith('/')) {
267
+ value = value.slice(0, -1);
268
+ }
269
+ return value || '/';
270
+ }
271
+ function parseCurrentLocation(currentPath) {
272
+ const trimmed = currentPath.trim();
273
+ const queryIndex = trimmed.indexOf('?');
274
+ const pathPart = queryIndex === -1 ? trimmed : trimmed.slice(0, queryIndex);
275
+ const queryPart = queryIndex === -1 ? '' : trimmed.slice(queryIndex + 1).split('#')[0];
276
+ return {
277
+ pathname: normalizeNavPath(pathPart),
278
+ search: queryPart ? `?${queryPart.toLowerCase()}` : '',
279
+ };
280
+ }
281
+ function parseNavHref(href) {
282
+ const trimmed = href.trim();
283
+ if (!trimmed || trimmed === '#')
284
+ return null;
285
+ try {
286
+ const url = trimmed.startsWith('http://') || trimmed.startsWith('https://')
287
+ ? new URL(trimmed)
288
+ : new URL(trimmed, 'http://local');
289
+ return {
290
+ pathname: normalizeNavPath(url.pathname),
291
+ search: url.search.toLowerCase(),
292
+ };
293
+ }
294
+ catch {
295
+ return null;
296
+ }
297
+ }
298
+ function isNavLinkActive(currentPath, href, mode = 'prefix') {
299
+ if (!currentPath?.trim() || !href?.trim())
300
+ return false;
301
+ const parsedHref = parseNavHref(href);
302
+ if (!parsedHref)
303
+ return false;
304
+ const current = parseCurrentLocation(currentPath);
305
+ if (parsedHref.search) {
306
+ return current.pathname === parsedHref.pathname && current.search === parsedHref.search;
307
+ }
308
+ if (parsedHref.pathname === '/' || mode === 'exact') {
309
+ return current.pathname === parsedHref.pathname;
310
+ }
311
+ if (current.pathname === parsedHref.pathname)
312
+ return true;
313
+ return current.pathname.startsWith(`${parsedHref.pathname}/`);
314
+ }
315
+ function getNavLinkMatchScore(currentPath, href, mode = 'prefix') {
316
+ if (!isNavLinkActive(currentPath, href, mode))
317
+ return 0;
318
+ const parsedHref = parseNavHref(href);
319
+ if (!parsedHref)
320
+ return 0;
321
+ let score = parsedHref.pathname.length;
322
+ if (parsedHref.search)
323
+ score += 100;
324
+ if (mode === 'exact')
325
+ score += 50;
326
+ return score;
327
+ }
328
+ function getNavHrefKey(href) {
329
+ if (!href?.trim())
330
+ return null;
331
+ const parsed = parseNavHref(href);
332
+ if (!parsed)
333
+ return null;
334
+ return `${parsed.pathname}${parsed.search}`;
335
+ }
336
+ function resolveAriaCurrentNavKey(menu, currentPath, shouldExclude) {
337
+ const trimmedPath = currentPath.trim();
338
+ if (!trimmedPath)
339
+ return null;
340
+ let bestKey = null;
341
+ let bestScore = 0;
342
+ for (const item of menu) {
343
+ if (item.items?.length) {
344
+ for (const child of item.items) {
345
+ if (!child.href || shouldExclude?.(child))
346
+ continue;
347
+ const score = getNavLinkMatchScore(trimmedPath, child.href, 'exact');
348
+ const key = getNavHrefKey(child.href);
349
+ if (key && score > bestScore) {
350
+ bestScore = score;
351
+ bestKey = key;
352
+ }
353
+ }
354
+ continue;
355
+ }
356
+ if (!item.href || shouldExclude?.(item))
357
+ continue;
358
+ const score = getNavLinkMatchScore(trimmedPath, item.href, 'prefix');
359
+ const key = getNavHrefKey(item.href);
360
+ if (key && score > bestScore) {
361
+ bestScore = score;
362
+ bestKey = key;
363
+ }
364
+ }
365
+ return bestKey;
366
+ }
367
+ function isAriaCurrentNavHref(href, ariaCurrentKey) {
368
+ if (!ariaCurrentKey)
369
+ return false;
370
+ return getNavHrefKey(href) === ariaCurrentKey;
371
+ }
372
+
251
373
  /** WEG logo — inlined from logo.svg (not configurable). */
252
374
  const LOGO_SRC = "data:image/png;base64,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";
253
375
 
254
- const sharedCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}:root,:host{--weg-container-breakpoint-sm:40rem;--weg-container-breakpoint-md:48rem;--weg-container-breakpoint-lg:64rem;--weg-container-breakpoint-xl:80rem;--weg-container-breakpoint-2xl:86rem;--weg-container-max-vw:95vw;--weg-container-padding-inline:1rem}@media (width >= 48rem){:root,:host{--weg-container-padding-inline:2rem}}.container{width:100%;max-width:var(--weg-container-max-vw);margin-inline:auto;padding-inline:var(--weg-container-padding-inline)}@media (width >= 40rem){.container{max-width:min(var(--weg-container-breakpoint-sm), var(--weg-container-max-vw))}}@media (width >= 48rem){.container{max-width:min(var(--weg-container-breakpoint-md), var(--weg-container-max-vw))}}@media (width >= 64rem){.container{max-width:min(var(--weg-container-breakpoint-lg), var(--weg-container-max-vw))}}@media (width >= 80rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}@media (width >= 86rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}*,*::before,*::after{box-sizing:border-box}:host{display:block;--weg-font-family:ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji';--weg-color-accent:#948eeb}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}`;
376
+ const sharedCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}:root,:host{--weg-container-breakpoint-sm:40rem;--weg-container-breakpoint-md:48rem;--weg-container-breakpoint-lg:64rem;--weg-container-breakpoint-xl:80rem;--weg-container-breakpoint-2xl:86rem;--weg-container-max-vw:95vw;--weg-container-padding-inline:1rem}@media (width >= 48rem){:root,:host{--weg-container-padding-inline:2rem}}.container{width:100%;max-width:var(--weg-container-max-vw);margin-inline:auto;padding-inline:var(--weg-container-padding-inline)}@media (width >= 40rem){.container{max-width:min(var(--weg-container-breakpoint-sm), var(--weg-container-max-vw))}}@media (width >= 48rem){.container{max-width:min(var(--weg-container-breakpoint-md), var(--weg-container-max-vw))}}@media (width >= 64rem){.container{max-width:min(var(--weg-container-breakpoint-lg), var(--weg-container-max-vw))}}@media (width >= 80rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}@media (width >= 86rem){.container{max-width:min(var(--weg-container-breakpoint-xl), var(--weg-container-max-vw))}}*,*::before,*::after{box-sizing:border-box}:host{display:block;--weg-font-family:ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji';--weg-color-accent:#948eeb;--weg-purple-200:#cdcff8}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}`;
255
377
 
256
- const wegHeaderCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}.header{width:100%;border-bottom:2px solid var(--weg-color-accent);background:#ffffff;color:#0f172a;font-family:var(--weg-font-family)}@media (width >= 960px){.header{border-bottom-width:0.25rem}}:host{position:relative;z-index:20}.header--menu-open{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;overflow:hidden}.header--menu-open .header-inner{flex:1 1 auto;flex-wrap:wrap;align-content:flex-start;min-height:0}.header--menu-open .main-nav-panel{display:block;flex:1 1 100%;width:100%;min-height:0;overflow-y:auto;border-top:1px solid #d8d4f7}@media (width >= 960px){.header--menu-open{position:static;inset:auto;z-index:auto;display:block;overflow:visible}.header--menu-open .header-inner{flex:unset;flex-wrap:nowrap;align-content:unset;min-height:unset}}.logo-link{display:inline-flex;align-items:center;text-decoration:none;outline:none}.logo-link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:4px;border-radius:4px}.logo{height:2.5rem;width:auto}@media (width >= 960px){.logo{height:3rem}}@media (width >= 1280px){.logo{height:5rem}}.header-inner{display:flex;width:100%;min-width:0;align-items:center;justify-content:space-between;gap:0.75rem;padding-block:0.75rem;padding-inline:var(--weg-container-padding-inline)}@media (width >= 960px){.header-inner{flex-wrap:nowrap;gap:1.5rem;padding-block:1.25rem}}@media (width >= 1440px){.header-inner{padding-block:1.75rem}}.header-inner .logo-link{flex:1 1 auto;min-width:0;justify-content:center}@media (width >= 960px){.header-inner .logo-link{flex:0 0 auto;justify-content:flex-start}}.header-inner .logo{max-width:100%}.header-actions{display:flex;align-items:center;flex-shrink:0}@media (width >= 960px){.header-actions{display:none}}.main-nav-panel{display:none;margin-inline:-0.5rem}@media (width >= 960px){.main-nav-panel{display:flex;flex:1 1 auto;width:auto;min-width:0;justify-content:flex-end;overflow:visible;border-top:none}}.main-nav{padding:0 1rem 1.5rem}@media (width >= 960px){.main-nav{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:1rem;padding:0}}.main-nav__list{list-style:none;margin:0;padding:0}@media (width >= 960px){.main-nav__list{display:flex;align-items:center;flex-wrap:wrap;gap:0.5rem}}@media (width >= 1280px){.main-nav__list{gap:1.5rem}}.main-nav__item{border-bottom:1px solid #d8d4f7}@media (width >= 960px){.main-nav__item{border-bottom:none}}.main-nav__item--dropdown{position:static}.nav-dropdown{position:relative}.nav-link{display:block;width:100%;padding:1rem 0;font-weight:600;color:inherit;text-decoration:none;outline:none}.nav-link:hover{opacity:0.85}.nav-link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.nav-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:0.75rem;width:100%;padding:1rem 0;border:none;background:transparent;font:inherit;font-weight:600;color:inherit;text-align:left;cursor:pointer;outline:none}.nav-dropdown__trigger:hover{opacity:0.85}.nav-dropdown__trigger:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.nav-dropdown__trigger--open{background:transparent}.toggle-icon{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:999rem;background:#312e81;color:#ffffff;flex-shrink:0}.nav-dropdown__panel{padding:0 0 0.75rem}@media (width >= 960px){.nav-dropdown__panel{position:absolute;top:calc(100% + 0.5rem);left:0;z-index:500;min-width:17.5rem;padding:0.75rem 0 0.75rem 0.75rem;border:1px solid #e2e8f0;border-radius:0.5rem;background:#f8fafc;box-shadow:0 0.25rem 1rem rgba(15, 23, 42, 0.08)}.nav-dropdown__panel::before{content:'';position:absolute;top:-0.5rem;left:0;right:0;height:0.5rem}}.nav-dropdown__accent{border-left:0.25rem solid var(--weg-color-accent);padding-left:0.75rem}.nav-dropdown__links{display:flex;flex-direction:column;gap:0.25rem}.nav-dropdown__link{display:block;padding:0.625rem 0;font-weight:400;color:inherit;text-decoration:none;outline:none}.nav-dropdown__link:hover{opacity:0.85}.nav-dropdown__link:focus-visible{outline:0.125rem solid var(--weg-color-accent);outline-offset:0.125rem;border-radius:0.25rem}@media (width >= 960px){.nav-dropdown__link{padding:0.5rem;margin-right:0.75rem;border-radius:0.5rem;font-weight:600}.nav-dropdown__link:hover,.nav-dropdown__link:focus-visible{background:#cdcff8;opacity:1}}@media (width >= 1280px){.nav-dropdown__link{padding:0.5rem 0.75rem}}.main-nav__item--auth>a{display:flex;align-items:center;gap:0.5rem;width:100%;padding:1rem 0}@media (width >= 960px){.nav-link,.nav-dropdown__trigger,.main-nav__item--auth>a{display:inline-flex;align-items:center;width:auto;padding:0.5rem;border-radius:0.5rem}.nav-dropdown__trigger{gap:0.5rem;cursor:pointer}.nav-dropdown__trigger--open{background:#f1f5f9}}@media (width >= 1280px){.main-nav{font-size:1.25rem}.main-nav__item--auth>a{padding:0.5rem 0.75rem}}.sign-in-link,.sign-out-link,.auth-button{display:inline-flex;align-items:center;gap:0.5rem;font-weight:600;color:inherit;text-decoration:none;outline:none}.auth-button{padding:0;border:none;background:transparent;font:inherit;cursor:pointer}.sign-in-link:hover,.sign-out-link:hover,.auth-button:hover{opacity:0.85}.sign-in-link:focus-visible,.sign-out-link:focus-visible,.auth-button:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:4px;border-radius:4px}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;padding:0;border:none;border-radius:0.5rem;background:transparent;color:inherit;cursor:pointer;text-decoration:none;outline:none}.icon-button:hover{background:#f1f5f9}.icon-button:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px}.menu-toggle{flex-shrink:0}@media (width >= 960px){.menu-toggle{display:none}}`;
378
+ const wegHeaderCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}.header{width:100%;border-bottom:2px solid var(--weg-color-accent);background:#ffffff;color:#0f172a;font-family:var(--weg-font-family)}@media (width >= 960px){.header{border-bottom-width:0.25rem}}:host{position:relative;z-index:20;display:block;height:var(--weg-header-height, auto)}.header--fixed{position:fixed;top:0;left:0;right:0;z-index:20;transform:translateY(0);transition:transform 0.25s ease}.header--fixed.header--hidden{transform:translateY(-100%)}@media (prefers-reduced-motion: reduce){.header--fixed{transition:none}}.header--menu-open{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;overflow:hidden}.header--menu-open .header-inner{flex:1 1 auto;flex-wrap:wrap;align-content:flex-start;min-height:0}.header--menu-open .main-nav-panel{display:block;flex:1 1 100%;width:100%;min-height:0;overflow-y:auto;border-top:1px solid #d8d4f7}@media (width >= 960px){.header--menu-open{position:static;inset:auto;z-index:auto;display:block;overflow:visible}.header--menu-open .header-inner{flex:unset;flex-wrap:nowrap;align-content:unset;min-height:unset}}.logo-link{display:inline-flex;align-items:center;text-decoration:none;outline:none}.logo-link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:4px;border-radius:4px}.logo{height:2.5rem;width:auto}@media (width >= 960px){.logo{height:3rem}}@media (width >= 1280px){.logo{height:5rem}}.header-inner{display:flex;width:100%;min-width:0;align-items:center;justify-content:space-between;gap:0.75rem;padding-block:0.75rem;padding-inline:var(--weg-container-padding-inline)}@media (width >= 960px){.header-inner{flex-wrap:nowrap;gap:1.5rem;padding-block:1.25rem}}@media (width >= 1440px){.header-inner{padding-block:1.75rem}}.header-inner .logo-link{flex:1 1 auto;min-width:0;justify-content:center}@media (width >= 960px){.header-inner .logo-link{flex:0 0 auto;justify-content:flex-start}}.header-inner .logo{max-width:100%}.header-actions{display:flex;align-items:center;flex-shrink:0}@media (width >= 960px){.header-actions{display:none}}.main-nav-panel{display:none;margin-inline:-0.5rem}@media (width >= 960px){.main-nav-panel{display:flex;flex:1 1 auto;width:auto;min-width:0;justify-content:flex-end;overflow:visible;border-top:none}}.main-nav{padding:0 1rem 1.5rem}@media (width >= 960px){.main-nav{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:1rem;padding:0}}.main-nav__list{list-style:none;margin:0;padding:0}@media (width >= 960px){.main-nav__list{display:flex;align-items:center;flex-wrap:wrap;gap:0.5rem}}@media (width >= 1280px){.main-nav__list{gap:1.5rem}}.main-nav__item{border-bottom:1px solid #d8d4f7}@media (width >= 960px){.main-nav__item{border-bottom:none}}.main-nav__item--dropdown{position:static}.nav-dropdown{position:relative}.nav-link{display:block;width:100%;padding:1rem 0;font-weight:600;color:inherit;text-decoration:none;outline:none}.nav-link:hover{opacity:0.85}.nav-link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.nav-link--active{background:var(--weg-purple-200)}.nav-dropdown__trigger{display:flex;align-items:center;justify-content:space-between;gap:0.75rem;width:100%;padding:1rem 0;border:none;background:transparent;font:inherit;font-weight:600;color:inherit;text-align:left;cursor:pointer;outline:none}.nav-dropdown__trigger:hover{opacity:0.85}.nav-dropdown__trigger:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.nav-dropdown__trigger--open{background:transparent}.nav-dropdown__trigger--active{background:var(--weg-purple-200)}.toggle-icon{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:999rem;background:#312e81;color:#ffffff;flex-shrink:0}.nav-dropdown__panel{padding:0 0 0.75rem}@media (width >= 960px){.nav-dropdown__panel{position:absolute;top:calc(100% + 0.5rem);left:0;z-index:500;min-width:17.5rem;padding:0.75rem 0 0.75rem 0.75rem;border:1px solid #e2e8f0;border-radius:0.5rem;background:#f8fafc;box-shadow:0 0.25rem 1rem rgba(15, 23, 42, 0.08)}.nav-dropdown__panel::before{content:'';position:absolute;top:-0.5rem;left:0;right:0;height:0.5rem}}.nav-dropdown__accent{border-left:0.25rem solid var(--weg-color-accent);padding-left:0.75rem}.nav-dropdown__links{display:flex;flex-direction:column;gap:0.25rem;list-style:none;margin:0;padding:0}.nav-dropdown__link{display:block;padding:0.625rem 0;font-weight:400;color:inherit;text-decoration:none;outline:none}.nav-dropdown__link:hover{opacity:0.85}.nav-dropdown__link:focus-visible{outline:0.125rem solid var(--weg-color-accent);outline-offset:0.125rem;border-radius:0.25rem}.nav-dropdown__link--active{background:var(--weg-purple-200)}@media (width >= 960px){.nav-dropdown__link{padding:0.5rem;margin-right:0.75rem;border-radius:0.5rem;font-weight:600}.nav-dropdown__link:hover,.nav-dropdown__link:focus-visible{background:var(--weg-purple-200);opacity:1}.nav-dropdown__link--active{opacity:1}}@media (width >= 1280px){.nav-dropdown__link{padding:0.5rem 0.75rem}}.main-nav__item--auth>a{display:flex;align-items:center;gap:0.5rem;width:100%;padding:1rem 0}@media (width >= 960px){.nav-link,.nav-dropdown__trigger,.main-nav__item--auth>a{display:inline-flex;align-items:center;width:auto;padding:0.5rem;border-radius:0.5rem}.nav-link--active,.main-nav__item--auth>a.nav-link--active{background:var(--weg-purple-200)}.nav-dropdown__trigger{gap:0.5rem;cursor:pointer}.nav-dropdown__trigger--open{background:#f1f5f9}.nav-dropdown__trigger--active{background:var(--weg-purple-200)}}@media (width >= 1280px){.main-nav{font-size:1.25rem}.main-nav__item--auth>a{padding:0.5rem 0.75rem}}.sign-in-link,.sign-out-link,.auth-button{display:inline-flex;align-items:center;gap:0.5rem;font-weight:600;color:inherit;text-decoration:none;outline:none}.auth-button{padding:0;border:none;background:transparent;font:inherit;cursor:pointer}.sign-in-link:hover,.sign-out-link:hover,.auth-button:hover{opacity:0.85}.sign-in-link:focus-visible,.sign-out-link:focus-visible,.auth-button:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:4px;border-radius:4px}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;padding:0;border:none;border-radius:0.5rem;background:transparent;color:inherit;cursor:pointer;text-decoration:none;outline:none}.icon-button:hover{background:#f1f5f9}.icon-button:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px}.menu-toggle{flex-shrink:0}@media (width >= 960px){.menu-toggle{display:none}}`;
257
379
 
258
380
  const WEG_HOME = 'https://www.warwickemploymentgroup.com';
259
381
  const DEFAULT_ACCOUNT_HOME = 'https://account.warwickemploymentgroup.com';
382
+ /** Stay visible while scrolling down through the first half of the viewport. */
383
+ const HEADER_SCROLL_HIDE_THRESHOLD_VH = 0.5;
384
+ const HEADER_SCROLL_DIRECTION_DELTA = 5;
260
385
  const DEFAULT_LOGO_HREF = `${WEG_HOME}/`;
261
386
  /** Placeholder href — sign-out is handled via `wegAuthClick`, not navigation. */
262
387
  const SIGN_OUT_HREF = '#';
388
+ const MAIN_NAV_LABEL = 'Main navigation';
389
+ const OPEN_MAIN_NAV_LABEL = 'Open main navigation';
390
+ const CLOSE_MAIN_NAV_LABEL = 'Close main navigation';
263
391
  function normalizeAccountBase(input) {
264
392
  const base = input?.trim() || DEFAULT_ACCOUNT_HOME;
265
393
  return base.replace(/\/$/, '');
@@ -344,7 +472,7 @@ function ToggleIcon({ expanded }) {
344
472
  return (h("span", { class: "toggle-icon", "aria-hidden": "true" }, expanded ? (h("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none" }, h("path", { d: "M6 12h12", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round" }))) : (h("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none" }, h("path", { d: "M12 6v12M6 12h12", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round" })))));
345
473
  }
346
474
  function Logo({ href, src }) {
347
- return (h("a", { class: "logo-link", href: href, "aria-label": "Home" }, h("img", { class: "logo", src: src, alt: "WEG", width: "225", height: "83" })));
475
+ return (h("a", { class: "logo-link", href: href, "aria-label": "Home" }, h("img", { class: "logo", src: src, alt: "Warwick Employment Group logo", width: "225", height: "83" })));
348
476
  }
349
477
  const WegHeader = class {
350
478
  constructor(hostRef) {
@@ -381,6 +509,11 @@ const WegHeader = class {
381
509
  * Defaults to production when omitted.
382
510
  */
383
511
  accountBaseUrl;
512
+ /**
513
+ * Current page path from the host application (e.g. `/career-advice/my-article`).
514
+ * Include a query string when matching dropdown links that use search params.
515
+ */
516
+ currentPath;
384
517
  /**
385
518
  * Fired when the user clicks Sign in or Sign out.
386
519
  * Call `event.preventDefault()` in the host to handle navigation/logout yourself.
@@ -390,9 +523,16 @@ const WegHeader = class {
390
523
  resolved = EMPTY_HEADER;
391
524
  menuOpen = false;
392
525
  openDropdown = null;
526
+ headerHidden = false;
393
527
  boundHandleDocumentClick = this.handleDocumentClick.bind(this);
394
528
  boundHandleViewportChange = this.handleViewportChange.bind(this);
395
529
  boundHandleHoverCapabilityChange = this.handleHoverCapabilityChange.bind(this);
530
+ boundHandleScroll = this.handleScroll.bind(this);
531
+ headerResizeObserver;
532
+ lastScrollY = 0;
533
+ scrollTicking = false;
534
+ bodyScrollLocked = false;
535
+ bodyScrollLockY = 0;
396
536
  hoverCloseTimer = null;
397
537
  hoverOpenEnabled = false;
398
538
  desktopMediaQuery;
@@ -413,15 +553,69 @@ const WegHeader = class {
413
553
  this.updateHoverDropdownEnabled();
414
554
  this.handleViewportChange();
415
555
  }
556
+ componentDidLoad() {
557
+ const header = this.el.shadowRoot?.querySelector('.header');
558
+ if (!header)
559
+ return;
560
+ this.headerResizeObserver = new ResizeObserver(() => this.syncHeaderHeight());
561
+ this.headerResizeObserver.observe(header);
562
+ this.syncHeaderHeight();
563
+ this.lastScrollY = window.scrollY;
564
+ this.updateHeaderVisibility();
565
+ }
416
566
  connectedCallback() {
417
567
  document.addEventListener('click', this.boundHandleDocumentClick);
568
+ window.addEventListener('scroll', this.boundHandleScroll, { passive: true });
418
569
  }
419
570
  disconnectedCallback() {
420
571
  document.removeEventListener('click', this.boundHandleDocumentClick);
572
+ window.removeEventListener('scroll', this.boundHandleScroll);
573
+ this.unlockBodyScroll();
574
+ this.headerResizeObserver?.disconnect();
421
575
  this.desktopMediaQuery?.removeEventListener('change', this.boundHandleViewportChange);
422
576
  this.hoverCapableMediaQuery?.removeEventListener('change', this.boundHandleHoverCapabilityChange);
423
577
  this.cancelScheduledDropdownClose();
424
578
  }
579
+ syncHeaderHeight() {
580
+ if (this.isMobileMenuActive())
581
+ return;
582
+ const header = this.el.shadowRoot?.querySelector('.header');
583
+ if (!header)
584
+ return;
585
+ this.el.style.setProperty('--weg-header-height', `${header.offsetHeight}px`);
586
+ }
587
+ handleScroll() {
588
+ if (this.scrollTicking)
589
+ return;
590
+ this.scrollTicking = true;
591
+ requestAnimationFrame(() => {
592
+ this.scrollTicking = false;
593
+ this.updateHeaderVisibility();
594
+ });
595
+ }
596
+ updateHeaderVisibility() {
597
+ if (this.isMobileMenuActive()) {
598
+ if (this.headerHidden)
599
+ this.headerHidden = false;
600
+ return;
601
+ }
602
+ const scrollY = window.scrollY;
603
+ const delta = scrollY - this.lastScrollY;
604
+ const threshold = window.innerHeight * HEADER_SCROLL_HIDE_THRESHOLD_VH;
605
+ let nextHidden = this.headerHidden;
606
+ if (scrollY <= threshold) {
607
+ nextHidden = false;
608
+ }
609
+ else if (Math.abs(delta) >= HEADER_SCROLL_DIRECTION_DELTA) {
610
+ nextHidden = delta > 0;
611
+ }
612
+ this.lastScrollY = scrollY;
613
+ if (nextHidden === this.headerHidden)
614
+ return;
615
+ if (nextHidden)
616
+ this.closeDropdown();
617
+ this.headerHidden = nextHidden;
618
+ }
425
619
  /**
426
620
  * Desktop dropdowns open on hover when viewport is md+ and the device reports hover support.
427
621
  * Uses (hover: hover) only — not (pointer: fine), which breaks in DevTools and hybrid devices.
@@ -439,10 +633,74 @@ const WegHeader = class {
439
633
  }
440
634
  handleViewportChange() {
441
635
  if (this.desktopMediaQuery?.matches) {
442
- this.closeMenu();
636
+ this.closeMenu({ announce: false, focusToggle: false });
443
637
  }
444
638
  this.updateHoverDropdownEnabled();
445
639
  }
640
+ announceToScreenReader(message) {
641
+ const region = this.el.shadowRoot?.querySelector('[data-weg-sr-live]');
642
+ if (!region)
643
+ return;
644
+ region.textContent = '';
645
+ requestAnimationFrame(() => {
646
+ region.textContent = message;
647
+ });
648
+ }
649
+ getMenuToggleButton() {
650
+ return this.el.shadowRoot?.querySelector('.menu-toggle');
651
+ }
652
+ getFirstNavFocusable() {
653
+ const panel = this.el.shadowRoot?.querySelector('#weg-header-main-nav');
654
+ if (!panel)
655
+ return null;
656
+ const focusables = panel.querySelectorAll('a[href], button:not([disabled])');
657
+ return focusables[0] ?? null;
658
+ }
659
+ focusFirstNavItem() {
660
+ setTimeout(() => {
661
+ const attemptFocus = (retries = 8) => {
662
+ const target = this.getFirstNavFocusable();
663
+ if (target) {
664
+ target.focus();
665
+ return;
666
+ }
667
+ if (retries > 0) {
668
+ requestAnimationFrame(() => attemptFocus(retries - 1));
669
+ }
670
+ };
671
+ attemptFocus();
672
+ }, 0);
673
+ }
674
+ focusMenuToggle() {
675
+ const attemptFocus = (retries = 8) => {
676
+ const toggle = this.getMenuToggleButton();
677
+ if (toggle) {
678
+ toggle.focus();
679
+ return;
680
+ }
681
+ if (retries > 0) {
682
+ requestAnimationFrame(() => attemptFocus(retries - 1));
683
+ }
684
+ };
685
+ attemptFocus();
686
+ }
687
+ getMenuGroupLinkCount(label) {
688
+ const group = this.getActiveMenu().find((item) => isMenuGroup(item) && item.label === label);
689
+ return group?.items?.length ?? 0;
690
+ }
691
+ formatLinkCount(count) {
692
+ return count === 1 ? '1 link' : `${count} links`;
693
+ }
694
+ formatItemCount(count) {
695
+ return count === 1 ? '1 item' : `${count} items`;
696
+ }
697
+ announceSubmenuExpanded(label) {
698
+ const linkCount = this.getMenuGroupLinkCount(label);
699
+ this.announceToScreenReader(`${label} submenu expanded. ${this.formatLinkCount(linkCount)}.`);
700
+ }
701
+ announceSubmenuCollapsed(label) {
702
+ this.announceToScreenReader(`${label} submenu collapsed.`);
703
+ }
446
704
  isMobileMenuActive() {
447
705
  return this.menuOpen && !this.desktopMediaQuery?.matches;
448
706
  }
@@ -452,8 +710,39 @@ const WegHeader = class {
452
710
  handleKeyDown(event) {
453
711
  if (event.key !== 'Escape')
454
712
  return;
455
- this.menuOpen = false;
456
- this.closeDropdown();
713
+ if (this.openDropdown) {
714
+ event.preventDefault();
715
+ this.closeDropdownAndFocusTrigger(this.openDropdown);
716
+ return;
717
+ }
718
+ if (this.menuOpen) {
719
+ event.preventDefault();
720
+ this.closeMenu({ focusToggle: true });
721
+ }
722
+ }
723
+ lockBodyScroll() {
724
+ if (this.bodyScrollLocked)
725
+ return;
726
+ this.bodyScrollLockY = window.scrollY;
727
+ document.body.style.overflow = 'hidden';
728
+ document.body.style.position = 'fixed';
729
+ document.body.style.top = `-${this.bodyScrollLockY}px`;
730
+ document.body.style.left = '0';
731
+ document.body.style.right = '0';
732
+ document.body.style.width = '100%';
733
+ this.bodyScrollLocked = true;
734
+ }
735
+ unlockBodyScroll() {
736
+ if (!this.bodyScrollLocked)
737
+ return;
738
+ document.body.style.overflow = '';
739
+ document.body.style.position = '';
740
+ document.body.style.top = '';
741
+ document.body.style.left = '';
742
+ document.body.style.right = '';
743
+ document.body.style.width = '';
744
+ window.scrollTo(0, this.bodyScrollLockY);
745
+ this.bodyScrollLocked = false;
457
746
  }
458
747
  handleDocumentClick(event) {
459
748
  const target = event.target;
@@ -484,10 +773,12 @@ const WegHeader = class {
484
773
  }
485
774
  toggleDropdown(label) {
486
775
  if (this.openDropdown === label) {
776
+ this.announceSubmenuCollapsed(label);
487
777
  this.closeDropdown();
488
778
  return;
489
779
  }
490
780
  this.openDropdownMenu(label);
781
+ this.announceSubmenuExpanded(label);
491
782
  }
492
783
  getDropdownPanelId(label) {
493
784
  return `weg-header-dropdown-${label.trim().toLowerCase().replace(/\s+/g, '-')}`;
@@ -540,29 +831,111 @@ const WegHeader = class {
540
831
  if (event.key !== 'ArrowDown')
541
832
  return;
542
833
  event.preventDefault();
543
- this.openDropdownMenu(label);
834
+ if (this.openDropdown !== label) {
835
+ this.openDropdownMenu(label);
836
+ this.announceSubmenuExpanded(label);
837
+ }
544
838
  this.focusFirstDropdownLink(itemEl);
545
839
  }
840
+ getDropdownLinks(container) {
841
+ return Array.from(container.querySelectorAll('.nav-dropdown__link'));
842
+ }
843
+ focusDropdownLink(container, index) {
844
+ const attemptFocus = (retries = 8) => {
845
+ const links = this.getDropdownLinks(container);
846
+ if (links[index]) {
847
+ links[index].focus();
848
+ return;
849
+ }
850
+ if (retries > 0) {
851
+ requestAnimationFrame(() => attemptFocus(retries - 1));
852
+ }
853
+ };
854
+ attemptFocus();
855
+ }
546
856
  focusFirstDropdownLink(itemEl) {
547
- setTimeout(() => {
548
- const firstLink = itemEl.querySelector('.nav-dropdown__link');
549
- firstLink?.focus();
550
- }, 0);
857
+ this.focusDropdownLink(itemEl, 0);
858
+ }
859
+ getDropdownContainer(label) {
860
+ const panelId = this.getDropdownPanelId(label);
861
+ return this.el.shadowRoot?.querySelector(`#${panelId}-trigger`)?.closest('.nav-dropdown') ?? null;
862
+ }
863
+ closeDropdownAndFocusTrigger(labelOrContainer) {
864
+ const container = typeof labelOrContainer === 'string'
865
+ ? this.getDropdownContainer(labelOrContainer)
866
+ : labelOrContainer;
867
+ const trigger = container?.querySelector('.nav-dropdown__trigger');
868
+ const label = typeof labelOrContainer === 'string'
869
+ ? labelOrContainer
870
+ : (trigger?.querySelector('.nav-dropdown__label')?.textContent?.trim() ?? '');
871
+ if (label && this.openDropdown === label) {
872
+ this.announceSubmenuCollapsed(label);
873
+ }
874
+ this.closeDropdown();
875
+ const attemptFocus = (retries = 8) => {
876
+ if (trigger && this.el.shadowRoot?.contains(trigger)) {
877
+ trigger.focus();
878
+ return;
879
+ }
880
+ if (retries > 0) {
881
+ requestAnimationFrame(() => attemptFocus(retries - 1));
882
+ }
883
+ };
884
+ attemptFocus();
885
+ }
886
+ handleDropdownLinkKeyDown(event, container) {
887
+ const links = this.getDropdownLinks(container);
888
+ const currentIndex = links.indexOf(event.currentTarget);
889
+ if (currentIndex === -1)
890
+ return;
891
+ if (event.key === 'ArrowDown') {
892
+ event.preventDefault();
893
+ links[(currentIndex + 1) % links.length]?.focus();
894
+ return;
895
+ }
896
+ if (event.key === 'ArrowUp') {
897
+ event.preventDefault();
898
+ links[(currentIndex - 1 + links.length) % links.length]?.focus();
899
+ return;
900
+ }
901
+ if (event.key === 'Escape') {
902
+ event.preventDefault();
903
+ event.stopPropagation();
904
+ this.closeDropdownAndFocusTrigger(container);
905
+ }
551
906
  }
552
907
  toggleMenu() {
553
908
  if (this.menuOpen) {
554
- this.closeMenu();
909
+ this.closeMenu({ focusToggle: false });
555
910
  return;
556
911
  }
557
912
  this.openMenu();
558
913
  }
559
914
  openMenu() {
560
915
  this.menuOpen = true;
916
+ this.headerHidden = false;
561
917
  this.closeDropdown();
918
+ if (!this.desktopMediaQuery?.matches) {
919
+ this.lockBodyScroll();
920
+ const itemCount = this.getActiveMenu().length;
921
+ this.announceToScreenReader(`${MAIN_NAV_LABEL} opened. ${this.formatItemCount(itemCount)}.`);
922
+ this.focusFirstNavItem();
923
+ }
562
924
  }
563
- closeMenu() {
925
+ closeMenu(options = {}) {
926
+ const { announce = true, focusToggle = false } = options;
927
+ const wasMobileActive = this.isMobileMenuActive();
564
928
  this.menuOpen = false;
565
929
  this.closeDropdown();
930
+ this.unlockBodyScroll();
931
+ this.syncHeaderHeight();
932
+ this.updateHeaderVisibility();
933
+ if (announce && wasMobileActive) {
934
+ this.announceToScreenReader(`${MAIN_NAV_LABEL} closed.`);
935
+ }
936
+ if (focusToggle) {
937
+ this.focusMenuToggle();
938
+ }
566
939
  }
567
940
  getAccountHome() {
568
941
  return normalizeAccountBase(this.accountBaseUrl);
@@ -591,23 +964,60 @@ const WegHeader = class {
591
964
  const name = this.userName?.trim();
592
965
  return name || 'Manage Account';
593
966
  }
594
- renderIconNavLink(link, Icon, className, onNavigate) {
595
- return (h("li", { class: "main-nav__item main-nav__item--auth", key: link.label }, h("a", { class: { 'sign-in-link': true, [className]: true }, href: link.href, onClick: () => onNavigate?.() }, h(Icon, null), link.label)));
967
+ shouldExcludeFromNavActive(item, accountHome) {
968
+ return isSignOutLink(item) || isSignInLink(item, accountHome);
969
+ }
970
+ isNavItemActive(href, mode) {
971
+ return isNavLinkActive(this.currentPath ?? '', href, mode);
972
+ }
973
+ resolveAriaCurrentHref() {
974
+ const accountHome = this.getAccountHome();
975
+ return resolveAriaCurrentNavKey(this.getActiveMenu(), this.currentPath ?? '', (item) => this.shouldExcludeFromNavActive(item, accountHome));
976
+ }
977
+ isAriaCurrentHref(href, ariaCurrentKey) {
978
+ return isAriaCurrentNavHref(href, ariaCurrentKey);
979
+ }
980
+ renderIconNavLink(link, Icon, className, onNavigate, ariaCurrentHref = null) {
981
+ const active = this.isNavItemActive(link.href, 'prefix');
982
+ const ariaCurrent = this.isAriaCurrentHref(link.href, ariaCurrentHref);
983
+ return (h("li", { class: "main-nav__item main-nav__item--auth", key: link.label }, h("a", { class: {
984
+ 'sign-in-link': true,
985
+ [className]: true,
986
+ 'nav-link--active': active,
987
+ }, href: link.href, "aria-current": ariaCurrent ? 'page' : undefined, onClick: () => onNavigate?.() }, h(Icon, null), link.label)));
596
988
  }
597
- renderFlatNavLink(link, onNavigate) {
598
- return (h("li", { class: "main-nav__item", key: link.label }, h("a", { class: "nav-link", href: link.href, onClick: () => onNavigate?.() }, link.label)));
989
+ renderFlatNavLink(link, onNavigate, ariaCurrentHref = null) {
990
+ const active = this.isNavItemActive(link.href, 'prefix');
991
+ const ariaCurrent = this.isAriaCurrentHref(link.href, ariaCurrentHref);
992
+ return (h("li", { class: "main-nav__item", key: link.label }, h("a", { class: {
993
+ 'nav-link': true,
994
+ 'nav-link--active': active,
995
+ }, href: link.href, "aria-current": ariaCurrent ? 'page' : undefined, onClick: () => onNavigate?.() }, link.label)));
599
996
  }
600
- renderMenuGroup(item, onNavigate) {
997
+ renderMenuGroup(item, onNavigate, ariaCurrentHref = null) {
601
998
  const items = item.items ?? [];
602
999
  const isOpen = this.openDropdown === item.label;
603
1000
  const panelId = this.getDropdownPanelId(item.label);
1001
+ const groupActive = items.some((child) => this.isNavItemActive(child.href, 'exact'));
604
1002
  return (h("li", { class: "main-nav__item main-nav__item--dropdown", key: item.label }, h("div", { class: "nav-dropdown", onMouseEnter: () => this.handleDropdownPointerEnter(item.label), onMouseLeave: (event) => this.handleDropdownPointerLeave(event), onFocusout: (event) => this.handleDropdownFocusOut(event, item.label) }, h("button", { type: "button", class: {
605
1003
  'nav-dropdown__trigger': true,
606
1004
  'nav-dropdown__trigger--open': isOpen,
1005
+ 'nav-dropdown__trigger--active': groupActive,
607
1006
  }, "aria-expanded": isOpen ? 'true' : 'false', "aria-haspopup": "true", "aria-controls": panelId, id: `${panelId}-trigger`, onClick: (event) => this.handleDropdownTriggerClick(event, item.label), onKeyDown: (event) => {
608
1007
  const container = event.currentTarget.closest('.nav-dropdown');
609
1008
  this.handleDropdownTriggerKeyDown(event, item.label, container);
610
- } }, h("span", { class: "nav-dropdown__label" }, item.label), h(ToggleIcon, { expanded: isOpen })), isOpen ? (h("div", { class: "nav-dropdown__panel", id: panelId, role: "region", "aria-labelledby": `${panelId}-trigger`, onMouseEnter: () => this.handleDropdownPanelPointerEnter(item.label), onMouseLeave: (event) => this.handleDropdownPanelPointerLeave(event) }, h("div", { class: "nav-dropdown__accent" }, h("div", { class: "nav-dropdown__links" }, items.map((child) => (h("a", { class: "nav-dropdown__link", href: child.href, key: `${item.label}:${child.label}`, onClick: () => onNavigate?.() }, child.label))))))) : null)));
1009
+ } }, h("span", { class: "nav-dropdown__label" }, item.label), h(ToggleIcon, { expanded: isOpen })), isOpen ? (h("div", { class: "nav-dropdown__panel", id: panelId, role: "region", "aria-labelledby": `${panelId}-trigger`, onMouseEnter: () => this.handleDropdownPanelPointerEnter(item.label), onMouseLeave: (event) => this.handleDropdownPanelPointerLeave(event) }, h("div", { class: "nav-dropdown__accent" }, h("ul", { class: "nav-dropdown__links" }, items.map((child, index) => {
1010
+ const childActive = this.isNavItemActive(child.href, 'exact');
1011
+ const ariaCurrent = this.isAriaCurrentHref(child.href, ariaCurrentHref);
1012
+ const positionLabel = `${child.label}, link ${index + 1} of ${items.length}`;
1013
+ return (h("li", { key: `${item.label}:${child.label}` }, h("a", { class: {
1014
+ 'nav-dropdown__link': true,
1015
+ 'nav-dropdown__link--active': childActive,
1016
+ }, href: child.href, "aria-label": positionLabel, "aria-current": ariaCurrent ? 'page' : undefined, onClick: () => onNavigate?.(), onKeyDown: (event) => {
1017
+ const dropdownContainer = event.currentTarget.closest('.nav-dropdown');
1018
+ this.handleDropdownLinkKeyDown(event, dropdownContainer);
1019
+ } }, child.label)));
1020
+ }))))) : null)));
611
1021
  }
612
1022
  handleAuthClick(event, action, _href, onNavigate) {
613
1023
  const emitted = this.wegAuthClick.emit({ action });
@@ -633,18 +1043,22 @@ const WegHeader = class {
633
1043
  [options.className || '']: !!options.className,
634
1044
  }, href: link.href, "aria-label": link.label, onClick: (event) => this.handleAuthClick(event, action, link.href, onNavigate) }, h(Icon, null), !iconOnly ? link.label : null, iconOnly ? h("span", { class: "sr-only" }, link.label) : null));
635
1045
  }
636
- renderManageAccountAnchor(onNavigate, iconOnly = false) {
1046
+ renderManageAccountAnchor(onNavigate, iconOnly = false, ariaCurrentHref = null) {
637
1047
  const label = this.getManageAccountLabel();
1048
+ const href = accountPath(this.getAccountHome(), '/account/manage');
1049
+ const active = this.isNavItemActive(href, 'prefix');
1050
+ const ariaCurrent = this.isAriaCurrentHref(href, ariaCurrentHref);
638
1051
  return (h("a", { class: {
639
1052
  'sign-in-link': !iconOnly,
640
1053
  'manage-account-link': true,
641
1054
  'icon-button': iconOnly,
642
- }, href: accountPath(this.getAccountHome(), '/account/manage'), "aria-label": label, onClick: () => onNavigate?.() }, h(SignInIcon, null), !iconOnly ? label : null, iconOnly ? h("span", { class: "sr-only" }, label) : null));
1055
+ 'nav-link--active': active,
1056
+ }, href: href, "aria-label": label, "aria-current": ariaCurrent ? 'page' : undefined, onClick: () => onNavigate?.() }, h(SignInIcon, null), !iconOnly ? label : null, iconOnly ? h("span", { class: "sr-only" }, label) : null));
643
1057
  }
644
- renderNavItem(item, onNavigate) {
1058
+ renderNavItem(item, onNavigate, ariaCurrentHref = null) {
645
1059
  const accountHome = this.getAccountHome();
646
1060
  if (isMenuGroup(item)) {
647
- return this.renderMenuGroup(item, onNavigate);
1061
+ return this.renderMenuGroup(item, onNavigate, ariaCurrentHref);
648
1062
  }
649
1063
  if (isSignOutLink(item)) {
650
1064
  return (h("li", { class: "main-nav__item main-nav__item--auth", key: "sign-out" }, this.renderAuthControl({ link: item, action: 'sign-out', onNavigate })));
@@ -653,18 +1067,19 @@ const WegHeader = class {
653
1067
  return (h("li", { class: "main-nav__item main-nav__item--auth", key: "sign-in" }, this.renderAuthControl({ link: item, action: 'sign-in', onNavigate })));
654
1068
  }
655
1069
  if (isManageAccountLink(item, accountHome)) {
656
- return (h("li", { class: "main-nav__item main-nav__item--auth", key: "manage-account" }, this.renderManageAccountAnchor(onNavigate)));
1070
+ return (h("li", { class: "main-nav__item main-nav__item--auth", key: "manage-account" }, this.renderManageAccountAnchor(onNavigate, false, ariaCurrentHref)));
657
1071
  }
658
1072
  if (this.signedIn && isFindJobLink(item)) {
659
- return this.renderIconNavLink(item, FindJobIcon, 'find-a-job-link', onNavigate);
1073
+ return this.renderIconNavLink(item, FindJobIcon, 'find-a-job-link', onNavigate, ariaCurrentHref);
660
1074
  }
661
1075
  if (this.signedIn && isDashboardLink(item, accountHome)) {
662
- return this.renderIconNavLink(item, DashboardIcon, 'dashboard-link', onNavigate);
1076
+ return this.renderIconNavLink(item, DashboardIcon, 'dashboard-link', onNavigate, ariaCurrentHref);
663
1077
  }
664
- return this.renderFlatNavLink(item, onNavigate);
1078
+ return this.renderFlatNavLink(item, onNavigate, ariaCurrentHref);
665
1079
  }
666
1080
  renderNav(onNavigate) {
667
- return (h("nav", { class: "main-nav", "aria-label": "Main" }, h("ul", { class: "main-nav__list" }, this.getActiveMenu().map((item) => this.renderNavItem(item, onNavigate)))));
1081
+ const ariaCurrentHref = this.resolveAriaCurrentHref();
1082
+ return (h("nav", { class: "main-nav", "aria-label": MAIN_NAV_LABEL }, h("ul", { class: "main-nav__list" }, this.getActiveMenu().map((item) => this.renderNavItem(item, onNavigate, ariaCurrentHref)))));
668
1083
  }
669
1084
  renderCompactAuth(onNavigate) {
670
1085
  if (this.signedIn) {
@@ -685,10 +1100,12 @@ const WegHeader = class {
685
1100
  const logoSrc = this.getLogoSrc();
686
1101
  const closeMenu = () => this.closeMenu();
687
1102
  const mobileMenuActive = this.isMobileMenuActive();
688
- return (h("header", { key: '64736cfe4328d1ab78ae99cca6721c492f1531e9', class: {
1103
+ return (h("header", { key: '429d9af0996fa37484ebeea36f1e071fe0ba0789', class: {
689
1104
  header: true,
1105
+ 'header--fixed': !mobileMenuActive,
1106
+ 'header--hidden': this.headerHidden && !mobileMenuActive,
690
1107
  'header--menu-open': mobileMenuActive,
691
- } }, h("div", { key: '0db29810a8772023f5b50b7f7074ce1a41e65e83', class: "header-inner" }, h("button", { key: '75c2f7ecd64bfcc7279798efad80af9502807f6e', type: "button", class: "menu-toggle icon-button", "aria-label": mobileMenuActive ? 'Close menu' : 'Open menu', "aria-expanded": mobileMenuActive ? 'true' : 'false', "aria-controls": "weg-header-main-nav", onClick: () => this.toggleMenu() }, mobileMenuActive ? h(CloseIcon, null) : h(HamburgerIcon, null)), h(Logo, { key: 'd05be8ac2d8be06bc5a005a70c1fe25bd6259243', href: logoHref, src: logoSrc }), h("div", { key: '3a125651b08eeb7906444a056fe871873807ef73', class: "header-actions" }, this.renderCompactAuth(mobileMenuActive ? closeMenu : undefined)), h("div", { key: '4e36a06336d834c418511a89eb1d3fe6278957ad', class: "main-nav-panel", id: "weg-header-main-nav", role: mobileMenuActive ? 'dialog' : undefined, "aria-modal": mobileMenuActive ? 'true' : undefined, "aria-label": mobileMenuActive ? 'Menu' : undefined }, this.renderNav(mobileMenuActive ? closeMenu : undefined)))));
1108
+ } }, h("div", { key: '2c088a3e602ac2c8751d21376872536e35a0ab7d', class: "header-inner" }, h("div", { key: '91089bfc45b2b3274df00b032cad0adaba79b937', class: "sr-only", "aria-live": "polite", "aria-atomic": "true", "data-weg-sr-live": true }), h("button", { key: 'a66e0f0564014f5041a9fa80b39f74ce177f7125', type: "button", class: "menu-toggle icon-button", "aria-label": mobileMenuActive ? CLOSE_MAIN_NAV_LABEL : OPEN_MAIN_NAV_LABEL, "aria-expanded": mobileMenuActive ? 'true' : 'false', "aria-controls": "weg-header-main-nav", onClick: () => this.toggleMenu() }, mobileMenuActive ? h(CloseIcon, null) : h(HamburgerIcon, null)), h(Logo, { key: '917d134565c899e9a25557bafd62bf8b0de75e32', href: logoHref, src: logoSrc }), h("div", { key: '7b6bcd11271e00ddf0ca7d34bc1c8d2ad8342ed4', class: "header-actions" }, this.renderCompactAuth(mobileMenuActive ? closeMenu : undefined)), h("div", { key: '1a6779e99be4704b6f9093501dd230a891b81c17', class: "main-nav-panel", id: "weg-header-main-nav", role: mobileMenuActive ? 'dialog' : undefined, "aria-modal": mobileMenuActive ? 'true' : undefined, "aria-label": mobileMenuActive ? MAIN_NAV_LABEL : undefined }, this.renderNav(mobileMenuActive ? closeMenu : undefined)))));
692
1109
  }
693
1110
  static get watchers() { return {
694
1111
  "layout": [{