chordia-ui 3.2.3 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/IntegrationCard.cjs.js +2 -0
  2. package/dist/IntegrationCard.cjs.js.map +1 -0
  3. package/dist/IntegrationCard.es.js +188 -0
  4. package/dist/IntegrationCard.es.js.map +1 -0
  5. package/dist/SideDrawer.cjs.js +2 -0
  6. package/dist/SideDrawer.cjs.js.map +1 -0
  7. package/dist/SideDrawer.es.js +486 -0
  8. package/dist/SideDrawer.es.js.map +1 -0
  9. package/dist/UploadInteraction.cjs.js +2 -0
  10. package/dist/UploadInteraction.cjs.js.map +1 -0
  11. package/dist/UploadInteraction.es.js +379 -0
  12. package/dist/UploadInteraction.es.js.map +1 -0
  13. package/dist/components/common.cjs.js +1 -1
  14. package/dist/components/common.es.js +13 -11
  15. package/dist/components/layout.cjs.js +2 -2
  16. package/dist/components/layout.cjs.js.map +1 -1
  17. package/dist/components/layout.es.js +202 -411
  18. package/dist/components/layout.es.js.map +1 -1
  19. package/dist/components/navigation.cjs.js +1 -1
  20. package/dist/components/navigation.cjs.js.map +1 -1
  21. package/dist/components/navigation.es.js +212 -203
  22. package/dist/components/navigation.es.js.map +1 -1
  23. package/dist/components/onboarding.cjs.js +2 -0
  24. package/dist/components/onboarding.cjs.js.map +1 -0
  25. package/dist/components/onboarding.es.js +712 -0
  26. package/dist/components/onboarding.es.js.map +1 -0
  27. package/dist/index.cjs.js +1 -1
  28. package/dist/index.cjs2.js +1 -1
  29. package/dist/index.cjs2.js.map +1 -1
  30. package/dist/index.es.js +74 -64
  31. package/dist/index.es.js.map +1 -1
  32. package/dist/index.es2.js +2 -2
  33. package/dist/index.es2.js.map +1 -1
  34. package/dist/pages/interactionDetails.cjs.js +1 -1
  35. package/dist/pages/interactionDetails.cjs.js.map +1 -1
  36. package/dist/pages/interactionDetails.es.js +16 -15
  37. package/dist/pages/interactionDetails.es.js.map +1 -1
  38. package/package.json +5 -1
  39. package/src/components/common/SideDrawer.jsx +321 -0
  40. package/src/components/common/index.js +1 -0
  41. package/src/components/index.js +4 -1
  42. package/src/components/layout/IntegrationCard.jsx +151 -141
  43. package/src/components/login/LoginPage.jsx +2 -2
  44. package/src/components/navigation/Sidebar.jsx +59 -39
  45. package/src/components/onboarding/AddTeammates.jsx +278 -0
  46. package/src/components/onboarding/GettingStarted.jsx +4 -0
  47. package/src/components/onboarding/UploadInteraction.jsx +3 -3
  48. package/src/components/onboarding/index.js +5 -0
  49. package/dist/AutoSearch.cjs.js +0 -2
  50. package/dist/AutoSearch.cjs.js.map +0 -1
  51. package/dist/AutoSearch.es.js +0 -190
  52. package/dist/AutoSearch.es.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.es.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown, ChevronRight,\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 = 240,\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 background: \"var(--paper-elevated)\",\n borderRight: \"1px solid var(--border)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0 }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 12px\",\n flexShrink: 0,\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"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 {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 10px\",\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: \"var(--text-faint)\",\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 var(--border-subtle)\",\n flexShrink: 0,\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 : 10,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"8px 10px\",\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: active ? \"var(--hover-warm)\" : \"transparent\",\n color: active ? \"var(--text-ink)\" : \"var(--text-base)\",\n fontWeight: active ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--hover-warm-subtle)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={16}\n style={{\n flexShrink: 0,\n color: active ? \"var(--text-strong)\" : \"var(--text-muted)\",\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: \"var(--radius-sm)\",\n border: \"none\",\n background: hasActiveChild ? \"var(--hover-warm)\" : \"transparent\",\n color: hasActiveChild ? \"var(--text-ink)\" : \"var(--text-base)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) e.currentTarget.style.background = \"var(--hover-warm-subtle)\";\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) e.currentTarget.style.background = \"transparent\";\n }}\n >\n <Icon\n size={16}\n style={{ color: hasActiveChild ? \"var(--text-strong)\" : \"var(--text-muted)\" }}\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: 10,\n width: \"100%\",\n padding: \"8px 10px\",\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"var(--text-ink)\" : \"var(--text-base)\",\n fontWeight: hasActiveChild ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--hover-warm-subtle)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n }}\n >\n <Icon\n size={16}\n style={{\n flexShrink: 0,\n color: hasActiveChild ? \"var(--text-strong)\" : \"var(--text-muted)\",\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: \"var(--text-faint)\",\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","parts"],"mappings":";;;AAqCA,MAAMA,IAAW;AAAA,EACf,MAAMC;AAAA,EACN,UAAUC;AAAA,EACV,QAAQA;AAAA,EACR,cAAcC;AAAA,EACd,OAAOA;AAAA,EACP,WAAWC;AAAA,EACX,SAASC;AAAA,EACT,UAAUA;AAAA,EACV,YAAYC;AAAA,EACZ,UAAUA;AAAA,EACV,UAAUC;AAAA,EACV,eAAeC;AAAA,EACf,cAAcC;AAAA,EACd,UAAUC;AAAA,EACV,OAAOC;AAAA,EACP,MAAMC;AAAA,EACN,eAAeA;AAAA,EACf,QAAQC;AAAA,EACR,UAAUC;AAAA,EACV,eAAeC;AAAA,EACf,UAAUC;AACZ;AAEA,SAASC,EAAYC,GAAM;AACzB,SAAKA,IACD,OAAOA,KAAS,WAAiBlB,EAASkB,EAAK,YAAa,CAAA,KAAKC,IAC9DD,IAFWC;AAGpB;AAEA,SAAwBC,GAAQ;AAAA,EAC9B,WAAAC,IAAY,CAAC;AAAA,EACb,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAWC;AAAA,EACX,kBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,gBAAAC,IAAiB;AACnB,GAAG;AACD,QAAM,CAACC,GAAmBC,CAAoB,IAAIC,EAAS,EAAK,GAC1DC,IAAYT,MAAwB,SAAYA,IAAsBM,GACtEI,IAAiBT,MAAqB,MAAMM,EAAqB,CAACD,CAAiB,IAEnF,CAACK,GAAgBC,CAAiB,IAAIJ,EAAS,MAAM;AACzD,UAAMK,IAAU,CAAA;AACN,WAAAhB,EAAA,QAAQ,CAACiB,MAAS;;AACtB,WAAAC,IAAAD,EAAK,aAAL,QAAAC,EAAe,QAAQ;AAEnB,cAAAC,IAAYF,EAAK,SAAS,KAAK,CAACG,MAAMA,EAAE,OAAOnB,KAAYmB,EAAE,MAAM;AACjE,QAAAJ,EAAAC,EAAK,EAAE,IAAIE;AAAA,MACrB;AAAA,IAAA,CACD,GACMH;AAAA,EAAA,CACR,GAEKK,IAAc,CAACC,MAAO;AAC1B,IAAAP,EAAkB,CAACQ,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAE,GAAG,CAACC,EAAKD,CAAE,EAAI,EAAA;AAAA,EAAA,GAGtDE,IAAeZ,IAAYJ,IAAiBD;AAGhD,SAAA,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAOD;AAAA,QACP,UAAUA;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MAGC,UAAA;AAAA,QAAUnB,KAAA,CAACO,KACV,gBAAAc,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,iBAAiB,YAAY,EAAE,GACnD,UACHrB,EAAA,CAAA;AAAA,QAIF,gBAAAqB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,gBAAgBd,IAAY,WAAW;AAAA,cACvC,SAASA,IAAY,WAAW;AAAA,cAChC,YAAY;AAAA,YACd;AAAA,YAEA,UAAA,gBAAAc;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAASb;AAAA,gBACT,OAAOD,IAAY,mBAAmB;AAAA,gBACtC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,YAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,YAAY;AAAA,gBACd;AAAA,gBACA,cAAc,CAACe,MAAM;AACjB,kBAAAA,EAAA,cAAc,MAAM,aAAa,qBACjCA,EAAA,cAAc,MAAM,QAAQ;AAAA,gBAChC;AAAA,gBACA,cAAc,CAACA,MAAM;AACjB,kBAAAA,EAAA,cAAc,MAAM,aAAa,eACjCA,EAAA,cAAc,MAAM,QAAQ;AAAA,gBAChC;AAAA,gBAEC,UAAAf,sBAAagB,GAAU,EAAA,MAAM,IAAI,IAAK,gBAAAF,EAACG,GAAe,EAAA,MAAM,GAAI,CAAA;AAAA,cAAA;AAAA,YACnE;AAAA,UAAA;AAAA,QACF;AAAA,QAGA,gBAAAH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW;AAAA,cACX,WAAW;AAAA,cACX,SAASd,IAAY,UAAU;AAAA,YACjC;AAAA,YAEC,UAAAZ,EAAU,IAAI,CAACiB,GAAMa,MACnB;;AAAA,qCAAAL,EAAAM,EAAM,UAAN,EAEE,UAAA;AAAA,gBAAKd,EAAA,WAAW,CAACL,KAChB,gBAAAc;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACL,UAAU;AAAA,sBACV,YAAY;AAAA,sBACZ,eAAe;AAAA,sBACf,eAAe;AAAA,sBACf,OAAO;AAAA,sBACP,SAAS;AAAA,sBACT,YAAY;AAAA,oBACd;AAAA,oBAEC,UAAKT,EAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,iBAGDC,IAAAD,EAAK,aAAL,QAAAC,EAAe,SACd,gBAAAQ;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,MAAAf;AAAA,oBACA,UAAAhB;AAAA,oBACA,UAAU,CAAC,CAACa,EAAeG,EAAK,EAAE;AAAA,oBAClC,UAAU,MAAMI,EAAYJ,EAAK,EAAE;AAAA,oBACnC,YAAAf;AAAA,oBACA,WAAAU;AAAA,kBAAA;AAAA,gBAAA,IAGF,gBAAAc;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,MAAAhB;AAAA,oBACA,QAAQA,EAAK,OAAOhB,KAAYgB,EAAK;AAAA,oBACrC,YAAAf;AAAA,oBACA,WAAAU;AAAA,kBAAA;AAAA,gBACF;AAAA,cAjCiB,EAAA,GAAAK,EAAK,MAAMa,CAmChC;AAAA,aACD;AAAA,UAAA;AAAA,QACH;AAAA,QAGCxB,KAAU,CAACM,KACV,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY;AAAA,YACd;AAAA,YAEC,UAAApB;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,SAAS2B,EAAY,EAAE,MAAAhB,GAAM,QAAAiB,GAAQ,YAAAhC,GAAY,WAAAU,KAAa;AACtD,QAAAuB,IAAOvC,EAAYqB,EAAK,IAAI,GAC5BmB,IAAc,OAAOnB,EAAK,QAAS,YAAY,OAAOA,EAAK,OAAS;AAGxE,SAAA,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,MAAMvB,KAAA,gBAAAA,EAAae,EAAK,QAAQA,EAAK;AAAA,MAC9C,OAAOL,IAAYK,EAAK,QAAQ;AAAA,MAChC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAKL,IAAY,IAAI;AAAA,QACrB,gBAAgBA,IAAY,WAAW;AAAA,QACvC,OAAO;AAAA,QACP,SAASA,IAAY,WAAW;AAAA,QAChC,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,YAAYsB,IAAS,sBAAsB;AAAA,QAC3C,OAAOA,IAAS,oBAAoB;AAAA,QACpC,YAAYA,IAAS,MAAM;AAAA,QAC3B,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,cAAc,CAACP,MAAM;AACnB,QAAKO,MACDP,EAAA,cAAc,MAAM,aAAa;AAAA,MAEvC;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKO,MACDP,EAAA,cAAc,MAAM,aAAa;AAAA,MAEvC;AAAA,MAEC,UAAA;AAAA,QACCS,IAAA,gBAAAV,EAAC,QAAK,EAAA,OAAO,EAAE,YAAY,GAAG,SAAS,OAAO,GAAI,UAAKT,EAAA,KAAA,CAAK,IAE5D,gBAAAS;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,cACL,YAAY;AAAA,cACZ,OAAOD,IAAS,uBAAuB;AAAA,YACzC;AAAA,UAAA;AAAA,QACF;AAAA,QAED,CAACtB,KACA,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU;AAAA,cACV,cAAc;AAAA,cACd,YAAY;AAAA,YACd;AAAA,YAEC,UAAKT,EAAA;AAAA,UAAA;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,SAASe,EAAa,EAAE,MAAAf,GAAM,UAAAhB,GAAU,UAAAoC,GAAU,UAAAC,GAAU,YAAApC,GAAY,WAAAU,KAAa;;AAC7E,QAAAuB,IAAOvC,EAAYqB,EAAK,IAAI,GAC5BsB,KAAiBrB,IAAAD,EAAK,aAAL,gBAAAC,EAAe,KAAK,CAACE,MAAMA,EAAE,OAAOnB,KAAYmB,EAAE;AAEzE,SAAIR,IAGA,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAASY;AAAA,MACT,OAAOrB,EAAK;AAAA,MACZ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,YAAYsB,IAAiB,sBAAsB;AAAA,QACnD,OAAOA,IAAiB,oBAAoB;AAAA,QAC5C,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,MACA,cAAc,CAACZ,MAAM;AACnB,QAAKY,MAAkBZ,EAAA,cAAc,MAAM,aAAa;AAAA,MAC1D;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKY,MAAkBZ,EAAA,cAAc,MAAM,aAAa;AAAA,MAC1D;AAAA,MAEA,UAAA,gBAAAD;AAAA,QAACS;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,EAAE,OAAOI,IAAiB,uBAAuB,oBAAoB;AAAA,QAAA;AAAA,MAC9E;AAAA,IAAA;AAAA,EAAA,sBAMH,OAAI,EAAA,OAAO,EAAE,cAAc,EAE1B,GAAA,UAAA;AAAA,IAAA,gBAAAd;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASa;AAAA,QACT,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,OAAOC,IAAiB,oBAAoB;AAAA,UAC5C,YAAYA,IAAiB,MAAM;AAAA,UACnC,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc,CAACZ,MAAM;AACjB,UAAAA,EAAA,cAAc,MAAM,aAAa;AAAA,QACrC;AAAA,QACA,cAAc,CAACA,MAAM;AACjB,UAAAA,EAAA,cAAc,MAAM,aAAa;AAAA,QACrC;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,OAAOI,IAAiB,uBAAuB;AAAA,cACjD;AAAA,YAAA;AAAA,UACF;AAAA,UACA,gBAAAb;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV,cAAc;AAAA,gBACd,YAAY;AAAA,cACd;AAAA,cAEC,UAAKT,EAAA;AAAA,YAAA;AAAA,UACR;AAAA,UACA,gBAAAS;AAAA,YAACc;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,WAAWH,IAAW,iBAAiB;AAAA,gBACvC,YAAY;AAAA,cACd;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IAGCA,KACC,gBAAAX,EAAC,OAAI,EAAA,OAAO,EAAE,aAAa,IAAI,WAAW,EAAA,GACvC,UAAKT,EAAA,SAAS,IAAI,CAACwB,GAAOX,MACzB,gBAAAJ;AAAA,MAACO;AAAA,MAAA;AAAA,QAEC,MAAMQ;AAAA,QACN,QAAQA,EAAM,OAAOxC,KAAYwC,EAAM;AAAA,QACvC,YAAAvC;AAAA,QACA,WAAW;AAAA,MAAA;AAAA,MAJNuC,EAAM,MAAMX;AAAA,IAMpB,CAAA,GACH;AAAA,EAEJ,EAAA,CAAA;AAEJ;AC9YA,MAAMY,IAAgB;AAAA,EACpB;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEA,SAASC,EAAYC,GAAM;AACzB,MAAI,CAACA;AAAM,WAAOF,EAAc,CAAC;AACjC,MAAIG,IAAO;AACX,WAASC,IAAI,GAAGA,IAAIF,EAAK,QAAQE;AAAK,IAAAD,KAASA,KAAQ,KAAKA,IAAOD,EAAK,WAAWE,CAAC,IAAK;AACzF,SAAOJ,EAAc,KAAK,IAAIG,CAAI,IAAIH,EAAc,MAAM;AAC5D;AAqBA,SAAwBK,GAAc;AAAA,EACpC,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,OAAAC;AACF,GAAG;AACK,QAAAC,IAAcV,KAAYC,KAAa,IACvCU,IAAWT,KAAgBU,GAAYF,CAAW;AAGtD,SAAA,gBAAAnC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,QAAAiC;AAAA,QACA,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,GAAGC;AAAA,MACL;AAAA,MAGA,UAAA;AAAA,QAAC,gBAAAlC,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,YAAY,EAAA,GACvE,UAAA;AAAA,UAAAuB,MAAS,SAAYA,IACnB,gBAAAtB,EAAA,QAAA,EAAK,OAAO;AAAA,YACX,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,eAAe;AAAA,UAAA,GACd,UAEH,WAAA;AAAA,UAEDuB,KAEG,gBAAAxB,EAAAsC,GAAA,EAAA,UAAA;AAAA,YAAA,gBAAArC,EAAC,UAAK,OAAO;AAAA,cACX,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,YAAY;AAAA,YAAA,GACX;AAAA,YACH,gBAAAA,EAAC,UAAK,OAAO;AAAA,cACX,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,OAAO;AAAA,YAAA,GAEN,UACHuB,GAAA;AAAA,UAAA,GACF;AAAA,QAAA,GAEJ;AAAA,QAGCM,KACE,gBAAA7B,EAAA,OAAA,EAAI,OAAO;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,MAAM;AAAA,UACN,gBAAgB;AAAA,UAChB,UAAU;AAAA,WAET,UAAA6B,EACH,CAAA;AAAA,QAIF,gBAAA9B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,YAAY;AAAA,YACd;AAAA,YAEC,UAAA;AAAA,cAAA+B;AAAA,cAEAC,KAEGG,KACF,gBAAAnC,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAExD,UAAA;AAAA,gBAAA,gBAAAC,EAAC,SAAI,OAAO;AAAA,kBACV,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,YAAYiB,EAAYiB,CAAW;AAAA,kBACnC,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,YAAY;AAAA,gBACd,GACE,UAAC,gBAAAlC,EAAA,QAAA,EAAK,OAAO;AAAA,kBACX,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,eAAe;AAAA,kBACf,YAAY;AAAA,gBAAA,GAEX,YACH,CAAA,GACF;AAAA,gBAGA,gBAAAD,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,OAAO;AAAA,oBACX,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,OAAO;AAAA,oBACP,YAAY;AAAA,kBAAA,GAEX,UACHkC,GAAA;AAAA,kBACCP,KACE,gBAAA3B,EAAA,QAAA,EAAK,OAAO;AAAA,oBACX,UAAU;AAAA,oBACV,OAAO;AAAA,oBACP,YAAY;AAAA,kBAAA,GAEX,UACH2B,GAAA;AAAA,gBAAA,GAEJ;AAAA,gBAGCC,KACC,gBAAA5B;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,SAAS4B;AAAA,oBACT,OAAM;AAAA,oBACN,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,gBAAgB;AAAA,sBAChB,OAAO;AAAA,sBACP,QAAQ;AAAA,sBACR,cAAc;AAAA,sBACd,QAAQ;AAAA,sBACR,YAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,QAAQ;AAAA,sBACR,YAAY;AAAA,oBACd;AAAA,oBACA,cAAc,CAAC3B,MAAM;AACjB,sBAAAA,EAAA,cAAc,MAAM,aAAa,qBACjCA,EAAA,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBACA,cAAc,CAACA,MAAM;AACjB,sBAAAA,EAAA,cAAc,MAAM,aAAa,eACjCA,EAAA,cAAc,MAAM,QAAQ;AAAA,oBAChC;AAAA,oBAEA,UAAA,gBAAAD,EAACsC,GAAO,EAAA,MAAM,GAAI,CAAA;AAAA,kBAAA;AAAA,gBACpB;AAAA,cAAA,GAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAWO,SAASC,GAAQ,EAAE,OAAAC,GAAO,OAAAC,IAAQ,qBAAqB,QAAAjC,GAAQ,SAAAkC,KAAW;AAE7E,SAAA,gBAAA3C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAA2C;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ,gCAAgCD,CAAK;AAAA,QAC7C,YAAY,sBAAsBA,CAAK;AAAA,QACvC,OAAAA;AAAA,QACA,QAAQ;AAAA,QACR,YAAY;AAAA,MACd;AAAA,MACA,cAAc,CAACxC,MAAM;AACnB,QAAAA,EAAE,cAAc,MAAM,aAAa,sBAAsBwC,CAAK;AAAA,MAChE;AAAA,MACA,cAAc,CAACxC,MAAM;AACnB,QAAAA,EAAE,cAAc,MAAM,aAAa,sBAAsBwC,CAAK;AAAA,MAChE;AAAA,MAEC,UAAA;AAAA,QAAAD;AAAA,QACD,gBAAAxC;AAAA,UAACc;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,cACL,WAAWN,IAAS,mBAAmB;AAAA,cACvC,YAAY;AAAA,cACZ,SAAS;AAAA,YACX;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAYO,SAASmC,GAAY,EAAE,MAAAC,GAAM,SAAAC,GAAS,UAAAhB,GAAU,OAAAiB,IAAQ,UAAU;AACvE,SAAKF,IAGD,gBAAA7C,EAAAsC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAArC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS6C;AAAA,QACT,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,IAAI,YAAY,mBAAmB;AAAA,MAAA;AAAA,IACnF;AAAA,IACA,gBAAA7C,EAAC,SAAI,OAAO;AAAA,MACV,UAAU;AAAA,MACV,KAAK;AAAA,MACL,CAAC8C,MAAU,UAAU,UAAU,MAAM,GAAG;AAAA,MACxC,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW;AAAA,OAEV,UAAAjB,EACH,CAAA;AAAA,EACF,EAAA,CAAA,IAxBgB;AA0BpB;AAUO,SAASkB,GAAgB,EAAE,OAAAP,GAAO,QAAAhC,GAAQ,SAAAkC,KAAW;AAExD,SAAA,gBAAA1C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAA0C;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAOlC,IAAS,oBAAoB;AAAA,QACpC,YAAYA,IAAS,MAAM;AAAA,QAC3B,YAAY;AAAA,QACZ,YAAYA,IAAS,sBAAsB;AAAA,QAC3C,YAAY;AAAA,MACd;AAAA,MACA,cAAc,CAACP,MAAM;AACnB,QAAKO,MAAUP,EAAA,cAAc,MAAM,aAAa;AAAA,MAClD;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKO,MAAUP,EAAA,cAAc,MAAM,aAAa;AAAA,MAClD;AAAA,MAEC,UAAAuC;AAAA,IAAA;AAAA,EAAA;AAGP;AASO,SAASQ,GAAgB,EAAE,WAAAC,GAAW,OAAAT,KAAS;AAGlD,SAAA,gBAAAxC,EAAC,UAAK,OAAO;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,cAAc;AAAA,IACd,QAAQ,aAAaiD,IAAY,yBAAyB,eAAe;AAAA,IACzE,OAAOA,IAAY,yBAAyB;AAAA,IAC5C,YAAYA,IAAY,0BAA0B;AAAA,IAClD,YAAY;AAAA,EAAA,GAEX,UAZQT,MAAUS,IAAY,cAAc,gBAa/C,CAAA;AAEJ;AAEA,SAASb,GAAYlB,GAAM;AACzB,MAAI,CAACA;AAAa,WAAA;AAClB,QAAMgC,IAAQhC,EAAK,KAAK,EAAE,MAAM,KAAK;AACjC,SAAAgC,EAAM,UAAU,KACVA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAY,IAEzDhC,EAAK,MAAM,GAAG,CAAC,EAAE,YAAY;AACtC;"}
