weg-shared-layout 0.0.17 → 0.0.19

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.
@@ -0,0 +1,18 @@
1
+ /** Canonical WEG site and account URLs — single source of truth for components, docs, and host apps. */
2
+ export declare const WEG_SITE_ORIGIN = "https://www.warwickemploymentgroup.com";
3
+ export declare const ACCOUNT_ORIGIN = "https://account.warwickemploymentgroup.com";
4
+ export declare const DEFAULT_LOGO_HREF = "https://www.warwickemploymentgroup.com/";
5
+ export declare const FIND_A_JOB_HREF = "https://www.warwickemploymentgroup.com/find-a-job";
6
+ export declare const CAREER_ADVICE_HREF = "https://www.warwickemploymentgroup.com/career-advice";
7
+ export declare const ACCOUNT_LOGIN_HREF = "https://account.warwickemploymentgroup.com/account/login";
8
+ export declare const ACCOUNT_REGISTER_HREF = "https://account.warwickemploymentgroup.com/account/register";
9
+ export declare const ACCOUNT_DASHBOARD_HREF = "https://account.warwickemploymentgroup.com/dashboard";
10
+ export declare const ACCOUNT_MANAGE_HREF = "https://account.warwickemploymentgroup.com/account/manage";
11
+ export declare const HEADER_SIGN_IN: {
12
+ readonly label: "Sign in";
13
+ readonly href: "https://account.warwickemploymentgroup.com/account/login";
14
+ };
15
+ export declare const HEADER_SIGN_OUT: {
16
+ readonly label: "Sign out";
17
+ readonly href: "https://account.warwickemploymentgroup.com/account/login";
18
+ };
@@ -0,0 +1 @@
1
+ import{r as e,h as n,c as i,g as t}from"./p-D8pmhPiH.js";function o(e){if("string"!=typeof e)return e;const n=e.trim();if(n)try{return JSON.parse(n)}catch{return}}function A(e){return"string"==typeof e&&e.trim().length>0}function r(e){if(!Array.isArray(e))return[];const n=[];for(const i of e){if(!i||"object"!=typeof i)continue;const e=i.label,t=i.href;A(e)&&A(t)&&n.push({label:e.trim(),href:t.trim()})}return n}const a={social:[],columns:[],credits:"",copyright:""};function l(e){return/^https?:\/\//.test(e)}function s(e){if(!Array.isArray(e))return[];const n=[];for(const t of e){if(!t||"object"!=typeof t)continue;const e=t.platform,o=t.href;("LinkedIn"===(i=e)||"Instagram"===i||"TikTok"===i||"YouTube"===i)&&A(o)&&n.push({platform:e,href:o.trim()})}var i;return n}function c(e){if(!Array.isArray(e))return[];const n=[];for(const i of e){if(!i||"object"!=typeof i)continue;const e=r(i.links);0!==e.length&&n.push({links:e})}return n}function d(e){return l(e.href)}function h({platform:e}){const i={viewBox:"0 0 48 48",width:48,height:48,fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false"};switch(e){case"LinkedIn":return n("svg",{...i},n("path",{d:"M24 0C37.2548 0 48 10.7452 48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0ZM12.9082 33.4736H17.5889V19.4111H12.9082V33.4736ZM29.0791 19.0811C26.5942 19.0811 25.4815 20.4458 24.8604 21.4033V19.4111H20.1797C20.2412 20.7279 20.1799 33.4203 20.1797 33.4736H24.8604V25.6201C24.8604 25.1998 24.8909 24.7804 25.0146 24.4795C25.3529 23.6399 26.1231 22.7705 27.416 22.7705C29.1103 22.7705 29.7881 24.0605 29.7881 25.9502V33.4736H34.4678V25.4102C34.4677 21.0909 32.1589 19.0811 29.0791 19.0811ZM15.2793 12.6318C13.6783 12.6319 12.6319 13.6818 12.6318 15.0605C12.6318 16.4108 13.6474 17.4912 15.2188 17.4912H15.249C16.8807 17.491 17.8965 16.4107 17.8965 15.0605C17.866 13.6818 16.8804 12.6318 15.2793 12.6318Z",fill:"white"}));case"Instagram":return n("svg",{...i},n("path",{d:"M24 0C37.2548 0 48 10.7452 48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0ZM23.999 11.2002C20.5245 11.2002 20.0877 11.2152 18.7227 11.2773C17.3602 11.3398 16.43 11.5556 15.6162 11.8721C14.7744 12.199 14.06 12.636 13.3486 13.3477C12.6366 14.0591 12.1991 14.7736 11.8711 15.6152C11.5538 16.4293 11.3377 17.3597 11.2764 18.7217C11.2153 20.087 11.2002 20.5238 11.2002 24C11.2002 27.476 11.2155 27.9113 11.2773 29.2764C11.34 30.639 11.5558 31.5699 11.8721 32.3838C12.1993 33.2255 12.636 33.94 13.3477 34.6514C14.0589 35.3634 14.7739 35.801 15.6152 36.1279C16.4295 36.4444 17.3596 36.6602 18.7217 36.7227C20.087 36.7848 20.5233 36.7998 23.999 36.7998C27.4756 36.7998 27.911 36.7848 29.2764 36.7227C30.639 36.6602 31.5704 36.4445 32.3848 36.1279C33.2261 35.801 33.9394 35.3631 34.6504 34.6514C35.3624 33.9399 35.7999 33.2254 36.1279 32.3838C36.4426 31.5697 36.6586 30.6393 36.7227 29.2773C36.784 27.912 36.7998 27.4763 36.7998 24C36.7998 20.5242 36.784 20.0876 36.7227 18.7227C36.6587 17.36 36.4426 16.4291 36.1279 15.6152C35.7999 14.7734 35.3623 14.0591 34.6504 13.3477C33.9385 12.6358 33.2264 12.1987 32.3838 11.8721C31.5678 11.5555 30.6371 11.3397 29.2744 11.2773C27.9093 11.2152 27.4745 11.2002 23.999 11.2002Z",fill:"white"}),n("path",{d:"M22.8525 13.5068C23.1933 13.5063 23.5739 13.5068 24.001 13.5068C27.4186 13.5068 27.8242 13.5197 29.1738 13.5811C30.4214 13.6381 31.0986 13.8463 31.5498 14.0215C32.1471 14.2535 32.5737 14.5305 33.0215 14.9785C33.4695 15.4265 33.746 15.8538 33.9785 16.4512C34.1537 16.9018 34.3631 17.5792 34.4199 18.8271C34.4812 20.1763 34.4941 20.5822 34.4941 23.998C34.4941 27.4134 34.4812 27.819 34.4199 29.168C34.3629 30.4158 34.1537 31.0933 33.9785 31.5439C33.7466 32.1412 33.4693 32.567 33.0215 33.0146C32.5735 33.4627 32.1474 33.7397 31.5498 33.9717C31.0992 34.1477 30.4216 34.356 29.1738 34.4131C27.8245 34.4744 27.4186 34.4883 24.001 34.4883C20.5835 34.4883 20.1783 34.4744 18.8291 34.4131C17.5811 34.3555 16.9036 34.1469 16.4521 33.9717C15.8549 33.7397 15.4284 33.4625 14.9805 33.0146C14.5325 32.5666 14.255 32.1406 14.0225 31.543C13.8473 31.0923 13.6378 30.4148 13.5811 29.167C13.5197 27.8179 13.5078 27.4121 13.5078 23.9941C13.5078 20.5762 13.5197 20.1726 13.5811 18.8232C13.6381 17.5755 13.8473 16.8984 14.0225 16.4473C14.2545 15.8499 14.5325 15.4236 14.9805 14.9756C15.4285 14.5276 15.8549 14.2501 16.4521 14.0176C16.9034 13.8416 17.5811 13.6335 18.8291 13.5762C20.0097 13.5228 20.4674 13.5066 22.8525 13.5039V13.5068ZM24.001 17.4268C20.371 17.427 17.4277 20.3709 17.4277 24.001C17.4279 27.6309 20.3711 30.5721 24.001 30.5723C27.631 30.5723 30.573 27.631 30.5732 24.001C30.5732 20.3708 27.6311 17.4268 24.001 17.4268ZM30.834 15.6318C29.9861 15.632 29.2979 16.3198 29.2979 17.168C29.2979 18.0159 29.9861 18.704 30.834 18.7041C31.682 18.7041 32.3701 18.016 32.3701 17.168C32.37 16.32 31.6819 15.6318 30.834 15.6318Z",fill:"white"}),n("path",{d:"M24.0011 19.7334C26.3574 19.7334 28.2678 21.6436 28.2678 24.0001C28.2678 26.3564 26.3574 28.2668 24.0011 28.2668C21.6445 28.2668 19.7344 26.3564 19.7344 24.0001C19.7344 21.6436 21.6445 19.7334 24.0011 19.7334Z",fill:"white"}));case"TikTok":return n("svg",{...i},n("path",{d:"M24 0C37.2548 0 48 10.7452 48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0ZM25.0273 28.3477C25.0273 30.2955 23.4721 31.8955 21.5361 31.8955C19.6003 31.8954 18.0449 30.2955 18.0449 28.3477C18.045 26.4347 19.5659 24.8693 21.4326 24.7998V20.6953C17.3188 20.7648 14.0001 24.1391 14 28.3477C14 32.5912 17.3883 36 21.5713 36C25.754 35.9998 29.1416 32.5562 29.1416 28.3477V19.9648C30.6627 21.0779 32.5295 21.7396 34.5 21.7744V17.6699C31.4579 17.5656 29.0723 15.0609 29.0723 12H25.0273V28.3477Z",fill:"white"}));case"YouTube":return n("svg",{...i},n("path",{d:"M24 0C37.2548 0 48 10.7452 48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0ZM24 15.2002C24 15.2002 15.9944 15.1997 13.998 15.749C12.8966 16.0513 12.0288 16.9423 11.7344 18.0732C11.1996 20.1231 11.2002 24.4004 11.2002 24.4004C11.2002 24.4472 11.2026 28.6878 11.7344 30.7266C12.0288 31.8575 12.8966 32.7483 13.998 33.0508C15.9944 33.6 24 33.5996 24 33.5996C24 33.5996 32.0057 33.6 34.002 33.0508C35.1033 32.7483 35.9703 31.8575 36.2646 30.7266C36.7966 28.6879 36.7998 24.4472 36.7998 24.4004C36.7998 24.4004 36.7996 20.1231 36.2646 18.0732C35.9703 16.9424 35.1033 16.0513 34.002 15.749C32.0057 15.1997 24 15.2002 24 15.2002Z",fill:"white"}),n("path",{d:"M21.6016 28.7998V20.7998L28.0016 24.8L21.6016 28.7998Z",fill:"white"}))}}const f=class{constructor(n){e(this,n)}layout;resolved=a;resolve(){this.resolved=null!=this.layout?function(e){const n=e&&"object"==typeof e?e:{},i=n.footer&&"object"==typeof n.footer?n.footer:{};return{social:s(i?.social),columns:c(i?.columns),credits:A(i?.credits)?i.credits.trim():"",copyright:A(i?.copyright)?i.copyright.trim():""}}(o(this.layout)):a}componentWillLoad(){this.resolve()}watchLayout(){this.resolve()}renderLegalText(){const{credits:e,copyright:i}=this.resolved;return e||i?n("div",{class:"legal"},e?n("p",{class:"legal__p"},e):null,e&&i?n("p",{class:"legal__p"},String.fromCharCode(8203)):null,i?n("p",{class:"legal__p"},i):null):null}renderSocialLinks(){const e=this.resolved.social;return 0===e.length?null:n("div",{class:"social"},e.map((e=>n("a",{class:"social__link",href:e.href,"aria-label":e.platform,target:l(e.href)?"_blank":void 0,rel:l(e.href)?"noreferrer noopener":void 0},n("span",{class:"social__icon","aria-hidden":"true"},n(h,{platform:e.platform}))))))}renderColumns(){const e=this.resolved.columns;return 0===e.length?null:n("div",{class:"columns"},e.map(((e,i)=>n("div",{class:"columns__col",key:i},i>0?n("div",{class:"columns__divider","aria-hidden":"true"}):null,n("nav",{class:"columns__links","aria-label":`Footer links column ${i+1}`},e.links.map(((e,i)=>n("a",{class:"footer-link",href:e.href,key:i,target:d(e)?"_blank":void 0,rel:d(e)?"noreferrer noopener":void 0},e.label))))))))}render(){return n("footer",{key:"f592a5632d0b39833ac01384f8541082afc36c6b",class:"footer"},n("div",{key:"dca05ec8f8eb48beef27e20305865156b2d2122a",class:"container container--stack"},this.renderSocialLinks(),n("div",{key:"0d73dd8a28f2839e00f4dc23daa0219ac6d83662",class:"standard"},this.renderColumns(),this.renderLegalText())))}static get watchers(){return{layout:[{watchLayout:0}]}}};f.style="*,*::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-inline:1rem;padding-block:12px}@media (width >= 40rem){.container{max-width:40rem}}@media (width >= 48rem){.container{max-width:48rem;padding-inline:2rem;padding-block:20px}}@media (width >= 64rem){.container{max-width:64rem}}@media (width >= 80rem){.container{max-width:80rem;padding-block:28px}}@media (width >= 86rem){.container{max-width:86rem}}.container--stack{display:flex;flex-direction:column;align-items:center;gap:20px}@media (min-width: 768px){.container--stack{gap:36px}}.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}.footer{background:#030712;color:#ffffff;font-family:var(--weg-font-family);font-weight:300}.social{display:flex;align-items:center;justify-content:center;gap:16px}@media (min-width: 768px){.social{gap:28px}}.social__link{width:48px;height:48px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;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:48px;height:48px}.footer-link{color:#ffffff;text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px;outline:none}.footer-link:hover{text-decoration-thickness:2px}.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:16px;line-height:24px}@media (min-width: 768px){.legal{font-size:18px;line-height:28px}}.legal__p{margin:0}.standard{width:100%;display:flex;flex-direction:column;align-items:center;gap:36px;text-align:center;font-size:16px;line-height:24px}@media (min-width: 768px){.standard{font-size:18px;line-height:28px}}.columns{width:100%;display:grid;gap:28px 16px;grid-template-columns:1fr}@media (min-width: 640px){.columns{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media (min-width: 768px){.columns{display:flex;flex-direction:row;align-items:stretch;justify-content:center;gap:0}}.columns__col{display:flex;flex:1 1 0;min-width:0;align-items:stretch}@media (max-width: 767px){.columns__col{flex-direction:column}}.columns__divider{display:none;width:1px;background:rgba(255, 255, 255, 0.35);align-self:center;min-height:72px;margin:0 12px;flex-shrink:0}@media (min-width: 768px){.columns__divider{display:block}}.columns__links{display:flex;flex-direction:column;align-items:flex-start;gap:12px;flex:1;min-width:0;padding:0 4px;text-align:left}@media (min-width: 768px){.columns__links{padding:0 12px}}";const u="https://www.warwickemploymentgroup.com",p="https://account.warwickemploymentgroup.com",g=`${u}/`,x={logoHref:g,links:[{label:"Find a job",href:`${u}/find-a-job`},{label:"Dashboard",href:`${p}/dashboard`}],manageAccount:{href:`${p}/account/manage`},signOut:{label:"Sign out",href:`${p}/account/login`}},v={logoHref:g,dropdowns:[],links:[],signIn:null,signOut:null};function b(e){if(!Array.isArray(e))return[];const n=[];for(const i of e){if(!i||"object"!=typeof i)continue;const e=i.label,t=r(i.items);A(e)&&0!==t.length&&n.push({label:e.trim(),items:t})}return n}function w(e){if(!e||"object"!=typeof e)return null;const n=e.label,i=e.href;return A(n)&&A(i)?{label:n.trim(),href:i.trim()}:null}function m(e){if(!e||"object"!=typeof e)return null;const n=e.label,i=e.href;return A(n)?{label:n.trim(),href:A(i)?i.trim():void 0}:null}function C(){return n("svg",{viewBox:"0 0 448 512",width:"20",height:"20","aria-hidden":"true",focusable:"false"},n("path",{d:"M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464l349.5 0c-8.9-63.3-63.3-112-129-112l-91.4 0c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3z",fill:"currentColor"}))}function y(){return n("svg",{viewBox:"0 0 26 24",width:"26",height:"24","aria-hidden":"true",focusable:"false",fill:"none"},n("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"}))}function z(){return n("svg",{viewBox:"0 0 24 24",width:"28",height:"28","aria-hidden":"true",focusable:"false",fill:"none"},n("path",{d:"M4 7h16M4 12h16M4 17h16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}))}function D(){return n("svg",{viewBox:"0 0 24 24",width:"24",height:"24","aria-hidden":"true",focusable:"false",fill:"none"},n("path",{d:"M6 6l12 12M18 6L6 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}))}function B({expanded:e}){return n("span",{class:"toggle-icon","aria-hidden":"true"},n("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none"},n("path",e?{d:"M6 12h12",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round"}:{d:"M12 6v12M6 12h12",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round"})))}function H({href:e}){return n("a",{class:"logo-link",href:e,"aria-label":"Home"},n("img",{class:"logo",src:"data:image/png;base64,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",alt:"WEG",width:"225",height:"83"}))}const k=class{constructor(n){e(this,n),this.wegAuthClick=i(this,"wegAuthClick")}layout;signedIn=!1;userName;wegAuthClick;get el(){return t(this)}resolved=v;menuOpen=!1;openDropdown=null;expandedSection=null;boundHandleDocumentClick=this.handleDocumentClick.bind(this);resolve(){this.resolved=null!=this.layout?function(e){const n=e&&"object"==typeof e?e:{},i=n.header&&"object"==typeof n.header?n.header:{};return{logoHref:A(i.logoHref)?i.logoHref.trim():g,dropdowns:b(i.dropdowns),links:r(i.links),signIn:w(i.signIn),signOut:m(i.signOut)}}(o(this.layout)):v}componentWillLoad(){this.resolve()}connectedCallback(){document.addEventListener("click",this.boundHandleDocumentClick)}disconnectedCallback(){document.removeEventListener("click",this.boundHandleDocumentClick)}watchLayout(){this.resolve()}handleKeyDown(e){"Escape"===e.key&&(this.menuOpen=!1,this.openDropdown=null)}handleDocumentClick(e){const n=e.target;n&&this.el.contains(n)||(this.openDropdown=null)}toggleDropdown(e){this.openDropdown=this.openDropdown===e?null:e}toggleAccordion(e){this.expandedSection=this.expandedSection===e?null:e}openMenu(){this.menuOpen=!0,this.expandedSection=null}closeMenu(){this.menuOpen=!1,this.expandedSection=null}getActiveHeaderData(){return this.signedIn?{logoHref:x.logoHref,dropdowns:[],links:[...x.links],signIn:null,signOut:x.signOut}:this.resolved}getLogoHref(){return this.getActiveHeaderData().logoHref}getManageAccountLabel(){const e=this.userName?.trim();return e||"Manage Account"}getAuthControl(){if(this.signedIn)return null;const e=this.resolved.signIn;return e?{label:e.label,href:e.href,action:"sign-in"}:null}handleAuthClick(e,n){const i=this.getAuthControl()??{href:x.signOut.href,action:"sign-out"};return this.wegAuthClick.emit({action:i.action}).defaultPrevented?(e.preventDefault(),void n?.()):"sign-out"===i.action?(e.preventDefault(),i.href&&window.location.assign(i.href),void n?.()):void n?.()}renderAuthControl(e){const i=this.getAuthControl();if(!i)return null;const t={"sign-in-link":!e.iconOnly,"icon-button":!!e.iconOnly,[e.className||""]:!!e.className},o=[n(C,{key:"icon"}),e.iconOnly?null:i.label,e.iconOnly?n("span",{class:"sr-only"},i.label):null];return n("a",{class:t,href:i.href,"aria-label":i.label,onClick:n=>this.handleAuthClick(n,e.onNavigate)},o)}renderSignedInAuthControls(e){const i=this.getManageAccountLabel(),t=x.signOut;return e.iconOnly?n("a",{class:"icon-button manage-account-link",href:x.manageAccount.href,"aria-label":i,onClick:()=>e.onNavigate?.()},n(C,null),n("span",{class:"sr-only"},i)):[n("li",{class:"desktop-nav__item",key:"manage-account"},n("a",{class:"sign-in-link manage-account-link",href:x.manageAccount.href,"aria-label":i,onClick:()=>e.onNavigate?.()},n(C,null),i)),n("li",{class:"desktop-nav__item",key:"sign-out"},n("a",{class:"sign-in-link sign-out-link",href:t.href,"aria-label":t.label,onClick:n=>this.handleAuthClick(n,e.onNavigate)},n(y,null),t.label))]}renderDesktop(){const{dropdowns:e,links:i}=this.getActiveHeaderData();return n("div",{class:"desktop"},n(H,{href:this.getLogoHref()}),n("nav",{class:"desktop-nav","aria-label":"Main"},n("ul",{class:"desktop-nav__list"},e.map((e=>{const i=this.openDropdown===e.label;return n("li",{class:"desktop-nav__item",key:e.label},n("button",{type:"button",class:{"dropdown-trigger":!0,"dropdown-trigger--open":i},"aria-expanded":i?"true":"false","aria-haspopup":"true",onClick:n=>{n.stopPropagation(),this.toggleDropdown(e.label)}},e.label,n(B,{expanded:i})),i?n("div",{class:"dropdown-panel",role:"region","aria-label":e.label},n("div",{class:"dropdown-panel__accent"},n("div",{class:"dropdown-panel__links"},e.items.map((i=>n("a",{class:"dropdown-panel__link",href:i.href,key:`${e.label}:${i.label}`},i.label)))))):null)})),i.map((e=>n("li",{class:"desktop-nav__item",key:e.label},n("a",{class:"nav-link",href:e.href},e.label)))),this.signedIn?this.renderSignedInAuthControls({}):this.getAuthControl()?n("li",{class:"desktop-nav__item"},this.renderAuthControl({})):null)))}renderMobileBar(){return n("div",{class:"mobile"},n("button",{type:"button",class:"icon-button","aria-label":"Open menu",onClick:()=>this.openMenu()},n(z,null)),n(H,{href:this.getLogoHref()}),this.signedIn?this.renderSignedInAuthControls({iconOnly:!0}):this.renderAuthControl({iconOnly:!0}))}renderMobileOverlay(){if(!this.menuOpen)return null;const{dropdowns:e,links:i}=this.getActiveHeaderData();return n("div",{class:"mobile-overlay",role:"dialog","aria-modal":"true","aria-label":"Menu"},n("div",{class:"mobile-overlay__header"},n("button",{type:"button",class:"icon-button","aria-label":"Close menu",onClick:()=>this.closeMenu()},n(D,null)),n("div",{class:"mobile-overlay__logo"},n(H,{href:this.getLogoHref()})),this.signedIn?this.renderSignedInAuthControls({iconOnly:!0,onNavigate:()=>this.closeMenu()}):this.renderAuthControl({iconOnly:!0,onNavigate:()=>this.closeMenu()})),n("nav",{class:"mobile-nav","aria-label":"Main"},e.map((e=>{const i=this.expandedSection===e.label;return n("div",{class:"mobile-nav__section",key:e.label},n("button",{type:"button",class:"mobile-nav__row","aria-expanded":i?"true":"false",onClick:()=>this.toggleAccordion(e.label)},n("span",null,e.label),n(B,{expanded:i})),i?n("div",{class:"mobile-nav__sub"},e.items.map((i=>n("a",{class:"mobile-nav__sub-link",href:i.href,key:`${e.label}:${i.label}`,onClick:()=>this.closeMenu()},i.label)))):null)})),i.map((e=>n("div",{class:"mobile-nav__section",key:e.label},n("a",{class:"mobile-nav__row",href:e.href,onClick:()=>this.closeMenu()},e.label)))),this.signedIn?n("div",{class:"mobile-nav__section"},n("a",{class:"mobile-nav__row manage-account-link",href:x.manageAccount.href,onClick:()=>this.closeMenu()},this.getManageAccountLabel()),n("a",{class:"mobile-nav__row sign-out-link",href:x.signOut.href,onClick:e=>this.handleAuthClick(e,(()=>this.closeMenu()))},n(y,null),x.signOut.label)):null))}render(){return n("header",{key:"0f20e384f9185157d95ece52ec48ec013d745162",class:"header"},n("div",{key:"a5ca65e830a86583050fab3c04e68b8818baac00",class:"container"},this.renderDesktop(),this.renderMobileBar()),this.renderMobileOverlay())}static get watchers(){return{layout:[{watchLayout:0}]}}};k.style="*,*::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-inline:1rem;padding-block:12px}@media (width >= 40rem){.container{max-width:40rem}}@media (width >= 48rem){.container{max-width:48rem;padding-inline:2rem;padding-block:20px}}@media (width >= 64rem){.container{max-width:64rem}}@media (width >= 80rem){.container{max-width:80rem;padding-block:28px}}@media (width >= 86rem){.container{max-width:86rem}}.container--stack{display:flex;flex-direction:column;align-items:center;gap:20px}@media (min-width: 768px){.container--stack{gap:36px}}.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}.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}@media (min-width: 768px){.header{border-bottom-width:4px}}.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}@media (min-width: 768px){.logo{height:80px}}.desktop{display:none}@media (min-width: 768px){.desktop{display:flex;width:100%;align-items:center;justify-content:space-between;gap:24px}}.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__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 8px 0;font-weight:600;color:inherit;text-decoration:none;outline:none}.dropdown-panel__link:hover{opacity:0.85}.dropdown-panel__link:focus-visible{outline:2px solid var(--weg-color-accent);outline-offset:2px;border-radius:4px}.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%}@media (min-width: 768px){.mobile{display:none}}.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}";export{f as weg_footer,k as weg_header}
@@ -1 +1 @@
1
- import{p as e,b as o}from"./p-D8pmhPiH.js";export{s as setNonce}from"./p-D8pmhPiH.js";import{g as a}from"./p-DQuL1Twl.js";(()=>{const o=import.meta.url,a={};return""!==o&&(a.resourcesUrl=new URL(".",o).href),e(a)})().then((async e=>(await a(),o([["p-444bffb0",[[513,"weg-footer",{layout:[1],resolved:[32]},null,{layout:[{watchLayout:0}]}],[513,"weg-header",{layout:[1],signedIn:[516,"signed-in"],userName:[1,"user-name"],resolved:[32],menuOpen:[32],openDropdown:[32],expandedSection:[32]},[[8,"keydown","handleKeyDown"]],{layout:[{watchLayout:0}]}]]],["p-d61033bd",[[513,"my-component",{first:[1],middle:[1],last:[1]}]]]],e))));
1
+ import{p as e,b as o}from"./p-D8pmhPiH.js";export{s as setNonce}from"./p-D8pmhPiH.js";import{g as a}from"./p-DQuL1Twl.js";(()=>{const o=import.meta.url,a={};return""!==o&&(a.resourcesUrl=new URL(".",o).href),e(a)})().then((async e=>(await a(),o([["p-74dffc82",[[513,"weg-footer",{layout:[1],resolved:[32]},null,{layout:[{watchLayout:0}]}],[513,"weg-header",{layout:[1],signedIn:[516,"signed-in"],userName:[1,"user-name"],resolved:[32],menuOpen:[32],openDropdown:[32],expandedSection:[32]},[[8,"keydown","handleKeyDown"]],{layout:[{watchLayout:0}]}]]],["p-d61033bd",[[513,"my-component",{first:[1],middle:[1],last:[1]}]]]],e))));
package/docs/angular.md CHANGED
@@ -9,7 +9,7 @@ Assumes Angular 17+ with **standalone** components (default for `ng new`).
9
9
  | `<weg-header>` | `import 'weg-shared-layout/weg-header';` |
10
10
  | `<weg-footer>` | `import 'weg-shared-layout/weg-footer';` |
11
11
 
12
- Both accept the same `layout` payload ([`dummy-data.json`](../src/assets/dummy-data.json)). `<weg-header>` also accepts **`signed-in`** and emits **`wegAuthClick`**.
12
+ Both accept the same `layout` payload ([`dummy-data.json`](../src/assets/dummy-data.json)). `<weg-header>` also accepts **`signed-in`**, **`user-name`**, and emits **`wegAuthClick`**.
13
13
 
14
14
  ## 1. Install
15
15
 
@@ -33,8 +33,6 @@ defineCustomElements();
33
33
  bootstrapApplication(App, appConfig).catch((err) => console.error(err));
34
34
  ```
35
35
 
36
- If `defineCustomElements` is async in your Stencil build, `await` it before bootstrapping.
37
-
38
36
  **Alternative:** side-effect import only the tags you need (no loader call):
39
37
 
40
38
  ```ts
@@ -54,6 +52,7 @@ Use **`[layout]="..."`** so Angular sets the JavaScript `layout` property, not a
54
52
  // src/app/app.ts
55
53
  import { Component, CUSTOM_ELEMENTS_SCHEMA, signal } from '@angular/core';
56
54
  import { RouterOutlet } from '@angular/router';
55
+ import { ACCOUNT_LOGIN_HREF, HEADER_SIGN_IN } from '../auth';
57
56
  import layoutFixture from 'weg-shared-layout/dummy-data.json';
58
57
 
59
58
  @Component({
@@ -66,19 +65,19 @@ import layoutFixture from 'weg-shared-layout/dummy-data.json';
66
65
  export class App {
67
66
  protected readonly layoutData = signal(layoutFixture);
68
67
  protected readonly signedIn = signal(false);
68
+ protected readonly userName = signal<string | undefined>(undefined);
69
69
 
70
70
  protected onAuthClick(event: Event) {
71
71
  const customEvent = event as CustomEvent<{ action: 'sign-in' | 'sign-out' }>;
72
72
  customEvent.preventDefault();
73
73
 
74
74
  if (customEvent.detail.action === 'sign-out') {
75
- // call your logout service
76
75
  this.signedIn.set(false);
76
+ window.location.href = ACCOUNT_LOGIN_HREF;
77
77
  return;
78
78
  }
79
79
 
80
- // navigate to sign-in, e.g. inject Router
81
- window.location.href = '/account/login';
80
+ window.location.href = layoutFixture.header.signIn?.href ?? HEADER_SIGN_IN.href;
82
81
  }
83
82
  }
84
83
  ```
@@ -88,6 +87,7 @@ export class App {
88
87
  <weg-header
89
88
  [layout]="layoutData()"
90
89
  [signedIn]="signedIn()"
90
+ [userName]="userName()"
91
91
  (wegAuthClick)="onAuthClick($event)"
92
92
  ></weg-header>
93
93
 
@@ -98,17 +98,23 @@ export class App {
98
98
 
99
99
  Enable `resolveJsonModule` in `tsconfig.app.json` if you import `dummy-data.json`.
100
100
 
101
+ Define auth URLs in `src/app/auth.ts` (same shape as the React/Next examples).
102
+
101
103
  In production, replace `layoutFixture` with data from your services; keep the same object shape.
102
104
 
103
- ## Header: `signed-in` and `wegAuthClick`
105
+ ## Header: `signed-in`, `user-name`, and `wegAuthClick`
104
106
 
105
107
  | Input / output | Binding | Notes |
106
108
  | --- | --- | --- |
107
- | Session state | `[signedIn]="signedIn()"` | When `true`, shows `layout.header.signOut` instead of `signIn` |
109
+ | CMS nav | `[layout]="layoutData()"` | `dropdowns`, `links`, `signIn` used when signed out |
110
+ | Session state | `[signedIn]="signedIn()"` | When `true`, CMS nav is ignored; built-in signed-in nav is shown |
111
+ | User name | `[userName]="userName()"` | First name on Manage Account (signed in only) |
108
112
  | Auth click | `(wegAuthClick)="onAuthClick($event)"` | `event.detail.action` is `'sign-in'` or `'sign-out'` |
109
- | Prevent default | `event.preventDefault()` in handler | Stops link navigation / `signOut.href` redirect |
113
+ | Prevent default | `event.preventDefault()` in handler | Stops link navigation / redirect |
114
+
115
+ **Signed-in nav (built into the component):** Find a job, Dashboard, Manage Account, Sign out.
110
116
 
111
- Logo is bundled in the component not configurable via `layout`.
117
+ Logo **image** is bundled. Logo **link** uses `layout.header.logoHref` when signed out (defaults to WEG home).
112
118
 
113
119
  ## Footer
114
120
 
@@ -119,20 +125,11 @@ Logo is bundled in the component — not configurable via `layout`.
119
125
  | Symptom | Cause / fix |
120
126
  | --- | --- |
121
127
  | `'weg-header'` / `'weg-footer'` is not a known element | Add `CUSTOM_ELEMENTS_SCHEMA` on the component template that uses the tag. |
122
- | Header/footer empty | `defineCustomElements()` not called before bootstrap, tag bundle not imported, or `layout` not set — compare with `dummy-data.json`. |
128
+ | Header/footer empty | `defineCustomElements()` not called before bootstrap, tag bundle not imported, or `layout` not set. |
123
129
  | Auth always shows Sign in | `[signedIn]` not bound or still `false`. |
130
+ | Manage Account shows generic label | `[userName]` not set when signed in. |
124
131
  | SSR: `document is not defined` | Guard `defineCustomElements()` with `typeof window !== 'undefined'` or `isPlatformBrowser`. |
125
132
 
126
- ## TypeScript typings
127
-
128
- ```ts
129
- /// <reference types="weg-shared-layout/dist/types/components" />
130
- ```
131
-
132
- ## Legacy `NgModule`
133
-
134
- Add `CUSTOM_ELEMENTS_SCHEMA` on the module that declares components using these tags. `defineCustomElements()` in `main.ts` is still required when using the loader.
135
-
136
133
  ## See also
137
134
 
138
135
  - **[React SPA](./react.md)**
package/docs/nextjs.md CHANGED
@@ -6,10 +6,10 @@ Guide for **Next.js 13+ App Router** (`app/` directory). For Vite/CRA-style clie
6
6
 
7
7
  | Tag | Purpose |
8
8
  | --- | --- |
9
- | `<weg-header>` | Site header — logo (bundled), nav, Sign in / Sign out |
9
+ | `<weg-header>` | Site header — bundled logo, CMS nav (signed out), built-in nav (signed in), Sign in / Manage Account / Sign out |
10
10
  | `<weg-footer>` | Site footer — social, columns, legal text |
11
11
 
12
- Both accept **`layout`** (JSON string recommended in Next). `<weg-header>` also accepts **`signed-in`** and emits **`wegAuthClick`**.
12
+ Both accept **`layout`** (JSON string recommended in Next). `<weg-header>` also accepts **`signed-in`**, **`user-name`**, and emits **`wegAuthClick`**.
13
13
 
14
14
  ## Why Next.js is different
15
15
 
@@ -50,7 +50,21 @@ const nextConfig: NextConfig = {
50
50
  export default nextConfig;
51
51
  ```
52
52
 
53
- ## 2. Client layout components
53
+ ## 2. Auth constants (host app)
54
+
55
+ Keep sign-in/out URLs in your app — not imported from `weg-shared-layout`:
56
+
57
+ ```ts
58
+ // src/auth.ts
59
+ export const HEADER_SIGN_IN = {
60
+ label: 'Sign in',
61
+ href: 'https://account.warwickemploymentgroup.com/account/login',
62
+ };
63
+
64
+ export const ACCOUNT_LOGIN_HREF = HEADER_SIGN_IN.href;
65
+ ```
66
+
67
+ ## 3. Client layout components
54
68
 
55
69
  ```tsx
56
70
  // src/components/layout/Header.tsx
@@ -58,26 +72,29 @@ export default nextConfig;
58
72
 
59
73
  import { useCallback } from 'react';
60
74
  import { defineCustomElements } from 'weg-shared-layout/loader';
75
+ import { ACCOUNT_LOGIN_HREF, HEADER_SIGN_IN } from '@/auth';
61
76
  import 'weg-shared-layout/weg-header';
62
77
 
63
78
  defineCustomElements();
64
79
 
65
80
  type LayoutData = {
66
81
  header?: {
82
+ logoHref?: string;
67
83
  dropdowns?: { label: string; items: { label: string; href: string }[] }[];
68
84
  links?: { label: string; href: string }[];
69
85
  signIn?: { label: string; href: string };
70
- signOut?: { label: string; href?: string };
71
86
  };
72
87
  };
73
88
 
74
89
  export function Header({
75
90
  layout,
76
91
  signedIn,
92
+ userName,
77
93
  onSignedInChange,
78
94
  }: {
79
95
  layout: LayoutData;
80
96
  signedIn: boolean;
97
+ userName?: string;
81
98
  onSignedInChange?: (signedIn: boolean) => void;
82
99
  }) {
83
100
  const onAuthClick = useCallback(
@@ -85,12 +102,12 @@ export function Header({
85
102
  event.preventDefault();
86
103
 
87
104
  if (event.detail.action === 'sign-out') {
88
- // your logout(), then:
89
105
  onSignedInChange?.(false);
106
+ window.location.href = ACCOUNT_LOGIN_HREF;
90
107
  return;
91
108
  }
92
109
 
93
- window.location.href = layout.header?.signIn?.href ?? '/account/login';
110
+ window.location.href = layout.header?.signIn?.href ?? HEADER_SIGN_IN.href;
94
111
  },
95
112
  [layout, onSignedInChange],
96
113
  );
@@ -98,9 +115,9 @@ export function Header({
98
115
  return (
99
116
  <weg-header
100
117
  layout={JSON.stringify(layout)}
101
- signed-in={signedIn}
118
+ signedIn={signedIn}
119
+ {...(userName ? { userName } : {})}
102
120
  suppressHydrationWarning
103
- // @ts-expect-error Stencil custom event
104
121
  onWegAuthClick={onAuthClick}
105
122
  />
106
123
  );
@@ -137,10 +154,16 @@ export function SiteChrome({
137
154
  children: React.ReactNode;
138
155
  }) {
139
156
  const [signedIn, setSignedIn] = useState(false);
157
+ const userName = signedIn ? 'Alex' : undefined; // from your session
140
158
 
141
159
  return (
142
160
  <>
143
- <Header layout={layout} signedIn={signedIn} onSignedInChange={setSignedIn} />
161
+ <Header
162
+ layout={layout}
163
+ signedIn={signedIn}
164
+ userName={userName}
165
+ onSignedInChange={setSignedIn}
166
+ />
144
167
  {children}
145
168
  <Footer layout={layout} />
146
169
  </>
@@ -158,7 +181,7 @@ export function SiteChrome({
158
181
 
159
182
  Do **not** pass `layout={layoutObject}` directly on the custom elements in Next.
160
183
 
161
- ## 3. Server layout
184
+ ## 4. Server layout
162
185
 
163
186
  ```tsx
164
187
  // app/layout.tsx (Server Component)
@@ -176,7 +199,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
176
199
  }
177
200
  ```
178
201
 
179
- ## 4. Production: fetch layout on the server
202
+ ## 5. Production: fetch layout on the server
180
203
 
181
204
  ```tsx
182
205
  // app/layout.tsx
@@ -205,19 +228,23 @@ export default async function RootLayout({ children }: { children: React.ReactNo
205
228
 
206
229
  Pass the plain object into the Client Component; **stringify inside** the header/footer wrappers.
207
230
 
208
- Wire **`signedIn`** from your auth provider (e.g. session from a client context populated after mount, or a client-only wrapper around `<Header />`).
231
+ Wire **`signedIn`** and **`userName`** from your auth provider (session hook / context in a client wrapper).
209
232
 
210
233
  ## Header auth reference
211
234
 
212
- | API | Usage |
213
- | --- | --- |
214
- | `layout.header.signIn` | `{ label, href }` shown when `signed-in` is false |
215
- | `layout.header.signOut` | `{ label, href? }` shown when `signed-in` is true |
216
- | `signed-in` prop | Boolean session flag from host app |
217
- | `wegAuthClick` event | `event.detail.action`: `'sign-in'` \| `'sign-out'` |
218
- | `event.preventDefault()` | Skip default link navigation / redirect |
235
+ | API | Signed out | Signed in |
236
+ | --- | --- | --- |
237
+ | `layout.header.dropdowns` / `links` | CMS nav rendered | Ignored — built-in nav used |
238
+ | `layout.header.signIn` | Sign in button | Not shown |
239
+ | `layout.header.logoHref` | Logo link target | Built-in WEG home URL |
240
+ | `signed-in` prop | `false` | `true` — session flag from host app |
241
+ | `user-name` prop | | User's first name on Manage Account |
242
+ | `wegAuthClick` event | `'sign-in'` on Sign in click | `'sign-out'` on Sign out click |
243
+ | `event.preventDefault()` | Skip default navigation | Skip default redirect |
244
+
245
+ **Signed-in nav (built into the component):** Find a job, Dashboard, Manage Account, Sign out.
219
246
 
220
- Logo is bundled in the component not in `layout`.
247
+ The logo **image** is bundled. The logo **link** uses `layout.header.logoHref` when signed out.
221
248
 
222
249
  ## Passing `layout` — quick reference
223
250
 
@@ -254,6 +281,7 @@ declare module 'react' {
254
281
  | `document is not defined` | Loader in Server Component | Keep registration in `"use client"` files only. |
255
282
  | Empty after hydration | Object passed to CE without stringify | `JSON.stringify` in client wrapper. |
256
283
  | Logo missing | Stale package | Logo is inlined in `logo-data.ts`; rebuild / upgrade. |
284
+ | Header not clickable | Overlapping page content | `:host` uses `z-index: 20`; upgrade package if missing. |
257
285
  | Auth not updating | `signed-in` only on server | Manage session in client state / context. |
258
286
  | Hydration warning | Shadow DOM mismatch | `suppressHydrationWarning` on both tags. |
259
287
  | Build error | Package not transpiled | `transpilePackages: ['weg-shared-layout']`. |
@@ -263,7 +291,7 @@ declare module 'react' {
263
291
  - [ ] `weg-shared-layout` installed
264
292
  - [ ] `transpilePackages` in `next.config`
265
293
  - [ ] Client `Header.tsx` / `Footer.tsx` with loader, tag imports, `JSON.stringify`, `suppressHydrationWarning`
266
- - [ ] Auth: `signed-in` + `wegAuthClick` handler on header
294
+ - [ ] Auth: `signed-in`, `user-name`, and `wegAuthClick` handler on header
267
295
  - [ ] Server `layout.tsx` imports client chrome only (no `defineCustomElements` on server)
268
296
  - [ ] Layout fetched or imported server-side, passed as serializable props
269
297
  - [ ] TypeScript augmentation for `'weg-header'` and `'weg-footer'`
package/docs/react.md CHANGED
@@ -6,12 +6,12 @@ Guide for **client-rendered** React apps (Vite, Create React App, etc.). If you
6
6
 
7
7
  | Tag | Purpose |
8
8
  | --- | --- |
9
- | `<weg-header>` | Site header — logo (bundled), nav dropdowns, flat links, Sign in / Sign out |
9
+ | `<weg-header>` | Site header — bundled logo, CMS nav (signed out), built-in nav (signed in), Sign in / Manage Account / Sign out |
10
10
  | `<weg-footer>` | Site footer — social links, columns, credits, copyright |
11
11
 
12
12
  Both are **presentational** [Stencil](https://stenciljs.com/) Web Components. They **do not fetch data** — your app passes a **`layout`** payload (API, CMS, or [`dummy-data.json`](../src/assets/dummy-data.json)).
13
13
 
14
- `<weg-header>` additionally accepts **`signed-in`** and emits **`wegAuthClick`** for auth handling.
14
+ `<weg-header>` additionally accepts **`signed-in`**, **`user-name`**, and emits **`wegAuthClick`**.
15
15
 
16
16
  ## Requirements
17
17
 
@@ -46,15 +46,6 @@ import 'weg-shared-layout/weg-header';
46
46
  import 'weg-shared-layout/weg-footer';
47
47
  ```
48
48
 
49
- **Alternative:** import individual tag bundles only (no loader):
50
-
51
- ```ts
52
- import 'weg-shared-layout/weg-header';
53
- import 'weg-shared-layout/weg-footer';
54
- ```
55
-
56
- Use the loader when you may add more tags from this package later.
57
-
58
49
  ## 2. Layout shell
59
50
 
60
51
  ### Recommended: pass `layout` as an object (React 19+)
@@ -84,42 +75,63 @@ export function SiteLayout({ children }: { children: React.ReactNode }) {
84
75
 
85
76
  ## 3. Header auth
86
77
 
87
- The WEG logo is bundled inside `<weg-header>` — not configurable via `layout`.
78
+ Define auth URLs once in your app:
79
+
80
+ ```ts
81
+ // auth.ts
82
+ export const HEADER_SIGN_IN = {
83
+ label: 'Sign in',
84
+ href: 'https://account.warwickemploymentgroup.com/account/login',
85
+ };
86
+
87
+ export const ACCOUNT_LOGIN_HREF = HEADER_SIGN_IN.href;
88
+ ```
89
+
90
+ ### Signed out
88
91
 
89
- Configure labels in `layout.header`:
92
+ Pass CMS/API layout with `dropdowns`, `links`, and `signIn`. Use [`dummy-data.json`](../src/assets/dummy-data.json) for the full shape. Keep auth URLs in a local file:
90
93
 
91
- ```json
92
- "signIn": { "label": "Sign in", "href": "/account/login" },
93
- "signOut": { "label": "Sign out" }
94
+ ```ts
95
+ // auth.ts (host app)
96
+ export const HEADER_SIGN_IN = {
97
+ label: 'Sign in',
98
+ href: 'https://account.warwickemploymentgroup.com/account/login',
99
+ };
100
+
101
+ export const ACCOUNT_LOGIN_HREF = HEADER_SIGN_IN.href;
94
102
  ```
95
103
 
96
- Set **`signed-in`** from your session state and listen for **`wegAuthClick`**:
104
+ ### Signed in
105
+
106
+ Set **`signed-in`** and optionally **`user-name`**. The component **ignores CMS nav** and shows built-in links: Find a job, Dashboard, Manage Account, Sign out.
97
107
 
98
108
  ```tsx
99
109
  import { useCallback, useState } from 'react';
110
+ import { ACCOUNT_LOGIN_HREF, HEADER_SIGN_IN } from './auth';
100
111
  import 'weg-shared-layout/weg-header';
101
112
  import layout from 'weg-shared-layout/dummy-data.json';
102
113
 
103
114
  export function SiteHeader() {
104
115
  const [signedIn, setSignedIn] = useState(false);
116
+ const userName = signedIn ? 'Alex' : undefined;
105
117
 
106
118
  const onAuthClick = useCallback((event: CustomEvent<{ action: 'sign-in' | 'sign-out' }>) => {
107
119
  event.preventDefault();
108
120
 
109
121
  if (event.detail.action === 'sign-out') {
110
- // your logout(), then:
111
122
  setSignedIn(false);
123
+ window.location.href = ACCOUNT_LOGIN_HREF;
112
124
  return;
113
125
  }
114
126
 
115
- window.location.href = '/account/login';
127
+ window.location.href = layout.header.signIn?.href ?? HEADER_SIGN_IN.href;
116
128
  }, []);
117
129
 
118
130
  return (
119
131
  <weg-header
120
132
  layout={layout}
121
- signed-in={signedIn}
122
- // @ts-expect-error Stencil custom event
133
+ signedIn={signedIn}
134
+ {...(userName ? { userName } : {})}
123
135
  onWegAuthClick={onAuthClick}
124
136
  />
125
137
  );
@@ -128,7 +140,8 @@ export function SiteHeader() {
128
140
 
129
141
  | Prop / event | Purpose |
130
142
  | --- | --- |
131
- | `signed-in={boolean}` | Shows Sign out when `true` |
143
+ | `signedIn={boolean}` | Switches to signed-in nav when `true` |
144
+ | `userName={string}` | First name beside profile icon on Manage Account |
132
145
  | `onWegAuthClick` | Host handles routing / logout; call `event.preventDefault()` to override defaults |
133
146
 
134
147
  **Ref fallback for the event** (if `onWegAuthClick` does not bind in your React version):
@@ -152,11 +165,9 @@ useEffect(() => {
152
165
  return () => el.removeEventListener('wegAuthClick', handler);
153
166
  }, []);
154
167
 
155
- return <weg-header ref={ref} layout={layout} signed-in={signedIn} />;
168
+ return <weg-header ref={ref} layout={layout} signedIn={signedIn} userName="Alex" />;
156
169
  ```
157
170
 
158
- Update `signedIn` via `ref.current.signedIn = true` if property binding is unreliable.
159
-
160
171
  ## 4. Production: fetch layout from your API
161
172
 
162
173
  ```tsx
@@ -222,16 +233,6 @@ declare module 'react' {
222
233
  }
223
234
  ```
224
235
 
225
- Enable in `tsconfig.json` when importing JSON fixtures:
226
-
227
- ```json
228
- {
229
- "compilerOptions": {
230
- "resolveJsonModule": true
231
- }
232
- }
233
- ```
234
-
235
236
  ## `layout` prop vs attribute
236
237
 
237
238
  | How data is set | Works with object? |
@@ -240,21 +241,16 @@ Enable in `tsconfig.json` when importing JSON fixtures:
240
241
  | **Attribute** `layout="[object Object]"` / React 18 `layout={obj}` | No — components stay empty |
241
242
  | **Attribute** `layout={JSON.stringify(obj)}` | Yes — component parses JSON |
242
243
 
243
- Both components accept `layout` as an object or JSON string.
244
-
245
- ## Note: `prop:layout` is unreliable in React
246
-
247
- Prefer `layout={object}`, `layout={JSON.stringify(object)}`, or ref assignment — not `prop:layout`.
248
-
249
244
  ## Troubleshooting
250
245
 
251
246
  | Symptom | Likely cause | Fix |
252
247
  | --- | --- | --- |
253
- | Empty header/footer | Loader/tag import missing | `defineCustomElements()` + `import 'weg-shared-layout/weg-header'` (and footer). |
248
+ | Empty header/footer | Loader/tag import missing | `defineCustomElements()` + tag imports. |
254
249
  | Empty despite correct data | React set `layout` as attribute | React 19+, or `JSON.stringify`, or ref assignment. |
255
250
  | Logo missing on header | Old build without inlined logo | Upgrade package; logo is bundled in `logo-data.ts`. |
256
- | Auth always Sign in | `signed-in` not set | Bind `signed-in={!!session}`. |
257
- | `onWegAuthClick` not firing | React CE event binding | Use `addEventListener` on a ref (see above). |
251
+ | Auth always Sign in | `signed-in` not set | Bind `signedIn={!!session}`. |
252
+ | Manage Account shows label not name | `user-name` not set | Pass `userName` when signed in. |
253
+ | `onWegAuthClick` not firing | React CE event binding | Use `addEventListener` on a ref. |
258
254
  | TS: unknown element | No augmentation | Add `weg-shared-layout-jsx.d.ts`. |
259
255
 
260
256
  ## See also