chordia-ui 3.2.8 → 3.2.9

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 B(r){return r?typeof r=="string"?I[r.toLowerCase()]||n.SquareDot:r:n.SquareDot}function A({menuItems:r=[],activeId:t,onNavigate:o,collapsed:i,onToggleCollapse:c,header:g,footer:l,width:u=244,collapsedWidth:f=56}){const[s,y]=k.useState(!1),d=i!==void 0?i:s,h=c||(()=>y(!s)),[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:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:d?"center":"space-between",padding:d?"12px 0":"12px 0 0",flexShrink:0,width:"100%"},children:[g&&!d&&e.jsx("div",{style:{flexShrink:0},children:g}),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",flexShrink:0},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:o,collapsed:d}):e.jsx(T,{item:a,active:a.id===t||a.active,onNavigate:o,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:o,collapsed:i}){const c=B(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?"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:o,onToggle:i,onNavigate:c,collapsed:g}){var f;const l=B(r.icon),u=(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: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:s=>{u||(s.currentTarget.style.background="var(--Background-MonoPressed, #323232)",s.currentTarget.style.color="var(--Brand-400, #33B88B)")},onMouseLeave:s=>{u||(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: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:s=>{s.currentTarget.style.background="var(--Background-MonoPressed, #323232)",s.currentTarget.style.color="var(--Brand-400, #33B88B)"},onMouseLeave:s=>{s.currentTarget.style.background="transparent",u?s.currentTarget.style.color="var(--Brand-400, #33B88B)":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(T,{item:s,active:s.id===t||s.active,onNavigate:c,collapsed:!1},s.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 o=0;o<r.length;o++)t=(t<<5)-t+r.charCodeAt(o)|0;return m[Math.abs(t)%m.length]}function E({logo:r,title:t,userName:o,userEmail:i,userInitials:c,userRole:g,onSignOut:l,children:u,trailing:f,userMenu:s,height:y=48,style:d}){const h=o||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,s||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: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: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: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=E;exports.Sidebar=A;exports.StatusIndicator=W;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("react/jsx-runtime"),s=require("react"),D=require("lucide-react"),Q="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjQ3IiB2aWV3Qm94PSIwIDAgMTQ2IDQ3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMzkuNzM0NSAyMy4wODc5QzM5LjczNDUgMTguMzI2NCAzNy45NTYyIDEzLjk4MDYgMzUuMDI2NSAxMC42Nzc4QzMxLjU5ODQgNi44MTMwMyAyNi41OTYxIDQuMzc5OTUgMjEuMDI1NSA0LjM3OTkxQzE1LjU1IDQuMzc5OTEgMTAuNjI2IDYuNzMxNTUgNy4yMDMyNSAxMC40ODE1QzQuMTY3MzIgMTMuODA4NiAyLjMxNzUyIDE4LjIzMTIgMi4zMTc1IDIzLjA4ODlDMi4zMTc1IDI4LjQ3MDQgNC41ODkzNiAzMy4zMjE1IDguMjI4NjQgMzYuNzM1NEw4LjU0NjAyIDM3LjAyNjRDMTEuODY0MyAzOS45OTE5IDE2LjM3NzQgNDEuNzk2OSAyMS4wMjY1IDQxLjc5NjlDMjUuODI4NSA0MS43OTY5IDMwLjIwNjkgMzkuOTg5MiAzMy41MTk3IDM3LjAxNDdDMzcuMzM2MyAzMy41ODc1IDM5LjczNDUgMjguNjE4MSAzOS43MzQ1IDIzLjA4NzlaTTQxLjA5NzggMjMuMDg3OUM0MS4wOTc4IDI5LjAyMSAzOC41MjIgMzQuMzUzNyAzNC40Mjk4IDM4LjAyODRDMzAuODc2NyA0MS4yMTg3IDI2LjE3NzMgNDMuMTYwMiAyMS4wMjY1IDQzLjE2MDJDMTUuODczMiA0My4xNjAyIDEwLjg4NzUgNDEuMDk4OSA3LjI5NjAyIDM3LjcyOTVDMy4zOTM2IDM0LjA2ODggMC45NTQyMjQgMjguODYyMyAwLjk1NDIyNCAyMy4wODg5QzAuOTU0MjM1IDE3Ljg3ODIgMi45NDA0MiAxMy4xMzA4IDYuMTk2NDEgOS41NjI1M0M5Ljg2NjMxIDUuNTQxOCAxNS4xNTExIDMuMDE2NjMgMjEuMDI1NSAzLjAxNjYzQzI3LjAwMjEgMy4wMTY2NiAzMi4zNzAyIDUuNjMwMzIgMzYuMDQ2IDkuNzc0NDRDMzkuMTg4MSAxMy4zMTY4IDQxLjA5NzggMTcuOTgwNiA0MS4wOTc4IDIzLjA4NzlaIiBmaWxsPSIjRThENEEzIi8+CjxwYXRoIGQ9Ik0zNy4yODcyIDIzLjA4OTFDMzcuMjg3MiAxOC44Njk4IDM1LjY3NjkgMTUuMDI2OCAzMy4wMzcyIDEyLjE0MThMMzMuMDM1MiAxMi4xMzk5QzMwLjA2NjcgOC44NzUwMSAyNS43ODYxIDYuODI2NDQgMjEuMDI1NSA2LjgyNjRDMTYuMjU0NiA2LjgyNjQgMTEuOTY0NyA4Ljg4MDYxIDguOTg5MzIgMTIuMTUzNUM2LjM2MzM4IDE1LjA0MjEgNC43NjI3NiAxOC44NzggNC43NjI3NiAyMy4wODkxQzQuNzYyOCAyNy43MTc0IDcuMDIyNTMgMzEuNDcyIDEwLjIxNTkgMzQuNDczOUMxMy4xNzA0IDM3LjI1MTggMTYuODYwNyAzOS4zNTA4IDIxLjAyNTUgMzkuMzUwOEMyNS4yNDI5IDM5LjM1MDggMjkuMDg1MiAzNy43NDQyIDMxLjk3MzcgMzUuMTA5NkwzMi4yNzY0IDM0LjgyNzRDMzUuMzY1MiAzMS44Njg2IDM3LjI4NzEgMjcuNzAzNCAzNy4yODcyIDIzLjA4OTFaTTM4LjQ3OTYgMjMuMDg5MUMzOC40Nzk1IDI4LjIwMTUgMzYuMjc5NCAzMi44MDE5IDMyLjc3NjQgMzUuOTkxNEMyOS42NzcgMzguODE4MiAyNS41NTEzIDQwLjU0MzIgMjEuMDI1NSA0MC41NDMyQzE2LjQ0NjQgNDAuNTQzMiAxMi40Nzg0IDM4LjIzNzkgOS4zOTk0OCAzNS4zNDNDNi4wNTE2OCAzMi4xOTYgMy41NzE0IDI4LjE0NzkgMy41NzEzNSAyMy4wODkxQzMuNTcxMzUgMTguNTcwMSA1LjI4OTA5IDE0LjQ1MTIgOC4xMDY1MSAxMS4zNTE4QzExLjI5ODMgNy44NDA3NCAxNS45MDQ3IDUuNjM0OTkgMjEuMDI1NSA1LjYzNDk5QzI2LjEzNSA1LjYzNTAzIDMwLjczMTEgNy44MzQgMzMuOTE2MSAxMS4zMzYyQzM2Ljc0OTMgMTQuNDMyNCAzOC40Nzk2IDE4LjU2MDIgMzguNDc5NiAyMy4wODkxWiIgZmlsbD0iI0MxRDg5RiIvPgo8cGF0aCBkPSJNMzQuODQxMSAyMy4wODkxQzM0Ljg0MTEgMTkuNDEwMyAzMy4zOTEzIDE2LjA3NjMgMzEuMDQ2MSAxMy42MDA4QzI4LjUyODEgMTAuOTQyNyAyNC45NzQzIDkuMjcyNzYgMjEuMDI1NiA5LjI3MjcyQzE2Ljk1OTQgOS4yNzI3MiAxMy4zMDM2IDExLjAyODUgMTAuNzc1NiAxMy44MjQ1QzguNTU4NSAxNi4yNzU3IDcuMjA5MjMgMTkuNTI0NiA3LjIwOTIzIDIzLjA4OTFDNy4yMDkzIDI2Ljk2ODQgOS40NDY5IDI5LjYxMTYgMTIuMjA1MyAzMi4yMTMyQzE0Ljc4MTUgMzQuNjQyNCAxNy40ODI2IDM2LjkwNDYgMjEuMDI1NiAzNi45MDQ2QzI0LjY1OTcgMzYuOTA0NSAyNy45NjU3IDM1LjQ5OTMgMzAuNDI5OSAzMy4yMDM0QzMzLjE0MzcgMzAuNjgzMiAzNC44NDEgMjcuMDg1IDM0Ljg0MTEgMjMuMDg5MVpNMzUuODYzNSAyMy4wODkxQzM1Ljg2MzUgMjcuMzgwNyAzNC4wMzgzIDMxLjI0NiAzMS4xMjUyIDMzLjk1MTRDMjguNDc5NCAzNi40MTY1IDI0LjkyODQgMzcuOTI3IDIxLjAyNTYgMzcuOTI3QzE3LjAzMTUgMzcuOTI3IDE0LjA1OTUgMzUuMzY1IDExLjUwNTEgMzIuOTU2M0gxMS41MDQyQzguNzIxNjcgMzAuMzMyMSA2LjE4NzgyIDI3LjQyNyA2LjE4Nzc0IDIzLjA4OTFDNi4xODc3NCAxOS4yNjE2IDcuNjM3MzUgMTUuNzcwNyAxMC4wMTc4IDEzLjEzODlMMTAuMjc1NiAxMi44NjE2QzEyLjk3NzIgMTAuMDIyMSAxNi43OTUgOC4yNTEyNCAyMS4wMjU2IDguMjUxMjRDMjUuMjY5NCA4LjI1MTI4IDI5LjA4NzQgMTAuMDQ2NiAzMS43ODgzIDEyLjg5NzdDMzQuMzA0IDE1LjU1MzEgMzUuODYzNSAxOS4xMzU2IDM1Ljg2MzUgMjMuMDg5MVoiIGZpbGw9IiM5QkRCOUMiLz4KPHBhdGggZD0iTTMyLjM5MzggMjMuMDg4QzMyLjM5MzggMTkuOTUwOCAzMS4xMTM0IDE3LjExODQgMjkuMDU2OSAxNS4wNjA3QzI3LjAwMDQgMTMuMDAzMiAyNC4xNjQ5IDExLjcxOSAyMS4wMjU2IDExLjcxODlIMjAuOTQ2NUMxNy42MTc0IDExLjc0MTIgMTQuNjI3NiAxMy4xOTM5IDEyLjU2MTcgMTUuNDk1M0MxMC43NTQ2IDE3LjUwOTIgOS42NTU0OSAyMC4xNjkzIDkuNjU1NDkgMjMuMDg4QzkuNjU1NTMgMjQuNjU3MSAxMC4yMDgzIDI1LjgyMTQgMTEuMDQ2MSAyNi44NjY0QzExLjkwNTYgMjcuOTM4NCAxMy4wMjQ5IDI4Ljg0NDEgMTQuMTkzNiAyOS45NTAzQzE0LjcyODggMzAuNDU3NCAxNS4yNTIxIDMxLjAwODEgMTUuNzYzOSAzMS41Mjc1QzE2LjI4MTEgMzIuMDUyNCAxNi43OTQzIDMyLjU1NDMgMTcuMzM1MiAzMi45OTE0QzE4LjQxMjMgMzMuODYxNiAxOS41NzM3IDM0LjQ1ODIgMjEuMDI0NiAzNC40NTgyQzI0LjA3NTQgMzQuNDU4MSAyNi44NDM5IDMzLjI1NSAyOC44ODQgMzEuMjk4VjMxLjI5N0MzMS4wNDY0IDI5LjIzMDggMzIuMzkzNyAyNi4yMjQ4IDMyLjM5MzggMjMuMDg4Wk0zMy4yNDUzIDIzLjA4OEMzMy4yNDUzIDI2LjM1NzcgMzEuODg3NiAyOS40ODc5IDI5LjY4NzcgMzEuNzAxM0wyOS40NzI5IDMxLjkxMjNDMjcuMjgwNyAzNC4wMTUgMjQuMzAzOSAzNS4zMDk2IDIxLjAyNDYgMzUuMzA5N0MxOS4zMTAzIDM1LjMwOTcgMTcuOTY0OSAzNC41OTQ2IDE2LjggMzMuNjUzNUMxNi4yMiAzMy4xODQ4IDE1LjY3OTIgMzIuNjU0NyAxNS4xNTc0IDMyLjEyNTFDMTQuNjMwMiAzMS41OSAxNC4xMjk3IDMxLjA2MjIgMTMuNjA4NiAzMC41Njg1VjMwLjU2OTVDMTIuNTA1OCAyOS41MjU2IDExLjI4OTMgMjguNTMxNCAxMC4zODExIDI3LjM5ODZDOS40NTEzMyAyNi4yMzg4IDguODAzOTcgMjQuODkyNCA4LjgwMzkyIDIzLjA4OEM4LjgwMzkyIDE5Ljk1MSA5Ljk4NiAxNy4wODk5IDExLjkyNzkgMTQuOTI1OUgxMS45Mjg5QzE0LjE2NTYgMTIuNDM0NSAxNy40MTI2IDEwLjg2NjQgMjEuMDI0NiAxMC44NjY0SDIxLjIwMDRMMjEuMjAzMyAxMC44NzAzQzI0LjUwOTUgMTAuOTE3OSAyNy40ODk2IDEyLjI4OTMgMjkuNjU4NCAxNC40NTkxTDMwLjA2MjcgMTQuODgzQzMyLjAzMzQgMTcuMDQ5OSAzMy4yNDUzIDE5LjkyNDIgMzMuMjQ1MyAyMy4wODhaIiBmaWxsPSIjNzRERjk4Ii8+CjxwYXRoIGQ9Ik0yOS45NDg1IDIzLjA4OTJDMjkuOTQ4NSAyMC40OTE2IDI4LjgzODggMTguMTU0MiAyNy4wNjc3IDE2LjUyMjhDMjUuNDg4IDE1LjA2OCAyMy4zODM2IDE0LjE3NzYgMjEuMDY5NiAxNC4xNjYzSDIxLjAyNDdDMTguMzY4IDE0LjE2NjMgMTUuOTgzNiAxNS4zMjYxIDE0LjM0ODkgMTcuMTY4M0MxMi45NTA0IDE4Ljc0MzcgMTIuMTAxOCAyMC44MTY4IDEyLjEwMTggMjMuMDg5MkMxMi4xMDE5IDI0LjI3MjUgMTIuNjI5IDI0Ljk3NDMgMTMuNDA1NSAyNS42MDU4QzEzLjgwNDIgMjUuOTMgMTQuMjU0MSAyNi4yMjM4IDE0LjczOTUgMjYuNTU3OUMxNS4yMTggMjYuODg3MyAxNS43MTk2IDI3LjI0OTQgMTYuMTgyOSAyNy42OTA4QzE2LjYyMiAyOC4xMDg5IDE3LjAwMjIgMjguNjAzNSAxNy4zNTc3IDI5LjA5NDFDMTcuNzE5MyAyOS41OTMgMTguMDUwMyAzMC4wNzkyIDE4LjQxMjQgMzAuNTIxOEMxOS4xMjk3IDMxLjM5ODYgMTkuODk2OSAzMi4wMTIgMjEuMDI0NyAzMi4wMTJDMjMuNDkxMiAzMi4wMTE5IDI1LjcyMzIgMzEuMDExIDI3LjMzOTEgMjkuMzkyOUMyOC45NTE4IDI3Ljc3ODEgMjkuOTQ4NSAyNS41NTAzIDI5Ljk0ODUgMjMuMDg5MlpNMzAuNjI5MiAyMy4wODkyQzMwLjYyOTEgMjUuNzM4IDI5LjU1NjYgMjguMTM3IDI3LjgyMTYgMjkuODc0M0MyNi4wODMxIDMxLjYxNTIgMjMuNjc5NCAzMi42OTI2IDIxLjAyNDcgMzIuNjkyN0MxOS41OTE2IDMyLjY5MjcgMTguNjUwMiAzMS44ODg3IDE3Ljg4NSAzMC45NTM0QzE3LjUwNjEgMzAuNDkwMiAxNy4xNTE2IDI5Ljk3MTQgMTYuODA1OSAyOS40OTQ1QzE2LjU0MjEgMjkuMTMwNCAxNi4yNzkzIDI4Ljc4NTEgMTUuOTk5MyAyOC40Nzc5TDE1LjcxMzIgMjguMTgzOUMxNS4yOTA4IDI3Ljc4MTYgMTQuODI2NCAyNy40NDQ4IDE0LjM1MzggMjcuMTE5NUMxMy44ODg0IDI2Ljc5OTEgMTMuNDAyMyAyNi40ODE3IDEyLjk3NTkgMjYuMTM1MUMxMi4xMDE5IDI1LjQyNDQgMTEuNDIwMyAyNC41NDU3IDExLjQyMDIgMjMuMDg5MkMxMS40MjAyIDIwLjY0MzkgMTIuMzM0MyAxOC40MTE1IDEzLjgzOTEgMTYuNzE2MUwxNC4xNzggMTYuMzUyOUMxNS44ODYxIDE0LjYxNjcgMTguMjUwOSAxMy41MzA3IDIwLjg3MDQgMTMuNDg5NkwyMC44NzUzIDEzLjQ4MzdIMjEuMDI1N0MyMy41MzQ2IDEzLjQ4MzggMjUuODE4MSAxNC40NDY1IDI3LjUyODYgMTYuMDIxOEMyOS40MzQgMTcuNzc2OCAzMC42MjkyIDIwLjI5MzEgMzAuNjI5MiAyMy4wODkyWiIgZmlsbD0iIzRERTI5NCIvPgo8cGF0aCBkPSJNMTM2LjIwOSAzMi41OTcxQzEzNC45NDIgMzIuNTk3MSAxMzMuOTE3IDMyLjI4ODcgMTMzLjEzNCAzMS42NzIxQzEzMi4zNTEgMzEuMDU1NCAxMzEuOTU5IDMwLjE3MjEgMTMxLjk1OSAyOS4wMjIxQzEzMS45NTkgMjcuODcyMSAxMzIuMzU5IDI2Ljk2MzcgMTMzLjE1OSAyNi4yOTcxQzEzMy45NzYgMjUuNjMwNCAxMzUuMTU5IDI1LjI5NzEgMTM2LjcwOSAyNS4yOTcxSDEzOC4zMzRDMTM5LjQ2NyAyNS4yOTcxIDE0MC4yNjcgMjUuMTQ3MSAxNDAuNzM0IDI0Ljg0NzFDMTQxLjIxNyAyNC41NDcxIDE0MS40NTkgMjQuMDk3MSAxNDEuNDU5IDIzLjQ5NzFDMTQxLjQ1OSAyMi45ODA0IDE0MS4yNDIgMjIuNTMwNCAxNDAuODA5IDIyLjE0NzFDMTQwLjM3NiAyMS43NjM3IDEzOS42OTIgMjEuNTcyMSAxMzguNzU5IDIxLjU3MjFDMTM3Ljg5MiAyMS41NzIxIDEzNy4xODQgMjEuNzg4NyAxMzYuNjM0IDIyLjIyMjFDMTM2LjEwMSAyMi42NTU0IDEzNS43NzYgMjMuMjgwNCAxMzUuNjU5IDI0LjA5NzFIMTMyLjEwOUMxMzIuMjc2IDIyLjQ2MzcgMTMyLjk0MiAyMS4xODg3IDEzNC4xMDkgMjAuMjcyMUMxMzUuMjc2IDE5LjM1NTQgMTM2LjgzNCAxOC44OTcxIDEzOC43ODQgMTguODk3MUMxNDAuNzM0IDE4Ljg5NzEgMTQyLjI1MSAxOS4zMTM3IDE0My4zMzQgMjAuMTQ3MUMxNDQuNDE3IDIwLjk2MzcgMTQ0Ljk1OSAyMi4xMTM3IDE0NC45NTkgMjMuNTk3MVYzMi4xOTcxSDE0MS41MDlMMTQxLjQ1OSAyOS4wNzIxSDE0MS4zMzRDMTQxLjA1MSAzMC4xMDU0IDE0MC40MzQgMzAuOTU1NCAxMzkuNDg0IDMxLjYyMjFDMTM4LjU1MSAzMi4yNzIxIDEzNy40NTkgMzIuNTk3MSAxMzYuMjA5IDMyLjU5NzFaTTEzNS41NTkgMjguNzIyMUMxMzUuNTU5IDI5LjIyMjEgMTM1LjczNCAyOS42MDU0IDEzNi4wODQgMjkuODcyMUMxMzYuNDUxIDMwLjEzODcgMTM2Ljk2NyAzMC4yNzIxIDEzNy42MzQgMzAuMjcyMUMxMzguMzY3IDMwLjI3MjEgMTM5LjAyNiAzMC4wOTcxIDEzOS42MDkgMjkuNzQ3MUMxNDAuMTkyIDI5LjM5NzEgMTQwLjY0MiAyOC45Mzg3IDE0MC45NTkgMjguMzcyMUMxNDEuMjkyIDI3LjgwNTQgMTQxLjQ1OSAyNy4xOTcxIDE0MS40NTkgMjYuNTQ3MVYyNS4zNzIxSDE0MS4zMzRDMTQxLjE4NCAyNS45ODg3IDE0MC44NTkgMjYuNDQ3MSAxNDAuMzU5IDI2Ljc0NzFDMTM5Ljg1OSAyNy4wMzA0IDEzOS4xNTEgMjcuMTcyMSAxMzguMjM0IDI3LjE3MjFIMTM3LjM1OUMxMzYuNzc2IDI3LjE3MjEgMTM2LjMyNiAyNy4zMTM3IDEzNi4wMDkgMjcuNTk3MUMxMzUuNzA5IDI3Ljg2MzcgMTM1LjU1OSAyOC4yMzg3IDEzNS41NTkgMjguNzIyMVoiIGZpbGw9IiNGQUY1RTkiLz4KPHBhdGggZD0iTTEyOS42ODUgMTkuMjk3MVYzMi4xOTcxSDEyNi4xMVYxOS4yOTcxSDEyOS42ODVaTTEyNS43ODUgMTUuNTIyMUMxMjUuNzg1IDE0Ljk1NTQgMTI1Ljk5MyAxNC40NzIxIDEyNi40MSAxNC4wNzIxQzEyNi44MjcgMTMuNjU1NCAxMjcuMzE4IDEzLjQ0NzEgMTI3Ljg4NSAxMy40NDcxQzEyOC40NjggMTMuNDQ3MSAxMjguOTYgMTMuNjQ3MSAxMjkuMzYgMTQuMDQ3MUMxMjkuNzYgMTQuNDQ3MSAxMjkuOTYgMTQuOTM4NyAxMjkuOTYgMTUuNTIyMUMxMjkuOTYgMTYuMDg4NyAxMjkuNzYgMTYuNTcyMSAxMjkuMzYgMTYuOTcyMUMxMjguOTYgMTcuMzcyMSAxMjguNDY4IDE3LjU3MjEgMTI3Ljg4NSAxNy41NzIxQzEyNy4zMDIgMTcuNTcyMSAxMjYuODAyIDE3LjM3MjEgMTI2LjM4NSAxNi45NzIxQzEyNS45ODUgMTYuNTcyMSAxMjUuNzg1IDE2LjA4ODcgMTI1Ljc4NSAxNS41MjIxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNMTA5LjIzMiAyNS43NDcxQzEwOS4yMzIgMjQuMzgwNCAxMDkuNDU3IDIzLjE4MDQgMTA5LjkwNyAyMi4xNDcxQzExMC4zNzMgMjEuMTEzNyAxMTEuMDMyIDIwLjMxMzcgMTExLjg4MiAxOS43NDcxQzExMi43MzIgMTkuMTgwNCAxMTMuNzIzIDE4Ljg5NzEgMTE0Ljg1NyAxOC44OTcxQzExNS45MDcgMTguODk3MSAxMTYuODQgMTkuMTk3MSAxMTcuNjU3IDE5Ljc5NzFDMTE4LjQ3MyAyMC4zOTcxIDExOS4wNzMgMjEuMjIyMSAxMTkuNDU3IDIyLjI3MjFIMTE5LjYwN1YxNC42OTcxSDEyMy4xNTdWMzIuMTk3MUgxMTkuNzA3TDExOS42MDcgMjkuMjQ3MUgxMTkuNDU3QzExOS4wNTcgMzAuMjk3MSAxMTguNDQ4IDMxLjEyMjEgMTE3LjYzMiAzMS43MjIxQzExNi44MTUgMzIuMzA1NCAxMTUuODkgMzIuNTk3MSAxMTQuODU3IDMyLjU5NzFDMTEzLjcyMyAzMi41OTcxIDExMi43MzIgMzIuMzIyMSAxMTEuODgyIDMxLjc3MjFDMTExLjAzMiAzMS4yMDU0IDExMC4zNzMgMzAuNDA1NCAxMDkuOTA3IDI5LjM3MjFDMTA5LjQ1NyAyOC4zMzg3IDEwOS4yMzIgMjcuMTMwNCAxMDkuMjMyIDI1Ljc0NzFaTTExMi44MDcgMjUuNzQ3MUMxMTIuODA3IDI3LjA4MDQgMTEzLjExNSAyOC4xNDcxIDExMy43MzIgMjguOTQ3MUMxMTQuMzQ4IDI5LjczMDQgMTE1LjE3MyAzMC4xMjIxIDExNi4yMDcgMzAuMTIyMUMxMTcuMjIzIDMwLjEyMjEgMTE4LjA0IDI5Ljc4ODcgMTE4LjY1NyAyOS4xMjIxQzExOS4yOSAyOC40Mzg3IDExOS42MDcgMjcuNTcyMSAxMTkuNjA3IDI2LjUyMjFWMjQuOTk3MUMxMTkuNjA3IDIzLjkzMDQgMTE5LjI5OCAyMy4wNjM3IDExOC42ODIgMjIuMzk3MUMxMTguMDY1IDIxLjcxMzcgMTE3LjI0IDIxLjM3MjEgMTE2LjIwNyAyMS4zNzIxQzExNS4xNzMgMjEuMzcyMSAxMTQuMzQ4IDIxLjc3MjEgMTEzLjczMiAyMi41NzIxQzExMy4xMTUgMjMuMzU1NCAxMTIuODA3IDI0LjQxMzcgMTEyLjgwNyAyNS43NDcxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNOTkuNTg4MiAxOS4yOTcxSDEwMy4wMzhMMTAzLjEzOCAyMy4zNDcxSDEwMy4yNjNDMTAzLjQ2MyAyMi4zMzA0IDEwMy43NTUgMjEuNTIyMSAxMDQuMTM4IDIwLjkyMjFDMTA0LjUyMiAyMC4zMDU0IDEwNS4wNjMgMTkuODQ3MSAxMDUuNzYzIDE5LjU0NzFDMTA2LjQ4IDE5LjIzMDQgMTA3LjQyMiAxOS4wNzIxIDEwOC41ODggMTkuMDcyMVYyMi4wNzIxQzEwNi43NTUgMjIuMTM4NyAxMDUuNDMgMjIuNDg4NyAxMDQuNjEzIDIzLjEyMjFDMTA0LjA5NyAyMy41MDU0IDEwMy43MjIgMjQuMDMwNCAxMDMuNDg4IDI0LjY5NzFDMTAzLjI1NSAyNS4zNjM3IDEwMy4xMzggMjYuMjEzNyAxMDMuMTM4IDI3LjI0NzFWMzIuMTk3MUg5OS41ODgyVjE5LjI5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik05MC40NzQzIDMyLjU5NzFDODkuMTc0MyAzMi41OTcxIDg3Ljk4MjcgMzIuMzIyMSA4Ni44OTkzIDMxLjc3MjFDODUuODMyNyAzMS4yMDU0IDg0Ljk5MSAzMC4zOTcxIDg0LjM3NDMgMjkuMzQ3MUM4My43NTc3IDI4LjI5NzEgODMuNDQ5MyAyNy4wODA0IDgzLjQ0OTMgMjUuNjk3MUM4My40NDkzIDI0LjM0NzEgODMuNzU3NyAyMy4xNTU0IDg0LjM3NDMgMjIuMTIyMUM4NS4wMDc3IDIxLjA4ODcgODUuODU3NyAyMC4yOTcxIDg2LjkyNDMgMTkuNzQ3MUM4Ny45OTEgMTkuMTgwNCA4OS4xNzQzIDE4Ljg5NzEgOTAuNDc0MyAxOC44OTcxQzkxLjc3NDMgMTguODk3MSA5Mi45NTc3IDE5LjE4MDQgOTQuMDI0MyAxOS43NDcxQzk1LjEwNzcgMjAuMjk3MSA5NS45NTc3IDIxLjA4ODcgOTYuNTc0MyAyMi4xMjIxQzk3LjIwNzcgMjMuMTU1NCA5Ny41MjQzIDI0LjM0NzEgOTcuNTI0MyAyNS42OTcxQzk3LjUyNDMgMjcuMDgwNCA5Ny4yMDc3IDI4LjI5NzEgOTYuNTc0MyAyOS4zNDcxQzk1Ljk1NzcgMzAuMzk3MSA5NS4xMDc3IDMxLjIwNTQgOTQuMDI0MyAzMS43NzIxQzkyLjk1NzcgMzIuMzIyMSA5MS43NzQzIDMyLjU5NzEgOTAuNDc0MyAzMi41OTcxWk04Ny4wMjQzIDI1LjY5NzFDODcuMDI0MyAyNy4wNjM3IDg3LjMyNDMgMjguMTA1NCA4Ny45MjQzIDI4LjgyMjFDODguNTQxIDI5LjUzODcgODkuMzkxIDI5Ljg5NzEgOTAuNDc0MyAyOS44OTcxQzkxLjU1NzcgMjkuODk3MSA5Mi4zOTkzIDI5LjUzODcgOTIuOTk5MyAyOC44MjIxQzkzLjYxNiAyOC4xMDU0IDkzLjkyNDMgMjcuMDYzNyA5My45MjQzIDI1LjY5NzFDOTMuOTI0MyAyNC4zNjM3IDkzLjYxNiAyMy4zNDcxIDkyLjk5OTMgMjIuNjQ3MUM5Mi4zOTkzIDIxLjk0NzEgOTEuNTU3NyAyMS41OTcxIDkwLjQ3NDMgMjEuNTk3MUM4OS4zOTEgMjEuNTk3MSA4OC41NDEgMjEuOTQ3MSA4Ny45MjQzIDIyLjY0NzFDODcuMzI0MyAyMy4zNDcxIDg3LjAyNDMgMjQuMzYzNyA4Ny4wMjQzIDI1LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik02OC4xNDE5IDE0LjY5NzFINzEuNjkxOVYyMi4zNzIxSDcxLjg0MTlDNzIuMTkxOSAyMS4yNTU0IDcyLjc3NTIgMjAuMzk3MSA3My41OTE5IDE5Ljc5NzFDNzQuNDI1MiAxOS4xOTcxIDc1LjQyNTIgMTguODk3MSA3Ni41OTE5IDE4Ljg5NzFDNzcuNDU4NiAxOC44OTcxIDc4LjI1MDIgMTkuMDk3MSA3OC45NjY5IDE5LjQ5NzFDNzkuNzAwMiAxOS44ODA0IDgwLjI3NTIgMjAuNDQ3MSA4MC42OTE5IDIxLjE5NzFDODEuMTI1MiAyMS45NDcxIDgxLjM0MTkgMjIuODM4NyA4MS4zNDE5IDIzLjg3MjFWMzIuMTk3MUg3Ny43OTE5VjI0Ljg3MjFDNzcuNzkxOSAyMy44MjIxIDc3LjU0MTkgMjMuMDMwNCA3Ny4wNDE5IDIyLjQ5NzFDNzYuNTU4NiAyMS45NjM3IDc1LjgzMzYgMjEuNjk3MSA3NC44NjY5IDIxLjY5NzFDNzMuODgzNiAyMS42OTcxIDczLjEwODYgMjIuMDMwNCA3Mi41NDE5IDIyLjY5NzFDNzEuOTc1MiAyMy4zNjM3IDcxLjY5MTkgMjQuMjgwNCA3MS42OTE5IDI1LjQ0NzFWMzIuMTk3MUg2OC4xNDE5VjE0LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik01Ny43OTc4IDMyLjU5N0M1Ni4wMzExIDMyLjU5NyA1NC40ODk0IDMyLjIzMDQgNTMuMTcyOCAzMS40OTdDNTEuODcyOCAzMC43NjM3IDUwLjg2NDQgMjkuNzA1NCA1MC4xNDc4IDI4LjMyMjFDNDkuNDQ3OCAyNi45Mzg3IDQ5LjA5NzggMjUuMzA1NCA0OS4wOTc4IDIzLjQyMjFDNDkuMDk3OCAyMS41Mzg3IDQ5LjQ0NzggMTkuOTEzNyA1MC4xNDc4IDE4LjU0NzFDNTAuODY0NCAxNy4xNjM3IDUxLjg3MjggMTYuMTEzNyA1My4xNzI4IDE1LjM5N0M1NC40NzI4IDE0LjY2MzcgNTYuMDE0NCAxNC4yOTcxIDU3Ljc5NzggMTQuMjk3MUM2MC4wNjQ0IDE0LjI5NzEgNjEuOTE0NCAxNC44NzIxIDYzLjM0NzggMTYuMDIyMUM2NC43OTc4IDE3LjE1NTQgNjUuNjgxMSAxOC43MDU0IDY1Ljk5NzggMjAuNjcyMUg2Mi4wNDc4QzYxLjc4MTEgMTkuNjM4NyA2MS4yODExIDE4LjgyMjEgNjAuNTQ3OCAxOC4yMjIxQzU5LjgxNDQgMTcuNjIyMSA1OC44OTc4IDE3LjMyMjEgNTcuNzk3OCAxNy4zMjIxQzU2LjMzMTEgMTcuMzIyMSA1NS4xNzI4IDE3Ljg2MzcgNTQuMzIyOCAxOC45NDcxQzUzLjQ4OTQgMjAuMDEzNyA1My4wNzI4IDIxLjUwNTQgNTMuMDcyOCAyMy40MjIxQzUzLjA3MjggMjUuMzM4NyA1My41MDYxIDI2Ljg0NzEgNTQuMzcyOCAyNy45NDcxQzU1LjIzOTQgMjkuMDMwNCA1Ni40MjI4IDI5LjU3MjEgNTcuOTIyOCAyOS41NzIxQzU5LjEwNjEgMjkuNTcyMSA2MC4wNzI4IDI5LjE5NzEgNjAuODIyOCAyOC40NDcxQzYxLjU4OTQgMjcuNjk3MSA2Mi4wNDc4IDI2LjY5NzEgNjIuMTk3OCAyNS40NDcxSDY2LjA5NzhDNjUuOTY0NCAyNi44OTcxIDY1LjU0NzggMjguMTYzNyA2NC44NDc4IDI5LjI0NzFDNjQuMTY0NCAzMC4zMTM3IDYzLjIyMjggMzEuMTM4NyA2Mi4wMjI4IDMxLjcyMkM2MC44MjI4IDMyLjMwNTQgNTkuNDE0NCAzMi41OTcgNTcuNzk3OCAzMi41OTdaIiBmaWxsPSIjRkFGNUU5Ii8+Cjwvc3ZnPgo=",U={home:D.Home,projects:D.FolderClosed,folder:D.FolderClosed,organization:D.Users,users:D.Users,dashboard:D.LayoutDashboard,history:D.Clock3,sessions:D.Clock3,monitoring:D.Activity,activity:D.Activity,insights:D.Lightbulb,notifications:D.Bell,integrations:D.Plug,settings:D.Settings,usage:D.BarChart3,docs:D.FileText,documentation:D.FileText,agents:D.Headphones,security:D.Shield,configuration:D.Sliders,workflow:D.Workflow};function l(N){return N?typeof N=="string"?U[N.toLowerCase()]||D.SquareDot:N:D.SquareDot}function C({menuItems:N=[],activeId:j,onNavigate:I,collapsed:y,onToggleCollapse:u,header:x,footer:e,width:T=244,collapsedWidth:n=56}){const[z,c]=s.useState(!1),r=y!==void 0?y:z,A=u||(()=>c(!z)),[o,i]=s.useState(()=>{const g={};return N.forEach(t=>{var a;if((a=t.children)!=null&&a.length){const d=t.children.some(E=>E.id===j||E.active);g[t.id]=d}}),g}),k=g=>{i(t=>({...t,[g]:!t[g]}))},L=r?n:T;return M.jsxs("nav",{style:{width:L,minWidth:L,height:"100%",display:"flex",flexDirection:"column",alignItems:"flex-start",padding:r?"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:[M.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:r?"center":"space-between",padding:r?"12px 0":"12px 0 0",flexShrink:0,width:"100%"},children:[!r&&M.jsx("div",{style:{flexShrink:0},children:x!==void 0?x:M.jsx("img",{src:Q,alt:"Chordia",style:{height:28,objectFit:"contain"}})}),M.jsx("button",{onClick:A,title:r?"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",flexShrink:0},onMouseEnter:g=>{g.currentTarget.style.background="rgba(255, 255, 255, 0.08)",g.currentTarget.style.color="rgba(255, 255, 255, 0.8)"},onMouseLeave:g=>{g.currentTarget.style.background="transparent",g.currentTarget.style.color="rgba(255, 255, 255, 0.5)"},children:r?M.jsx(D.PanelLeft,{size:16}):M.jsx(D.PanelLeftClose,{size:16})})]}),M.jsx("div",{style:{flex:1,overflowY:"auto",overflowX:"hidden",padding:r?"0 8px":"0",width:"100%"},children:N.map((g,t)=>{var a;return M.jsxs(s.Fragment,{children:[g.section&&!r&&M.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:g.section}),(a=g.children)!=null&&a.length?M.jsx(w,{item:g,activeId:j,expanded:!!o[g.id],onToggle:()=>k(g.id),onNavigate:I,collapsed:r}):M.jsx(S,{item:g,active:g.id===j||g.active,onNavigate:I,collapsed:r})]},g.id||t)})}),e&&!r&&M.jsx("div",{style:{padding:"12px 16px",borderTop:"1px solid rgba(255, 255, 255, 0.08)",flexShrink:0,width:"100%"},children:e})]})}function S({item:N,active:j,onNavigate:I,collapsed:y}){const u=l(N.icon),x=typeof N.icon!="string"&&typeof N.icon<"u";return M.jsxs("button",{onClick:()=>I==null?void 0:I(N.href||N.id),title:y?N.label:void 0,style:{display:"flex",alignItems:"center",gap:y?0:12,justifyContent:y?"center":"flex-start",width:"100%",padding:y?"10px 0":"12px 24px 12px 12px",borderRadius:j?"4px 0 0 4px":"4px",borderRight:j?"2px solid #00A66E":"2px solid transparent",borderTop:"none",borderBottom:"none",borderLeft:"none",background:j?"var(--Background-MonoPressed, #323232)":"transparent",color:j?"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:e=>{j||(e.currentTarget.style.background="var(--Background-MonoPressed, #323232)",e.currentTarget.style.color="var(--Brand-400, #33B88B)")},onMouseLeave:e=>{j||(e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:[x?M.jsx("span",{style:{flexShrink:0,display:"flex"},children:N.icon}):M.jsx(u,{size:18,style:{flexShrink:0,color:"inherit"}}),!y&&M.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:N.label})]})}function w({item:N,activeId:j,expanded:I,onToggle:y,onNavigate:u,collapsed:x}){var n;const e=l(N.icon),T=(n=N.children)==null?void 0:n.some(z=>z.id===j||z.active);return x?M.jsx("button",{onClick:y,title:N.label,style:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",padding:"10px 0",borderRadius:"4px",border:"none",background:T?"var(--Background-MonoPressed, #323232)":"transparent",color:T?"var(--Brand-400, #33B88B)":"var(--Content-TertiaryInverse, #B2AEA8)",cursor:"pointer",marginBottom:2,transition:"background 0.15s ease"},onMouseEnter:z=>{T||(z.currentTarget.style.background="var(--Background-MonoPressed, #323232)",z.currentTarget.style.color="var(--Brand-400, #33B88B)")},onMouseLeave:z=>{T||(z.currentTarget.style.background="transparent",z.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)")},children:M.jsx(e,{size:18,style:{color:"inherit"}})}):M.jsxs("div",{style:{marginBottom:2},children:[M.jsxs("button",{onClick:y,style:{display:"flex",alignItems:"center",gap:12,width:"100%",padding:"12px 24px 12px 12px",borderRadius:"4px",border:"none",background:"transparent",color:T?"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:z=>{z.currentTarget.style.background="var(--Background-MonoPressed, #323232)",z.currentTarget.style.color="var(--Brand-400, #33B88B)"},onMouseLeave:z=>{z.currentTarget.style.background="transparent",T?z.currentTarget.style.color="var(--Brand-400, #33B88B)":z.currentTarget.style.color="var(--Content-TertiaryInverse, #B2AEA8)"},children:[M.jsx(e,{size:18,style:{flexShrink:0,color:"inherit"}}),M.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:N.label}),M.jsx(D.ChevronDown,{size:14,style:{flexShrink:0,color:"inherit",opacity:.7,transform:I?"rotate(0deg)":"rotate(-90deg)",transition:"transform 0.2s ease"}})]}),I&&M.jsx("div",{style:{paddingLeft:18,marginTop:2},children:N.children.map((z,c)=>M.jsx(S,{item:z,active:z.id===j||z.active,onNavigate:u,collapsed:!1},z.id||c))})]})}const O=["#5a8a6e","#b07d4f","#7a8fa6","#c47a5a","#6a9a8a","#a0785a","#5a7a9a","#9a7a5a"];function p(N){if(!N)return O[0];let j=0;for(let I=0;I<N.length;I++)j=(j<<5)-j+N.charCodeAt(I)|0;return O[Math.abs(j)%O.length]}function Y({logo:N,title:j,userName:I,userEmail:y,userInitials:u,userRole:x,onSignOut:e,children:T,trailing:n,userMenu:z,height:c=48,style:r}){const A=I||y||"",o=u||F(A);return M.jsxs("header",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 20px",height:c,borderBottom:"1px solid var(--border)",background:"var(--paper-elevated)",flexShrink:0,fontFamily:"var(--font-sans)",position:"sticky",top:0,zIndex:1e3,...r},children:[M.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[N!==void 0?N:M.jsx("span",{style:{fontSize:"var(--text-lg)",fontWeight:700,fontFamily:"var(--font-display)",color:"var(--text-ink)",letterSpacing:"-0.01em"},children:"Chordia"}),j&&M.jsxs(M.Fragment,{children:[M.jsx("span",{style:{width:1,height:18,background:"var(--border)",flexShrink:0}}),M.jsx("span",{style:{fontSize:"var(--text-md)",fontWeight:500,color:"var(--text-muted)"},children:j})]})]}),T&&M.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,flex:1,justifyContent:"center",minWidth:0},children:T}),M.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexShrink:0},children:[n,z||A&&M.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[M.jsx("div",{style:{width:30,height:30,borderRadius:"50%",background:p(A),display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:M.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#fff",letterSpacing:"0.02em",lineHeight:1},children:o})}),M.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:1},children:[M.jsx("span",{style:{fontSize:"var(--text-sm)",fontWeight:550,color:"var(--text-strong)",lineHeight:1.2},children:A}),x&&M.jsx("span",{style:{fontSize:"var(--text-xs)",color:"var(--text-muted)",lineHeight:1.2},children:x})]}),e&&M.jsx("button",{onClick:e,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:i=>{i.currentTarget.style.background="var(--hover-warm)",i.currentTarget.style.color="var(--text-muted)"},onMouseLeave:i=>{i.currentTarget.style.background="transparent",i.currentTarget.style.color="var(--text-faint)"},children:M.jsx(D.LogOut,{size:14})})]})]})]})}function f({label:N,color:j="var(--text-muted)",active:I,onClick:y}){return M.jsxs("button",{onClick:y,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, ${j} 30%, transparent)`,background:`color-mix(in srgb, ${j} 10%, transparent)`,color:j,cursor:"pointer",transition:"background 0.15s ease, border-color 0.15s ease"},onMouseEnter:u=>{u.currentTarget.style.background=`color-mix(in srgb, ${j} 18%, transparent)`},onMouseLeave:u=>{u.currentTarget.style.background=`color-mix(in srgb, ${j} 10%, transparent)`},children:[N,M.jsx(D.ChevronDown,{size:12,style:{transform:I?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s ease",opacity:.7}})]})}function h({open:N,onClose:j,children:I,align:y="left"}){return N?M.jsxs(M.Fragment,{children:[M.jsx("div",{onClick:j,style:{position:"fixed",inset:0,zIndex:99,background:"rgba(0,0,0,0.03)"}}),M.jsx("div",{style:{position:"absolute",top:"100%",[y==="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:I})]}):null}function v({label:N,active:j,onClick:I}){return M.jsx("div",{onClick:I,style:{padding:"8px 10px",borderRadius:"var(--radius-sm)",cursor:"pointer",fontSize:"var(--text-sm)",color:j?"var(--text-ink)":"var(--text-base)",fontWeight:j?600:400,fontFamily:"var(--font-sans)",background:j?"var(--hover-warm)":"transparent",transition:"background 0.1s ease"},onMouseEnter:y=>{j||(y.currentTarget.style.background="var(--hover-warm-subtle)")},onMouseLeave:y=>{j||(y.currentTarget.style.background="transparent")},children:N})}function b({connected:N,label:j}){const I=j||(N?"Connected":"Disconnected");return M.jsx("span",{style:{fontSize:"var(--text-xs)",fontFamily:"var(--font-sans)",padding:"3px 10px",borderRadius:12,border:`1px solid ${N?"var(--state-present)":"var(--border)"}`,color:N?"var(--state-present)":"var(--text-faint)",background:N?"rgba(37,163,114,0.08)":"transparent",transition:"all 0.2s ease"},children:I})}function F(N){if(!N)return"?";const j=N.trim().split(/\s+/);return j.length>=2?(j[0][0]+j[j.length-1][0]).toUpperCase():N.slice(0,2).toUpperCase()}exports.NavDropdown=h;exports.NavDropdownItem=v;exports.NavPill=f;exports.NavigationBar=Y;exports.Sidebar=C;exports.StatusIndicator=b;
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 + Collapse toggle in one row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"space-between\",\n padding: collapsed ? \"12px 0\" : \"12px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {header && !collapsed && (\n <div style={{ flexShrink: 0 }}>\n {header}\n </div>\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 flexShrink: 0,\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
+ {"version":3,"file":"navigation.cjs.js","sources":["../../src/assets/LogoChordia.svg","../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjQ3IiB2aWV3Qm94PSIwIDAgMTQ2IDQ3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMzkuNzM0NSAyMy4wODc5QzM5LjczNDUgMTguMzI2NCAzNy45NTYyIDEzLjk4MDYgMzUuMDI2NSAxMC42Nzc4QzMxLjU5ODQgNi44MTMwMyAyNi41OTYxIDQuMzc5OTUgMjEuMDI1NSA0LjM3OTkxQzE1LjU1IDQuMzc5OTEgMTAuNjI2IDYuNzMxNTUgNy4yMDMyNSAxMC40ODE1QzQuMTY3MzIgMTMuODA4NiAyLjMxNzUyIDE4LjIzMTIgMi4zMTc1IDIzLjA4ODlDMi4zMTc1IDI4LjQ3MDQgNC41ODkzNiAzMy4zMjE1IDguMjI4NjQgMzYuNzM1NEw4LjU0NjAyIDM3LjAyNjRDMTEuODY0MyAzOS45OTE5IDE2LjM3NzQgNDEuNzk2OSAyMS4wMjY1IDQxLjc5NjlDMjUuODI4NSA0MS43OTY5IDMwLjIwNjkgMzkuOTg5MiAzMy41MTk3IDM3LjAxNDdDMzcuMzM2MyAzMy41ODc1IDM5LjczNDUgMjguNjE4MSAzOS43MzQ1IDIzLjA4NzlaTTQxLjA5NzggMjMuMDg3OUM0MS4wOTc4IDI5LjAyMSAzOC41MjIgMzQuMzUzNyAzNC40Mjk4IDM4LjAyODRDMzAuODc2NyA0MS4yMTg3IDI2LjE3NzMgNDMuMTYwMiAyMS4wMjY1IDQzLjE2MDJDMTUuODczMiA0My4xNjAyIDEwLjg4NzUgNDEuMDk4OSA3LjI5NjAyIDM3LjcyOTVDMy4zOTM2IDM0LjA2ODggMC45NTQyMjQgMjguODYyMyAwLjk1NDIyNCAyMy4wODg5QzAuOTU0MjM1IDE3Ljg3ODIgMi45NDA0MiAxMy4xMzA4IDYuMTk2NDEgOS41NjI1M0M5Ljg2NjMxIDUuNTQxOCAxNS4xNTExIDMuMDE2NjMgMjEuMDI1NSAzLjAxNjYzQzI3LjAwMjEgMy4wMTY2NiAzMi4zNzAyIDUuNjMwMzIgMzYuMDQ2IDkuNzc0NDRDMzkuMTg4MSAxMy4zMTY4IDQxLjA5NzggMTcuOTgwNiA0MS4wOTc4IDIzLjA4NzlaIiBmaWxsPSIjRThENEEzIi8+CjxwYXRoIGQ9Ik0zNy4yODcyIDIzLjA4OTFDMzcuMjg3MiAxOC44Njk4IDM1LjY3NjkgMTUuMDI2OCAzMy4wMzcyIDEyLjE0MThMMzMuMDM1MiAxMi4xMzk5QzMwLjA2NjcgOC44NzUwMSAyNS43ODYxIDYuODI2NDQgMjEuMDI1NSA2LjgyNjRDMTYuMjU0NiA2LjgyNjQgMTEuOTY0NyA4Ljg4MDYxIDguOTg5MzIgMTIuMTUzNUM2LjM2MzM4IDE1LjA0MjEgNC43NjI3NiAxOC44NzggNC43NjI3NiAyMy4wODkxQzQuNzYyOCAyNy43MTc0IDcuMDIyNTMgMzEuNDcyIDEwLjIxNTkgMzQuNDczOUMxMy4xNzA0IDM3LjI1MTggMTYuODYwNyAzOS4zNTA4IDIxLjAyNTUgMzkuMzUwOEMyNS4yNDI5IDM5LjM1MDggMjkuMDg1MiAzNy43NDQyIDMxLjk3MzcgMzUuMTA5NkwzMi4yNzY0IDM0LjgyNzRDMzUuMzY1MiAzMS44Njg2IDM3LjI4NzEgMjcuNzAzNCAzNy4yODcyIDIzLjA4OTFaTTM4LjQ3OTYgMjMuMDg5MUMzOC40Nzk1IDI4LjIwMTUgMzYuMjc5NCAzMi44MDE5IDMyLjc3NjQgMzUuOTkxNEMyOS42NzcgMzguODE4MiAyNS41NTEzIDQwLjU0MzIgMjEuMDI1NSA0MC41NDMyQzE2LjQ0NjQgNDAuNTQzMiAxMi40Nzg0IDM4LjIzNzkgOS4zOTk0OCAzNS4zNDNDNi4wNTE2OCAzMi4xOTYgMy41NzE0IDI4LjE0NzkgMy41NzEzNSAyMy4wODkxQzMuNTcxMzUgMTguNTcwMSA1LjI4OTA5IDE0LjQ1MTIgOC4xMDY1MSAxMS4zNTE4QzExLjI5ODMgNy44NDA3NCAxNS45MDQ3IDUuNjM0OTkgMjEuMDI1NSA1LjYzNDk5QzI2LjEzNSA1LjYzNTAzIDMwLjczMTEgNy44MzQgMzMuOTE2MSAxMS4zMzYyQzM2Ljc0OTMgMTQuNDMyNCAzOC40Nzk2IDE4LjU2MDIgMzguNDc5NiAyMy4wODkxWiIgZmlsbD0iI0MxRDg5RiIvPgo8cGF0aCBkPSJNMzQuODQxMSAyMy4wODkxQzM0Ljg0MTEgMTkuNDEwMyAzMy4zOTEzIDE2LjA3NjMgMzEuMDQ2MSAxMy42MDA4QzI4LjUyODEgMTAuOTQyNyAyNC45NzQzIDkuMjcyNzYgMjEuMDI1NiA5LjI3MjcyQzE2Ljk1OTQgOS4yNzI3MiAxMy4zMDM2IDExLjAyODUgMTAuNzc1NiAxMy44MjQ1QzguNTU4NSAxNi4yNzU3IDcuMjA5MjMgMTkuNTI0NiA3LjIwOTIzIDIzLjA4OTFDNy4yMDkzIDI2Ljk2ODQgOS40NDY5IDI5LjYxMTYgMTIuMjA1MyAzMi4yMTMyQzE0Ljc4MTUgMzQuNjQyNCAxNy40ODI2IDM2LjkwNDYgMjEuMDI1NiAzNi45MDQ2QzI0LjY1OTcgMzYuOTA0NSAyNy45NjU3IDM1LjQ5OTMgMzAuNDI5OSAzMy4yMDM0QzMzLjE0MzcgMzAuNjgzMiAzNC44NDEgMjcuMDg1IDM0Ljg0MTEgMjMuMDg5MVpNMzUuODYzNSAyMy4wODkxQzM1Ljg2MzUgMjcuMzgwNyAzNC4wMzgzIDMxLjI0NiAzMS4xMjUyIDMzLjk1MTRDMjguNDc5NCAzNi40MTY1IDI0LjkyODQgMzcuOTI3IDIxLjAyNTYgMzcuOTI3QzE3LjAzMTUgMzcuOTI3IDE0LjA1OTUgMzUuMzY1IDExLjUwNTEgMzIuOTU2M0gxMS41MDQyQzguNzIxNjcgMzAuMzMyMSA2LjE4NzgyIDI3LjQyNyA2LjE4Nzc0IDIzLjA4OTFDNi4xODc3NCAxOS4yNjE2IDcuNjM3MzUgMTUuNzcwNyAxMC4wMTc4IDEzLjEzODlMMTAuMjc1NiAxMi44NjE2QzEyLjk3NzIgMTAuMDIyMSAxNi43OTUgOC4yNTEyNCAyMS4wMjU2IDguMjUxMjRDMjUuMjY5NCA4LjI1MTI4IDI5LjA4NzQgMTAuMDQ2NiAzMS43ODgzIDEyLjg5NzdDMzQuMzA0IDE1LjU1MzEgMzUuODYzNSAxOS4xMzU2IDM1Ljg2MzUgMjMuMDg5MVoiIGZpbGw9IiM5QkRCOUMiLz4KPHBhdGggZD0iTTMyLjM5MzggMjMuMDg4QzMyLjM5MzggMTkuOTUwOCAzMS4xMTM0IDE3LjExODQgMjkuMDU2OSAxNS4wNjA3QzI3LjAwMDQgMTMuMDAzMiAyNC4xNjQ5IDExLjcxOSAyMS4wMjU2IDExLjcxODlIMjAuOTQ2NUMxNy42MTc0IDExLjc0MTIgMTQuNjI3NiAxMy4xOTM5IDEyLjU2MTcgMTUuNDk1M0MxMC43NTQ2IDE3LjUwOTIgOS42NTU0OSAyMC4xNjkzIDkuNjU1NDkgMjMuMDg4QzkuNjU1NTMgMjQuNjU3MSAxMC4yMDgzIDI1LjgyMTQgMTEuMDQ2MSAyNi44NjY0QzExLjkwNTYgMjcuOTM4NCAxMy4wMjQ5IDI4Ljg0NDEgMTQuMTkzNiAyOS45NTAzQzE0LjcyODggMzAuNDU3NCAxNS4yNTIxIDMxLjAwODEgMTUuNzYzOSAzMS41Mjc1QzE2LjI4MTEgMzIuMDUyNCAxNi43OTQzIDMyLjU1NDMgMTcuMzM1MiAzMi45OTE0QzE4LjQxMjMgMzMuODYxNiAxOS41NzM3IDM0LjQ1ODIgMjEuMDI0NiAzNC40NTgyQzI0LjA3NTQgMzQuNDU4MSAyNi44NDM5IDMzLjI1NSAyOC44ODQgMzEuMjk4VjMxLjI5N0MzMS4wNDY0IDI5LjIzMDggMzIuMzkzNyAyNi4yMjQ4IDMyLjM5MzggMjMuMDg4Wk0zMy4yNDUzIDIzLjA4OEMzMy4yNDUzIDI2LjM1NzcgMzEuODg3NiAyOS40ODc5IDI5LjY4NzcgMzEuNzAxM0wyOS40NzI5IDMxLjkxMjNDMjcuMjgwNyAzNC4wMTUgMjQuMzAzOSAzNS4zMDk2IDIxLjAyNDYgMzUuMzA5N0MxOS4zMTAzIDM1LjMwOTcgMTcuOTY0OSAzNC41OTQ2IDE2LjggMzMuNjUzNUMxNi4yMiAzMy4xODQ4IDE1LjY3OTIgMzIuNjU0NyAxNS4xNTc0IDMyLjEyNTFDMTQuNjMwMiAzMS41OSAxNC4xMjk3IDMxLjA2MjIgMTMuNjA4NiAzMC41Njg1VjMwLjU2OTVDMTIuNTA1OCAyOS41MjU2IDExLjI4OTMgMjguNTMxNCAxMC4zODExIDI3LjM5ODZDOS40NTEzMyAyNi4yMzg4IDguODAzOTcgMjQuODkyNCA4LjgwMzkyIDIzLjA4OEM4LjgwMzkyIDE5Ljk1MSA5Ljk4NiAxNy4wODk5IDExLjkyNzkgMTQuOTI1OUgxMS45Mjg5QzE0LjE2NTYgMTIuNDM0NSAxNy40MTI2IDEwLjg2NjQgMjEuMDI0NiAxMC44NjY0SDIxLjIwMDRMMjEuMjAzMyAxMC44NzAzQzI0LjUwOTUgMTAuOTE3OSAyNy40ODk2IDEyLjI4OTMgMjkuNjU4NCAxNC40NTkxTDMwLjA2MjcgMTQuODgzQzMyLjAzMzQgMTcuMDQ5OSAzMy4yNDUzIDE5LjkyNDIgMzMuMjQ1MyAyMy4wODhaIiBmaWxsPSIjNzRERjk4Ii8+CjxwYXRoIGQ9Ik0yOS45NDg1IDIzLjA4OTJDMjkuOTQ4NSAyMC40OTE2IDI4LjgzODggMTguMTU0MiAyNy4wNjc3IDE2LjUyMjhDMjUuNDg4IDE1LjA2OCAyMy4zODM2IDE0LjE3NzYgMjEuMDY5NiAxNC4xNjYzSDIxLjAyNDdDMTguMzY4IDE0LjE2NjMgMTUuOTgzNiAxNS4zMjYxIDE0LjM0ODkgMTcuMTY4M0MxMi45NTA0IDE4Ljc0MzcgMTIuMTAxOCAyMC44MTY4IDEyLjEwMTggMjMuMDg5MkMxMi4xMDE5IDI0LjI3MjUgMTIuNjI5IDI0Ljk3NDMgMTMuNDA1NSAyNS42MDU4QzEzLjgwNDIgMjUuOTMgMTQuMjU0MSAyNi4yMjM4IDE0LjczOTUgMjYuNTU3OUMxNS4yMTggMjYuODg3MyAxNS43MTk2IDI3LjI0OTQgMTYuMTgyOSAyNy42OTA4QzE2LjYyMiAyOC4xMDg5IDE3LjAwMjIgMjguNjAzNSAxNy4zNTc3IDI5LjA5NDFDMTcuNzE5MyAyOS41OTMgMTguMDUwMyAzMC4wNzkyIDE4LjQxMjQgMzAuNTIxOEMxOS4xMjk3IDMxLjM5ODYgMTkuODk2OSAzMi4wMTIgMjEuMDI0NyAzMi4wMTJDMjMuNDkxMiAzMi4wMTE5IDI1LjcyMzIgMzEuMDExIDI3LjMzOTEgMjkuMzkyOUMyOC45NTE4IDI3Ljc3ODEgMjkuOTQ4NSAyNS41NTAzIDI5Ljk0ODUgMjMuMDg5MlpNMzAuNjI5MiAyMy4wODkyQzMwLjYyOTEgMjUuNzM4IDI5LjU1NjYgMjguMTM3IDI3LjgyMTYgMjkuODc0M0MyNi4wODMxIDMxLjYxNTIgMjMuNjc5NCAzMi42OTI2IDIxLjAyNDcgMzIuNjkyN0MxOS41OTE2IDMyLjY5MjcgMTguNjUwMiAzMS44ODg3IDE3Ljg4NSAzMC45NTM0QzE3LjUwNjEgMzAuNDkwMiAxNy4xNTE2IDI5Ljk3MTQgMTYuODA1OSAyOS40OTQ1QzE2LjU0MjEgMjkuMTMwNCAxNi4yNzkzIDI4Ljc4NTEgMTUuOTk5MyAyOC40Nzc5TDE1LjcxMzIgMjguMTgzOUMxNS4yOTA4IDI3Ljc4MTYgMTQuODI2NCAyNy40NDQ4IDE0LjM1MzggMjcuMTE5NUMxMy44ODg0IDI2Ljc5OTEgMTMuNDAyMyAyNi40ODE3IDEyLjk3NTkgMjYuMTM1MUMxMi4xMDE5IDI1LjQyNDQgMTEuNDIwMyAyNC41NDU3IDExLjQyMDIgMjMuMDg5MkMxMS40MjAyIDIwLjY0MzkgMTIuMzM0MyAxOC40MTE1IDEzLjgzOTEgMTYuNzE2MUwxNC4xNzggMTYuMzUyOUMxNS44ODYxIDE0LjYxNjcgMTguMjUwOSAxMy41MzA3IDIwLjg3MDQgMTMuNDg5NkwyMC44NzUzIDEzLjQ4MzdIMjEuMDI1N0MyMy41MzQ2IDEzLjQ4MzggMjUuODE4MSAxNC40NDY1IDI3LjUyODYgMTYuMDIxOEMyOS40MzQgMTcuNzc2OCAzMC42MjkyIDIwLjI5MzEgMzAuNjI5MiAyMy4wODkyWiIgZmlsbD0iIzRERTI5NCIvPgo8cGF0aCBkPSJNMTM2LjIwOSAzMi41OTcxQzEzNC45NDIgMzIuNTk3MSAxMzMuOTE3IDMyLjI4ODcgMTMzLjEzNCAzMS42NzIxQzEzMi4zNTEgMzEuMDU1NCAxMzEuOTU5IDMwLjE3MjEgMTMxLjk1OSAyOS4wMjIxQzEzMS45NTkgMjcuODcyMSAxMzIuMzU5IDI2Ljk2MzcgMTMzLjE1OSAyNi4yOTcxQzEzMy45NzYgMjUuNjMwNCAxMzUuMTU5IDI1LjI5NzEgMTM2LjcwOSAyNS4yOTcxSDEzOC4zMzRDMTM5LjQ2NyAyNS4yOTcxIDE0MC4yNjcgMjUuMTQ3MSAxNDAuNzM0IDI0Ljg0NzFDMTQxLjIxNyAyNC41NDcxIDE0MS40NTkgMjQuMDk3MSAxNDEuNDU5IDIzLjQ5NzFDMTQxLjQ1OSAyMi45ODA0IDE0MS4yNDIgMjIuNTMwNCAxNDAuODA5IDIyLjE0NzFDMTQwLjM3NiAyMS43NjM3IDEzOS42OTIgMjEuNTcyMSAxMzguNzU5IDIxLjU3MjFDMTM3Ljg5MiAyMS41NzIxIDEzNy4xODQgMjEuNzg4NyAxMzYuNjM0IDIyLjIyMjFDMTM2LjEwMSAyMi42NTU0IDEzNS43NzYgMjMuMjgwNCAxMzUuNjU5IDI0LjA5NzFIMTMyLjEwOUMxMzIuMjc2IDIyLjQ2MzcgMTMyLjk0MiAyMS4xODg3IDEzNC4xMDkgMjAuMjcyMUMxMzUuMjc2IDE5LjM1NTQgMTM2LjgzNCAxOC44OTcxIDEzOC43ODQgMTguODk3MUMxNDAuNzM0IDE4Ljg5NzEgMTQyLjI1MSAxOS4zMTM3IDE0My4zMzQgMjAuMTQ3MUMxNDQuNDE3IDIwLjk2MzcgMTQ0Ljk1OSAyMi4xMTM3IDE0NC45NTkgMjMuNTk3MVYzMi4xOTcxSDE0MS41MDlMMTQxLjQ1OSAyOS4wNzIxSDE0MS4zMzRDMTQxLjA1MSAzMC4xMDU0IDE0MC40MzQgMzAuOTU1NCAxMzkuNDg0IDMxLjYyMjFDMTM4LjU1MSAzMi4yNzIxIDEzNy40NTkgMzIuNTk3MSAxMzYuMjA5IDMyLjU5NzFaTTEzNS41NTkgMjguNzIyMUMxMzUuNTU5IDI5LjIyMjEgMTM1LjczNCAyOS42MDU0IDEzNi4wODQgMjkuODcyMUMxMzYuNDUxIDMwLjEzODcgMTM2Ljk2NyAzMC4yNzIxIDEzNy42MzQgMzAuMjcyMUMxMzguMzY3IDMwLjI3MjEgMTM5LjAyNiAzMC4wOTcxIDEzOS42MDkgMjkuNzQ3MUMxNDAuMTkyIDI5LjM5NzEgMTQwLjY0MiAyOC45Mzg3IDE0MC45NTkgMjguMzcyMUMxNDEuMjkyIDI3LjgwNTQgMTQxLjQ1OSAyNy4xOTcxIDE0MS40NTkgMjYuNTQ3MVYyNS4zNzIxSDE0MS4zMzRDMTQxLjE4NCAyNS45ODg3IDE0MC44NTkgMjYuNDQ3MSAxNDAuMzU5IDI2Ljc0NzFDMTM5Ljg1OSAyNy4wMzA0IDEzOS4xNTEgMjcuMTcyMSAxMzguMjM0IDI3LjE3MjFIMTM3LjM1OUMxMzYuNzc2IDI3LjE3MjEgMTM2LjMyNiAyNy4zMTM3IDEzNi4wMDkgMjcuNTk3MUMxMzUuNzA5IDI3Ljg2MzcgMTM1LjU1OSAyOC4yMzg3IDEzNS41NTkgMjguNzIyMVoiIGZpbGw9IiNGQUY1RTkiLz4KPHBhdGggZD0iTTEyOS42ODUgMTkuMjk3MVYzMi4xOTcxSDEyNi4xMVYxOS4yOTcxSDEyOS42ODVaTTEyNS43ODUgMTUuNTIyMUMxMjUuNzg1IDE0Ljk1NTQgMTI1Ljk5MyAxNC40NzIxIDEyNi40MSAxNC4wNzIxQzEyNi44MjcgMTMuNjU1NCAxMjcuMzE4IDEzLjQ0NzEgMTI3Ljg4NSAxMy40NDcxQzEyOC40NjggMTMuNDQ3MSAxMjguOTYgMTMuNjQ3MSAxMjkuMzYgMTQuMDQ3MUMxMjkuNzYgMTQuNDQ3MSAxMjkuOTYgMTQuOTM4NyAxMjkuOTYgMTUuNTIyMUMxMjkuOTYgMTYuMDg4NyAxMjkuNzYgMTYuNTcyMSAxMjkuMzYgMTYuOTcyMUMxMjguOTYgMTcuMzcyMSAxMjguNDY4IDE3LjU3MjEgMTI3Ljg4NSAxNy41NzIxQzEyNy4zMDIgMTcuNTcyMSAxMjYuODAyIDE3LjM3MjEgMTI2LjM4NSAxNi45NzIxQzEyNS45ODUgMTYuNTcyMSAxMjUuNzg1IDE2LjA4ODcgMTI1Ljc4NSAxNS41MjIxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNMTA5LjIzMiAyNS43NDcxQzEwOS4yMzIgMjQuMzgwNCAxMDkuNDU3IDIzLjE4MDQgMTA5LjkwNyAyMi4xNDcxQzExMC4zNzMgMjEuMTEzNyAxMTEuMDMyIDIwLjMxMzcgMTExLjg4MiAxOS43NDcxQzExMi43MzIgMTkuMTgwNCAxMTMuNzIzIDE4Ljg5NzEgMTE0Ljg1NyAxOC44OTcxQzExNS45MDcgMTguODk3MSAxMTYuODQgMTkuMTk3MSAxMTcuNjU3IDE5Ljc5NzFDMTE4LjQ3MyAyMC4zOTcxIDExOS4wNzMgMjEuMjIyMSAxMTkuNDU3IDIyLjI3MjFIMTE5LjYwN1YxNC42OTcxSDEyMy4xNTdWMzIuMTk3MUgxMTkuNzA3TDExOS42MDcgMjkuMjQ3MUgxMTkuNDU3QzExOS4wNTcgMzAuMjk3MSAxMTguNDQ4IDMxLjEyMjEgMTE3LjYzMiAzMS43MjIxQzExNi44MTUgMzIuMzA1NCAxMTUuODkgMzIuNTk3MSAxMTQuODU3IDMyLjU5NzFDMTEzLjcyMyAzMi41OTcxIDExMi43MzIgMzIuMzIyMSAxMTEuODgyIDMxLjc3MjFDMTExLjAzMiAzMS4yMDU0IDExMC4zNzMgMzAuNDA1NCAxMDkuOTA3IDI5LjM3MjFDMTA5LjQ1NyAyOC4zMzg3IDEwOS4yMzIgMjcuMTMwNCAxMDkuMjMyIDI1Ljc0NzFaTTExMi44MDcgMjUuNzQ3MUMxMTIuODA3IDI3LjA4MDQgMTEzLjExNSAyOC4xNDcxIDExMy43MzIgMjguOTQ3MUMxMTQuMzQ4IDI5LjczMDQgMTE1LjE3MyAzMC4xMjIxIDExNi4yMDcgMzAuMTIyMUMxMTcuMjIzIDMwLjEyMjEgMTE4LjA0IDI5Ljc4ODcgMTE4LjY1NyAyOS4xMjIxQzExOS4yOSAyOC40Mzg3IDExOS42MDcgMjcuNTcyMSAxMTkuNjA3IDI2LjUyMjFWMjQuOTk3MUMxMTkuNjA3IDIzLjkzMDQgMTE5LjI5OCAyMy4wNjM3IDExOC42ODIgMjIuMzk3MUMxMTguMDY1IDIxLjcxMzcgMTE3LjI0IDIxLjM3MjEgMTE2LjIwNyAyMS4zNzIxQzExNS4xNzMgMjEuMzcyMSAxMTQuMzQ4IDIxLjc3MjEgMTEzLjczMiAyMi41NzIxQzExMy4xMTUgMjMuMzU1NCAxMTIuODA3IDI0LjQxMzcgMTEyLjgwNyAyNS43NDcxWiIgZmlsbD0iI0ZBRjVFOSIvPgo8cGF0aCBkPSJNOTkuNTg4MiAxOS4yOTcxSDEwMy4wMzhMMTAzLjEzOCAyMy4zNDcxSDEwMy4yNjNDMTAzLjQ2MyAyMi4zMzA0IDEwMy43NTUgMjEuNTIyMSAxMDQuMTM4IDIwLjkyMjFDMTA0LjUyMiAyMC4zMDU0IDEwNS4wNjMgMTkuODQ3MSAxMDUuNzYzIDE5LjU0NzFDMTA2LjQ4IDE5LjIzMDQgMTA3LjQyMiAxOS4wNzIxIDEwOC41ODggMTkuMDcyMVYyMi4wNzIxQzEwNi43NTUgMjIuMTM4NyAxMDUuNDMgMjIuNDg4NyAxMDQuNjEzIDIzLjEyMjFDMTA0LjA5NyAyMy41MDU0IDEwMy43MjIgMjQuMDMwNCAxMDMuNDg4IDI0LjY5NzFDMTAzLjI1NSAyNS4zNjM3IDEwMy4xMzggMjYuMjEzNyAxMDMuMTM4IDI3LjI0NzFWMzIuMTk3MUg5OS41ODgyVjE5LjI5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik05MC40NzQzIDMyLjU5NzFDODkuMTc0MyAzMi41OTcxIDg3Ljk4MjcgMzIuMzIyMSA4Ni44OTkzIDMxLjc3MjFDODUuODMyNyAzMS4yMDU0IDg0Ljk5MSAzMC4zOTcxIDg0LjM3NDMgMjkuMzQ3MUM4My43NTc3IDI4LjI5NzEgODMuNDQ5MyAyNy4wODA0IDgzLjQ0OTMgMjUuNjk3MUM4My40NDkzIDI0LjM0NzEgODMuNzU3NyAyMy4xNTU0IDg0LjM3NDMgMjIuMTIyMUM4NS4wMDc3IDIxLjA4ODcgODUuODU3NyAyMC4yOTcxIDg2LjkyNDMgMTkuNzQ3MUM4Ny45OTEgMTkuMTgwNCA4OS4xNzQzIDE4Ljg5NzEgOTAuNDc0MyAxOC44OTcxQzkxLjc3NDMgMTguODk3MSA5Mi45NTc3IDE5LjE4MDQgOTQuMDI0MyAxOS43NDcxQzk1LjEwNzcgMjAuMjk3MSA5NS45NTc3IDIxLjA4ODcgOTYuNTc0MyAyMi4xMjIxQzk3LjIwNzcgMjMuMTU1NCA5Ny41MjQzIDI0LjM0NzEgOTcuNTI0MyAyNS42OTcxQzk3LjUyNDMgMjcuMDgwNCA5Ny4yMDc3IDI4LjI5NzEgOTYuNTc0MyAyOS4zNDcxQzk1Ljk1NzcgMzAuMzk3MSA5NS4xMDc3IDMxLjIwNTQgOTQuMDI0MyAzMS43NzIxQzkyLjk1NzcgMzIuMzIyMSA5MS43NzQzIDMyLjU5NzEgOTAuNDc0MyAzMi41OTcxWk04Ny4wMjQzIDI1LjY5NzFDODcuMDI0MyAyNy4wNjM3IDg3LjMyNDMgMjguMTA1NCA4Ny45MjQzIDI4LjgyMjFDODguNTQxIDI5LjUzODcgODkuMzkxIDI5Ljg5NzEgOTAuNDc0MyAyOS44OTcxQzkxLjU1NzcgMjkuODk3MSA5Mi4zOTkzIDI5LjUzODcgOTIuOTk5MyAyOC44MjIxQzkzLjYxNiAyOC4xMDU0IDkzLjkyNDMgMjcuMDYzNyA5My45MjQzIDI1LjY5NzFDOTMuOTI0MyAyNC4zNjM3IDkzLjYxNiAyMy4zNDcxIDkyLjk5OTMgMjIuNjQ3MUM5Mi4zOTkzIDIxLjk0NzEgOTEuNTU3NyAyMS41OTcxIDkwLjQ3NDMgMjEuNTk3MUM4OS4zOTEgMjEuNTk3MSA4OC41NDEgMjEuOTQ3MSA4Ny45MjQzIDIyLjY0NzFDODcuMzI0MyAyMy4zNDcxIDg3LjAyNDMgMjQuMzYzNyA4Ny4wMjQzIDI1LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik02OC4xNDE5IDE0LjY5NzFINzEuNjkxOVYyMi4zNzIxSDcxLjg0MTlDNzIuMTkxOSAyMS4yNTU0IDcyLjc3NTIgMjAuMzk3MSA3My41OTE5IDE5Ljc5NzFDNzQuNDI1MiAxOS4xOTcxIDc1LjQyNTIgMTguODk3MSA3Ni41OTE5IDE4Ljg5NzFDNzcuNDU4NiAxOC44OTcxIDc4LjI1MDIgMTkuMDk3MSA3OC45NjY5IDE5LjQ5NzFDNzkuNzAwMiAxOS44ODA0IDgwLjI3NTIgMjAuNDQ3MSA4MC42OTE5IDIxLjE5NzFDODEuMTI1MiAyMS45NDcxIDgxLjM0MTkgMjIuODM4NyA4MS4zNDE5IDIzLjg3MjFWMzIuMTk3MUg3Ny43OTE5VjI0Ljg3MjFDNzcuNzkxOSAyMy44MjIxIDc3LjU0MTkgMjMuMDMwNCA3Ny4wNDE5IDIyLjQ5NzFDNzYuNTU4NiAyMS45NjM3IDc1LjgzMzYgMjEuNjk3MSA3NC44NjY5IDIxLjY5NzFDNzMuODgzNiAyMS42OTcxIDczLjEwODYgMjIuMDMwNCA3Mi41NDE5IDIyLjY5NzFDNzEuOTc1MiAyMy4zNjM3IDcxLjY5MTkgMjQuMjgwNCA3MS42OTE5IDI1LjQ0NzFWMzIuMTk3MUg2OC4xNDE5VjE0LjY5NzFaIiBmaWxsPSIjRkFGNUU5Ii8+CjxwYXRoIGQ9Ik01Ny43OTc4IDMyLjU5N0M1Ni4wMzExIDMyLjU5NyA1NC40ODk0IDMyLjIzMDQgNTMuMTcyOCAzMS40OTdDNTEuODcyOCAzMC43NjM3IDUwLjg2NDQgMjkuNzA1NCA1MC4xNDc4IDI4LjMyMjFDNDkuNDQ3OCAyNi45Mzg3IDQ5LjA5NzggMjUuMzA1NCA0OS4wOTc4IDIzLjQyMjFDNDkuMDk3OCAyMS41Mzg3IDQ5LjQ0NzggMTkuOTEzNyA1MC4xNDc4IDE4LjU0NzFDNTAuODY0NCAxNy4xNjM3IDUxLjg3MjggMTYuMTEzNyA1My4xNzI4IDE1LjM5N0M1NC40NzI4IDE0LjY2MzcgNTYuMDE0NCAxNC4yOTcxIDU3Ljc5NzggMTQuMjk3MUM2MC4wNjQ0IDE0LjI5NzEgNjEuOTE0NCAxNC44NzIxIDYzLjM0NzggMTYuMDIyMUM2NC43OTc4IDE3LjE1NTQgNjUuNjgxMSAxOC43MDU0IDY1Ljk5NzggMjAuNjcyMUg2Mi4wNDc4QzYxLjc4MTEgMTkuNjM4NyA2MS4yODExIDE4LjgyMjEgNjAuNTQ3OCAxOC4yMjIxQzU5LjgxNDQgMTcuNjIyMSA1OC44OTc4IDE3LjMyMjEgNTcuNzk3OCAxNy4zMjIxQzU2LjMzMTEgMTcuMzIyMSA1NS4xNzI4IDE3Ljg2MzcgNTQuMzIyOCAxOC45NDcxQzUzLjQ4OTQgMjAuMDEzNyA1My4wNzI4IDIxLjUwNTQgNTMuMDcyOCAyMy40MjIxQzUzLjA3MjggMjUuMzM4NyA1My41MDYxIDI2Ljg0NzEgNTQuMzcyOCAyNy45NDcxQzU1LjIzOTQgMjkuMDMwNCA1Ni40MjI4IDI5LjU3MjEgNTcuOTIyOCAyOS41NzIxQzU5LjEwNjEgMjkuNTcyMSA2MC4wNzI4IDI5LjE5NzEgNjAuODIyOCAyOC40NDcxQzYxLjU4OTQgMjcuNjk3MSA2Mi4wNDc4IDI2LjY5NzEgNjIuMTk3OCAyNS40NDcxSDY2LjA5NzhDNjUuOTY0NCAyNi44OTcxIDY1LjU0NzggMjguMTYzNyA2NC44NDc4IDI5LjI0NzFDNjQuMTY0NCAzMC4zMTM3IDYzLjIyMjggMzEuMTM4NyA2Mi4wMjI4IDMxLjcyMkM2MC44MjI4IDMyLjMwNTQgNTkuNDE0NCAzMi41OTcgNTcuNzk3OCAzMi41OTdaIiBmaWxsPSIjRkFGNUU5Ii8+Cjwvc3ZnPgo=\"","\"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\nimport chordiaLogoSvg from \"../../assets/LogoChordia.svg\";\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 + Collapse toggle in one row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"space-between\",\n padding: collapsed ? \"12px 0\" : \"12px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {!collapsed && (\n <div style={{ flexShrink: 0 }}>\n {header !== undefined ? header : <img src={chordiaLogoSvg} alt=\"Chordia\" style={{ height: 28, objectFit: \"contain\" }} />}\n </div>\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 flexShrink: 0,\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":["chordiaLogoSvg","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":"kKAAeA,EAAA,qmcCuCTC,EAAW,CACf,KAAMC,EAAA,KACN,SAAUC,EAAA,aACV,OAAQA,EAAA,aACR,aAAcC,EAAA,MACd,MAAOA,EAAA,MACP,UAAWC,EAAA,gBACX,QAASC,EAAA,OACT,SAAUA,EAAA,OACV,WAAYC,EAAA,SACZ,SAAUA,EAAA,SACV,SAAUC,EAAA,UACV,cAAeC,EAAA,KACf,aAAcC,EAAA,KACd,SAAUC,EAAA,SACV,MAAOC,EAAA,UACP,KAAMC,EAAA,SACN,cAAeA,EAAA,SACf,OAAQC,EAAA,WACR,SAAUC,EAAA,OACV,cAAeC,EAAA,QACf,SAAUC,EAAA,QACZ,EAEA,SAASC,EAAYC,EAAM,CACzB,OAAKA,EACD,OAAOA,GAAS,SAAiBlB,EAASkB,EAAK,YAAa,CAAA,GAAKC,EAAAA,UAC9DD,EAFWC,WAGpB,CAEA,SAAwBC,EAAQ,CAC9B,UAAAC,EAAY,CAAC,EACb,SAAAC,EACA,WAAAC,EACA,UAAWC,EACX,iBAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAC,EAAQ,IACR,eAAAC,EAAiB,EACnB,EAAG,CACD,KAAM,CAACC,EAAmBC,CAAoB,EAAIC,WAAS,EAAK,EAC1DC,EAAYT,IAAwB,OAAYA,EAAsBM,EACtEI,EAAiBT,IAAqB,IAAMM,EAAqB,CAACD,CAAiB,GAEnF,CAACK,EAAgBC,CAAiB,EAAIJ,WAAS,IAAM,CACzD,MAAMK,EAAU,CAAA,EACN,OAAAhB,EAAA,QAASiB,GAAS,OACtB,IAAAC,EAAAD,EAAK,WAAL,MAAAC,EAAe,OAAQ,CAEnB,MAAAC,EAAYF,EAAK,SAAS,KAAMG,GAAMA,EAAE,KAAOnB,GAAYmB,EAAE,MAAM,EACjEJ,EAAAC,EAAK,EAAE,EAAIE,CACrB,CAAA,CACD,EACMH,CAAA,CACR,EAEKK,EAAeC,GAAO,CAC1BP,EAAmBQ,IAAU,CAAE,GAAGA,EAAM,CAACD,CAAE,EAAG,CAACC,EAAKD,CAAE,CAAI,EAAA,CAAA,EAGtDE,EAAeZ,EAAYJ,EAAiBD,EAGhD,OAAAkB,EAAA,KAAC,MAAA,CACC,MAAO,CACL,MAAOD,EACP,SAAUA,EACV,OAAQ,OACR,QAAS,OACT,cAAe,SACf,WAAY,aACZ,QAASZ,EAAY,IAAM,gBAC3B,IAAK,GACL,WAAY,qCACZ,WAAY,mBACZ,WAAY,uCACZ,SAAU,SACV,WAAY,CACd,EAGA,SAAA,CAAAa,EAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgBb,EAAY,SAAW,gBACvC,QAASA,EAAY,SAAW,WAChC,WAAY,EACZ,MAAO,MACT,EAEC,SAAA,CAAC,CAAAA,GACCc,EAAA,IAAA,MAAA,CAAI,MAAO,CAAE,WAAY,CAAE,EACzB,SAAWrB,IAAA,OAAYA,EAASqB,EAAAA,IAAC,OAAI,IAAKhD,EAAgB,IAAI,UAAU,MAAO,CAAE,OAAQ,GAAI,UAAW,SAAU,CAAA,CAAG,CACxH,CAAA,EAEFgD,EAAA,IAAC,SAAA,CACC,QAASb,EACT,MAAOD,EAAY,iBAAmB,mBACtC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO,GACP,OAAQ,GACR,aAAc,mBACd,OAAQ,OACR,WAAY,cACZ,MAAO,2BACP,OAAQ,UACR,WAAY,0CACZ,WAAY,CACd,EACA,aAAee,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,4BACjCA,EAAA,cAAc,MAAM,MAAQ,0BAChC,EACA,aAAeA,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,cACjCA,EAAA,cAAc,MAAM,MAAQ,0BAChC,EAEC,SAAAf,QAAagB,EAAU,UAAA,CAAA,KAAM,GAAI,EAAKF,EAAA,IAACG,EAAe,eAAA,CAAA,KAAM,EAAI,CAAA,CAAA,CACnE,CAAA,CAAA,CACF,EAGAH,EAAA,IAAC,MAAA,CACC,MAAO,CACL,KAAM,EACN,UAAW,OACX,UAAW,SACX,QAASd,EAAY,QAAU,IAC/B,MAAO,MACT,EAEC,SAAAZ,EAAU,IAAI,CAACiB,EAAMa,IACnBL,OAAAA,OAAAA,EAAAA,KAAAM,EAAM,SAAN,CAEE,SAAA,CAAKd,EAAA,SAAW,CAACL,GAChBc,EAAA,IAAC,MAAA,CACC,MAAO,CACL,SAAU,iBACV,WAAY,IACZ,cAAe,SACf,cAAe,YACf,MAAO,4BACP,QAAS,eACT,WAAY,CACd,EAEC,SAAKT,EAAA,OAAA,CACR,GAGDC,EAAAD,EAAK,WAAL,MAAAC,EAAe,OACdQ,EAAA,IAACM,EAAA,CACC,KAAAf,EACA,SAAAhB,EACA,SAAU,CAAC,CAACa,EAAeG,EAAK,EAAE,EAClC,SAAU,IAAMI,EAAYJ,EAAK,EAAE,EACnC,WAAAf,EACA,UAAAU,CAAA,CAAA,EAGFc,EAAA,IAACO,EAAA,CACC,KAAAhB,EACA,OAAQA,EAAK,KAAOhB,GAAYgB,EAAK,OACrC,WAAAf,EACA,UAAAU,CAAA,CACF,CAjCiB,CAAA,EAAAK,EAAK,IAAMa,CAmChC,EACD,CAAA,CACH,EAGCxB,GAAU,CAACM,GACVc,EAAA,IAAC,MAAA,CACC,MAAO,CACL,QAAS,YACT,UAAW,sCACX,WAAY,EACZ,MAAO,MACT,EAEC,SAAApB,CAAA,CACH,CAAA,CAAA,CAAA,CAIR,CAEA,SAAS2B,EAAY,CAAE,KAAAhB,EAAM,OAAAiB,EAAQ,WAAAhC,EAAY,UAAAU,GAAa,CACtD,MAAAuB,EAAOvC,EAAYqB,EAAK,IAAI,EAC5BmB,EAAc,OAAOnB,EAAK,MAAS,UAAY,OAAOA,EAAK,KAAS,IAGxE,OAAAQ,EAAA,KAAC,SAAA,CACC,QAAS,IAAMvB,GAAA,YAAAA,EAAae,EAAK,MAAQA,EAAK,IAC9C,MAAOL,EAAYK,EAAK,MAAQ,OAChC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAKL,EAAY,EAAI,GACrB,eAAgBA,EAAY,SAAW,aACvC,MAAO,OACP,QAASA,EAAY,SAAW,sBAChC,aAAcsB,EAAS,cAAgB,MACvC,YAAaA,EAAS,oBAAsB,wBAC5C,UAAW,OACX,aAAc,OACd,WAAY,OACZ,WAAYA,EAAS,yCAA2C,cAChE,MAAOA,EAAS,4BAA8B,0CAC9C,WAAY,IACZ,SAAU,OACV,UAAW,SACX,WAAY,OACZ,cAAe,YACf,WAAY,mBACZ,OAAQ,UACR,UAAW,OACX,WAAY,kEACZ,aAAc,CAChB,EACA,aAAe,GAAM,CACdA,IACD,EAAA,cAAc,MAAM,WAAa,yCACjC,EAAA,cAAc,MAAM,MAAQ,4BAElC,EACA,aAAe,GAAM,CACdA,IACD,EAAA,cAAc,MAAM,WAAa,cACjC,EAAA,cAAc,MAAM,MAAQ,0CAElC,EAEC,SAAA,CACCE,EAAAV,EAAAA,IAAC,OAAK,CAAA,MAAO,CAAE,WAAY,EAAG,QAAS,MAAO,EAAI,SAAKT,EAAA,IAAA,CAAK,EAE5DS,EAAA,IAACS,EAAA,CACC,KAAM,GACN,MAAO,CACL,WAAY,EACZ,MAAO,SACT,CAAA,CACF,EAED,CAACvB,GACAc,EAAA,IAAC,OAAA,CACC,MAAO,CACL,SAAU,SACV,aAAc,WACd,WAAY,QACd,EAEC,SAAKT,EAAA,KAAA,CACR,CAAA,CAAA,CAAA,CAIR,CAEA,SAASe,EAAa,CAAE,KAAAf,EAAM,SAAAhB,EAAU,SAAAoC,EAAU,SAAAC,EAAU,WAAApC,EAAY,UAAAU,GAAa,OAC7E,MAAAuB,EAAOvC,EAAYqB,EAAK,IAAI,EAC5BsB,GAAiBrB,EAAAD,EAAK,WAAL,YAAAC,EAAe,KAAME,GAAMA,EAAE,KAAOnB,GAAYmB,EAAE,QAEzE,OAAIR,EAGAc,EAAA,IAAC,SAAA,CACC,QAASY,EACT,MAAOrB,EAAK,MACZ,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO,OACP,QAAS,SACT,aAAc,MACd,OAAQ,OACR,WAAYsB,EAAiB,yCAA2C,cACxE,MAAOA,EAAiB,4BAA8B,0CACtD,OAAQ,UACR,aAAc,EACd,WAAY,uBACd,EACA,aAAeZ,GAAM,CACdY,IACDZ,EAAA,cAAc,MAAM,WAAa,yCACjCA,EAAA,cAAc,MAAM,MAAQ,4BAElC,EACA,aAAeA,GAAM,CACdY,IACDZ,EAAA,cAAc,MAAM,WAAa,cACjCA,EAAA,cAAc,MAAM,MAAQ,0CAElC,EAEA,SAAAD,EAAA,IAACS,EAAA,CACC,KAAM,GACN,MAAO,CAAE,MAAO,SAAU,CAAA,CAC5B,CAAA,CAAA,SAMH,MAAI,CAAA,MAAO,CAAE,aAAc,CAE1B,EAAA,SAAA,CAAAV,EAAA,KAAC,SAAA,CACC,QAASa,EACT,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,GACL,MAAO,OACP,QAAS,sBACT,aAAc,MACd,OAAQ,OACR,WAAY,cACZ,MAAOC,EAAiB,4BAA8B,0CACtD,WAAY,IACZ,SAAU,OACV,UAAW,SACX,WAAY,OACZ,cAAe,YACf,WAAY,mBACZ,OAAQ,UACR,UAAW,OACX,WAAY,yCACd,EACA,aAAeZ,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,yCACjCA,EAAA,cAAc,MAAM,MAAQ,2BAChC,EACA,aAAeA,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,cAC9BY,EACEZ,EAAA,cAAc,MAAM,MAAQ,4BADZA,EAAA,cAAc,MAAM,MAAQ,yCAErD,EAEA,SAAA,CAAAD,EAAA,IAACS,EAAA,CACC,KAAM,GACN,MAAO,CACL,WAAY,EACZ,MAAO,SACT,CAAA,CACF,EACAT,EAAA,IAAC,OAAA,CACC,MAAO,CACL,KAAM,EACN,SAAU,SACV,aAAc,WACd,WAAY,QACd,EAEC,SAAKT,EAAA,KAAA,CACR,EACAS,EAAA,IAACc,EAAA,YAAA,CACC,KAAM,GACN,MAAO,CACL,WAAY,EACZ,MAAO,UACP,QAAS,GACT,UAAWH,EAAW,eAAiB,iBACvC,WAAY,qBACd,CAAA,CACF,CAAA,CAAA,CACF,EAGCA,GACCX,EAAA,IAAC,MAAI,CAAA,MAAO,CAAE,YAAa,GAAI,UAAW,CAAA,EACvC,SAAKT,EAAA,SAAS,IAAI,CAACwB,EAAOX,IACzBJ,EAAA,IAACO,EAAA,CAEC,KAAMQ,EACN,OAAQA,EAAM,KAAOxC,GAAYwC,EAAM,OACvC,WAAAvC,EACA,UAAW,EAAA,EAJNuC,EAAM,IAAMX,CAMpB,CAAA,EACH,CAEJ,CAAA,CAAA,CAEJ,CC1aA,MAAMY,EAAgB,CACpB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEA,SAASC,EAAYC,EAAM,CACzB,GAAI,CAACA,EAAM,OAAOF,EAAc,CAAC,EACjC,IAAIG,EAAO,EACX,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAKD,GAASA,GAAQ,GAAKA,EAAOD,EAAK,WAAWE,CAAC,EAAK,EACzF,OAAOJ,EAAc,KAAK,IAAIG,CAAI,EAAIH,EAAc,MAAM,CAC5D,CAqBA,SAAwBK,EAAc,CACpC,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,OAAAC,EAAS,GACT,MAAAC,CACF,EAAG,CACK,MAAAC,EAAcV,GAAYC,GAAa,GACvCU,EAAWT,GAAgBU,EAAYF,CAAW,EAGtD,OAAAnC,EAAA,KAAC,SAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,QAAS,SACT,OAAAiC,EACA,aAAc,0BACd,WAAY,wBACZ,WAAY,EACZ,WAAY,mBACZ,SAAU,SACV,IAAK,EACL,OAAQ,IACR,GAAGC,CACL,EAGA,SAAA,CAAClC,EAAAA,KAAA,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,WAAY,CAAA,EACvE,SAAA,CAAAuB,IAAS,OAAYA,EACnBtB,EAAAA,IAAA,OAAA,CAAK,MAAO,CACX,SAAU,iBACV,WAAY,IACZ,WAAY,sBACZ,MAAO,kBACP,cAAe,SAAA,EACd,SAEH,UAAA,EAEDuB,GAEGxB,EAAA,KAAAsC,WAAA,CAAA,SAAA,CAAArC,MAAC,QAAK,MAAO,CACX,MAAO,EACP,OAAQ,GACR,WAAY,gBACZ,WAAY,CAAA,EACX,EACHA,MAAC,QAAK,MAAO,CACX,SAAU,iBACV,WAAY,IACZ,MAAO,mBAAA,EAEN,SACHuB,EAAA,CAAA,EACF,CAAA,EAEJ,EAGCM,GACE7B,EAAA,IAAA,MAAA,CAAI,MAAO,CACV,QAAS,OACT,WAAY,SACZ,IAAK,EACL,KAAM,EACN,eAAgB,SAChB,SAAU,GAET,SAAA6B,CACH,CAAA,EAIF9B,EAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,GACL,WAAY,CACd,EAEC,SAAA,CAAA+B,EAEAC,GAEGG,GACFnC,EAAA,KAAC,MAAI,CAAA,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAExD,SAAA,CAAAC,MAAC,OAAI,MAAO,CACV,MAAO,GACP,OAAQ,GACR,aAAc,MACd,WAAYiB,EAAYiB,CAAW,EACnC,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,WAAY,CACd,EACE,SAAClC,EAAAA,IAAA,OAAA,CAAK,MAAO,CACX,SAAU,GACV,WAAY,IACZ,MAAO,OACP,cAAe,SACf,WAAY,CAAA,EAEX,UACH,CAAA,EACF,EAGAD,EAAAA,KAAC,MAAI,CAAA,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAA,EAC3D,SAAA,CAAAC,MAAC,QAAK,MAAO,CACX,SAAU,iBACV,WAAY,IACZ,MAAO,qBACP,WAAY,GAAA,EAEX,SACHkC,EAAA,EACCP,GACE3B,EAAA,IAAA,OAAA,CAAK,MAAO,CACX,SAAU,iBACV,MAAO,oBACP,WAAY,GAAA,EAEX,SACH2B,EAAA,CAAA,EAEJ,EAGCC,GACC5B,EAAA,IAAC,SAAA,CACC,QAAS4B,EACT,MAAM,WACN,MAAO,CACL,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAO,GACP,OAAQ,GACR,aAAc,mBACd,OAAQ,OACR,WAAY,cACZ,MAAO,oBACP,OAAQ,UACR,WAAY,yCACd,EACA,aAAe3B,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,oBACjCA,EAAA,cAAc,MAAM,MAAQ,mBAChC,EACA,aAAeA,GAAM,CACjBA,EAAA,cAAc,MAAM,WAAa,cACjCA,EAAA,cAAc,MAAM,MAAQ,mBAChC,EAEA,SAAAD,EAAAA,IAACsC,EAAAA,OAAO,CAAA,KAAM,EAAI,CAAA,CAAA,CACpB,CAAA,EAEJ,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,CAGN,CAWO,SAASC,EAAQ,CAAE,MAAAC,EAAO,MAAAC,EAAQ,oBAAqB,OAAAjC,EAAQ,QAAAkC,GAAW,CAE7E,OAAA3C,EAAA,KAAC,SAAA,CACC,QAAA2C,EACA,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,EACL,SAAU,iBACV,WAAY,IACZ,WAAY,mBACZ,QAAS,WACT,aAAc,mBACd,OAAQ,gCAAgCD,CAAK,qBAC7C,WAAY,sBAAsBA,CAAK,qBACvC,MAAAA,EACA,OAAQ,UACR,WAAY,gDACd,EACA,aAAexC,GAAM,CACnBA,EAAE,cAAc,MAAM,WAAa,sBAAsBwC,CAAK,oBAChE,EACA,aAAexC,GAAM,CACnBA,EAAE,cAAc,MAAM,WAAa,sBAAsBwC,CAAK,oBAChE,EAEC,SAAA,CAAAD,EACDxC,EAAA,IAACc,EAAA,YAAA,CACC,KAAM,GACN,MAAO,CACL,UAAWN,EAAS,iBAAmB,eACvC,WAAY,sBACZ,QAAS,EACX,CAAA,CACF,CAAA,CAAA,CAAA,CAGN,CAYO,SAASmC,EAAY,CAAE,KAAAC,EAAM,QAAAC,EAAS,SAAAhB,EAAU,MAAAiB,EAAQ,QAAU,CACvE,OAAKF,EAGD7C,EAAA,KAAAsC,WAAA,CAAA,SAAA,CAAArC,EAAA,IAAC,MAAA,CACC,QAAS6C,EACT,MAAO,CAAE,SAAU,QAAS,MAAO,EAAG,OAAQ,GAAI,WAAY,kBAAmB,CAAA,CACnF,EACA7C,MAAC,OAAI,MAAO,CACV,SAAU,WACV,IAAK,OACL,CAAC8C,IAAU,QAAU,QAAU,MAAM,EAAG,EACxC,UAAW,EACX,OAAQ,IACR,WAAY,OACZ,OAAQ,0BACR,aAAc,gBACd,QAAS,EACT,SAAU,IACV,UAAW,IACX,UAAW,OACX,UAAW,+BAEV,SAAAjB,CACH,CAAA,CACF,CAAA,CAAA,EAxBgB,IA0BpB,CAUO,SAASkB,EAAgB,CAAE,MAAAP,EAAO,OAAAhC,EAAQ,QAAAkC,GAAW,CAExD,OAAA1C,EAAA,IAAC,MAAA,CACC,QAAA0C,EACA,MAAO,CACL,QAAS,WACT,aAAc,mBACd,OAAQ,UACR,SAAU,iBACV,MAAOlC,EAAS,kBAAoB,mBACpC,WAAYA,EAAS,IAAM,IAC3B,WAAY,mBACZ,WAAYA,EAAS,oBAAsB,cAC3C,WAAY,sBACd,EACA,aAAeP,GAAM,CACdO,IAAUP,EAAA,cAAc,MAAM,WAAa,2BAClD,EACA,aAAeA,GAAM,CACdO,IAAUP,EAAA,cAAc,MAAM,WAAa,cAClD,EAEC,SAAAuC,CAAA,CAAA,CAGP,CASO,SAASQ,EAAgB,CAAE,UAAAC,EAAW,MAAAT,GAAS,CAC9C,MAAAU,EAAOV,IAAUS,EAAY,YAAc,gBAE/C,OAAAjD,EAAA,IAAC,QAAK,MAAO,CACX,SAAU,iBACV,WAAY,mBACZ,QAAS,WACT,aAAc,GACd,OAAQ,aAAaiD,EAAY,uBAAyB,eAAe,GACzE,MAAOA,EAAY,uBAAyB,oBAC5C,WAAYA,EAAY,wBAA0B,cAClD,WAAY,eAAA,EAEX,SACHC,CAAA,CAAA,CAEJ,CAEA,SAASd,EAAYlB,EAAM,CACzB,GAAI,CAACA,EAAa,MAAA,IAClB,MAAMiC,EAAQjC,EAAK,KAAK,EAAE,MAAM,KAAK,EACjC,OAAAiC,EAAM,QAAU,GACVA,EAAM,CAAC,EAAE,CAAC,EAAIA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAG,YAAY,EAEzDjC,EAAK,MAAM,EAAG,CAAC,EAAE,YAAY,CACtC"}