1
+ {"version":3,"file":"navigation.es.js","sources":["../../src/components/navigation/Sidebar.jsx","../../src/components/navigation/NavigationBar.jsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport {\n Home, FolderClosed, Users, Settings, ChevronDown,\n LayoutDashboard, Clock3, Activity, Lightbulb, Bell, Plug, BarChart3,\n FileText, Headphones, Shield, Sliders, Workflow, SquareDot,\n PanelLeftClose, PanelLeft,\n} from \"lucide-react\";\n\n/**\n * Sidebar — collapsible navigation sidebar.\n *\n * Slot-based: pass menuItems as data, component handles rendering + expand/collapse.\n * No framework dependencies (no router, no auth, no API calls).\n *\n * Props:\n * - menuItems Array<MenuItem> Navigation items (see shape below)\n * - activeId string Currently active item id\n * - onNavigate function(href) Navigation callback\n * - collapsed boolean External collapsed state (controlled)\n * - onToggleCollapse function Toggle callback\n * - header ReactNode Optional header slot (logo, brand)\n * - footer ReactNode Optional footer slot (user, settings)\n * - width number Expanded width (default 240)\n * - collapsedWidth number Collapsed width (default 56)\n *\n * MenuItem shape:\n * - id string\n * - label string\n * - icon string (key from ICON_MAP) or ReactNode\n * - href string\n * - active boolean (override)\n * - children Array<MenuItem> (nested group)\n * - section string (section label above this item)\n */\n\nconst ICON_MAP = {\n home: Home,\n projects: FolderClosed,\n folder: FolderClosed,\n organization: Users,\n users: Users,\n dashboard: LayoutDashboard,\n history: Clock3,\n sessions: Clock3,\n monitoring: Activity,\n activity: Activity,\n insights: Lightbulb,\n notifications: Bell,\n integrations: Plug,\n settings: Settings,\n usage: BarChart3,\n docs: FileText,\n documentation: FileText,\n agents: Headphones,\n security: Shield,\n configuration: Sliders,\n workflow: Workflow,\n};\n\nfunction resolveIcon(icon) {\n if (!icon) return SquareDot;\n if (typeof icon === \"string\") return ICON_MAP[icon.toLowerCase()] || SquareDot;\n return icon;\n}\n\nexport default function Sidebar({\n menuItems = [],\n activeId,\n onNavigate,\n collapsed: controlledCollapsed,\n onToggleCollapse,\n header,\n footer,\n width = 244,\n collapsedWidth = 56,\n}) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n const toggleCollapse = onToggleCollapse || (() => setInternalCollapsed(!internalCollapsed));\n\n const [expandedGroups, setExpandedGroups] = useState(() => {\n const initial = {};\n menuItems.forEach((item) => {\n if (item.children?.length) {\n // Auto-expand groups that contain the active item\n const hasActive = item.children.some((c) => c.id === activeId || c.active);\n initial[item.id] = hasActive;\n }\n });\n return initial;\n });\n\n const toggleGroup = (id) => {\n setExpandedGroups((prev) => ({ ...prev, [id]: !prev[id] }));\n };\n\n const currentWidth = collapsed ? collapsedWidth : width;\n\n return (\n <nav\n style={{\n width: currentWidth,\n minWidth: currentWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n padding: collapsed ? \"0\" : \"0 0 24px 24px\",\n gap: 24,\n background: \"var(--Background-Inverse, #0B0B0B)\",\n fontFamily: \"var(--font-sans)\",\n transition: \"width 0.2s ease, min-width 0.2s ease\",\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n {/* Header slot */}\n {header && !collapsed && (\n <div style={{ padding: \"16px 16px 8px\", flexShrink: 0, width: \"100%\" }}>\n {header}\n </div>\n )}\n\n {/* Collapse toggle */}\n <div\n style={{\n display: \"flex\",\n justifyContent: collapsed ? \"center\" : \"flex-end\",\n padding: collapsed ? \"12px 0\" : \"8px 0 0\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n <button\n onClick={toggleCollapse}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n borderRadius: \"var(--radius-sm)\",\n border: \"none\",\n background: \"transparent\",\n color: \"rgba(255, 255, 255, 0.5)\",\n cursor: \"pointer\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.8)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"rgba(255, 255, 255, 0.5)\";\n }}\n >\n {collapsed ? <PanelLeft size={16} /> : <PanelLeftClose size={16} />}\n </button>\n </div>\n\n {/* Menu items */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n padding: collapsed ? \"0 8px\" : \"0\",\n width: \"100%\",\n }}\n >\n {menuItems.map((item, idx) => (\n <React.Fragment key={item.id || idx}>\n {/* Section label */}\n {item.section && !collapsed && (\n <div\n style={{\n fontSize: \"var(--text-xs)\",\n fontWeight: 650,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n color: \"rgba(255, 255, 255, 0.35)\",\n padding: \"16px 8px 6px\",\n lineHeight: 1,\n }}\n >\n {item.section}\n </div>\n )}\n\n {item.children?.length ? (\n <SidebarGroup\n item={item}\n activeId={activeId}\n expanded={!!expandedGroups[item.id]}\n onToggle={() => toggleGroup(item.id)}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n ) : (\n <SidebarItem\n item={item}\n active={item.id === activeId || item.active}\n onNavigate={onNavigate}\n collapsed={collapsed}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Footer slot */}\n {footer && !collapsed && (\n <div\n style={{\n padding: \"12px 16px\",\n borderTop: \"1px solid rgba(255, 255, 255, 0.08)\",\n flexShrink: 0,\n width: \"100%\",\n }}\n >\n {footer}\n </div>\n )}\n </nav>\n );\n}\n\nfunction SidebarItem({ item, active, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const isReactIcon = typeof item.icon !== \"string\" && typeof item.icon !== \"undefined\";\n\n return (\n <button\n onClick={() => onNavigate?.(item.href || item.id)}\n title={collapsed ? item.label : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: collapsed ? 0 : 12,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n width: \"100%\",\n padding: collapsed ? \"10px 0\" : \"12px 24px 12px 12px\",\n borderRadius: active ? \"4px 0 0 4px\" : \"4px\",\n borderRight: active ? \"2px solid #00A66E\" : \"2px solid transparent\",\n borderTop: \"none\",\n borderBottom: \"none\",\n borderLeft: \"none\",\n background: active ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: active ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: active ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.1s ease, border-color 0.15s ease\",\n marginBottom: 2,\n }}\n onMouseEnter={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!active) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n {isReactIcon ? (\n <span style={{ flexShrink: 0, display: \"flex\" }}>{item.icon}</span>\n ) : (\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n )}\n {!collapsed && (\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n )}\n </button>\n );\n}\n\nfunction SidebarGroup({ item, activeId, expanded, onToggle, onNavigate, collapsed }) {\n const Icon = resolveIcon(item.icon);\n const hasActiveChild = item.children?.some((c) => c.id === activeId || c.active);\n\n if (collapsed) {\n // In collapsed mode, show just the group icon\n return (\n <button\n onClick={onToggle}\n title={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n padding: \"10px 0\",\n borderRadius: \"4px\",\n border: \"none\",\n background: hasActiveChild ? \"var(--Background-MonoPressed, #323232)\" : \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n cursor: \"pointer\",\n marginBottom: 2,\n transition: \"background 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasActiveChild) {\n e.currentTarget.style.background = \"transparent\";\n e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n }\n }}\n >\n <Icon\n size={18}\n style={{ color: \"inherit\" }}\n />\n </button>\n );\n }\n\n return (\n <div style={{ marginBottom: 2 }}>\n {/* Group header */}\n <button\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"12px 24px 12px 12px\",\n borderRadius: \"4px\",\n border: \"none\",\n background: \"transparent\",\n color: hasActiveChild ? \"#00A66E\" : \"var(--Content-TertiaryInverse, #B2AEA8)\",\n fontWeight: hasActiveChild ? 550 : 400,\n fontSize: \"var(--text-sm)\",\n fontFamily: \"var(--font-sans)\",\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.15s ease, color 0.15s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = \"var(--Background-MonoPressed, #323232)\";\n e.currentTarget.style.color = \"#00A66E\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"transparent\";\n if (!hasActiveChild) e.currentTarget.style.color = \"var(--Content-TertiaryInverse, #B2AEA8)\";\n else e.currentTarget.style.color = \"#00A66E\";\n }}\n >\n <Icon\n size={18}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n }}\n />\n <span\n style={{\n flex: 1,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </span>\n <ChevronDown\n size={14}\n style={{\n flexShrink: 0,\n color: \"inherit\",\n opacity: 0.7,\n transform: expanded ? \"rotate(0deg)\" : \"rotate(-90deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </button>\n\n {/* Children */}\n {expanded && (\n <div style={{ paddingLeft: 18, marginTop: 2 }}>\n {item.children.map((child, idx) => (\n <SidebarItem\n key={child.id || idx}\n item={child}\n active={child.id === activeId || child.active}\n onNavigate={onNavigate}\n collapsed={false}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { LogOut, ChevronDown } from 'lucide-react';\n\n// Stable avatar colors — warm/neutral palette, no purple\nconst AVATAR_COLORS = [\n '#5a8a6e', // sage green\n '#b07d4f', // warm amber\n '#7a8fa6', // slate blue\n '#c47a5a', // terracotta\n '#6a9a8a', // teal\n '#a0785a', // clay\n '#5a7a9a', // steel blue\n '#9a7a5a', // caramel\n];\n\nfunction avatarColor(name) {\n if (!name) return AVATAR_COLORS[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\n/**\n * NavigationBar — top-level app header bar.\n *\n * Slot-based composition: pass children for center content, trailing for right content,\n * or use the built-in user/switcher/actions props for the standard Chordia layout.\n *\n * Props:\n * - logo ReactNode Left-side branding (defaults to \"Chordia\" wordmark)\n * - title string App title shown after logo\n * - userName string User's display name\n * - userEmail string Fallback if no userName\n * - userRole string Role badge (e.g. \"Admin\")\n * - onSignOut function Sign out callback (renders sign out button)\n * - children ReactNode Center slot — switchers, breadcrumbs, tabs, anything\n * - trailing ReactNode Right slot — status indicators, extra actions\n * - userMenu ReactNode Optional custom user menu (replaces built-in user block)\n * - height number Bar height in px (default 48)\n * - style object Style overrides on the root element\n */\nexport default function NavigationBar({\n logo,\n title,\n userName,\n userEmail,\n userInitials,\n userRole,\n onSignOut,\n children,\n trailing,\n userMenu,\n height = 48,\n style,\n}) {\n const displayName = userName || userEmail || '';\n const initials = userInitials || getInitials(displayName);\n\n return (\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px',\n height,\n borderBottom: '1px solid var(--border)',\n background: 'var(--paper-elevated)',\n flexShrink: 0,\n fontFamily: 'var(--font-sans)',\n position: 'sticky',\n top: 0,\n zIndex: 1000,\n ...style,\n }}\n >\n {/* ─── Left: Logo + Title ─── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {logo !== undefined ? logo : (\n <span style={{\n fontSize: 'var(--text-lg)',\n fontWeight: 700,\n fontFamily: 'var(--font-display)',\n color: 'var(--text-ink)',\n letterSpacing: '-0.01em',\n }}>\n Chordia\n </span>\n )}\n {title && (\n <>\n <span style={{\n width: 1,\n height: 18,\n background: 'var(--border)',\n flexShrink: 0,\n }} />\n <span style={{\n fontSize: 'var(--text-md)',\n fontWeight: 500,\n color: 'var(--text-muted)',\n }}>\n {title}\n </span>\n </>\n )}\n </div>\n\n {/* ─── Center: Slot for switchers, breadcrumbs, tabs ─── */}\n {children && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n justifyContent: 'center',\n minWidth: 0,\n }}>\n {children}\n </div>\n )}\n\n {/* ─── Right: User + trailing ─── */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n flexShrink: 0,\n }}\n >\n {trailing}\n\n {userMenu\n ? userMenu\n : displayName && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {/* Initials avatar */}\n <div style={{\n width: 30,\n height: 30,\n borderRadius: '50%',\n background: avatarColor(displayName),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: '#fff',\n letterSpacing: '0.02em',\n lineHeight: 1,\n }}>\n {initials}\n </span>\n </div>\n\n {/* Name + role */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{\n fontSize: 'var(--text-sm)',\n fontWeight: 550,\n color: 'var(--text-strong)',\n lineHeight: 1.2,\n }}>\n {displayName}\n </span>\n {userRole && (\n <span style={{\n fontSize: 'var(--text-xs)',\n color: 'var(--text-muted)',\n lineHeight: 1.2,\n }}>\n {userRole}\n </span>\n )}\n </div>\n\n {/* Sign out */}\n {onSignOut && (\n <button\n onClick={onSignOut}\n title=\"Sign out\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--radius-sm)',\n border: 'none',\n background: 'transparent',\n color: 'var(--text-faint)',\n cursor: 'pointer',\n transition: 'background 0.15s ease, color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = 'var(--hover-warm)';\n e.currentTarget.style.color = 'var(--text-muted)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = 'var(--text-faint)';\n }}\n >\n <LogOut size={14} />\n </button>\n )}\n </div>\n )}\n </div>\n </header>\n );\n}\n\n/**\n * NavPill — compact switcher button for use inside NavigationBar.\n *\n * Props:\n * - label string Display text\n * - color string Rail color token (e.g. \"var(--rail-discovery)\")\n * - active boolean Whether dropdown is open\n * - onClick function Toggle callback\n */\nexport function NavPill({ label, color = 'var(--text-muted)', active, onClick }) {\n return (\n <button\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 'var(--text-sm)',\n fontWeight: 500,\n fontFamily: 'var(--font-sans)',\n padding: '4px 10px',\n borderRadius: 'var(--radius-sm)',\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color: color,\n cursor: 'pointer',\n transition: 'background 0.15s ease, border-color 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 18%, transparent)`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = `color-mix(in srgb, ${color} 10%, transparent)`;\n }}\n >\n {label}\n <ChevronDown\n size={12}\n style={{\n transform: active ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n opacity: 0.7,\n }}\n />\n </button>\n );\n}\n\n/**\n * NavDropdown — dropdown panel that attaches to a NavPill.\n * Wrap around NavPill and the dropdown content.\n *\n * Props:\n * - open boolean Whether dropdown is visible\n * - onClose function Close callback\n * - children ReactNode Dropdown items\n * - align string \"left\" | \"right\" (default \"left\")\n */\nexport function NavDropdown({ open, onClose, children, align = 'left' }) {\n if (!open) return null;\n return (\n <>\n <div\n onClick={onClose}\n style={{ position: 'fixed', inset: 0, zIndex: 99, background: 'rgba(0,0,0,0.03)' }}\n />\n <div style={{\n position: 'absolute',\n top: '100%',\n [align === 'right' ? 'right' : 'left']: 0,\n marginTop: 4,\n zIndex: 100,\n background: '#fff',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius)',\n padding: 4,\n minWidth: 200,\n maxHeight: 280,\n overflowY: 'auto',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}>\n {children}\n </div>\n </>\n );\n}\n\n/**\n * NavDropdownItem — single item inside NavDropdown.\n *\n * Props:\n * - label string\n * - active boolean\n * - onClick function\n */\nexport function NavDropdownItem({ label, active, onClick }) {\n return (\n <div\n onClick={onClick}\n style={{\n padding: '8px 10px',\n borderRadius: 'var(--radius-sm)',\n cursor: 'pointer',\n fontSize: 'var(--text-sm)',\n color: active ? 'var(--text-ink)' : 'var(--text-base)',\n fontWeight: active ? 600 : 400,\n fontFamily: 'var(--font-sans)',\n background: active ? 'var(--hover-warm)' : 'transparent',\n transition: 'background 0.1s ease',\n }}\n onMouseEnter={(e) => {\n if (!active) e.currentTarget.style.background = 'var(--hover-warm-subtle)';\n }}\n onMouseLeave={(e) => {\n if (!active) e.currentTarget.style.background = 'transparent';\n }}\n >\n {label}\n </div>\n );\n}\n\n/**\n * StatusIndicator — connection/status pill for trailing slot.\n *\n * Props:\n * - connected boolean\n * - label string (optional, defaults to Connected/Disconnected)\n */\nexport function StatusIndicator({ connected, label }) {\n const text = label || (connected ? 'Connected' : 'Disconnected');\n return (\n <span style={{\n fontSize: 'var(--text-xs)',\n fontFamily: 'var(--font-sans)',\n padding: '3px 10px',\n borderRadius: 12,\n border: `1px solid ${connected ? 'var(--state-present)' : 'var(--border)'}`,\n color: connected ? 'var(--state-present)' : 'var(--text-faint)',\n background: connected ? 'rgba(37,163,114,0.08)' : 'transparent',\n transition: 'all 0.2s ease',\n }}>\n {text}\n </span>\n );\n}\n\nfunction getInitials(name) {\n if (!name) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n"],"names":["ICON_MAP","Home","FolderClosed","Users","LayoutDashboard","Clock3","Activity","Lightbulb","Bell","Plug","Settings","BarChart3","FileText","Headphones","Shield","Sliders","Workflow","resolveIcon","icon","SquareDot","Sidebar","menuItems","activeId","onNavigate","controlledCollapsed","onToggleCollapse","header","footer","width","collapsedWidth","internalCollapsed","setInternalCollapsed","useState","collapsed","toggleCollapse","expandedGroups","setExpandedGroups","initial","item","_a","hasActive","c","toggleGroup","id","prev","currentWidth","jsxs","jsx","e","PanelLeft","PanelLeftClose","idx","React","SidebarGroup","SidebarItem","active","Icon","isReactIcon","expanded","onToggle","hasActiveChild","ChevronDown","child","AVATAR_COLORS","avatarColor","name","hash","i","NavigationBar","logo","title","userName","userEmail","userInitials","userRole","onSignOut","children","trailing","userMenu","height","style","displayName","initials","getInitials","Fragment","LogOut","NavPill","label","color","onClick","NavDropdown","open","onClose","align","NavDropdownItem","StatusIndicator","connected","parts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("../UploadInteraction.cjs.js"),e=require("react/jsx-runtime"),y=require("react"),m=require("lucide-react"),z=require("../IntegrationCard.cjs.js"),w="var(--font-sans)",W={fontFamily:w},R={fontSize:20,fontWeight:600,fontStyle:"normal",fontFamily:w,color:"var(--grey-strong)",margin:0,lineHeight:"normal"},L={fontSize:13,fontWeight:400,fontStyle:"normal",color:"var(--color-text-secondary)",fontFamily:w,margin:"4px 0 0",lineHeight:"140%"},H={display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:16,marginTop:24},E=[{providerName:"Five9",description:"Cloud contact center platform for voice and digital channels",status:"connected",railColor:"#5E88B0"},{providerName:"Twilio Flex",description:"Programmable contact center with custom workflows",status:"available",railColor:"#9B7AA8"},{providerName:"Zoom Phone",description:"Cloud phone system with recording capabilities",status:"coming-soon",railColor:"#6B7C93"}],C=({integrations:n=E,onConfigure:a})=>e.jsxs("div",{style:W,children:[e.jsx("h2",{style:R,children:"Connect Data Source"}),e.jsx("p",{style:L,children:"Choose your preferred platforms to synchronise data."}),e.jsx("div",{style:H,children:n.map(o=>e.jsx(z.IntegrationCard,{providerName:o.providerName,description:o.description,status:o.status,railColor:o.railColor,logoUrl:o.logoUrl,icon:o.icon,onConfigure:()=>a==null?void 0:a(o)},o.providerName))})]}),p="var(--font-sans)",B={fontFamily:p},A={fontSize:20,fontWeight:600,fontStyle:"normal",fontFamily:p,color:"var(--grey-strong)",margin:0,lineHeight:"normal"},D={fontSize:13,fontWeight:400,fontStyle:"normal",color:"var(--color-text-secondary)",fontFamily:p,margin:"4px 0 0",lineHeight:"140%"},M={display:"flex",alignItems:"center",gap:12,marginTop:24},N={display:"flex",alignItems:"center",flex:1,height:44,padding:"0 14px",borderRadius:10,border:"1px solid var(--color-input-border)",background:"var(--grey-white)",boxSizing:"border-box",gap:8},U={flexShrink:0,color:"var(--color-text-secondary)"},$={display:"inline-flex",alignItems:"center",gap:4,padding:"4px 10px",borderRadius:6,background:"var(--hover-warm)",fontSize:14,fontWeight:500,fontFamily:p,color:"var(--grey-strong)",whiteSpace:"nowrap"},G={cursor:"pointer",fontSize:16,lineHeight:1,color:"var(--color-text-secondary)",marginLeft:2},q={flex:1,border:"none",outline:"none",fontSize:14,fontWeight:400,fontFamily:p,color:"var(--grey-strong)",background:"transparent",height:"100%"},P={display:"flex",height:44,padding:"0 24px",justifyContent:"center",alignItems:"center",borderRadius:10,background:"var(--grey-strong)",fontSize:14,fontWeight:600,fontFamily:p,color:"var(--grey-white)",border:"none",cursor:"pointer",transition:"var(--transition-fast)",outline:"none",flexShrink:0},O={marginTop:8,border:"1px solid var(--border)",borderRadius:10,overflow:"hidden",background:"var(--grey-white)"},_={display:"flex",alignItems:"center",gap:12,padding:"14px 16px",cursor:"pointer",transition:"var(--transition-fast)",borderBottom:"1px solid var(--border-subtle)"},K=n=>({width:40,height:40,borderRadius:9999,background:n||"var(--hover-warm)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:14,fontWeight:600,fontFamily:p,color:"var(--color-green)",flexShrink:0}),V={fontSize:14,fontWeight:600,fontFamily:p,color:"var(--grey-strong)",margin:0,lineHeight:"120%"},Z={fontSize:13,fontWeight:400,fontFamily:p,color:"var(--color-text-secondary)",margin:"2px 0 0",lineHeight:"140%"},J=[{name:"Alex Rivera",email:"alex.rivera@company.com",initials:"AR"},{name:"Alexandra Smith",email:"a.smith@design.co",initials:"AS"}],F=({suggestions:n=J,onInvite:a})=>{const[o,d]=y.useState(""),[r,c]=y.useState([]),[l,u]=y.useState(!1),g=n.filter(t=>!r.includes(t.email)&&(t.name.toLowerCase().includes(o.toLowerCase())||t.email.toLowerCase().includes(o.toLowerCase()))),h=t=>{t&&!r.includes(t)&&(c([...r,t]),d(""))},f=t=>{c(r.filter(x=>x!==t))},b=t=>{t.key==="Enter"&&o.includes("@")&&(t.preventDefault(),h(o.trim())),t.key==="Backspace"&&!o&&r.length&&f(r[r.length-1])},S=()=>{r.length&&(a==null||a(r))};return e.jsxs("div",{style:B,children:[e.jsx("h2",{style:A,children:"Add Teammates"}),e.jsx("p",{style:D,children:"Collaborate with your team to accelerate your workflow."}),e.jsxs("div",{style:M,children:[e.jsxs("div",{style:{...N,borderColor:l?"var(--color-green)":"var(--color-input-border)",boxShadow:l?"0 0 0 3px var(--color-green-ring)":"none"},children:[e.jsx(m.Search,{size:18,style:U}),r.map(t=>e.jsxs("span",{style:$,children:[t,e.jsx("span",{style:G,onClick:()=>f(t),children:"×"})]},t)),e.jsx("input",{type:"text",placeholder:r.length?"":"Search by name or email...",value:o,onChange:t=>d(t.target.value),onFocus:()=>u(!0),onBlur:()=>setTimeout(()=>u(!1),150),onKeyDown:b,style:q})]}),e.jsx("button",{style:P,onClick:S,onMouseEnter:t=>{t.currentTarget.style.opacity="0.85"},onMouseLeave:t=>{t.currentTarget.style.opacity="1"},children:"Invite"})]}),l&&g.length>0&&e.jsx("div",{style:O,children:g.map((t,x)=>e.jsxs("div",{style:{..._,...x===g.length-1?{borderBottom:"none"}:{}},onMouseDown:()=>h(t.email),onMouseEnter:v=>{v.currentTarget.style.background="var(--hover-warm-subtle)"},onMouseLeave:v=>{v.currentTarget.style.background="var(--grey-white)"},children:[e.jsx("div",{style:K(),children:t.initials}),e.jsxs("div",{children:[e.jsx("p",{style:V,children:t.name}),e.jsx("p",{style:Z,children:t.email})]})]},t.email))})]})},s="var(--font-sans)",Q=[{id:"workspace",label:"Workspace Name",description:"Give your project a title.",icon:m.Briefcase},{id:"interaction",label:"Add Interaction",description:"Connect data to see patterns.",icon:m.MessageSquare},{id:"connect",label:"Connect Data",description:"Link your platform for auto-evaluation.",icon:m.Database},{id:"invite",label:"Invite Team",description:"Add members to collaborate.",icon:m.Users},{id:"concepts",label:"Learn Concepts",description:"Explore conditions and evidence.",icon:m.BookOpen},{id:"scope",label:"Define Scope",description:"Customize evaluation signals.",icon:m.SlidersHorizontal}],X={fontFamily:s,background:"var(--grey-white)",minHeight:"100vh",boxSizing:"border-box"},Y={padding:"24px 48px",borderBottom:"1px solid var(--border)",background:"var(--grey-white)"},ee={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},te={fontSize:24,fontWeight:600,fontStyle:"normal",fontFamily:s,color:"var(--grey-strong)",margin:0,lineHeight:"normal"},oe={fontSize:14,fontWeight:400,lineHeight:"140%",color:"var(--text-muted)",margin:"4px 0 0",fontFamily:s},re={display:"flex",alignItems:"center",gap:12},ne={display:"flex",height:36,padding:"0 16px",justifyContent:"center",alignItems:"center",borderRadius:10,background:"transparent",border:"1px solid var(--border-strong)",fontSize:14,fontWeight:500,fontFamily:s,color:"var(--text-base)",cursor:"pointer",transition:"var(--transition-fast)",outline:"none"},ie={display:"flex",height:36,padding:"0 20px",justifyContent:"center",alignItems:"center",borderRadius:10,background:"var(--grey-strong)",fontSize:14,fontWeight:600,fontFamily:s,color:"var(--grey-white)",border:"none",cursor:"pointer",transition:"var(--transition-fast)",outline:"none"},ae={width:"100%",height:6,borderRadius:3,background:"var(--border)",overflow:"hidden",marginTop:12},se=n=>({width:`${n}%`,height:"100%",borderRadius:3,background:"var(--color-green)",transition:"width 0.4s ease-out"}),le={display:"flex",flex:1,minHeight:"calc(100vh - 140px)"},ce={width:312,minWidth:312,borderRight:"1px solid var(--border)",padding:"24px 24px",background:"var(--grey-white)",boxSizing:"border-box"},de={fontSize:13,fontWeight:500,color:"var(--text-muted)",fontFamily:s,margin:"0 0 12px"},ge={display:"flex",width:264,flexDirection:"column",alignItems:"flex-start",gap:8,alignSelf:"stretch"},he=n=>({display:"flex",alignItems:"center",gap:4,padding:"8px 4px",cursor:"pointer",transition:"var(--transition-fast)",background:n?"var(--hover-warm)":"var(--grey-white)",borderRadius:8,alignSelf:"stretch"}),ye={width:40,height:40,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center"},pe={fontSize:14,fontWeight:600,fontStyle:"normal",color:"var(--grey-strong)",fontFamily:s,margin:0,lineHeight:"120%"},ue={fontSize:12,fontWeight:400,color:"var(--text-muted)",fontFamily:s,margin:"2px 0 0",lineHeight:1.3},me={flex:1,padding:"40px 48px",background:"var(--grey-white)",boxSizing:"border-box"},xe={fontSize:20,fontWeight:600,fontStyle:"normal",fontFamily:s,color:"var(--grey-strong)",margin:0,lineHeight:"normal"},fe={fontSize:13,fontWeight:400,fontStyle:"normal",color:"var(--color-text-secondary)",fontFamily:s,margin:"4px 0 0",lineHeight:"140%"},k={fontSize:16,fontWeight:600,fontStyle:"normal",color:"var(--grey-strong)",fontFamily:s,lineHeight:"normal",margin:0,display:"block"},ve={width:"100%",height:44,padding:"0 14px",borderRadius:6,border:"1px solid var(--color-input-border)",fontSize:16,fontWeight:400,fontStyle:"normal",lineHeight:"normal",fontFamily:s,color:"var(--color-text-secondary)",background:"var(--grey-white)",boxSizing:"border-box",outline:"none",transition:"var(--transition-fast)"},be={position:"relative",marginTop:8},Se={width:"100%",minHeight:160,padding:"12px 14px 28px 14px",borderRadius:6,border:"1px solid var(--color-input-border)",fontSize:16,fontWeight:400,fontStyle:"normal",lineHeight:"normal",fontFamily:s,color:"var(--color-text-secondary)",background:"var(--grey-white)",boxSizing:"border-box",outline:"none",resize:"vertical",lineHeight:"140%",transition:"var(--transition-fast)"},je={position:"absolute",bottom:10,right:14,fontSize:12,fontWeight:400,color:"var(--text-faint)",fontFamily:s,margin:0,pointerEvents:"none"};function we(){return e.jsx("div",{style:{width:24,height:24,borderRadius:6,background:"var(--grey-strong)",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:e.jsx("path",{d:"M2.5 7.5L5.5 10.5L11.5 4",stroke:"var(--grey-white)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})})}function ke(){return e.jsxs("div",{style:{width:24,height:24,borderRadius:"50%",border:"2px solid var(--grey-muted)",background:"transparent",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,gap:2,boxSizing:"border-box"},children:[e.jsx("span",{style:{width:3,height:3,borderRadius:"50%",background:"var(--grey-muted)"}}),e.jsx("span",{style:{width:3,height:3,borderRadius:"50%",background:"var(--grey-muted)"}}),e.jsx("span",{style:{width:3,height:3,borderRadius:"50%",background:"var(--grey-muted)"}})]})}function Ce({step:n,isCompleted:a,isActive:o,onClick:d}){const[r,c]=y.useState(!1);return e.jsxs("div",{style:{...he(o),...r&&!o?{background:"var(--hover-warm-subtle)"}:{}},onClick:d,onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),children:[e.jsx("div",{style:ye,children:a?e.jsx(we,{}):e.jsx(ke,{})}),e.jsxs("div",{children:[e.jsx("p",{style:pe,children:n.label}),e.jsx("p",{style:ue,children:n.description})]})]})}function Fe({workspaceName:n,setWorkspaceName:a,description:o,setDescription:d,maxDescLength:r}){const[c,l]=y.useState(!1),[u,g]=y.useState(!1);return e.jsxs("div",{children:[e.jsx("h2",{style:xe,children:"Name of your workspace"}),e.jsx("p",{style:fe,children:"Tell us about the project or company you're organizing here."}),e.jsxs("div",{style:{marginTop:28},children:[e.jsx("label",{style:k,children:"Workspace Name"}),e.jsx("input",{type:"text",placeholder:"e.g. Acme Marketing",value:n,onChange:h=>a(h.target.value),onFocus:()=>l(!0),onBlur:()=>l(!1),style:{...ve,marginTop:8,borderColor:c?"var(--color-green)":"var(--color-input-border)",boxShadow:c?"0 0 0 3px var(--color-green-ring)":"none"}})]}),e.jsxs("div",{style:{marginTop:24},children:[e.jsx("label",{style:k,children:"Description"}),e.jsxs("div",{style:be,children:[e.jsx("textarea",{placeholder:"what's the goal of this workspace?",value:o,onChange:h=>{h.target.value.length<=r&&d(h.target.value)},onFocus:()=>g(!0),onBlur:()=>g(!1),style:{...Se,borderColor:u?"var(--color-green)":"var(--color-input-border)",boxShadow:u?"0 0 0 3px var(--color-green-ring)":"none"}}),e.jsxs("span",{style:je,children:[o.length,"/",r]})]})]})]})}const Te=({steps:n=Q,completedSteps:a=["workspace","invite"],initialActiveStep:o="workspace",onSaveNext:d,onRemindLater:r,onStepChange:c})=>{const[l,u]=y.useState(o),[g,h]=y.useState(""),[f,b]=y.useState(""),S=1e3,t=a.length,x=n.length,v=t/x*100,T=i=>{u(i),c==null||c(i)},I=()=>{d==null||d({stepId:l,workspaceName:g,description:f})};return e.jsxs("div",{style:X,children:[e.jsxs("div",{style:Y,children:[e.jsxs("div",{style:ee,children:[e.jsxs("div",{children:[e.jsx("h1",{style:te,children:"Getting started with Chordia"}),e.jsx("p",{style:oe,children:"Complete these steps to get the most out of Chordia."})]}),e.jsxs("div",{style:re,children:[e.jsx("button",{style:ne,onClick:r,onMouseEnter:i=>{i.currentTarget.style.background="var(--hover-warm-subtle)"},onMouseLeave:i=>{i.currentTarget.style.background="transparent"},children:"Remind me Later"}),e.jsx("button",{style:ie,onClick:I,onMouseEnter:i=>{i.currentTarget.style.opacity="0.85"},onMouseLeave:i=>{i.currentTarget.style.opacity="1"},children:"Save & Next"})]})]}),e.jsx("div",{style:ae,children:e.jsx("div",{style:se(v)})})]}),e.jsxs("div",{style:le,children:[e.jsxs("div",{style:ce,children:[e.jsxs("p",{style:de,children:[t," of ",x," steps completed"]}),e.jsx("div",{style:ge,children:n.map(i=>e.jsx(Ce,{step:i,isCompleted:a.includes(i.id),isActive:l===i.id,onClick:()=>T(i.id)},i.id))})]}),e.jsxs("div",{style:me,children:[l==="workspace"&&e.jsx(Fe,{workspaceName:g,setWorkspaceName:h,description:f,setDescription:b,maxDescLength:S}),l==="interaction"&&e.jsx(j.UploadInteraction,{}),l==="connect"&&e.jsx(C,{}),l==="invite"&&e.jsx(F,{})]})]})]})};exports.UploadEvaluate=j.UploadEvaluate;exports.UploadInteraction=j.UploadInteraction;exports.AddTeammates=F;exports.ConnectData=C;exports.GettingStarted=Te;
2
+ //# sourceMappingURL=onboarding.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.cjs.js","sources":["../../src/components/onboarding/ConnectData.jsx","../../src/components/onboarding/AddTeammates.jsx","../../src/components/onboarding/GettingStarted.jsx"],"sourcesContent":["import IntegrationCard from '../layout/IntegrationCard';\n\nconst FF = 'var(--font-sans)';\n\n// ─── Styles ───\n\nconst containerStyle = {\n fontFamily: FF,\n};\n\nconst sectionTitleStyle = {\n fontSize: 20,\n fontWeight: 600,\n fontStyle: 'normal',\n fontFamily: FF,\n color: 'var(--grey-strong)',\n margin: 0,\n lineHeight: 'normal',\n};\n\nconst sectionSubtitleStyle = {\n fontSize: 13,\n fontWeight: 400,\n fontStyle: 'normal',\n color: 'var(--color-text-secondary)',\n fontFamily: FF,\n margin: '4px 0 0',\n lineHeight: '140%',\n};\n\nconst gridStyle = {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: 16,\n marginTop: 24,\n};\n\n// ─── Default Integrations ───\n\nconst DEFAULT_INTEGRATIONS = [\n {\n providerName: 'Five9',\n description: 'Cloud contact center platform for voice and digital channels',\n status: 'connected',\n railColor: '#5E88B0',\n },\n {\n providerName: 'Twilio Flex',\n description: 'Programmable contact center with custom workflows',\n status: 'available',\n railColor: '#9B7AA8',\n },\n {\n providerName: 'Zoom Phone',\n description: 'Cloud phone system with recording capabilities',\n status: 'coming-soon',\n railColor: '#6B7C93',\n },\n];\n\n// ─── Component ───\n\nconst ConnectData = ({ integrations = DEFAULT_INTEGRATIONS, onConfigure }) => {\n return (\n <div style={containerStyle}>\n <h2 style={sectionTitleStyle}>Connect Data Source</h2>\n <p style={sectionSubtitleStyle}>\n Choose your preferred platforms to synchronise data.\n </p>\n\n <div style={gridStyle}>\n {integrations.map((integration) => (\n <IntegrationCard\n key={integration.providerName}\n providerName={integration.providerName}\n description={integration.description}\n status={integration.status}\n railColor={integration.railColor}\n logoUrl={integration.logoUrl}\n icon={integration.icon}\n onConfigure={() => onConfigure?.(integration)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default ConnectData;\n","import { useState } from 'react';\nimport { Search } from 'lucide-react';\n\nconst FF = 'var(--font-sans)';\n\n// ─── Styles ───\n\nconst containerStyle = {\n fontFamily: FF,\n};\n\nconst sectionTitleStyle = {\n fontSize: 20,\n fontWeight: 600,\n fontStyle: 'normal',\n fontFamily: FF,\n color: 'var(--grey-strong)',\n margin: 0,\n lineHeight: 'normal',\n};\n\nconst sectionSubtitleStyle = {\n fontSize: 13,\n fontWeight: 400,\n fontStyle: 'normal',\n color: 'var(--color-text-secondary)',\n fontFamily: FF,\n margin: '4px 0 0',\n lineHeight: '140%',\n};\n\nconst searchRowStyle = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n marginTop: 24,\n};\n\nconst searchInputWrapStyle = {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n height: 44,\n padding: '0 14px',\n borderRadius: 10,\n border: '1px solid var(--color-input-border)',\n background: 'var(--grey-white)',\n boxSizing: 'border-box',\n gap: 8,\n};\n\nconst searchIconStyle = {\n flexShrink: 0,\n color: 'var(--color-text-secondary)',\n};\n\nconst emailTagStyle = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 6,\n background: 'var(--hover-warm)',\n fontSize: 14,\n fontWeight: 500,\n fontFamily: FF,\n color: 'var(--grey-strong)',\n whiteSpace: 'nowrap',\n};\n\nconst emailTagRemoveStyle = {\n cursor: 'pointer',\n fontSize: 16,\n lineHeight: 1,\n color: 'var(--color-text-secondary)',\n marginLeft: 2,\n};\n\nconst searchInputStyle = {\n flex: 1,\n border: 'none',\n outline: 'none',\n fontSize: 14,\n fontWeight: 400,\n fontFamily: FF,\n color: 'var(--grey-strong)',\n background: 'transparent',\n height: '100%',\n};\n\nconst inviteBtnStyle = {\n display: 'flex',\n height: 44,\n padding: '0 24px',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n background: 'var(--grey-strong)',\n fontSize: 14,\n fontWeight: 600,\n fontFamily: FF,\n color: 'var(--grey-white)',\n border: 'none',\n cursor: 'pointer',\n transition: 'var(--transition-fast)',\n outline: 'none',\n flexShrink: 0,\n};\n\nconst suggestionsListStyle = {\n marginTop: 8,\n border: '1px solid var(--border)',\n borderRadius: 10,\n overflow: 'hidden',\n background: 'var(--grey-white)',\n};\n\nconst suggestionItemStyle = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '14px 16px',\n cursor: 'pointer',\n transition: 'var(--transition-fast)',\n borderBottom: '1px solid var(--border-subtle)',\n};\n\nconst avatarStyle = (color) => ({\n width: 40,\n height: 40,\n borderRadius: 9999,\n background: color || 'var(--hover-warm)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 14,\n fontWeight: 600,\n fontFamily: FF,\n color: 'var(--color-green)',\n flexShrink: 0,\n});\n\nconst suggestionNameStyle = {\n fontSize: 14,\n fontWeight: 600,\n fontFamily: FF,\n color: 'var(--grey-strong)',\n margin: 0,\n lineHeight: '120%',\n};\n\nconst suggestionEmailStyle = {\n fontSize: 13,\n fontWeight: 400,\n fontFamily: FF,\n color: 'var(--color-text-secondary)',\n margin: '2px 0 0',\n lineHeight: '140%',\n};\n\n// ─── Default Suggestions ───\n\nconst DEFAULT_SUGGESTIONS = [\n { name: 'Alex Rivera', email: 'alex.rivera@company.com', initials: 'AR' },\n { name: 'Alexandra Smith', email: 'a.smith@design.co', initials: 'AS' },\n];\n\n// ─── Component ───\n\nconst AddTeammates = ({ suggestions = DEFAULT_SUGGESTIONS, onInvite }) => {\n const [inputValue, setInputValue] = useState('');\n const [emails, setEmails] = useState([]);\n const [focused, setFocused] = useState(false);\n\n const filteredSuggestions = suggestions.filter(\n (s) =>\n !emails.includes(s.email) &&\n (s.name.toLowerCase().includes(inputValue.toLowerCase()) ||\n s.email.toLowerCase().includes(inputValue.toLowerCase()))\n );\n\n const addEmail = (email) => {\n if (email && !emails.includes(email)) {\n setEmails([...emails, email]);\n setInputValue('');\n }\n };\n\n const removeEmail = (email) => {\n setEmails(emails.filter((e) => e !== email));\n };\n\n const handleKeyDown = (e) => {\n if (e.key === 'Enter' && inputValue.includes('@')) {\n e.preventDefault();\n addEmail(inputValue.trim());\n }\n if (e.key === 'Backspace' && !inputValue && emails.length) {\n removeEmail(emails[emails.length - 1]);\n }\n };\n\n const handleInvite = () => {\n if (emails.length) {\n onInvite?.(emails);\n }\n };\n\n return (\n <div style={containerStyle}>\n <h2 style={sectionTitleStyle}>Add Teammates</h2>\n <p style={sectionSubtitleStyle}>Collaborate with your team to accelerate your workflow.</p>\n\n <div style={searchRowStyle}>\n <div\n style={{\n ...searchInputWrapStyle,\n borderColor: focused ? 'var(--color-green)' : 'var(--color-input-border)',\n boxShadow: focused ? '0 0 0 3px var(--color-green-ring)' : 'none',\n }}\n >\n <Search size={18} style={searchIconStyle} />\n {emails.map((email) => (\n <span key={email} style={emailTagStyle}>\n {email}\n <span style={emailTagRemoveStyle} onClick={() => removeEmail(email)}>×</span>\n </span>\n ))}\n <input\n type=\"text\"\n placeholder={emails.length ? '' : 'Search by name or email...'}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setTimeout(() => setFocused(false), 150)}\n onKeyDown={handleKeyDown}\n style={searchInputStyle}\n />\n </div>\n <button\n style={inviteBtnStyle}\n onClick={handleInvite}\n onMouseEnter={(e) => { e.currentTarget.style.opacity = '0.85'; }}\n onMouseLeave={(e) => { e.currentTarget.style.opacity = '1'; }}\n >\n Invite\n </button>\n </div>\n\n {focused && filteredSuggestions.length > 0 && (\n <div style={suggestionsListStyle}>\n {filteredSuggestions.map((suggestion, idx) => (\n <div\n key={suggestion.email}\n style={{\n ...suggestionItemStyle,\n ...(idx === filteredSuggestions.length - 1 ? { borderBottom: 'none' } : {}),\n }}\n onMouseDown={() => addEmail(suggestion.email)}\n onMouseEnter={(e) => { e.currentTarget.style.background = 'var(--hover-warm-subtle)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = 'var(--grey-white)'; }}\n >\n <div style={avatarStyle()}>\n {suggestion.initials}\n </div>\n <div>\n <p style={suggestionNameStyle}>{suggestion.name}</p>\n <p style={suggestionEmailStyle}>{suggestion.email}</p>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default AddTeammates;\n","import { useState } from 'react';\nimport { MessageSquare, Database, Users, BookOpen, SlidersHorizontal, Briefcase } from 'lucide-react';\nimport UploadInteraction from './UploadInteraction';\nimport ConnectData from './ConnectData';\nimport AddTeammates from './AddTeammates';\n\nconst FF = 'var(--font-sans)';\n\n// ─── Steps Configuration ───\n\nconst DEFAULT_STEPS = [\n { id: 'workspace', label: 'Workspace Name', description: 'Give your project a title.', icon: Briefcase },\n { id: 'interaction', label: 'Add Interaction', description: 'Connect data to see patterns.', icon: MessageSquare },\n { id: 'connect', label: 'Connect Data', description: 'Link your platform for auto-evaluation.', icon: Database },\n { id: 'invite', label: 'Invite Team', description: 'Add members to collaborate.', icon: Users },\n { id: 'concepts', label: 'Learn Concepts', description: 'Explore conditions and evidence.', icon: BookOpen },\n { id: 'scope', label: 'Define Scope', description: 'Customize evaluation signals.', icon: SlidersHorizontal },\n];\n\n// ─── Styles ───\n\nconst pageStyle = {\n fontFamily: FF,\n background: 'var(--grey-white)',\n minHeight: '100vh',\n boxSizing: 'border-box',\n};\n\nconst headerStyle = {\n padding: '24px 48px',\n borderBottom: '1px solid var(--border)',\n background: 'var(--grey-white)',\n};\n\nconst headerTopRow = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 8,\n};\n\nconst titleStyle = {\n fontSize: 24,\n fontWeight: 600,\n fontStyle: 'normal',\n fontFamily: FF,\n color: 'var(--grey-strong)',\n margin: 0,\n lineHeight: 'normal',\n};\n\nconst subtitleStyle = {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '140%',\n color: 'var(--text-muted)',\n margin: '4px 0 0',\n fontFamily: FF,\n};\n\nconst headerActions = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst remindBtnStyle = {\n display: 'flex',\n height: 36,\n padding: '0 16px',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n background: 'transparent',\n border: '1px solid var(--border-strong)',\n fontSize: 14,\n fontWeight: 500,\n fontFamily: FF,\n color: 'var(--text-base)',\n cursor: 'pointer',\n transition: 'var(--transition-fast)',\n outline: 'none',\n};\n\nconst saveBtnStyle = {\n display: 'flex',\n height: 36,\n padding: '0 20px',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n background: 'var(--grey-strong)',\n fontSize: 14,\n fontWeight: 600,\n fontFamily: FF,\n color: 'var(--grey-white)',\n border: 'none',\n cursor: 'pointer',\n transition: 'var(--transition-fast)',\n outline: 'none',\n};\n\nconst progressBarBg = {\n width: '100%',\n height: 6,\n borderRadius: 3,\n background: 'var(--border)',\n overflow: 'hidden',\n marginTop: 12,\n};\n\nconst progressBarFill = (pct) => ({\n width: `${pct}%`,\n height: '100%',\n borderRadius: 3,\n background: 'var(--color-green)',\n transition: 'width 0.4s ease-out',\n});\n\nconst bodyStyle = {\n display: 'flex',\n flex: 1,\n minHeight: 'calc(100vh - 140px)',\n};\n\n// ─── Sidebar Styles ───\n\nconst sidebarStyle = {\n width: 312,\n minWidth: 312,\n borderRight: '1px solid var(--border)',\n padding: '24px 24px',\n background: 'var(--grey-white)',\n boxSizing: 'border-box',\n};\n\nconst stepsCountStyle = {\n fontSize: 13,\n fontWeight: 500,\n color: 'var(--text-muted)',\n fontFamily: FF,\n margin: '0 0 12px',\n};\n\nconst stepsListStyle = {\n display: 'flex',\n width: 264,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: 8,\n alignSelf: 'stretch',\n};\n\nconst stepItemStyle = (isActive) => ({\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n padding: '8px 4px',\n cursor: 'pointer',\n transition: 'var(--transition-fast)',\n background: isActive ? 'var(--hover-warm)' : 'var(--grey-white)',\n borderRadius: 8,\n alignSelf: 'stretch',\n});\n\nconst stepIconWrap = {\n width: 40,\n height: 40,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst stepLabelStyle = {\n fontSize: 14,\n fontWeight: 600,\n fontStyle: 'normal',\n color: 'var(--grey-strong)',\n fontFamily: FF,\n margin: 0,\n lineHeight: '120%',\n};\n\nconst stepDescStyle = {\n fontSize: 12,\n fontWeight: 400,\n color: 'var(--text-muted)',\n fontFamily: FF,\n margin: '2px 0 0',\n lineHeight: 1.3,\n};\n\n// ─── Content Styles ───\n\nconst contentStyle = {\n flex: 1,\n padding: '40px 48px',\n background: 'var(--grey-white)',\n boxSizing: 'border-box',\n};\n\nconst sectionTitleStyle = {\n fontSize: 20,\n fontWeight: 600,\n fontStyle: 'normal',\n fontFamily: FF,\n color: 'var(--grey-strong)',\n margin: 0,\n lineHeight: 'normal',\n};\n\nconst sectionSubtitleStyle = {\n fontSize: 13,\n fontWeight: 400,\n fontStyle: 'normal',\n color: 'var(--color-text-secondary)',\n fontFamily: FF,\n margin: '4px 0 0',\n lineHeight: '140%',\n};\n\nconst fieldLabelStyle = {\n fontSize: 16,\n fontWeight: 600,\n fontStyle: 'normal',\n color: 'var(--grey-strong)',\n fontFamily: FF,\n lineHeight: 'normal',\n margin: 0,\n display: 'block',\n};\n\nconst inputStyle = {\n width: '100%',\n height: 44,\n padding: '0 14px',\n borderRadius: 6,\n border: '1px solid var(--color-input-border)',\n fontSize: 16,\n fontWeight: 400,\n fontStyle: 'normal',\n lineHeight: 'normal',\n fontFamily: FF,\n color: 'var(--color-text-secondary)',\n background: 'var(--grey-white)',\n boxSizing: 'border-box',\n outline: 'none',\n transition: 'var(--transition-fast)',\n};\n\nconst textareaWrapStyle = {\n position: 'relative',\n marginTop: 8,\n};\n\nconst textareaStyle = {\n width: '100%',\n minHeight: 160,\n padding: '12px 14px 28px 14px',\n borderRadius: 6,\n border: '1px solid var(--color-input-border)',\n fontSize: 16,\n fontWeight: 400,\n fontStyle: 'normal',\n lineHeight: 'normal',\n fontFamily: FF,\n color: 'var(--color-text-secondary)',\n background: 'var(--grey-white)',\n boxSizing: 'border-box',\n outline: 'none',\n resize: 'vertical',\n lineHeight: '140%',\n transition: 'var(--transition-fast)',\n};\n\nconst charCountStyle = {\n position: 'absolute',\n bottom: 10,\n right: 14,\n fontSize: 12,\n fontWeight: 400,\n color: 'var(--text-faint)',\n fontFamily: FF,\n margin: 0,\n pointerEvents: 'none',\n};\n\n// ─── Step Indicator Icons ───\n\nfunction CompletedIcon() {\n return (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: 6,\n background: 'var(--grey-strong)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.5 7.5L5.5 10.5L11.5 4\" stroke=\"var(--grey-white)\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n );\n}\n\nfunction IncompleteIcon() {\n return (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n border: '2px solid var(--grey-muted)',\n background: 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n gap: 2,\n boxSizing: 'border-box',\n }}\n >\n <span style={{ width: 3, height: 3, borderRadius: '50%', background: 'var(--grey-muted)' }} />\n <span style={{ width: 3, height: 3, borderRadius: '50%', background: 'var(--grey-muted)' }} />\n <span style={{ width: 3, height: 3, borderRadius: '50%', background: 'var(--grey-muted)' }} />\n </div>\n );\n}\n\n// ─── Step Item Component ───\n\nfunction StepItem({ step, isCompleted, isActive, onClick }) {\n const [hovered, setHovered] = useState(false);\n\n return (\n <div\n style={{\n ...stepItemStyle(isActive),\n ...(hovered && !isActive ? { background: 'var(--hover-warm-subtle)' } : {}),\n }}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <div style={stepIconWrap}>\n {isCompleted ? <CompletedIcon /> : <IncompleteIcon />}\n </div>\n <div>\n <p style={stepLabelStyle}>{step.label}</p>\n <p style={stepDescStyle}>{step.description}</p>\n </div>\n </div>\n );\n}\n\n// ─── Workspace Name Step Content ───\n\nfunction WorkspaceNameContent({ workspaceName, setWorkspaceName, description, setDescription, maxDescLength }) {\n const [nameFocused, setNameFocused] = useState(false);\n const [descFocused, setDescFocused] = useState(false);\n\n return (\n <div>\n <h2 style={sectionTitleStyle}>Name of your workspace</h2>\n <p style={sectionSubtitleStyle}>Tell us about the project or company you're organizing here.</p>\n\n <div style={{ marginTop: 28 }}>\n <label style={fieldLabelStyle}>Workspace Name</label>\n <input\n type=\"text\"\n placeholder=\"e.g. Acme Marketing\"\n value={workspaceName}\n onChange={(e) => setWorkspaceName(e.target.value)}\n onFocus={() => setNameFocused(true)}\n onBlur={() => setNameFocused(false)}\n style={{\n ...inputStyle,\n marginTop: 8,\n borderColor: nameFocused ? 'var(--color-green)' : 'var(--color-input-border)',\n boxShadow: nameFocused ? '0 0 0 3px var(--color-green-ring)' : 'none',\n }}\n />\n </div>\n\n <div style={{ marginTop: 24 }}>\n <label style={fieldLabelStyle}>Description</label>\n <div style={textareaWrapStyle}>\n <textarea\n placeholder=\"what's the goal of this workspace?\"\n value={description}\n onChange={(e) => {\n if (e.target.value.length <= maxDescLength) {\n setDescription(e.target.value);\n }\n }}\n onFocus={() => setDescFocused(true)}\n onBlur={() => setDescFocused(false)}\n style={{\n ...textareaStyle,\n borderColor: descFocused ? 'var(--color-green)' : 'var(--color-input-border)',\n boxShadow: descFocused ? '0 0 0 3px var(--color-green-ring)' : 'none',\n }}\n />\n <span style={charCountStyle}>{description.length}/{maxDescLength}</span>\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Main Component ───\n\nconst GettingStarted = ({\n steps = DEFAULT_STEPS,\n completedSteps = ['workspace', 'invite'],\n initialActiveStep = 'workspace',\n onSaveNext,\n onRemindLater,\n onStepChange,\n}) => {\n const [activeStepId, setActiveStepId] = useState(initialActiveStep);\n const [workspaceName, setWorkspaceName] = useState('');\n const [description, setDescription] = useState('');\n const maxDescLength = 1000;\n\n const completedCount = completedSteps.length;\n const totalCount = steps.length;\n const progressPct = (completedCount / totalCount) * 100;\n\n const handleStepClick = (stepId) => {\n setActiveStepId(stepId);\n onStepChange?.(stepId);\n };\n\n const handleSaveNext = () => {\n onSaveNext?.({ stepId: activeStepId, workspaceName, description });\n };\n\n return (\n <div style={pageStyle}>\n {/* Header */}\n <div style={headerStyle}>\n <div style={headerTopRow}>\n <div>\n <h1 style={titleStyle}>Getting started with Chordia</h1>\n <p style={subtitleStyle}>Complete these steps to get the most out of Chordia.</p>\n </div>\n <div style={headerActions}>\n <button\n style={remindBtnStyle}\n onClick={onRemindLater}\n onMouseEnter={(e) => { e.currentTarget.style.background = 'var(--hover-warm-subtle)'; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = 'transparent'; }}\n >\n Remind me Later\n </button>\n <button\n style={saveBtnStyle}\n onClick={handleSaveNext}\n onMouseEnter={(e) => { e.currentTarget.style.opacity = '0.85'; }}\n onMouseLeave={(e) => { e.currentTarget.style.opacity = '1'; }}\n >\n Save &amp; Next\n </button>\n </div>\n </div>\n <div style={progressBarBg}>\n <div style={progressBarFill(progressPct)} />\n </div>\n </div>\n\n {/* Body */}\n <div style={bodyStyle}>\n {/* Sidebar */}\n <div style={sidebarStyle}>\n <p style={stepsCountStyle}>\n {completedCount} of {totalCount} steps completed\n </p>\n <div style={stepsListStyle}>\n {steps.map((step) => (\n <StepItem\n key={step.id}\n step={step}\n isCompleted={completedSteps.includes(step.id)}\n isActive={activeStepId === step.id}\n onClick={() => handleStepClick(step.id)}\n />\n ))}\n </div>\n </div>\n\n {/* Content */}\n <div style={contentStyle}>\n {activeStepId === 'workspace' && (\n <WorkspaceNameContent\n workspaceName={workspaceName}\n setWorkspaceName={setWorkspaceName}\n description={description}\n setDescription={setDescription}\n maxDescLength={maxDescLength}\n />\n )}\n {activeStepId === 'interaction' && (\n <UploadInteraction />\n )}\n {activeStepId === 'connect' && (\n <ConnectData />\n )}\n {activeStepId === 'invite' && (\n <AddTeammates />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default GettingStarted;\n"],"names":["FF","containerStyle","sectionTitleStyle","sectionSubtitleStyle","gridStyle","DEFAULT_INTEGRATIONS","ConnectData","integrations","onConfigure","jsxs","jsx","integration","IntegrationCard","searchRowStyle","searchInputWrapStyle","searchIconStyle","emailTagStyle","emailTagRemoveStyle","searchInputStyle","inviteBtnStyle","suggestionsListStyle","suggestionItemStyle","avatarStyle","color","suggestionNameStyle","suggestionEmailStyle","DEFAULT_SUGGESTIONS","AddTeammates","suggestions","onInvite","inputValue","setInputValue","useState","emails","setEmails","focused","setFocused","filteredSuggestions","s","addEmail","email","removeEmail","e","handleKeyDown","handleInvite","Search","suggestion","idx","DEFAULT_STEPS","Briefcase","MessageSquare","Database","Users","BookOpen","SlidersHorizontal","pageStyle","headerStyle","headerTopRow","titleStyle","subtitleStyle","headerActions","remindBtnStyle","saveBtnStyle","progressBarBg","progressBarFill","pct","bodyStyle","sidebarStyle","stepsCountStyle","stepsListStyle","stepItemStyle","isActive","stepIconWrap","stepLabelStyle","stepDescStyle","contentStyle","fieldLabelStyle","inputStyle","textareaWrapStyle","textareaStyle","charCountStyle","CompletedIcon","IncompleteIcon","StepItem","step","isCompleted","onClick","hovered","setHovered","WorkspaceNameContent","workspaceName","setWorkspaceName","description","setDescription","maxDescLength","nameFocused","setNameFocused","descFocused","setDescFocused","GettingStarted","steps","completedSteps","initialActiveStep","onSaveNext","onRemindLater","onStepChange","activeStepId","setActiveStepId","completedCount","totalCount","progressPct","handleStepClick","stepId","handleSaveNext","UploadInteraction"],"mappings":"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"}