weg-shared-layout 0.0.23 → 0.0.25
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.
- package/LICENSE +21 -21
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/weg-footer_2.cjs.entry.js +307 -219
- package/dist/cjs/weg-shared-layout.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +0 -1
- package/dist/collection/components/weg-footer/icons/instagram.svg +5 -5
- package/dist/collection/components/weg-footer/icons/linkedin.svg +3 -3
- package/dist/collection/components/weg-footer/icons/tiktok.svg +3 -3
- package/dist/collection/components/weg-footer/icons/youtube.svg +4 -4
- package/dist/collection/components/weg-footer/weg-footer.css +270 -201
- package/dist/collection/components/weg-footer/weg-footer.js +22 -26
- package/dist/collection/components/weg-header/weg-header.css +474 -365
- package/dist/collection/components/weg-header/weg-header.js +226 -166
- package/dist/collection/constants/breakpoints.js +6 -0
- package/dist/collection/styles/shared.css +72 -78
- package/dist/collection/utils/layout.js +57 -9
- package/dist/components/p-BnMIy-A5.js +1 -0
- package/dist/components/weg-footer.js +1 -1
- package/dist/components/weg-header.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/weg-footer_2.entry.js +307 -219
- package/dist/esm/weg-shared-layout.js +1 -1
- package/dist/types/components/weg-footer/weg-footer.d.ts +2 -2
- package/dist/types/components/weg-header/weg-header.d.ts +32 -16
- package/dist/types/components.d.ts +6 -48
- package/dist/types/constants/breakpoints.d.ts +6 -0
- package/dist/types/types/layout-data.d.ts +13 -27
- package/dist/types/utils/layout.d.ts +9 -1
- package/dist/weg-shared-layout/p-d74a58cf.entry.js +1 -0
- package/dist/weg-shared-layout/weg-shared-layout.esm.js +1 -1
- package/docs/angular-integration-guide.md +1004 -0
- package/docs/angular.md +229 -138
- package/docs/nextjs.md +306 -305
- package/docs/publishing.md +48 -48
- package/docs/react.md +261 -261
- package/docs/vanilla.md +138 -140
- package/package.json +12 -8
- package/readme.md +82 -107
- package/src/assets/dummy-data.json +137 -63
- package/src/constants/breakpoints.ts +7 -0
- package/dist/cjs/my-component.cjs.entry.js +0 -33
- package/dist/collection/components/my-component/my-component.css +0 -3
- package/dist/collection/components/my-component/my-component.js +0 -95
- package/dist/collection/components/weg-header/signed-in-layout.js +0 -13
- package/dist/collection/constants/weg-urls.js +0 -18
- package/dist/components/my-component.d.ts +0 -11
- package/dist/components/my-component.js +0 -1
- package/dist/components/p-DbIEJ3IT.js +0 -1
- package/dist/esm/my-component.entry.js +0 -31
- package/dist/types/components/my-component/my-component.d.ts +0 -16
- package/dist/types/components/weg-header/signed-in-layout.d.ts +0 -18
- package/dist/types/constants/weg-urls.d.ts +0 -18
- package/dist/weg-shared-layout/p-80fa529c.entry.js +0 -1
- package/dist/weg-shared-layout/p-d61033bd.entry.js +0 -1
- package/src/constants/weg-urls.ts +0 -23
- /package/dist/types/Users/{tan/Documents/code → rakin/Documents/WEG/repos}/weg-shared-layout/.stencil/test-utils/axe.d.ts +0 -0
- /package/dist/types/Users/{tan/Documents/code → rakin/Documents/WEG/repos}/weg-shared-layout/.stencil/test-utils/viewport.d.ts +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var index = require('./index-CC8e1qRm.js');
|
|
4
4
|
|
|
5
|
+
const LINK_TARGETS = new Set(['_blank', '_self', '_parent', '_top']);
|
|
5
6
|
function parseJsonProp(value) {
|
|
6
7
|
if (typeof value !== 'string')
|
|
7
8
|
return value;
|
|
@@ -18,31 +19,78 @@ function parseJsonProp(value) {
|
|
|
18
19
|
function isNonEmptyString(value) {
|
|
19
20
|
return typeof value === 'string' && value.trim().length > 0;
|
|
20
21
|
}
|
|
21
|
-
function
|
|
22
|
+
function isMenuGroup(link) {
|
|
23
|
+
return Boolean(link.items?.length);
|
|
24
|
+
}
|
|
25
|
+
function readNestedItems(raw) {
|
|
26
|
+
return raw.items ?? raw.children;
|
|
27
|
+
}
|
|
28
|
+
function readLinkTarget(raw) {
|
|
29
|
+
const target = raw.target;
|
|
30
|
+
if (typeof target === 'string' && LINK_TARGETS.has(target)) {
|
|
31
|
+
return target;
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
function normalizeLayoutLink(input, options) {
|
|
36
|
+
if (!input || typeof input !== 'object')
|
|
37
|
+
return null;
|
|
38
|
+
const raw = input;
|
|
39
|
+
const label = raw.label;
|
|
40
|
+
if (!isNonEmptyString(label))
|
|
41
|
+
return null;
|
|
42
|
+
const nested = readNestedItems(raw);
|
|
43
|
+
if (Array.isArray(nested)) {
|
|
44
|
+
const items = normalizeLinks(nested, { requireHref: true });
|
|
45
|
+
if (items.length > 0) {
|
|
46
|
+
return { label: label.trim(), items };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const href = raw.href;
|
|
50
|
+
if (isNonEmptyString(href)) {
|
|
51
|
+
const link = { label: label.trim(), href: href.trim() };
|
|
52
|
+
const target = readLinkTarget(raw);
|
|
53
|
+
if (target)
|
|
54
|
+
link.target = target;
|
|
55
|
+
return link;
|
|
56
|
+
}
|
|
57
|
+
return options?.requireHref === false ? null : null;
|
|
58
|
+
}
|
|
59
|
+
function normalizeLinks(input, options) {
|
|
22
60
|
if (!Array.isArray(input))
|
|
23
61
|
return [];
|
|
62
|
+
const requireHref = options?.requireHref ?? true;
|
|
24
63
|
const result = [];
|
|
25
64
|
for (const item of input) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
65
|
+
const link = normalizeLayoutLink(item, { requireHref });
|
|
66
|
+
if (link)
|
|
67
|
+
result.push(link);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
function normalizeHeaderMenu(input) {
|
|
72
|
+
return normalizeLinks(input, { requireHref: false });
|
|
73
|
+
}
|
|
74
|
+
function normalizeMenu(input) {
|
|
75
|
+
if (!Array.isArray(input))
|
|
76
|
+
return [];
|
|
77
|
+
const result = [];
|
|
78
|
+
for (const column of input) {
|
|
79
|
+
const links = normalizeLinks(column, { requireHref: true });
|
|
80
|
+
if (links.length === 0)
|
|
33
81
|
continue;
|
|
34
|
-
result.push(
|
|
82
|
+
result.push(links);
|
|
35
83
|
}
|
|
36
84
|
return result;
|
|
37
85
|
}
|
|
38
86
|
|
|
39
|
-
const sharedCss$1 = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:
|
|
87
|
+
const sharedCss$1 = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}*,*::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}.container{width:100%;margin-inline:auto;padding-block:0.75rem}@media (width >= 960px){.container{padding-inline:1rem;padding-block:1.25rem}}@media (width >= 1280px){.container{padding-inline:2rem}}@media (width >= 1440px){.container{padding-block:1.75rem}}.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}`;
|
|
40
88
|
|
|
41
|
-
const wegFooterCss = () =>
|
|
89
|
+
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.5rem}@media (width >= 960px){.footer__inner{gap:2.25rem;padding-block:3.5rem;padding-inline:1rem}}@media (width >= 1280px){.footer__inner{padding-inline:2rem}}.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}}`;
|
|
42
90
|
|
|
43
91
|
const EMPTY_FOOTER = {
|
|
44
92
|
social: [],
|
|
45
|
-
|
|
93
|
+
menu: [],
|
|
46
94
|
credits: '',
|
|
47
95
|
copyright: '',
|
|
48
96
|
};
|
|
@@ -69,32 +117,28 @@ function normalizeSocialLinks(input) {
|
|
|
69
117
|
}
|
|
70
118
|
return result;
|
|
71
119
|
}
|
|
72
|
-
function normalizeColumns(input) {
|
|
73
|
-
if (!Array.isArray(input))
|
|
74
|
-
return [];
|
|
75
|
-
const result = [];
|
|
76
|
-
for (const item of input) {
|
|
77
|
-
if (!item || typeof item !== 'object')
|
|
78
|
-
continue;
|
|
79
|
-
const links = normalizeLinks(item.links);
|
|
80
|
-
if (links.length === 0)
|
|
81
|
-
continue;
|
|
82
|
-
result.push({ links });
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
120
|
function normalizeFooterData(input) {
|
|
87
121
|
const root = (input && typeof input === 'object' ? input : {});
|
|
88
122
|
const footer = (root.footer && typeof root.footer === 'object' ? root.footer : {});
|
|
89
123
|
return {
|
|
90
124
|
social: normalizeSocialLinks(footer?.social),
|
|
91
|
-
|
|
125
|
+
menu: normalizeMenu(footer?.menu),
|
|
92
126
|
credits: isNonEmptyString(footer?.credits) ? footer.credits.trim() : '',
|
|
93
127
|
copyright: isNonEmptyString(footer?.copyright) ? footer.copyright.trim() : '',
|
|
94
128
|
};
|
|
95
129
|
}
|
|
96
130
|
function linkOpensNewTab(link) {
|
|
97
|
-
|
|
131
|
+
if (link.target === '_blank')
|
|
132
|
+
return true;
|
|
133
|
+
return link.href ? isExternalHref(link.href) : false;
|
|
134
|
+
}
|
|
135
|
+
function linkTarget(link) {
|
|
136
|
+
if (link.target)
|
|
137
|
+
return link.target;
|
|
138
|
+
return linkOpensNewTab(link) ? '_blank' : undefined;
|
|
139
|
+
}
|
|
140
|
+
function linkRel(link) {
|
|
141
|
+
return linkOpensNewTab(link) ? 'noreferrer noopener' : undefined;
|
|
98
142
|
}
|
|
99
143
|
function SocialIcon({ platform }) {
|
|
100
144
|
const common = {
|
|
@@ -135,7 +179,7 @@ const WegFooter = class {
|
|
|
135
179
|
* {
|
|
136
180
|
* "footer": {
|
|
137
181
|
* "social": [{ "platform": "LinkedIn", "href": "https://..." }],
|
|
138
|
-
* "
|
|
182
|
+
* "menu": [[{ "label": "About Us", "href": "/about" }]],
|
|
139
183
|
* "credits": "...",
|
|
140
184
|
* "copyright": "..."
|
|
141
185
|
* }
|
|
@@ -169,14 +213,14 @@ const WegFooter = class {
|
|
|
169
213
|
return null;
|
|
170
214
|
return (index.h("div", { class: "social" }, links.map((l) => (index.h("a", { class: "social__link", href: l.href, "aria-label": l.platform, target: isExternalHref(l.href) ? '_blank' : undefined, rel: isExternalHref(l.href) ? 'noreferrer noopener' : undefined }, index.h("span", { class: "social__icon", "aria-hidden": "true" }, index.h(SocialIcon, { platform: l.platform })))))));
|
|
171
215
|
}
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
if (
|
|
216
|
+
renderMenu() {
|
|
217
|
+
const menu = this.resolved.menu;
|
|
218
|
+
if (menu.length === 0)
|
|
175
219
|
return null;
|
|
176
|
-
return (index.h("div", { class: "columns" },
|
|
220
|
+
return (index.h("div", { class: "columns" }, menu.map((links, columnIndex) => (index.h("div", { class: "columns__col", key: columnIndex }, columnIndex > 0 ? index.h("div", { class: "columns__divider", "aria-hidden": "true" }) : null, index.h("nav", { class: "columns__links", "aria-label": `Footer links column ${columnIndex + 1}` }, links.map((l, linkIndex) => (index.h("a", { class: "footer-link", href: l.href, key: linkIndex, target: linkTarget(l), rel: linkRel(l) }, l.label)))))))));
|
|
177
221
|
}
|
|
178
222
|
render() {
|
|
179
|
-
return (index.h("footer", { key: '
|
|
223
|
+
return (index.h("footer", { key: '44ce6d694eb145005f006b5a02ec68fe2da8ca44', class: "footer" }, index.h("div", { key: '43dbb00e195a561a44cd9ae0e843c448dce546bb', class: "container footer__inner" }, this.renderSocialLinks(), index.h("div", { key: '1ede37520397d4fa63671dccc7e3f83f26ac0955', class: "standard" }, this.renderMenu(), this.renderLegalText()))));
|
|
180
224
|
}
|
|
181
225
|
static get watchers() { return {
|
|
182
226
|
"layout": [{
|
|
@@ -186,95 +230,67 @@ const WegFooter = class {
|
|
|
186
230
|
};
|
|
187
231
|
WegFooter.style = sharedCss$1() + wegFooterCss();
|
|
188
232
|
|
|
233
|
+
/**
|
|
234
|
+
* JS media-query strings aligned with `src/styles/breakpoints.css`.
|
|
235
|
+
*/
|
|
236
|
+
const WEG_MD_MEDIA_QUERY = '(width >= 960px)';
|
|
237
|
+
/** Primary input can hover (excludes most touch-only profiles). */
|
|
238
|
+
const WEG_HOVER_CAPABLE_MEDIA_QUERY = '(hover: hover)';
|
|
239
|
+
|
|
189
240
|
/** WEG logo — inlined from logo.svg (not configurable). */
|
|
190
241
|
const LOGO_SRC = "data:image/png;base64,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";
|
|
191
242
|
|
|
192
|
-
|
|
193
|
-
const WEG_SITE_ORIGIN = 'https://www.warwickemploymentgroup.com';
|
|
194
|
-
const ACCOUNT_ORIGIN = 'https://account.warwickemploymentgroup.com';
|
|
195
|
-
const DEFAULT_LOGO_HREF = `${WEG_SITE_ORIGIN}/`;
|
|
196
|
-
const FIND_A_JOB_HREF = `${WEG_SITE_ORIGIN}/find-a-job`;
|
|
197
|
-
const ACCOUNT_LOGIN_HREF = `${ACCOUNT_ORIGIN}/account/login`;
|
|
198
|
-
const ACCOUNT_DASHBOARD_HREF = `${ACCOUNT_ORIGIN}/dashboard`;
|
|
199
|
-
const ACCOUNT_MANAGE_HREF = `${ACCOUNT_ORIGIN}/account/manage`;
|
|
200
|
-
const HEADER_SIGN_OUT = {
|
|
201
|
-
label: 'Sign out',
|
|
202
|
-
href: ACCOUNT_LOGIN_HREF,
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
const SIGNED_IN_HEADER = {
|
|
206
|
-
logoHref: DEFAULT_LOGO_HREF,
|
|
207
|
-
links: [
|
|
208
|
-
{ label: 'Find a job', href: FIND_A_JOB_HREF },
|
|
209
|
-
{ label: 'Dashboard', href: ACCOUNT_DASHBOARD_HREF },
|
|
210
|
-
],
|
|
211
|
-
manageAccount: {
|
|
212
|
-
href: ACCOUNT_MANAGE_HREF,
|
|
213
|
-
},
|
|
214
|
-
signOut: HEADER_SIGN_OUT,
|
|
215
|
-
};
|
|
243
|
+
const sharedCss = () => `:host{--weg-breakpoint-sm:640px;--weg-breakpoint-md:960px;--weg-breakpoint-lg:1280px;--weg-breakpoint-xl:1440px}*,*::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}.container{width:100%;margin-inline:auto;padding-block:0.75rem}@media (width >= 960px){.container{padding-inline:1rem;padding-block:1.25rem}}@media (width >= 1280px){.container{padding-inline:2rem}}@media (width >= 1440px){.container{padding-block:1.75rem}}.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}`;
|
|
216
244
|
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
const wegHeaderCss = () => `.header{width:100%;border-bottom:2px solid var(--weg-color-accent);background:#ffffff;color:#0f172a;font-family:var(--weg-font-family)}:host{position:relative;z-index:20}.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:40px;width:auto}.desktop{display:none}.desktop-nav{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:16px}.desktop-nav__list{display:flex;align-items:center;flex-wrap:wrap;gap:16px;list-style:none;margin:0;padding:0}.desktop-nav__item{position:relative}.nav-link{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:4px;border-radius:4px}.dropdown-trigger{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border:none;border-radius:8px;background:transparent;font:inherit;font-weight:600;color:inherit;cursor:pointer;outline:none}.dropdown-trigger:hover{opacity:0.85}.dropdown-trigger:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px}.dropdown-trigger--open{background:#f1f5f9}.toggle-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:999px;background:#312e81;color:#ffffff;flex-shrink:0}.dropdown-panel{position:absolute;top:calc(100% + 8px);left:0;z-index:50;min-width:280px;padding:12px 0 12px 12px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;box-shadow:0 4px 16px rgba(15, 23, 42, 0.08)}.dropdown-panel::before{content:'';position:absolute;top:-8px;left:0;right:0;height:8px}.dropdown-panel__accent{border-left:4px solid var(--weg-color-accent);padding-left:12px}.dropdown-panel__links{display:flex;flex-direction:column;gap:4px}.dropdown-panel__link{display:block;padding:8px 12px;margin-right:12px;border-radius:6px;font-weight:600;color:inherit;text-decoration:none;outline:none}.dropdown-panel__link:hover{background:#cdcff8}.dropdown-panel__link:focus-visible{background:#cdcff8;outline:2px solid var(--weg-color-accent);outline-offset:2px}.sign-in-link,.sign-out-link,.auth-button{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:inherit;text-decoration:none;outline:none}.sign-out-link.mobile-nav__row{justify-content:flex-start;gap:8px}.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}.mobile{display:flex;width:100%;min-width:0;align-items:center;justify-content:space-between;gap:12px}.mobile .logo-link{flex:1 1 auto;min-width:0;justify-content:center}.mobile .logo{max-width:100%}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:8px;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}.mobile-overlay{position:fixed;inset:0;z-index:100;background:#ffffff;overflow-y:auto}.mobile-overlay__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-bottom:2px solid var(--weg-color-accent)}.mobile-overlay__logo{flex:1;display:flex;justify-content:center}.mobile-overlay__logo .logo{height:40px}.mobile-nav{padding:0 16px 24px}.mobile-nav__section{border-bottom:1px solid #d8d4f7}.mobile-nav__row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:16px 0;border:none;background:transparent;font:inherit;font-weight:600;color:inherit;text-align:left;text-decoration:none;cursor:pointer;outline:none}.mobile-nav__row:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.mobile-nav__sub{padding:0 0 12px 0}.mobile-nav__sub-link{display:block;padding:10px 0;font-weight:400;color:inherit;text-decoration:none;outline:none}.mobile-nav__sub-link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.mobile-nav__sub-link:hover{opacity:0.85}@media (width >= 768px){.header{border-bottom-width:4px}.logo{height:80px}.desktop{display:flex;width:100%;align-items:center;justify-content:space-between;gap:24px}.mobile{display:none}}@media (width >= 1280px){.desktop-nav__list{gap:35px}}`;
|
|
245
|
+
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}@media (width >= 960px){.header-inner{flex-wrap:nowrap;gap:1.5rem}}.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:1rem}}@media (width >= 1280px){.main-nav__list{gap:2rem}}.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}}`;
|
|
220
246
|
|
|
247
|
+
const WEG_HOME = 'https://www.warwickemploymentgroup.com';
|
|
248
|
+
const ACCOUNT_HOME = 'https://account.warwickemploymentgroup.com';
|
|
249
|
+
const DEFAULT_LOGO_HREF = `${WEG_HOME}/`;
|
|
250
|
+
const ACCOUNT_LOGIN_HREF = `${ACCOUNT_HOME}/account/login`;
|
|
251
|
+
const ACCOUNT_MANAGE_HREF = `${ACCOUNT_HOME}/account/manage`;
|
|
252
|
+
const SIGNED_IN_MENU = [
|
|
253
|
+
{ label: 'Find a job', href: `${WEG_HOME}/find-a-job` },
|
|
254
|
+
{ label: 'Dashboard', href: `${ACCOUNT_HOME}/dashboard` },
|
|
255
|
+
{ label: 'Manage Account', href: `${ACCOUNT_HOME}/account/manage` },
|
|
256
|
+
{ label: 'Sign out', href: `${ACCOUNT_HOME}/account/login` },
|
|
257
|
+
];
|
|
221
258
|
const EMPTY_HEADER = {
|
|
222
|
-
|
|
223
|
-
dropdowns: [],
|
|
224
|
-
links: [],
|
|
225
|
-
signIn: null,
|
|
226
|
-
signOut: null,
|
|
259
|
+
menu: [],
|
|
227
260
|
};
|
|
228
|
-
function
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const label = item.label;
|
|
236
|
-
const items = normalizeLinks(item.items);
|
|
237
|
-
if (!isNonEmptyString(label))
|
|
238
|
-
continue;
|
|
239
|
-
if (items.length === 0)
|
|
240
|
-
continue;
|
|
241
|
-
result.push({ label: label.trim(), items });
|
|
242
|
-
}
|
|
243
|
-
return result;
|
|
261
|
+
function isSignInLink(link) {
|
|
262
|
+
const label = link.label.trim().toLowerCase();
|
|
263
|
+
if (label === 'sign out')
|
|
264
|
+
return false;
|
|
265
|
+
if (label === 'sign in')
|
|
266
|
+
return true;
|
|
267
|
+
return link.href === ACCOUNT_LOGIN_HREF;
|
|
244
268
|
}
|
|
245
|
-
function
|
|
246
|
-
|
|
247
|
-
return null;
|
|
248
|
-
const label = input.label;
|
|
249
|
-
const href = input.href;
|
|
250
|
-
if (!isNonEmptyString(label))
|
|
251
|
-
return null;
|
|
252
|
-
if (!isNonEmptyString(href))
|
|
253
|
-
return null;
|
|
254
|
-
return { label: label.trim(), href: href.trim() };
|
|
269
|
+
function isSignOutLink(link) {
|
|
270
|
+
return link.label.trim().toLowerCase() === 'sign out';
|
|
255
271
|
}
|
|
256
|
-
function
|
|
257
|
-
if (
|
|
258
|
-
return
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
272
|
+
function isManageAccountLink(link) {
|
|
273
|
+
if (link.label.trim().toLowerCase() === 'manage account')
|
|
274
|
+
return true;
|
|
275
|
+
return link.href === ACCOUNT_MANAGE_HREF;
|
|
276
|
+
}
|
|
277
|
+
function isFindJobLink(link) {
|
|
278
|
+
if (link.label.trim().toLowerCase() === 'find a job')
|
|
279
|
+
return true;
|
|
280
|
+
return link.href === `${WEG_HOME}/find-a-job`;
|
|
281
|
+
}
|
|
282
|
+
function isDashboardLink(link) {
|
|
283
|
+
if (link.label.trim().toLowerCase() === 'dashboard')
|
|
284
|
+
return true;
|
|
285
|
+
return link.href === `${ACCOUNT_HOME}/dashboard`;
|
|
267
286
|
}
|
|
268
287
|
function normalizeHeaderData(input) {
|
|
269
288
|
const root = (input && typeof input === 'object' ? input : {});
|
|
270
289
|
const header = root.header && typeof root.header === 'object' ? root.header : {};
|
|
271
|
-
const
|
|
290
|
+
const logoSrc = isNonEmptyString(header.logoSrc) ? header.logoSrc.trim() : undefined;
|
|
272
291
|
return {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
links: normalizeLinks(header.links),
|
|
276
|
-
signIn: normalizeSignIn(header.signIn),
|
|
277
|
-
signOut: normalizeSignOut(header.signOut),
|
|
292
|
+
logoSrc,
|
|
293
|
+
menu: normalizeHeaderMenu(header.menu),
|
|
278
294
|
};
|
|
279
295
|
}
|
|
280
296
|
function SignInIcon() {
|
|
@@ -283,6 +299,12 @@ function SignInIcon() {
|
|
|
283
299
|
function SignOutIcon() {
|
|
284
300
|
return (index.h("svg", { viewBox: "0 0 26 24", width: "26", height: "24", "aria-hidden": "true", focusable: "false", fill: "none" }, index.h("path", { d: "M19.6667 6.33333L25 11.6667L19.6667 17M25 11.6667H6.33333M14.3333 17V18.3333C14.3333 19.3942 13.9119 20.4116 13.1618 21.1618C12.4116 21.9119 11.3942 22.3333 10.3333 22.3333H5C3.93913 22.3333 2.92172 21.9119 2.17157 21.1618C1.42143 20.4116 1 19.3942 1 18.3333V5C1 3.93913 1.42143 2.92172 2.17157 2.17157C2.92172 1.42143 3.93913 1 5 1H10.3333C11.3942 1 12.4116 1.42143 13.1618 2.17157C13.9119 2.92172 14.3333 3.93913 14.3333 5V6.33333", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
285
301
|
}
|
|
302
|
+
function FindJobIcon() {
|
|
303
|
+
return (index.h("svg", { viewBox: "0 0 24 24", width: "20", height: "20", "aria-hidden": "true", focusable: "false", fill: "none" }, index.h("path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), index.h("rect", { x: "2", y: "6", width: "20", height: "14", rx: "2", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
304
|
+
}
|
|
305
|
+
function DashboardIcon() {
|
|
306
|
+
return (index.h("svg", { viewBox: "0 0 24 24", width: "20", height: "20", "aria-hidden": "true", focusable: "false", fill: "none" }, index.h("rect", { x: "3", y: "3", width: "7", height: "9", rx: "1", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), index.h("rect", { x: "14", y: "3", width: "7", height: "5", rx: "1", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), index.h("rect", { x: "14", y: "12", width: "7", height: "9", rx: "1", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }), index.h("rect", { x: "3", y: "16", width: "7", height: "5", rx: "1", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
307
|
+
}
|
|
286
308
|
function HamburgerIcon() {
|
|
287
309
|
return (index.h("svg", { viewBox: "0 0 24 24", width: "28", height: "28", "aria-hidden": "true", focusable: "false", fill: "none" }, index.h("path", { d: "M4 7h16M4 12h16M4 17h16", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" })));
|
|
288
310
|
}
|
|
@@ -292,8 +314,8 @@ function CloseIcon() {
|
|
|
292
314
|
function ToggleIcon({ expanded }) {
|
|
293
315
|
return (index.h("span", { class: "toggle-icon", "aria-hidden": "true" }, expanded ? (index.h("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none" }, index.h("path", { d: "M6 12h12", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round" }))) : (index.h("svg", { viewBox: "0 0 24 24", width: "14", height: "14", fill: "none" }, index.h("path", { d: "M12 6v12M6 12h12", stroke: "currentColor", "stroke-width": "2.5", "stroke-linecap": "round" })))));
|
|
294
316
|
}
|
|
295
|
-
function Logo({ href }) {
|
|
296
|
-
return (index.h("a", { class: "logo-link", href: href, "aria-label": "Home" }, index.h("img", { class: "logo", src:
|
|
317
|
+
function Logo({ href, src }) {
|
|
318
|
+
return (index.h("a", { class: "logo-link", href: href, "aria-label": "Home" }, index.h("img", { class: "logo", src: src, alt: "WEG", width: "225", height: "83" })));
|
|
297
319
|
}
|
|
298
320
|
const WegHeader = class {
|
|
299
321
|
constructor(hostRef) {
|
|
@@ -307,19 +329,18 @@ const WegHeader = class {
|
|
|
307
329
|
* ```json
|
|
308
330
|
* {
|
|
309
331
|
* "header": {
|
|
310
|
-
* "
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
332
|
+
* "menu": [
|
|
333
|
+
* { "label": "Find a job", "items": [{ "label": "Graduates", "href": "..." }] },
|
|
334
|
+
* { "label": "Career advice", "href": "/career-advice" },
|
|
335
|
+
* { "label": "Sign in", "href": "/account/login" }
|
|
336
|
+
* ]
|
|
315
337
|
* }
|
|
316
338
|
* }
|
|
317
339
|
* ```
|
|
318
340
|
*/
|
|
319
341
|
layout;
|
|
320
342
|
/**
|
|
321
|
-
* When true, the header
|
|
322
|
-
* Manage Account, Sign out) instead of the CMS layout.
|
|
343
|
+
* When true, the header uses the built-in signed-in menu instead of the CMS layout.
|
|
323
344
|
*/
|
|
324
345
|
signedIn = false;
|
|
325
346
|
/**
|
|
@@ -335,10 +356,13 @@ const WegHeader = class {
|
|
|
335
356
|
resolved = EMPTY_HEADER;
|
|
336
357
|
menuOpen = false;
|
|
337
358
|
openDropdown = null;
|
|
338
|
-
expandedSection = null;
|
|
339
359
|
boundHandleDocumentClick = this.handleDocumentClick.bind(this);
|
|
360
|
+
boundHandleViewportChange = this.handleViewportChange.bind(this);
|
|
361
|
+
boundHandleHoverCapabilityChange = this.handleHoverCapabilityChange.bind(this);
|
|
340
362
|
hoverCloseTimer = null;
|
|
341
363
|
hoverOpenEnabled = false;
|
|
364
|
+
desktopMediaQuery;
|
|
365
|
+
hoverCapableMediaQuery;
|
|
342
366
|
resolve() {
|
|
343
367
|
if (this.layout === undefined || this.layout === null) {
|
|
344
368
|
this.resolved = EMPTY_HEADER;
|
|
@@ -348,15 +372,46 @@ const WegHeader = class {
|
|
|
348
372
|
}
|
|
349
373
|
componentWillLoad() {
|
|
350
374
|
this.resolve();
|
|
351
|
-
this.
|
|
375
|
+
this.hoverCapableMediaQuery = window.matchMedia(WEG_HOVER_CAPABLE_MEDIA_QUERY);
|
|
376
|
+
this.hoverCapableMediaQuery.addEventListener('change', this.boundHandleHoverCapabilityChange);
|
|
377
|
+
this.desktopMediaQuery = window.matchMedia(WEG_MD_MEDIA_QUERY);
|
|
378
|
+
this.desktopMediaQuery.addEventListener('change', this.boundHandleViewportChange);
|
|
379
|
+
this.updateHoverDropdownEnabled();
|
|
380
|
+
this.handleViewportChange();
|
|
352
381
|
}
|
|
353
382
|
connectedCallback() {
|
|
354
383
|
document.addEventListener('click', this.boundHandleDocumentClick);
|
|
355
384
|
}
|
|
356
385
|
disconnectedCallback() {
|
|
357
386
|
document.removeEventListener('click', this.boundHandleDocumentClick);
|
|
387
|
+
this.desktopMediaQuery?.removeEventListener('change', this.boundHandleViewportChange);
|
|
388
|
+
this.hoverCapableMediaQuery?.removeEventListener('change', this.boundHandleHoverCapabilityChange);
|
|
358
389
|
this.cancelScheduledDropdownClose();
|
|
359
390
|
}
|
|
391
|
+
/**
|
|
392
|
+
* Desktop dropdowns open on hover when viewport is md+ and the device reports hover support.
|
|
393
|
+
* Uses (hover: hover) only — not (pointer: fine), which breaks in DevTools and hybrid devices.
|
|
394
|
+
*/
|
|
395
|
+
updateHoverDropdownEnabled() {
|
|
396
|
+
const enabled = Boolean(this.desktopMediaQuery?.matches && this.hoverCapableMediaQuery?.matches);
|
|
397
|
+
if (this.hoverOpenEnabled && !enabled) {
|
|
398
|
+
this.cancelScheduledDropdownClose();
|
|
399
|
+
this.closeDropdown();
|
|
400
|
+
}
|
|
401
|
+
this.hoverOpenEnabled = enabled;
|
|
402
|
+
}
|
|
403
|
+
handleHoverCapabilityChange() {
|
|
404
|
+
this.updateHoverDropdownEnabled();
|
|
405
|
+
}
|
|
406
|
+
handleViewportChange() {
|
|
407
|
+
if (this.desktopMediaQuery?.matches) {
|
|
408
|
+
this.closeMenu();
|
|
409
|
+
}
|
|
410
|
+
this.updateHoverDropdownEnabled();
|
|
411
|
+
}
|
|
412
|
+
isMobileMenuActive() {
|
|
413
|
+
return this.menuOpen && !this.desktopMediaQuery?.matches;
|
|
414
|
+
}
|
|
360
415
|
watchLayout() {
|
|
361
416
|
this.resolve();
|
|
362
417
|
}
|
|
@@ -408,18 +463,40 @@ const WegHeader = class {
|
|
|
408
463
|
return;
|
|
409
464
|
this.openDropdownMenu(label);
|
|
410
465
|
}
|
|
411
|
-
handleDropdownPointerLeave() {
|
|
466
|
+
handleDropdownPointerLeave(event) {
|
|
412
467
|
if (!this.hoverOpenEnabled)
|
|
413
468
|
return;
|
|
469
|
+
const related = event.relatedTarget;
|
|
470
|
+
const container = event.currentTarget;
|
|
471
|
+
if (related && container.contains(related))
|
|
472
|
+
return;
|
|
414
473
|
this.scheduleDropdownClose();
|
|
415
474
|
}
|
|
416
|
-
|
|
475
|
+
handleDropdownPanelPointerEnter(label) {
|
|
476
|
+
if (!this.hoverOpenEnabled)
|
|
477
|
+
return;
|
|
478
|
+
this.cancelScheduledDropdownClose();
|
|
417
479
|
this.openDropdownMenu(label);
|
|
418
480
|
}
|
|
481
|
+
handleDropdownPanelPointerLeave(event) {
|
|
482
|
+
if (!this.hoverOpenEnabled)
|
|
483
|
+
return;
|
|
484
|
+
const related = event.relatedTarget;
|
|
485
|
+
const panel = event.currentTarget;
|
|
486
|
+
const container = panel.closest('.nav-dropdown');
|
|
487
|
+
if (related && container?.contains(related))
|
|
488
|
+
return;
|
|
489
|
+
this.scheduleDropdownClose();
|
|
490
|
+
}
|
|
491
|
+
handleDropdownTriggerClick(event, label) {
|
|
492
|
+
event.stopPropagation();
|
|
493
|
+
this.cancelScheduledDropdownClose();
|
|
494
|
+
this.toggleDropdown(label);
|
|
495
|
+
}
|
|
419
496
|
handleDropdownFocusOut(event, label) {
|
|
420
497
|
const related = event.relatedTarget;
|
|
421
|
-
const
|
|
422
|
-
if (related &&
|
|
498
|
+
const container = event.currentTarget;
|
|
499
|
+
if (related && container.contains(related))
|
|
423
500
|
return;
|
|
424
501
|
if (this.openDropdown === label) {
|
|
425
502
|
this.closeDropdown();
|
|
@@ -434,62 +511,74 @@ const WegHeader = class {
|
|
|
434
511
|
}
|
|
435
512
|
focusFirstDropdownLink(itemEl) {
|
|
436
513
|
setTimeout(() => {
|
|
437
|
-
const firstLink = itemEl.querySelector('.
|
|
514
|
+
const firstLink = itemEl.querySelector('.nav-dropdown__link');
|
|
438
515
|
firstLink?.focus();
|
|
439
516
|
}, 0);
|
|
440
517
|
}
|
|
441
|
-
|
|
442
|
-
|
|
518
|
+
toggleMenu() {
|
|
519
|
+
if (this.menuOpen) {
|
|
520
|
+
this.closeMenu();
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
this.openMenu();
|
|
443
524
|
}
|
|
444
525
|
openMenu() {
|
|
445
526
|
this.menuOpen = true;
|
|
446
|
-
this.
|
|
527
|
+
this.closeDropdown();
|
|
447
528
|
}
|
|
448
529
|
closeMenu() {
|
|
449
530
|
this.menuOpen = false;
|
|
450
|
-
this.
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
dropdowns: [],
|
|
458
|
-
links: [...SIGNED_IN_HEADER.links],
|
|
459
|
-
signIn: null,
|
|
460
|
-
signOut: SIGNED_IN_HEADER.signOut,
|
|
461
|
-
};
|
|
531
|
+
this.closeDropdown();
|
|
532
|
+
}
|
|
533
|
+
getActiveMenu() {
|
|
534
|
+
return this.signedIn ? SIGNED_IN_MENU : this.resolved.menu;
|
|
535
|
+
}
|
|
536
|
+
getLogoSrc() {
|
|
537
|
+
return this.resolved.logoSrc ?? LOGO_SRC;
|
|
462
538
|
}
|
|
463
539
|
getLogoHref() {
|
|
464
|
-
return
|
|
540
|
+
return DEFAULT_LOGO_HREF;
|
|
541
|
+
}
|
|
542
|
+
findSignInLink(menu) {
|
|
543
|
+
for (const item of menu) {
|
|
544
|
+
if (!isMenuGroup(item) && isSignInLink(item))
|
|
545
|
+
return item;
|
|
546
|
+
}
|
|
547
|
+
return null;
|
|
465
548
|
}
|
|
466
549
|
getManageAccountLabel() {
|
|
467
550
|
const name = this.userName?.trim();
|
|
468
551
|
return name || 'Manage Account';
|
|
469
552
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
const
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
553
|
+
renderIconNavLink(link, Icon, className, onNavigate) {
|
|
554
|
+
return (index.h("li", { class: "main-nav__item main-nav__item--auth", key: link.label }, index.h("a", { class: { 'sign-in-link': true, [className]: true }, href: link.href, onClick: () => onNavigate?.() }, index.h(Icon, null), link.label)));
|
|
555
|
+
}
|
|
556
|
+
renderFlatNavLink(link, onNavigate) {
|
|
557
|
+
return (index.h("li", { class: "main-nav__item", key: link.label }, index.h("a", { class: "nav-link", href: link.href, onClick: () => onNavigate?.() }, link.label)));
|
|
558
|
+
}
|
|
559
|
+
renderMenuGroup(item, onNavigate) {
|
|
560
|
+
const items = item.items ?? [];
|
|
561
|
+
const isOpen = this.openDropdown === item.label;
|
|
562
|
+
const panelId = this.getDropdownPanelId(item.label);
|
|
563
|
+
return (index.h("li", { class: "main-nav__item main-nav__item--dropdown", key: item.label }, index.h("div", { class: "nav-dropdown", onMouseEnter: () => this.handleDropdownPointerEnter(item.label), onMouseLeave: (event) => this.handleDropdownPointerLeave(event), onFocusout: (event) => this.handleDropdownFocusOut(event, item.label) }, index.h("button", { type: "button", class: {
|
|
564
|
+
'nav-dropdown__trigger': true,
|
|
565
|
+
'nav-dropdown__trigger--open': isOpen,
|
|
566
|
+
}, "aria-expanded": isOpen ? 'true' : 'false', "aria-haspopup": "true", "aria-controls": panelId, id: `${panelId}-trigger`, onClick: (event) => this.handleDropdownTriggerClick(event, item.label), onKeyDown: (event) => {
|
|
567
|
+
const container = event.currentTarget.closest('.nav-dropdown');
|
|
568
|
+
this.handleDropdownTriggerKeyDown(event, item.label, container);
|
|
569
|
+
} }, index.h("span", { class: "nav-dropdown__label" }, item.label), index.h(ToggleIcon, { expanded: isOpen })), isOpen ? (index.h("div", { class: "nav-dropdown__panel", id: panelId, role: "region", "aria-labelledby": `${panelId}-trigger`, onMouseEnter: () => this.handleDropdownPanelPointerEnter(item.label), onMouseLeave: (event) => this.handleDropdownPanelPointerLeave(event) }, index.h("div", { class: "nav-dropdown__accent" }, index.h("div", { class: "nav-dropdown__links" }, items.map((child) => (index.h("a", { class: "nav-dropdown__link", href: child.href, key: `${item.label}:${child.label}`, onClick: () => onNavigate?.() }, child.label))))))) : null)));
|
|
570
|
+
}
|
|
571
|
+
handleAuthClick(event, action, href, onNavigate) {
|
|
572
|
+
const emitted = this.wegAuthClick.emit({ action });
|
|
484
573
|
if (emitted.defaultPrevented) {
|
|
485
574
|
event.preventDefault();
|
|
486
575
|
onNavigate?.();
|
|
487
576
|
return;
|
|
488
577
|
}
|
|
489
|
-
if (
|
|
578
|
+
if (action === 'sign-out') {
|
|
490
579
|
event.preventDefault();
|
|
491
|
-
if (
|
|
492
|
-
window.location.assign(
|
|
580
|
+
if (href) {
|
|
581
|
+
window.location.assign(href);
|
|
493
582
|
}
|
|
494
583
|
onNavigate?.();
|
|
495
584
|
return;
|
|
@@ -497,71 +586,70 @@ const WegHeader = class {
|
|
|
497
586
|
onNavigate?.();
|
|
498
587
|
}
|
|
499
588
|
renderAuthControl(options) {
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
if (
|
|
519
|
-
return
|
|
589
|
+
const { link, action, iconOnly, onNavigate } = options;
|
|
590
|
+
const Icon = action === 'sign-out' ? SignOutIcon : SignInIcon;
|
|
591
|
+
const classSuffix = action === 'sign-out' ? 'sign-out-link' : 'sign-in-link';
|
|
592
|
+
return (index.h("a", { class: {
|
|
593
|
+
[classSuffix]: !iconOnly,
|
|
594
|
+
'icon-button': !!iconOnly,
|
|
595
|
+
[options.className || '']: !!options.className,
|
|
596
|
+
}, href: link.href, "aria-label": link.label, onClick: (event) => this.handleAuthClick(event, action, link.href, onNavigate) }, index.h(Icon, null), !iconOnly ? link.label : null, iconOnly ? index.h("span", { class: "sr-only" }, link.label) : null));
|
|
597
|
+
}
|
|
598
|
+
renderManageAccountAnchor(onNavigate, iconOnly = false) {
|
|
599
|
+
const label = this.getManageAccountLabel();
|
|
600
|
+
return (index.h("a", { class: {
|
|
601
|
+
'sign-in-link': !iconOnly,
|
|
602
|
+
'manage-account-link': true,
|
|
603
|
+
'icon-button': iconOnly,
|
|
604
|
+
}, href: ACCOUNT_MANAGE_HREF, "aria-label": label, onClick: () => onNavigate?.() }, index.h(SignInIcon, null), !iconOnly ? label : null, iconOnly ? index.h("span", { class: "sr-only" }, label) : null));
|
|
605
|
+
}
|
|
606
|
+
renderNavItem(item, onNavigate) {
|
|
607
|
+
if (isMenuGroup(item)) {
|
|
608
|
+
return this.renderMenuGroup(item, onNavigate);
|
|
609
|
+
}
|
|
610
|
+
if (isSignOutLink(item)) {
|
|
611
|
+
return (index.h("li", { class: "main-nav__item main-nav__item--auth", key: "sign-out" }, this.renderAuthControl({ link: item, action: 'sign-out', onNavigate })));
|
|
612
|
+
}
|
|
613
|
+
if (isSignInLink(item)) {
|
|
614
|
+
return (index.h("li", { class: "main-nav__item main-nav__item--auth", key: "sign-in" }, this.renderAuthControl({ link: item, action: 'sign-in', onNavigate })));
|
|
615
|
+
}
|
|
616
|
+
if (isManageAccountLink(item)) {
|
|
617
|
+
return (index.h("li", { class: "main-nav__item main-nav__item--auth", key: "manage-account" }, this.renderManageAccountAnchor(onNavigate)));
|
|
618
|
+
}
|
|
619
|
+
if (this.signedIn && isFindJobLink(item)) {
|
|
620
|
+
return this.renderIconNavLink(item, FindJobIcon, 'find-a-job-link', onNavigate);
|
|
621
|
+
}
|
|
622
|
+
if (this.signedIn && isDashboardLink(item)) {
|
|
623
|
+
return this.renderIconNavLink(item, DashboardIcon, 'dashboard-link', onNavigate);
|
|
624
|
+
}
|
|
625
|
+
return this.renderFlatNavLink(item, onNavigate);
|
|
626
|
+
}
|
|
627
|
+
renderNav(onNavigate) {
|
|
628
|
+
return (index.h("nav", { class: "main-nav", "aria-label": "Main" }, index.h("ul", { class: "main-nav__list" }, this.getActiveMenu().map((item) => this.renderNavItem(item, onNavigate)))));
|
|
629
|
+
}
|
|
630
|
+
renderCompactAuth(onNavigate) {
|
|
631
|
+
if (this.signedIn) {
|
|
632
|
+
return this.renderManageAccountAnchor(onNavigate, true);
|
|
520
633
|
}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
index.h("li", { class: "desktop-nav__item", key: "sign-out" }, index.h("a", { class: "sign-in-link sign-out-link", href: signOut.href, "aria-label": signOut.label, onClick: (event) => this.handleAuthClick(event, options.onNavigate) }, index.h(SignOutIcon, null), signOut.label)),
|
|
524
|
-
];
|
|
525
|
-
}
|
|
526
|
-
renderDesktop() {
|
|
527
|
-
const { dropdowns, links } = this.getActiveHeaderData();
|
|
528
|
-
return (index.h("div", { class: "desktop" }, index.h(Logo, { href: this.getLogoHref() }), index.h("nav", { class: "desktop-nav", "aria-label": "Main" }, index.h("ul", { class: "desktop-nav__list" }, dropdowns.map((dropdown) => {
|
|
529
|
-
const isOpen = this.openDropdown === dropdown.label;
|
|
530
|
-
const panelId = this.getDropdownPanelId(dropdown.label);
|
|
531
|
-
return (index.h("li", { class: "desktop-nav__item desktop-nav__item--dropdown", key: dropdown.label, onMouseEnter: () => this.handleDropdownPointerEnter(dropdown.label), onMouseLeave: () => this.handleDropdownPointerLeave(), onFocusin: () => this.handleDropdownFocusIn(dropdown.label), onFocusout: (event) => this.handleDropdownFocusOut(event, dropdown.label) }, index.h("button", { type: "button", class: {
|
|
532
|
-
'dropdown-trigger': true,
|
|
533
|
-
'dropdown-trigger--open': isOpen,
|
|
534
|
-
}, "aria-expanded": isOpen ? 'true' : 'false', "aria-haspopup": "true", "aria-controls": panelId, id: `${panelId}-trigger`, onClick: (event) => {
|
|
535
|
-
event.stopPropagation();
|
|
536
|
-
this.toggleDropdown(dropdown.label);
|
|
537
|
-
}, onKeyDown: (event) => {
|
|
538
|
-
const itemEl = event.currentTarget.closest('.desktop-nav__item--dropdown');
|
|
539
|
-
this.handleDropdownTriggerKeyDown(event, dropdown.label, itemEl);
|
|
540
|
-
} }, dropdown.label, index.h(ToggleIcon, { expanded: isOpen })), isOpen ? (index.h("div", { class: "dropdown-panel", id: panelId, role: "region", "aria-labelledby": `${panelId}-trigger` }, index.h("div", { class: "dropdown-panel__accent" }, index.h("div", { class: "dropdown-panel__links" }, dropdown.items.map((item) => (index.h("a", { class: "dropdown-panel__link", href: item.href, key: `${dropdown.label}:${item.label}` }, item.label))))))) : null));
|
|
541
|
-
}), links.map((link) => (index.h("li", { class: "desktop-nav__item", key: link.label }, index.h("a", { class: "nav-link", href: link.href }, link.label)))), this.signedIn
|
|
542
|
-
? this.renderSignedInAuthControls({})
|
|
543
|
-
: this.getAuthControl()
|
|
544
|
-
? index.h("li", { class: "desktop-nav__item" }, this.renderAuthControl({}))
|
|
545
|
-
: null))));
|
|
546
|
-
}
|
|
547
|
-
renderMobileBar() {
|
|
548
|
-
return (index.h("div", { class: "mobile" }, index.h("button", { type: "button", class: "icon-button", "aria-label": "Open menu", onClick: () => this.openMenu() }, index.h(HamburgerIcon, null)), index.h(Logo, { href: this.getLogoHref() }), this.signedIn
|
|
549
|
-
? this.renderSignedInAuthControls({ iconOnly: true })
|
|
550
|
-
: this.renderAuthControl({ iconOnly: true })));
|
|
551
|
-
}
|
|
552
|
-
renderMobileOverlay() {
|
|
553
|
-
if (!this.menuOpen)
|
|
634
|
+
const signIn = this.findSignInLink(this.resolved.menu);
|
|
635
|
+
if (!signIn?.href)
|
|
554
636
|
return null;
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
}), links.map((link) => (index.h("div", { class: "mobile-nav__section", key: link.label }, index.h("a", { class: "mobile-nav__row", href: link.href, onClick: () => this.closeMenu() }, link.label)))), this.signedIn ? (index.h("div", { class: "mobile-nav__section" }, index.h("a", { class: "mobile-nav__row manage-account-link", href: SIGNED_IN_HEADER.manageAccount.href, onClick: () => this.closeMenu() }, this.getManageAccountLabel()), index.h("a", { class: "mobile-nav__row sign-out-link", href: SIGNED_IN_HEADER.signOut.href, onClick: (event) => this.handleAuthClick(event, () => this.closeMenu()) }, index.h(SignOutIcon, null), SIGNED_IN_HEADER.signOut.label))) : null)));
|
|
637
|
+
return this.renderAuthControl({
|
|
638
|
+
link: signIn,
|
|
639
|
+
action: 'sign-in',
|
|
640
|
+
iconOnly: true,
|
|
641
|
+
onNavigate,
|
|
642
|
+
});
|
|
562
643
|
}
|
|
563
644
|
render() {
|
|
564
|
-
|
|
645
|
+
const logoHref = this.getLogoHref();
|
|
646
|
+
const logoSrc = this.getLogoSrc();
|
|
647
|
+
const closeMenu = () => this.closeMenu();
|
|
648
|
+
const mobileMenuActive = this.isMobileMenuActive();
|
|
649
|
+
return (index.h("header", { key: 'ce1a217dd1eda9bb72b506c187a5c6a0848de3a6', class: {
|
|
650
|
+
header: true,
|
|
651
|
+
'header--menu-open': mobileMenuActive,
|
|
652
|
+
} }, index.h("div", { key: '535d54f8eb512158c6048d748fccce4feb097cc0', class: "container header-inner" }, index.h("button", { key: '51a0fead049fadcbee17c8e622a35b1d2d8be99c', 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 ? index.h(CloseIcon, null) : index.h(HamburgerIcon, null)), index.h(Logo, { key: '6f5693bfec5d8fe196ca3e4ff565506b6c3d3421', href: logoHref, src: logoSrc }), index.h("div", { key: '9f846e47cb68b6158e832fdffda5973e5e1554f4', class: "header-actions" }, this.renderCompactAuth(mobileMenuActive ? closeMenu : undefined)), index.h("div", { key: 'e18db3c24e934200595a1216dc74f3dcb8ad0e67', 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)))));
|
|
565
653
|
}
|
|
566
654
|
static get watchers() { return {
|
|
567
655
|
"layout": [{
|