chordia-ui 3.2.6 → 3.2.7

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),k=require("react"),n=require("lucide-react"),I={home:n.Home,projects:n.FolderClosed,folder:n.FolderClosed,organization:n.Users,users:n.Users,dashboard:n.LayoutDashboard,history:n.Clock3,sessions:n.Clock3,monitoring:n.Activity,activity:n.Activity,insights:n.Lightbulb,notifications:n.Bell,integrations:n.Plug,settings:n.Settings,usage:n.BarChart3,docs:n.FileText,documentation:n.FileText,agents:n.Headphones,security:n.Shield,configuration:n.Sliders,workflow:n.Workflow};function w(r){return r?typeof r=="string"?I[r.toLowerCase()]||n.SquareDot:r:n.SquareDot}function B({menuItems:r=[],activeId:t,onNavigate:o,collapsed:i,onToggleCollapse:u,header:g,footer:l,width:c=244,collapsedWidth:f=56}){const[s,y]=k.useState(!1),d=i!==void 0?i:s,h=u||(()=>y(!s)),[b,p]=k.useState(()=>{const a={};return r.forEach(x=>{var v;if((v=x.children)!=null&&v.length){const A=x.children.some(S=>S.id===t||S.active);a[x.id]=A}}),a}),T=a=>{p(x=>({...x,[a]:!x[a]}))},m=d?f:c;return e.jsxs("nav",{style:{width:m,minWidth:m,height:"100%",display:"flex",flexDirection:"column",alignItems:"flex-start",padding:d?"0":"0 0 24px 24px",gap:24,background:"var(--Background-Inverse, #0B0B0B)",fontFamily:"var(--font-sans)",transition:"width 0.2s ease, min-width 0.2s ease",overflow:"hidden",flexShrink:0},children:[g&&!d&&e.jsx("div",{style:{padding:"16px 16px 8px",flexShrink:0,width:"100%"},children:g}),e.jsx("div",{style:{display:"flex",justifyContent:d?"center":"flex-end",padding:d?"12px 0":"8px 0 0",flexShrink:0,width:"100%"},children:e.jsx("button",{onClick:h,title:d?"Expand sidebar":"Collapse sidebar",style:{display:"flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",border:"none",background:"transparent",color:"rgba(255, 255, 255, 0.5)",cursor:"pointer",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:a=>{a.currentTarget.style.background="rgba(255, 255, 255, 0.08)",a.currentTarget.style.color="rgba(255, 255, 255, 0.8)"},onMouseLeave:a=>{a.currentTarget.style.background="transparent",a.currentTarget.style.color="rgba(255, 255, 255, 0.5)"},children:d?e.jsx(n.PanelLeft,{size:16}):e.jsx(n.PanelLeftClose,{size:16})})}),e.jsx("div",{style:{flex:1,overflowY:"auto",overflowX:"hidden",padding:d?"0 8px":"0",width:"100%"},children:r.map((a,x)=>{var v;return e.jsxs(k.Fragment,{children:[a.section&&!d&&e.jsx("div",{style:{fontSize:"var(--text-xs)",fontWeight:650,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255, 255, 255, 0.35)",padding:"16px 8px 6px",lineHeight:1},children:a.section}),(v=a.children)!=null&&v.length?e.jsx(E,{item:a,activeId:t,expanded:!!b[a.id],onToggle:()=>T(a.id),onNavigate:o,collapsed:d}):e.jsx(C,{item:a,active:a.id===t||a.active,onNavigate:o,collapsed:d})]},a.id||x)})}),l&&!d&&e.jsx("div",{style:{padding:"12px 16px",borderTop:"1px solid rgba(255, 255, 255, 0.08)",flexShrink:0,width:"100%"},children:l})]})}function C({item:r,active:t,onNavigate:o,collapsed:i}){const u=w(r.icon),g=typeof r.icon!="string"&&typeof r.icon<"u";return e.jsxs("button",{onClick:()=>o==null?void 0:o(r.href||r.id),title:i?r.label:void 0,style:{display:"flex",alignItems:"center",gap:i?0:12,justifyContent:i?"center":"flex-start",width:"100%",padding:i?"10px 0":"12px 24px 12px 12px",borderRadius:t?"4px 0 0 4px":"4px",borderRight:t?"2px solid #00A66E":"2px solid transparent",borderTop:"none",borderBottom:"none",borderLeft:"none",background:t?"var(--Background-MonoPressed, #323232)":"transparent",color:t?"#00A66E":"var(--Content-TertiaryInverse, #B2AEA8)",fontWeight:t?550:400,fontSize:"var(--text-sm)",fontFamily:"var(--font-sans)",cursor:"pointer",textAlign:"left",transition:"background 0.15s ease, color 0.1s ease, border-color 0.15s ease",marginBottom:2},onMouseEnter:l=>{t||(l.currentTarget.style.background="var(--Background-MonoPressed, #323232)",l.currentTarget.style.color="#00A66E")},onMouseLeave:l=>{t||(l.currentTarget.style.background="transparent",l.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:[g?e.jsx("span",{style:{flexShrink:0,display:"flex"},children:r.icon}):e.jsx(u,{size:18,style:{flexShrink:0,color:"inherit"}}),!i&&e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.label})]})}function E({item:r,activeId:t,expanded:o,onToggle:i,onNavigate:u,collapsed:g}){var f;const l=w(r.icon),c=(f=r.children)==null?void 0:f.some(s=>s.id===t||s.active);return g?e.jsx("button",{onClick:i,title:r.label,style:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",padding:"10px 0",borderRadius:"4px",border:"none",background:c?"var(--Background-MonoPressed, #323232)":"transparent",color:c?"#00A66E":"var(--Content-TertiaryInverse, #B2AEA8)",cursor:"pointer",marginBottom:2,transition:"background 0.15s ease"},onMouseEnter:s=>{c||(s.currentTarget.style.background="var(--Background-MonoPressed, #323232)",s.currentTarget.style.color="#00A66E")},onMouseLeave:s=>{c||(s.currentTarget.style.background="transparent",s.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:e.jsx(l,{size:18,style:{color:"inherit"}})}):e.jsxs("div",{style:{marginBottom:2},children:[e.jsxs("button",{onClick:i,style:{display:"flex",alignItems:"center",gap:12,width:"100%",padding:"12px 24px 12px 12px",borderRadius:"4px",border:"none",background:"transparent",color:c?"#00A66E":"var(--Content-TertiaryInverse, #B2AEA8)",fontWeight:c?550:400,fontSize:"var(--text-sm)",fontFamily:"var(--font-sans)",cursor:"pointer",textAlign:"left",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:s=>{s.currentTarget.style.background="var(--Background-MonoPressed, #323232)",s.currentTarget.style.color="#00A66E"},onMouseLeave:s=>{s.currentTarget.style.background="transparent",c?s.currentTarget.style.color="#00A66E":s.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)"},children:[e.jsx(l,{size:18,style:{flexShrink:0,color:"inherit"}}),e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.label}),e.jsx(n.ChevronDown,{size:14,style:{flexShrink:0,color:"inherit",opacity:.7,transform:o?"rotate(0deg)":"rotate(-90deg)",transition:"transform 0.2s ease"}})]}),o&&e.jsx("div",{style:{paddingLeft:18,marginTop:2},children:r.children.map((s,y)=>e.jsx(C,{item:s,active:s.id===t||s.active,onNavigate:u,collapsed:!1},s.id||y))})]})}const j=["#5a8a6e","#b07d4f","#7a8fa6","#c47a5a","#6a9a8a","#a0785a","#5a7a9a","#9a7a5a"];function z(r){if(!r)return j[0];let t=0;for(let o=0;o<r.length;o++)t=(t<<5)-t+r.charCodeAt(o)|0;return j[Math.abs(t)%j.length]}function M({logo:r,title:t,userName:o,userEmail:i,userInitials:u,userRole:g,onSignOut:l,children:c,trailing:f,userMenu:s,height:y=48,style:d}){const h=o||i||"",b=u||D(h);return e.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 20px",height:y,borderBottom:"1px solid var(--border)",background:"var(--paper-elevated)",flexShrink:0,fontFamily:"var(--font-sans)",position:"sticky",top:0,zIndex:1e3,...d},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[r!==void 0?r:e.jsx("span",{style:{fontSize:"var(--text-lg)",fontWeight:700,fontFamily:"var(--font-display)",color:"var(--text-ink)",letterSpacing:"-0.01em"},children:"Chordia"}),t&&e.jsxs(e.Fragment,{children:[e.jsx("span",{style:{width:1,height:18,background:"var(--border)",flexShrink:0}}),e.jsx("span",{style:{fontSize:"var(--text-md)",fontWeight:500,color:"var(--text-muted)"},children:t})]})]}),c&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,flex:1,justifyContent:"center",minWidth:0},children:c}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[f,s||h&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("div",{style:{width:30,height:30,borderRadius:"50%",background:z(h),display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:e.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#fff",letterSpacing:"0.02em",lineHeight:1},children:b})}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:1},children:[e.jsx("span",{style:{fontSize:"var(--text-sm)",fontWeight:550,color:"var(--text-strong)",lineHeight:1.2},children:h}),g&&e.jsx("span",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",lineHeight:1.2},children:g})]}),l&&e.jsx("button",{onClick:l,title:"Sign out",style:{display:"flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",border:"none",background:"transparent",color:"var(--text-faint)",cursor:"pointer",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:p=>{p.currentTarget.style.background="var(--hover-warm)",p.currentTarget.style.color="var(--text-muted)"},onMouseLeave:p=>{p.currentTarget.style.background="transparent",p.currentTarget.style.color="var(--text-faint)"},children:e.jsx(n.LogOut,{size:14})})]})]})]})}function L({label:r,color:t="var(--text-muted)",active:o,onClick:i}){return e.jsxs("button",{onClick:i,style:{display:"flex",alignItems:"center",gap:4,fontSize:"var(--text-sm)",fontWeight:500,fontFamily:"var(--font-sans)",padding:"4px 10px",borderRadius:"var(--radius-sm)",border:`1px solid color-mix(in srgb, ${t} 30%, transparent)`,background:`color-mix(in srgb, ${t} 10%, transparent)`,color:t,cursor:"pointer",transition:"background 0.15s ease, border-color 0.15s ease"},onMouseEnter:u=>{u.currentTarget.style.background=`color-mix(in srgb, ${t} 18%, transparent)`},onMouseLeave:u=>{u.currentTarget.style.background=`color-mix(in srgb, ${t} 10%, transparent)`},children:[r,e.jsx(n.ChevronDown,{size:12,style:{transform:o?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s ease",opacity:.7}})]})}function R({open:r,onClose:t,children:o,align:i="left"}){return r?e.jsxs(e.Fragment,{children:[e.jsx("div",{onClick:t,style:{position:"fixed",inset:0,zIndex:99,background:"rgba(0,0,0,0.03)"}}),e.jsx("div",{style:{position:"absolute",top:"100%",[i==="right"?"right":"left"]:0,marginTop:4,zIndex:100,background:"#fff",border:"1px solid var(--border)",borderRadius:"var(--radius)",padding:4,minWidth:200,maxHeight:280,overflowY:"auto",boxShadow:"0 8px 24px rgba(0,0,0,0.12)"},children:o})]}):null}function F({label:r,active:t,onClick:o}){return e.jsx("div",{onClick:o,style:{padding:"8px 10px",borderRadius:"var(--radius-sm)",cursor:"pointer",fontSize:"var(--text-sm)",color:t?"var(--text-ink)":"var(--text-base)",fontWeight:t?600:400,fontFamily:"var(--font-sans)",background:t?"var(--hover-warm)":"transparent",transition:"background 0.1s ease"},onMouseEnter:i=>{t||(i.currentTarget.style.background="var(--hover-warm-subtle)")},onMouseLeave:i=>{t||(i.currentTarget.style.background="transparent")},children:r})}function W({connected:r,label:t}){const o=t||(r?"Connected":"Disconnected");return e.jsx("span",{style:{fontSize:"var(--text-xs)",fontFamily:"var(--font-sans)",padding:"3px 10px",borderRadius:12,border:`1px solid ${r?"var(--state-present)":"var(--border)"}`,color:r?"var(--state-present)":"var(--text-faint)",background:r?"rgba(37,163,114,0.08)":"transparent",transition:"all 0.2s ease"},children:o})}function D(r){if(!r)return"?";const t=r.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():r.slice(0,2).toUpperCase()}exports.NavDropdown=R;exports.NavDropdownItem=F;exports.NavPill=L;exports.NavigationBar=M;exports.Sidebar=B;exports.StatusIndicator=W;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),k=require("react"),n=require("lucide-react"),I={home:n.Home,projects:n.FolderClosed,folder:n.FolderClosed,organization:n.Users,users:n.Users,dashboard:n.LayoutDashboard,history:n.Clock3,sessions:n.Clock3,monitoring:n.Activity,activity:n.Activity,insights:n.Lightbulb,notifications:n.Bell,integrations:n.Plug,settings:n.Settings,usage:n.BarChart3,docs:n.FileText,documentation:n.FileText,agents:n.Headphones,security:n.Shield,configuration:n.Sliders,workflow:n.Workflow};function B(r){return r?typeof r=="string"?I[r.toLowerCase()]||n.SquareDot:r:n.SquareDot}function A({menuItems:r=[],activeId:t,onNavigate:s,collapsed:i,onToggleCollapse:c,header:g,footer:l,width:u=244,collapsedWidth:f=56}){const[o,y]=k.useState(!1),d=i!==void 0?i:o,h=c||(()=>y(!o)),[b,x]=k.useState(()=>{const a={};return r.forEach(p=>{var v;if((v=p.children)!=null&&v.length){const C=p.children.some(S=>S.id===t||S.active);a[p.id]=C}}),a}),w=a=>{x(p=>({...p,[a]:!p[a]}))},j=d?f:u;return e.jsxs("nav",{style:{width:j,minWidth:j,height:"100%",display:"flex",flexDirection:"column",alignItems:"flex-start",padding:d?"0":"0 0 24px 24px",gap:24,background:"var(--Background-Inverse, #0B0B0B)",fontFamily:"var(--font-sans)",transition:"width 0.2s ease, min-width 0.2s ease",overflow:"hidden",flexShrink:0},children:[g&&!d&&e.jsx("div",{style:{padding:"16px 16px 8px",flexShrink:0,width:"100%"},children:g}),e.jsx("div",{style:{display:"flex",justifyContent:d?"center":"flex-end",padding:d?"12px 0":"8px 0 0",flexShrink:0,width:"100%"},children:e.jsx("button",{onClick:h,title:d?"Expand sidebar":"Collapse sidebar",style:{display:"flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",border:"none",background:"transparent",color:"rgba(255, 255, 255, 0.5)",cursor:"pointer",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:a=>{a.currentTarget.style.background="rgba(255, 255, 255, 0.08)",a.currentTarget.style.color="rgba(255, 255, 255, 0.8)"},onMouseLeave:a=>{a.currentTarget.style.background="transparent",a.currentTarget.style.color="rgba(255, 255, 255, 0.5)"},children:d?e.jsx(n.PanelLeft,{size:16}):e.jsx(n.PanelLeftClose,{size:16})})}),e.jsx("div",{style:{flex:1,overflowY:"auto",overflowX:"hidden",padding:d?"0 8px":"0",width:"100%"},children:r.map((a,p)=>{var v;return e.jsxs(k.Fragment,{children:[a.section&&!d&&e.jsx("div",{style:{fontSize:"var(--text-xs)",fontWeight:650,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255, 255, 255, 0.35)",padding:"16px 8px 6px",lineHeight:1},children:a.section}),(v=a.children)!=null&&v.length?e.jsx(z,{item:a,activeId:t,expanded:!!b[a.id],onToggle:()=>w(a.id),onNavigate:s,collapsed:d}):e.jsx(T,{item:a,active:a.id===t||a.active,onNavigate:s,collapsed:d})]},a.id||p)})}),l&&!d&&e.jsx("div",{style:{padding:"12px 16px",borderTop:"1px solid rgba(255, 255, 255, 0.08)",flexShrink:0,width:"100%"},children:l})]})}function T({item:r,active:t,onNavigate:s,collapsed:i}){const c=B(r.icon),g=typeof r.icon!="string"&&typeof r.icon<"u";return e.jsxs("button",{onClick:()=>s==null?void 0:s(r.href||r.id),title:i?r.label:void 0,style:{display:"flex",alignItems:"center",gap:i?0:12,justifyContent:i?"center":"flex-start",width:"100%",padding:i?"10px 0":"12px 24px 12px 12px",borderRadius:t?"4px 0 0 4px":"4px",borderRight:t?"2px solid #00A66E":"2px solid transparent",borderTop:"none",borderBottom:"none",borderLeft:"none",background:t?"var(--Background-MonoPressed, #323232)":"transparent",color:t?"var(--Brand-400, #33B88B)":"var(--Content-TertiaryInverse, #B2AEA8)",fontWeight:500,fontSize:"12px",fontStyle:"normal",lineHeight:"120%",textTransform:"uppercase",fontFamily:"var(--font-sans)",cursor:"pointer",textAlign:"left",transition:"background 0.15s ease, color 0.1s ease, border-color 0.15s ease",marginBottom:2},onMouseEnter:l=>{t||(l.currentTarget.style.background="var(--Background-MonoPressed, #323232)",l.currentTarget.style.color="var(--Brand-400, #33B88B)")},onMouseLeave:l=>{t||(l.currentTarget.style.background="transparent",l.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:[g?e.jsx("span",{style:{flexShrink:0,display:"flex"},children:r.icon}):e.jsx(c,{size:18,style:{flexShrink:0,color:"inherit"}}),!i&&e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.label})]})}function z({item:r,activeId:t,expanded:s,onToggle:i,onNavigate:c,collapsed:g}){var f;const l=B(r.icon),u=(f=r.children)==null?void 0:f.some(o=>o.id===t||o.active);return g?e.jsx("button",{onClick:i,title:r.label,style:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",padding:"10px 0",borderRadius:"4px",border:"none",background:u?"var(--Background-MonoPressed, #323232)":"transparent",color:u?"var(--Brand-400, #33B88B)":"var(--Content-TertiaryInverse, #B2AEA8)",cursor:"pointer",marginBottom:2,transition:"background 0.15s ease"},onMouseEnter:o=>{u||(o.currentTarget.style.background="var(--Background-MonoPressed, #323232)",o.currentTarget.style.color="var(--Brand-400, #33B88B)")},onMouseLeave:o=>{u||(o.currentTarget.style.background="transparent",o.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:e.jsx(l,{size:18,style:{color:"inherit"}})}):e.jsxs("div",{style:{marginBottom:2},children:[e.jsxs("button",{onClick:i,style:{display:"flex",alignItems:"center",gap:12,width:"100%",padding:"12px 24px 12px 12px",borderRadius:"4px",border:"none",background:"transparent",color:u?"var(--Brand-400, #33B88B)":"var(--Content-TertiaryInverse, #B2AEA8)",fontWeight:700,fontSize:"12px",fontStyle:"normal",lineHeight:"120%",textTransform:"uppercase",fontFamily:"var(--font-sans)",cursor:"pointer",textAlign:"left",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:o=>{o.currentTarget.style.background="var(--Background-MonoPressed, #323232)",o.currentTarget.style.color="var(--Brand-400, #33B88B)"},onMouseLeave:o=>{o.currentTarget.style.background="transparent",u?o.currentTarget.style.color="var(--Brand-400, #33B88B)":o.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)"},children:[e.jsx(l,{size:18,style:{flexShrink:0,color:"inherit"}}),e.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:r.label}),e.jsx(n.ChevronDown,{size:14,style:{flexShrink:0,color:"inherit",opacity:.7,transform:s?"rotate(0deg)":"rotate(-90deg)",transition:"transform 0.2s ease"}})]}),s&&e.jsx("div",{style:{paddingLeft:18,marginTop:2},children:r.children.map((o,y)=>e.jsx(T,{item:o,active:o.id===t||o.active,onNavigate:c,collapsed:!1},o.id||y))})]})}const m=["#5a8a6e","#b07d4f","#7a8fa6","#c47a5a","#6a9a8a","#a0785a","#5a7a9a","#9a7a5a"];function M(r){if(!r)return m[0];let t=0;for(let s=0;s<r.length;s++)t=(t<<5)-t+r.charCodeAt(s)|0;return m[Math.abs(t)%m.length]}function E({logo:r,title:t,userName:s,userEmail:i,userInitials:c,userRole:g,onSignOut:l,children:u,trailing:f,userMenu:o,height:y=48,style:d}){const h=s||i||"",b=c||D(h);return e.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 20px",height:y,borderBottom:"1px solid var(--border)",background:"var(--paper-elevated)",flexShrink:0,fontFamily:"var(--font-sans)",position:"sticky",top:0,zIndex:1e3,...d},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[r!==void 0?r:e.jsx("span",{style:{fontSize:"var(--text-lg)",fontWeight:700,fontFamily:"var(--font-display)",color:"var(--text-ink)",letterSpacing:"-0.01em"},children:"Chordia"}),t&&e.jsxs(e.Fragment,{children:[e.jsx("span",{style:{width:1,height:18,background:"var(--border)",flexShrink:0}}),e.jsx("span",{style:{fontSize:"var(--text-md)",fontWeight:500,color:"var(--text-muted)"},children:t})]})]}),u&&e.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,flex:1,justifyContent:"center",minWidth:0},children:u}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[f,o||h&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx("div",{style:{width:30,height:30,borderRadius:"50%",background:M(h),display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:e.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#fff",letterSpacing:"0.02em",lineHeight:1},children:b})}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:1},children:[e.jsx("span",{style:{fontSize:"var(--text-sm)",fontWeight:550,color:"var(--text-strong)",lineHeight:1.2},children:h}),g&&e.jsx("span",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",lineHeight:1.2},children:g})]}),l&&e.jsx("button",{onClick:l,title:"Sign out",style:{display:"flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:"var(--radius-sm)",border:"none",background:"transparent",color:"var(--text-faint)",cursor:"pointer",transition:"background 0.15s ease, color 0.15s ease"},onMouseEnter:x=>{x.currentTarget.style.background="var(--hover-warm)",x.currentTarget.style.color="var(--text-muted)"},onMouseLeave:x=>{x.currentTarget.style.background="transparent",x.currentTarget.style.color="var(--text-faint)"},children:e.jsx(n.LogOut,{size:14})})]})]})]})}function L({label:r,color:t="var(--text-muted)",active:s,onClick:i}){return e.jsxs("button",{onClick:i,style:{display:"flex",alignItems:"center",gap:4,fontSize:"var(--text-sm)",fontWeight:500,fontFamily:"var(--font-sans)",padding:"4px 10px",borderRadius:"var(--radius-sm)",border:`1px solid color-mix(in srgb, ${t} 30%, transparent)`,background:`color-mix(in srgb, ${t} 10%, transparent)`,color:t,cursor:"pointer",transition:"background 0.15s ease, border-color 0.15s ease"},onMouseEnter:c=>{c.currentTarget.style.background=`color-mix(in srgb, ${t} 18%, transparent)`},onMouseLeave:c=>{c.currentTarget.style.background=`color-mix(in srgb, ${t} 10%, transparent)`},children:[r,e.jsx(n.ChevronDown,{size:12,style:{transform:s?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s ease",opacity:.7}})]})}function R({open:r,onClose:t,children:s,align:i="left"}){return r?e.jsxs(e.Fragment,{children:[e.jsx("div",{onClick:t,style:{position:"fixed",inset:0,zIndex:99,background:"rgba(0,0,0,0.03)"}}),e.jsx("div",{style:{position:"absolute",top:"100%",[i==="right"?"right":"left"]:0,marginTop:4,zIndex:100,background:"#fff",border:"1px solid var(--border)",borderRadius:"var(--radius)",padding:4,minWidth:200,maxHeight:280,overflowY:"auto",boxShadow:"0 8px 24px rgba(0,0,0,0.12)"},children:s})]}):null}function F({label:r,active:t,onClick:s}){return e.jsx("div",{onClick:s,style:{padding:"8px 10px",borderRadius:"var(--radius-sm)",cursor:"pointer",fontSize:"var(--text-sm)",color:t?"var(--text-ink)":"var(--text-base)",fontWeight:t?600:400,fontFamily:"var(--font-sans)",background:t?"var(--hover-warm)":"transparent",transition:"background 0.1s ease"},onMouseEnter:i=>{t||(i.currentTarget.style.background="var(--hover-warm-subtle)")},onMouseLeave:i=>{t||(i.currentTarget.style.background="transparent")},children:r})}function W({connected:r,label:t}){const s=t||(r?"Connected":"Disconnected");return e.jsx("span",{style:{fontSize:"var(--text-xs)",fontFamily:"var(--font-sans)",padding:"3px 10px",borderRadius:12,border:`1px solid ${r?"var(--state-present)":"var(--border)"}`,color:r?"var(--state-present)":"var(--text-faint)",background:r?"rgba(37,163,114,0.08)":"transparent",transition:"all 0.2s ease"},children:s})}function D(r){if(!r)return"?";const t=r.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():r.slice(0,2).toUpperCase()}exports.NavDropdown=R;exports.NavDropdownItem=F;exports.NavPill=L;exports.NavigationBar=E;exports.Sidebar=A;exports.StatusIndicator=W;
2
2
  //# sourceMappingURL=navigation.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.cjs.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const toggleGroup = (id) => {\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0, width: \"100%\" }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={!!expandedGroups[item.id]}\n onToggle={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n\n return (\n <button\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: active ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n )}\n {!collapsed && (\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const hasActiveChild = item.children?.some((c) => c.id === activeId || c.active);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n onClick={onToggle}\n title={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveChild ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: hasActiveChild ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveChild) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"#00A66E\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n <span\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n <ChevronDown\n size={14}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","text","parts"],"mappings":"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"}
1
+ {"version":3,"file":"navigation.cjs.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const toggleGroup = (id) => {\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0, width: \"100%\" }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={!!expandedGroups[item.id]}\n onToggle={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n\n return (\n <button\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 500,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n )}\n {!collapsed && (\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const hasActiveChild = item.children?.some((c) => c.id === activeId || c.active);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n onClick={onToggle}\n title={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveChild ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveChild ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 700,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveChild) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n <span\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n <ChevronDown\n size={14}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","text","parts"],"mappings":"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"}
@@ -1,55 +1,55 @@
1
- import { jsxs as d, jsx as t, Fragment as B } from "react/jsx-runtime";
2
- import j, { useState as w } from "react";
3
- import { PanelLeft as P, PanelLeftClose as D, ChevronDown as M, SquareDot as C, Home as H, FolderClosed as T, Users as A, LayoutDashboard as O, Clock3 as I, Activity as E, Lightbulb as $, Bell as G, Plug as _, Settings as U, BarChart3 as Y, FileText as z, Headphones as q, Shield as N, Sliders as V, Workflow as X, LogOut as J } from "lucide-react";
1
+ import { jsxs as d, jsx as t, Fragment as M } from "react/jsx-runtime";
2
+ import j, { useState as S } from "react";
3
+ import { PanelLeft as P, PanelLeftClose as H, ChevronDown as E, SquareDot as T, Home as D, FolderClosed as w, Users as C, LayoutDashboard as O, Clock3 as I, Activity as z, Lightbulb as $, Bell as G, Plug as _, Settings as U, BarChart3 as Y, FileText as A, Headphones as q, Shield as N, Sliders as V, Workflow as X, LogOut as J } from "lucide-react";
4
4
  const K = {
5
- home: H,
6
- projects: T,
7
- folder: T,
8
- organization: A,
9
- users: A,
5
+ home: D,
6
+ projects: w,
7
+ folder: w,
8
+ organization: C,
9
+ users: C,
10
10
  dashboard: O,
11
11
  history: I,
12
12
  sessions: I,
13
- monitoring: E,
14
- activity: E,
13
+ monitoring: z,
14
+ activity: z,
15
15
  insights: $,
16
16
  notifications: G,
17
17
  integrations: _,
18
18
  settings: U,
19
19
  usage: Y,
20
- docs: z,
21
- documentation: z,
20
+ docs: A,
21
+ documentation: A,
22
22
  agents: q,
23
23
  security: N,
24
24
  configuration: V,
25
25
  workflow: X
26
26
  };
27
27
  function L(e) {
28
- return e ? typeof e == "string" ? K[e.toLowerCase()] || C : e : C;
28
+ return e ? typeof e == "string" ? K[e.toLowerCase()] || T : e : T;
29
29
  }
30
30
  function oe({
31
31
  menuItems: e = [],
32
32
  activeId: r,
33
33
  onNavigate: o,
34
34
  collapsed: i,
35
- onToggleCollapse: g,
36
- header: p,
35
+ onToggleCollapse: c,
36
+ header: g,
37
37
  footer: s,
38
- width: c = 244,
38
+ width: p = 244,
39
39
  collapsedWidth: h = 56
40
40
  }) {
41
- const [n, y] = w(!1), l = i !== void 0 ? i : n, x = g || (() => y(!n)), [v, f] = w(() => {
41
+ const [n, y] = S(!1), l = i !== void 0 ? i : n, x = c || (() => y(!n)), [b, f] = S(() => {
42
42
  const a = {};
43
43
  return e.forEach((u) => {
44
- var b;
45
- if ((b = u.children) != null && b.length) {
46
- const F = u.children.some((S) => S.id === r || S.active);
44
+ var v;
45
+ if ((v = u.children) != null && v.length) {
46
+ const F = u.children.some((B) => B.id === r || B.active);
47
47
  a[u.id] = F;
48
48
  }
49
49
  }), a;
50
50
  }), W = (a) => {
51
51
  f((u) => ({ ...u, [a]: !u[a] }));
52
- }, m = l ? h : c;
52
+ }, m = l ? h : p;
53
53
  return /* @__PURE__ */ d(
54
54
  "nav",
55
55
  {
@@ -69,7 +69,7 @@ function oe({
69
69
  flexShrink: 0
70
70
  },
71
71
  children: [
72
- p && !l && /* @__PURE__ */ t("div", { style: { padding: "16px 16px 8px", flexShrink: 0, width: "100%" }, children: p }),
72
+ g && !l && /* @__PURE__ */ t("div", { style: { padding: "16px 16px 8px", flexShrink: 0, width: "100%" }, children: g }),
73
73
  /* @__PURE__ */ t(
74
74
  "div",
75
75
  {
@@ -104,7 +104,7 @@ function oe({
104
104
  onMouseLeave: (a) => {
105
105
  a.currentTarget.style.background = "transparent", a.currentTarget.style.color = "rgba(255, 255, 255, 0.5)";
106
106
  },
107
- children: l ? /* @__PURE__ */ t(P, { size: 16 }) : /* @__PURE__ */ t(D, { size: 16 })
107
+ children: l ? /* @__PURE__ */ t(P, { size: 16 }) : /* @__PURE__ */ t(H, { size: 16 })
108
108
  }
109
109
  )
110
110
  }
@@ -120,7 +120,7 @@ function oe({
120
120
  width: "100%"
121
121
  },
122
122
  children: e.map((a, u) => {
123
- var b;
123
+ var v;
124
124
  return /* @__PURE__ */ d(j.Fragment, { children: [
125
125
  a.section && !l && /* @__PURE__ */ t(
126
126
  "div",
@@ -137,12 +137,12 @@ function oe({
137
137
  children: a.section
138
138
  }
139
139
  ),
140
- (b = a.children) != null && b.length ? /* @__PURE__ */ t(
140
+ (v = a.children) != null && v.length ? /* @__PURE__ */ t(
141
141
  Q,
142
142
  {
143
143
  item: a,
144
144
  activeId: r,
145
- expanded: !!v[a.id],
145
+ expanded: !!b[a.id],
146
146
  onToggle: () => W(a.id),
147
147
  onNavigate: o,
148
148
  collapsed: l
@@ -177,7 +177,7 @@ function oe({
177
177
  );
178
178
  }
179
179
  function R({ item: e, active: r, onNavigate: o, collapsed: i }) {
180
- const g = L(e.icon), p = typeof e.icon != "string" && typeof e.icon < "u";
180
+ const c = L(e.icon), g = typeof e.icon != "string" && typeof e.icon < "u";
181
181
  return /* @__PURE__ */ d(
182
182
  "button",
183
183
  {
@@ -196,9 +196,12 @@ function R({ item: e, active: r, onNavigate: o, collapsed: i }) {
196
196
  borderBottom: "none",
197
197
  borderLeft: "none",
198
198
  background: r ? "var(--Background-MonoPressed, #323232)" : "transparent",
199
- color: r ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
200
- fontWeight: r ? 550 : 400,
201
- fontSize: "var(--text-sm)",
199
+ color: r ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
200
+ fontWeight: 500,
201
+ fontSize: "12px",
202
+ fontStyle: "normal",
203
+ lineHeight: "120%",
204
+ textTransform: "uppercase",
202
205
  fontFamily: "var(--font-sans)",
203
206
  cursor: "pointer",
204
207
  textAlign: "left",
@@ -206,14 +209,14 @@ function R({ item: e, active: r, onNavigate: o, collapsed: i }) {
206
209
  marginBottom: 2
207
210
  },
208
211
  onMouseEnter: (s) => {
209
- r || (s.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", s.currentTarget.style.color = "#00A66E");
212
+ r || (s.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", s.currentTarget.style.color = "var(--Brand-400, #33B88B)");
210
213
  },
211
214
  onMouseLeave: (s) => {
212
215
  r || (s.currentTarget.style.background = "transparent", s.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)");
213
216
  },
214
217
  children: [
215
- p ? /* @__PURE__ */ t("span", { style: { flexShrink: 0, display: "flex" }, children: e.icon }) : /* @__PURE__ */ t(
216
- g,
218
+ g ? /* @__PURE__ */ t("span", { style: { flexShrink: 0, display: "flex" }, children: e.icon }) : /* @__PURE__ */ t(
219
+ c,
217
220
  {
218
221
  size: 18,
219
222
  style: {
@@ -237,10 +240,10 @@ function R({ item: e, active: r, onNavigate: o, collapsed: i }) {
237
240
  }
238
241
  );
239
242
  }
240
- function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: g, collapsed: p }) {
243
+ function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: c, collapsed: g }) {
241
244
  var h;
242
- const s = L(e.icon), c = (h = e.children) == null ? void 0 : h.some((n) => n.id === r || n.active);
243
- return p ? /* @__PURE__ */ t(
245
+ const s = L(e.icon), p = (h = e.children) == null ? void 0 : h.some((n) => n.id === r || n.active);
246
+ return g ? /* @__PURE__ */ t(
244
247
  "button",
245
248
  {
246
249
  onClick: i,
@@ -253,17 +256,17 @@ function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: g, coll
253
256
  padding: "10px 0",
254
257
  borderRadius: "4px",
255
258
  border: "none",
256
- background: c ? "var(--Background-MonoPressed, #323232)" : "transparent",
257
- color: c ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
259
+ background: p ? "var(--Background-MonoPressed, #323232)" : "transparent",
260
+ color: p ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
258
261
  cursor: "pointer",
259
262
  marginBottom: 2,
260
263
  transition: "background 0.15s ease"
261
264
  },
262
265
  onMouseEnter: (n) => {
263
- c || (n.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", n.currentTarget.style.color = "#00A66E");
266
+ p || (n.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", n.currentTarget.style.color = "var(--Brand-400, #33B88B)");
264
267
  },
265
268
  onMouseLeave: (n) => {
266
- c || (n.currentTarget.style.background = "transparent", n.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)");
269
+ p || (n.currentTarget.style.background = "transparent", n.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)");
267
270
  },
268
271
  children: /* @__PURE__ */ t(
269
272
  s,
@@ -287,19 +290,22 @@ function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: g, coll
287
290
  borderRadius: "4px",
288
291
  border: "none",
289
292
  background: "transparent",
290
- color: c ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
291
- fontWeight: c ? 550 : 400,
292
- fontSize: "var(--text-sm)",
293
+ color: p ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
294
+ fontWeight: 700,
295
+ fontSize: "12px",
296
+ fontStyle: "normal",
297
+ lineHeight: "120%",
298
+ textTransform: "uppercase",
293
299
  fontFamily: "var(--font-sans)",
294
300
  cursor: "pointer",
295
301
  textAlign: "left",
296
302
  transition: "background 0.15s ease, color 0.15s ease"
297
303
  },
298
304
  onMouseEnter: (n) => {
299
- n.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", n.currentTarget.style.color = "#00A66E";
305
+ n.currentTarget.style.background = "var(--Background-MonoPressed, #323232)", n.currentTarget.style.color = "var(--Brand-400, #33B88B)";
300
306
  },
301
307
  onMouseLeave: (n) => {
302
- n.currentTarget.style.background = "transparent", c ? n.currentTarget.style.color = "#00A66E" : n.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
308
+ n.currentTarget.style.background = "transparent", p ? n.currentTarget.style.color = "var(--Brand-400, #33B88B)" : n.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
303
309
  },
304
310
  children: [
305
311
  /* @__PURE__ */ t(
@@ -325,7 +331,7 @@ function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: g, coll
325
331
  }
326
332
  ),
327
333
  /* @__PURE__ */ t(
328
- M,
334
+ E,
329
335
  {
330
336
  size: 14,
331
337
  style: {
@@ -345,7 +351,7 @@ function Q({ item: e, activeId: r, expanded: o, onToggle: i, onNavigate: g, coll
345
351
  {
346
352
  item: n,
347
353
  active: n.id === r || n.active,
348
- onNavigate: g,
354
+ onNavigate: c,
349
355
  collapsed: !1
350
356
  },
351
357
  n.id || y
@@ -383,16 +389,16 @@ function ae({
383
389
  title: r,
384
390
  userName: o,
385
391
  userEmail: i,
386
- userInitials: g,
387
- userRole: p,
392
+ userInitials: c,
393
+ userRole: g,
388
394
  onSignOut: s,
389
- children: c,
395
+ children: p,
390
396
  trailing: h,
391
397
  userMenu: n,
392
398
  height: y = 48,
393
399
  style: l
394
400
  }) {
395
- const x = o || i || "", v = g || ee(x);
401
+ const x = o || i || "", b = c || ee(x);
396
402
  return /* @__PURE__ */ d(
397
403
  "header",
398
404
  {
@@ -420,7 +426,7 @@ function ae({
420
426
  color: "var(--text-ink)",
421
427
  letterSpacing: "-0.01em"
422
428
  }, children: "Chordia" }),
423
- r && /* @__PURE__ */ d(B, { children: [
429
+ r && /* @__PURE__ */ d(M, { children: [
424
430
  /* @__PURE__ */ t("span", { style: {
425
431
  width: 1,
426
432
  height: 18,
@@ -434,14 +440,14 @@ function ae({
434
440
  }, children: r })
435
441
  ] })
436
442
  ] }),
437
- c && /* @__PURE__ */ t("div", { style: {
443
+ p && /* @__PURE__ */ t("div", { style: {
438
444
  display: "flex",
439
445
  alignItems: "center",
440
446
  gap: 8,
441
447
  flex: 1,
442
448
  justifyContent: "center",
443
449
  minWidth: 0
444
- }, children: c }),
450
+ }, children: p }),
445
451
  /* @__PURE__ */ d(
446
452
  "div",
447
453
  {
@@ -469,7 +475,7 @@ function ae({
469
475
  color: "#fff",
470
476
  letterSpacing: "0.02em",
471
477
  lineHeight: 1
472
- }, children: v }) }),
478
+ }, children: b }) }),
473
479
  /* @__PURE__ */ d("div", { style: { display: "flex", flexDirection: "column", gap: 1 }, children: [
474
480
  /* @__PURE__ */ t("span", { style: {
475
481
  fontSize: "var(--text-sm)",
@@ -477,11 +483,11 @@ function ae({
477
483
  color: "var(--text-strong)",
478
484
  lineHeight: 1.2
479
485
  }, children: x }),
480
- p && /* @__PURE__ */ t("span", { style: {
486
+ g && /* @__PURE__ */ t("span", { style: {
481
487
  fontSize: "var(--text-xs)",
482
488
  color: "var(--text-muted)",
483
489
  lineHeight: 1.2
484
- }, children: p })
490
+ }, children: g })
485
491
  ] }),
486
492
  s && /* @__PURE__ */ t(
487
493
  "button",
@@ -538,16 +544,16 @@ function ie({ label: e, color: r = "var(--text-muted)", active: o, onClick: i })
538
544
  cursor: "pointer",
539
545
  transition: "background 0.15s ease, border-color 0.15s ease"
540
546
  },
541
- onMouseEnter: (g) => {
542
- g.currentTarget.style.background = `color-mix(in srgb, ${r} 18%, transparent)`;
547
+ onMouseEnter: (c) => {
548
+ c.currentTarget.style.background = `color-mix(in srgb, ${r} 18%, transparent)`;
543
549
  },
544
- onMouseLeave: (g) => {
545
- g.currentTarget.style.background = `color-mix(in srgb, ${r} 10%, transparent)`;
550
+ onMouseLeave: (c) => {
551
+ c.currentTarget.style.background = `color-mix(in srgb, ${r} 10%, transparent)`;
546
552
  },
547
553
  children: [
548
554
  e,
549
555
  /* @__PURE__ */ t(
550
- M,
556
+ E,
551
557
  {
552
558
  size: 12,
553
559
  style: {
@@ -562,7 +568,7 @@ function ie({ label: e, color: r = "var(--text-muted)", active: o, onClick: i })
562
568
  );
563
569
  }
564
570
  function se({ open: e, onClose: r, children: o, align: i = "left" }) {
565
- return e ? /* @__PURE__ */ d(B, { children: [
571
+ return e ? /* @__PURE__ */ d(M, { children: [
566
572
  /* @__PURE__ */ t(
567
573
  "div",
568
574
  {
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.es.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const toggleGroup = (id) => {\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0, width: \"100%\" }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={!!expandedGroups[item.id]}\n onToggle={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n\n return (\n <button\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: active ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n )}\n {!collapsed && (\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const hasActiveChild = item.children?.some((c) => c.id === activeId || c.active);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n onClick={onToggle}\n title={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveChild ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: hasActiveChild ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveChild) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"#00A66E\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n <span\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n <ChevronDown\n size={14}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","parts"],"mappings":"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"}
1
+ {"version":3,"file":"navigation.es.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const toggleGroup = (id) => {\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0, width: \"100%\" }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={!!expandedGroups[item.id]}\n onToggle={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n\n return (\n <button\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 500,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n )}\n {!collapsed && (\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const hasActiveChild = item.children?.some((c) => c.id === activeId || c.active);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n onClick={onToggle}\n title={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveChild ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveChild ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"var(--Brand-400, #33B88B)\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: 700,\n fontSize: \"12px\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n textTransform: \"uppercase\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveChild) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"var(--Brand-400, #33B88B)\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n <span\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n <ChevronDown\n size={14}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","parts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chordia-ui",
3
- "version": "3.2.6",
3
+ "version": "3.2.7",
4
4
  "description": "Chordia Design System - UI components, tokens, and Tailwind preset",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
@@ -250,9 +250,12 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
250
250
  borderBottom: "none",
251
251
  borderLeft: "none",
252
252
  background: active ? "var(--Background-MonoPressed, #323232)" : "transparent",
253
- color: active ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
254
- fontWeight: active ? 550 : 400,
255
- fontSize: "var(--text-sm)",
253
+ color: active ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
254
+ fontWeight: 500,
255
+ fontSize: "12px",
256
+ fontStyle: "normal",
257
+ lineHeight: "120%",
258
+ textTransform: "uppercase",
256
259
  fontFamily: "var(--font-sans)",
257
260
  cursor: "pointer",
258
261
  textAlign: "left",
@@ -262,7 +265,7 @@ function SidebarItem({ item, active, onNavigate, collapsed }) {
262
265
  onMouseEnter={(e) => {
263
266
  if (!active) {
264
267
  e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
265
- e.currentTarget.style.color = "#00A66E";
268
+ e.currentTarget.style.color = "var(--Brand-400, #33B88B)";
266
269
  }
267
270
  }}
268
271
  onMouseLeave={(e) => {
@@ -317,7 +320,7 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
317
320
  borderRadius: "4px",
318
321
  border: "none",
319
322
  background: hasActiveChild ? "var(--Background-MonoPressed, #323232)" : "transparent",
320
- color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
323
+ color: hasActiveChild ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
321
324
  cursor: "pointer",
322
325
  marginBottom: 2,
323
326
  transition: "background 0.15s ease",
@@ -325,7 +328,7 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
325
328
  onMouseEnter={(e) => {
326
329
  if (!hasActiveChild) {
327
330
  e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
328
- e.currentTarget.style.color = "#00A66E";
331
+ e.currentTarget.style.color = "var(--Brand-400, #33B88B)";
329
332
  }
330
333
  }}
331
334
  onMouseLeave={(e) => {
@@ -357,9 +360,12 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
357
360
  borderRadius: "4px",
358
361
  border: "none",
359
362
  background: "transparent",
360
- color: hasActiveChild ? "#00A66E" : "var(--Content-TertiaryInverse, #B2AEA8)",
361
- fontWeight: hasActiveChild ? 550 : 400,
362
- fontSize: "var(--text-sm)",
363
+ color: hasActiveChild ? "var(--Brand-400, #33B88B)" : "var(--Content-TertiaryInverse, #B2AEA8)",
364
+ fontWeight: 700,
365
+ fontSize: "12px",
366
+ fontStyle: "normal",
367
+ lineHeight: "120%",
368
+ textTransform: "uppercase",
363
369
  fontFamily: "var(--font-sans)",
364
370
  cursor: "pointer",
365
371
  textAlign: "left",
@@ -367,12 +373,12 @@ function SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapse
367
373
  }}
368
374
  onMouseEnter={(e) => {
369
375
  e.currentTarget.style.background = "var(--Background-MonoPressed, #323232)";
370
- e.currentTarget.style.color = "#00A66E";
376
+ e.currentTarget.style.color = "var(--Brand-400, #33B88B)";
371
377
  }}
372
378
  onMouseLeave={(e) => {
373
379
  e.currentTarget.style.background = "transparent";
374
380
  if (!hasActiveChild) e.currentTarget.style.color = "var(--Content-TertiaryInverse, #B2AEA8)";
375
- else e.currentTarget.style.color = "#00A66E";
381
+ else e.currentTarget.style.color = "var(--Brand-400, #33B88B)";
376
382
  }}
377
383
  >
378
384
  <Icon