@handled-ai/design-system 0.9.9 → 0.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/entity-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"./sheet\"\nimport { Badge } from \"./badge\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport {\n Plus,\n ExternalLink,\n Mail,\n FileText,\n MessageCircle,\n Briefcase,\n Building2,\n Users,\n X,\n ChevronDown,\n ChevronUp,\n Link as LinkIcon,\n Maximize2,\n Minimize2,\n CalendarDays,\n} from \"lucide-react\"\nimport { TimelineActivity, type TimelineEvent } from \"./timeline-activity\"\n\n// ---------------------------------------------------------------------------\n// EntityPanel – supports both Sheet (side panel) and fullscreen modes\n// ---------------------------------------------------------------------------\n\nexport function EntityPanel({\n isOpen,\n onClose,\n children,\n}: {\n isOpen: boolean\n onClose: (open: boolean) => void\n children?: React.ReactNode\n}) {\n const [isFullscreen, setIsFullscreen] = React.useState(false)\n\n React.useEffect(() => {\n if (!isOpen) setIsFullscreen(false)\n }, [isOpen])\n\n const handleClose = React.useCallback(() => {\n setIsFullscreen(false)\n onClose(false)\n }, [onClose])\n\n const panelContent = (\n <EntityPanelContext.Provider value={{ isFullscreen, setIsFullscreen, onClose: handleClose }}>\n {children}\n </EntityPanelContext.Provider>\n )\n\n if (isFullscreen && isOpen) {\n return (\n <div className=\"fixed inset-0 z-50 flex flex-col overflow-hidden bg-background\">\n <div className=\"flex-1 overflow-y-auto px-6 py-6\">{panelContent}</div>\n </div>\n )\n }\n\n return (\n <Sheet open={isOpen} onOpenChange={onClose}>\n <SheetContent\n side=\"right\"\n className=\"w-full sm:w-[500px] sm:max-w-[600px] overflow-hidden p-0 bg-background border-l border-border flex flex-col\"\n showCloseButton={false}\n >\n <SheetHeader className=\"sr-only p-0\">\n <SheetTitle>Entity panel</SheetTitle>\n </SheetHeader>\n <div className=\"flex-1 overflow-y-auto px-6 py-6\">{panelContent}</div>\n </SheetContent>\n </Sheet>\n )\n}\n\nconst EntityPanelContext = React.createContext<{\n isFullscreen: boolean\n setIsFullscreen: (v: boolean) => void\n onClose: () => void\n}>({\n isFullscreen: false,\n setIsFullscreen: () => {},\n onClose: () => {},\n})\n\nfunction useEntityPanel() {\n return React.useContext(EntityPanelContext)\n}\n\n// ---------------------------------------------------------------------------\n// EntityPanelHeader – MeetingDetail-inspired header bar\n// ---------------------------------------------------------------------------\n\nexport function EntityPanelHeader({\n icon,\n title,\n badgeLabel,\n subtitle: _subtitle,\n headerAction,\n}: {\n icon?: React.ReactNode\n title: string\n badgeLabel?: string\n subtitle?: string\n headerAction?: React.ReactNode\n}) {\n const { isFullscreen, setIsFullscreen, onClose } = useEntityPanel()\n\n return (\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {icon ?? <CalendarDays className=\"w-5 h-5 text-muted-foreground shrink-0\" />}\n <h2 className=\"text-lg font-semibold text-foreground truncate\">{title}</h2>\n {badgeLabel && (\n <Badge\n variant=\"outline\"\n className=\"text-blue-600 border-blue-300 dark:border-blue-700 dark:text-blue-400 shadow-none px-2 py-0.5 text-[11px] font-medium shrink-0\"\n >\n {badgeLabel}\n </Badge>\n )}\n </div>\n <div className=\"flex items-center gap-1 shrink-0 ml-4 text-muted-foreground\">\n {headerAction}\n <button\n type=\"button\"\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title=\"Copy Link\"\n >\n <LinkIcon className=\"w-4 h-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setIsFullscreen(!isFullscreen)}\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n {isFullscreen ? (\n <Minimize2 className=\"w-4 h-4\" />\n ) : (\n <Maximize2 className=\"w-4 h-4\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityPanelTabs – Overview/Details tab bar\n// ---------------------------------------------------------------------------\n\nexport function EntityPanelTabs({\n tabs,\n activeTab,\n onTabChange,\n}: {\n tabs: { id: string; label: string }[]\n activeTab: string\n onTabChange: (id: string) => void\n}) {\n return (\n <div className=\"flex items-center gap-6 border-b border-border mb-6\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange(tab.id)}\n className={`pb-3 text-sm font-medium border-b-2 transition-colors ${\n activeTab === tab.id\n ? \"border-primary text-foreground\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityMetadataGrid – key/value metadata rows with icons\n// ---------------------------------------------------------------------------\n\nexport interface EntityMetadataField {\n icon: React.ComponentType<{ className?: string }>\n label: string\n value: React.ReactNode\n}\n\nexport function EntityMetadataGrid({ fields }: { fields: EntityMetadataField[] }) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-[160px_1fr] gap-y-4 gap-x-6 mb-8 text-sm\">\n {fields.map((field, idx) => (\n <React.Fragment key={idx}>\n <div className=\"flex items-center gap-2 text-muted-foreground font-medium\">\n <field.icon className=\"w-4 h-4\" />\n <span>{field.label}</span>\n </div>\n <div className=\"text-foreground\">{field.value}</div>\n </React.Fragment>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntitySection – clean section with title (MeetingDetail-style)\n// ---------------------------------------------------------------------------\n\nexport function EntitySection({\n title,\n children,\n action,\n}: {\n title: string\n children: React.ReactNode\n action?: React.ReactNode\n}) {\n return (\n <section className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {action}\n </div>\n {children}\n </section>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityActivityItem – clean activity row (MeetingDetail-style)\n// ---------------------------------------------------------------------------\n\nexport function EntityActivityItem({\n icon,\n title,\n description,\n date,\n}: {\n icon?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n date?: string\n}) {\n return (\n <div className=\"flex gap-3 text-[13px]\">\n <div className=\"mt-0.5 text-muted-foreground shrink-0\">\n {icon ?? <CalendarDays className=\"w-4 h-4\" />}\n </div>\n <div>\n <p className=\"text-foreground leading-relaxed\">{title}</p>\n {description && <p className=\"text-[11px] text-muted-foreground/70 mt-0.5\">{description}</p>}\n {date && <p className=\"text-[11px] text-muted-foreground/70 mt-0.5\">{date}</p>}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SystemActivity – standalone section for bottom of entity panel\n// ---------------------------------------------------------------------------\n\nexport function SystemActivity() {\n return (\n <EntitySection title=\"System Activity\">\n <div className=\"space-y-4\">\n <EntityActivityItem\n title={<><span className=\"font-medium\">System</span> enriched the lead</>}\n date=\"Today at 10:15 AM\"\n />\n <EntityActivityItem\n icon={<Mail className=\"w-4 h-4\" />}\n title={<><span className=\"font-medium\">Jackie Lee</span> submitted website form</>}\n date=\"Yesterday at 3:22 PM\"\n />\n </div>\n </EntitySection>\n )\n}\n\n// ---------------------------------------------------------------------------\n// PotentialContacts – unchanged from original\n// ---------------------------------------------------------------------------\n\nexport interface EntityPanelBrandIcons {\n linkedin?: string\n gmail?: string\n slack?: string\n gdoc?: string\n}\n\nfunction EntityPanelBrandIcon({\n src,\n alt,\n className,\n fallback,\n}: {\n src?: string\n alt: string\n className: string\n fallback: React.ReactNode\n}) {\n if (!src) {\n return <>{fallback}</>\n }\n\n return <img src={src} alt={alt} className={className} />\n}\n\nexport function PotentialContacts({\n icons,\n}: {\n icons?: Pick<EntityPanelBrandIcons, \"linkedin\" | \"gmail\">\n}) {\n return (\n <div className=\"space-y-3 mb-8\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">Potential Contacts</h3>\n <span className=\"text-xs text-muted-foreground\">3 identified</span>\n </div>\n <div className=\"space-y-0 pt-1\">\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-indigo-50 text-indigo-700 border-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-300 dark:border-indigo-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">Primary</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Jackie Lee</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">VP Finance</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.gmail}\n alt=\"Gmail\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<Mail className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-green-50 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-300 dark:border-green-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">78%</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Marcus Webb</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">CEO</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 last:border-0 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-amber-50 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">65%</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Priya Shah</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">Head of Ops</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.gmail}\n alt=\"Gmail\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<Mail className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// RecentActivity\n// ---------------------------------------------------------------------------\n\nexport type ActivityItem = TimelineEvent\n\nexport function RecentActivity({\n title = \"Recent Activity\",\n count = \"10 total events\",\n filters = [],\n items = [],\n}: {\n title?: string\n count?: string\n filters?: string[]\n items?: TimelineEvent[]\n}) {\n return (\n <div id=\"entity-recent-activity\" className=\"space-y-4 mb-8 scroll-m-20\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {count && <span className=\"text-xs text-muted-foreground\">{count}</span>}\n </div>\n\n {filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {filters.map((filter) => (\n <Button\n key={filter}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs rounded-md shadow-none font-medium border-border text-muted-foreground hover:text-foreground\"\n >\n {filter}\n </Button>\n ))}\n </div>\n )}\n\n <div className=\"relative\">\n <Input\n placeholder=\"Search activity...\"\n className=\"h-9 text-sm bg-background border-border shadow-none\"\n />\n </div>\n\n <div>\n <TimelineActivity events={items} />\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ConnectedApps\n// ---------------------------------------------------------------------------\n\nexport function ConnectedApps({\n icons,\n}: {\n icons?: Pick<EntityPanelBrandIcons, \"slack\" | \"gdoc\">\n}) {\n return (\n <div className=\"space-y-3 mb-8\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">Connected Apps</h3>\n <span className=\"text-xs text-muted-foreground\">3 connected</span>\n </div>\n\n <div className=\"space-y-0 pt-1\">\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <EntityPanelBrandIcon\n src={icons?.slack}\n alt=\"Slack\"\n className=\"w-4 h-4 object-contain\"\n fallback={<MessageCircle className=\"w-4 h-4 text-muted-foreground\" />}\n />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">#lunchclub-acmeco</p>\n <p className=\"text-xs text-muted-foreground/60\">Slack Channel</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <EntityPanelBrandIcon\n src={icons?.gdoc}\n alt=\"Google Docs\"\n className=\"w-4 h-4 object-contain\"\n fallback={<FileText className=\"w-4 h-4 text-muted-foreground\" />}\n />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">Account Strategy Document</p>\n <p className=\"text-xs text-muted-foreground/60\">Google Document</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2.5 border-b border-border/30 last:border-0 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <FileText className=\"w-4 h-4 text-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">Customer Success Playbook</p>\n <p className=\"text-xs text-muted-foreground/60\">Notion Page</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityDetails – updated with MeetingDetail-inspired metadata grid + tabs\n// ---------------------------------------------------------------------------\n\nexport function EntityDetails({ onClose: _onClose }: { onClose?: () => void }) {\n const [activeTab, setActiveTab] = React.useState<\"overview\" | \"details\">(\"overview\")\n const [showMore, setShowMore] = React.useState(false)\n\n const leadFields: EntityMetadataField[] = [\n { icon: Users, label: \"Lead Name\", value: <span className=\"font-medium\">Jackie Lee</span> },\n { icon: Briefcase, label: \"Title\", value: <span className=\"font-medium\">VP Finance</span> },\n { icon: Building2, label: \"Company\", value: <span className=\"font-medium\">CloudKitchen</span> },\n { icon: Mail, label: \"Lead Source\", value: <span className=\"font-medium\">Inbound — Website form</span> },\n {\n icon: ({ className }) => (\n <div className={className}>\n <div className=\"w-3 h-3 rounded-full border-[2px] border-amber-500\" />\n </div>\n ),\n label: \"Lead Status\",\n value: (\n <Badge variant=\"outline\" className=\"text-amber-700 border-amber-200 bg-amber-50 dark:bg-amber-950 dark:text-amber-300 dark:border-amber-800 shadow-none font-medium px-2 py-0 text-[11px]\">\n New — Not Contacted\n </Badge>\n ),\n },\n { icon: Users, label: \"Lead Owner\", value: <span className=\"font-medium\">Sarah Johnson (SDR)</span> },\n {\n icon: Building2,\n label: \"Industry\",\n value: (\n <Badge variant=\"outline\" className=\"text-blue-700 border-blue-200 bg-blue-50 dark:bg-blue-950 dark:text-blue-300 dark:border-blue-800 shadow-none font-medium px-2 py-0 text-[11px]\">\n Food Tech / Logistics\n </Badge>\n ),\n },\n { icon: Users, label: \"Company Size\", value: <span className=\"font-medium\">200-500 employees</span> },\n ]\n\n const visibleFields = showMore ? leadFields : leadFields.slice(0, 6)\n\n return (\n <div className=\"space-y-0\">\n {/* Header */}\n <EntityPanelHeader\n icon={\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center text-sm font-medium text-muted-foreground shrink-0\">\n CK\n </div>\n }\n title=\"CloudKitchen\"\n badgeLabel=\"Lead\"\n subtitle=\"Last enriched: Today at 10:15 AM\"\n />\n\n {/* Tabs */}\n <EntityPanelTabs\n tabs={[\n { id: \"overview\", label: \"Overview\" },\n { id: \"details\", label: \"Details\" },\n ]}\n activeTab={activeTab}\n onTabChange={(id) => setActiveTab(id as \"overview\" | \"details\")}\n />\n\n {activeTab === \"overview\" ? (\n <div className=\"space-y-0\">\n {/* Metadata Grid */}\n <EntityMetadataGrid fields={visibleFields} />\n\n {leadFields.length > 6 && (\n <button\n onClick={() => setShowMore(!showMore)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-8\"\n >\n {showMore ? \"See less\" : \"See more\"}\n {showMore ? <ChevronUp className=\"w-3 h-3\" /> : <ChevronDown className=\"w-3 h-3\" />}\n </button>\n )}\n\n {/* Enrichment as sections */}\n <EntitySection title=\"Company Signals\">\n <ul className=\"space-y-2\">\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Recent funding: $45M Series B, 3 months ago\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">1</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Hiring: 3 finance/treasury roles in last 30 days\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">2</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Market expansion: 8 &rarr; 15 US markets planned\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">3</span>\n </span>\n </li>\n </ul>\n </EntitySection>\n\n <EntitySection title=\"Contact Signals (Jackie Lee)\">\n <ul className=\"space-y-2\">\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Started role: 12 days ago\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Previous: Deel — operations/finance\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n LinkedIn connections to existing customers: 2 detected\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n </ul>\n </EntitySection>\n\n <SourcesToggle />\n </div>\n ) : (\n <div className=\"space-y-0\">\n <EntitySection title=\"Estimated Tech Stack\">\n <div className=\"space-y-2\">\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Banking:</span>\n <span className=\"text-muted-foreground/50 italic\">Unknown</span>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Corporate Cards:</span>\n <span className=\"text-foreground font-medium\">\n Brex <span className=\"text-muted-foreground font-normal\">(from job posting requirements)</span>\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">2</span>\n </span>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Payroll:</span>\n <span className=\"text-foreground font-medium\">\n Gusto <span className=\"text-muted-foreground font-normal\">(from LinkedIn integrations)</span>\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">5</span>\n </span>\n </div>\n </div>\n </EntitySection>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SourcesToggle – collapsible sources list\n// ---------------------------------------------------------------------------\n\nfunction SourcesToggle() {\n const [expanded, setExpanded] = React.useState(false)\n\n const sources = [\n { name: \"Crunchbase\", type: \"Funding data\", lastPull: \"2h ago\" },\n { name: \"LinkedIn\", type: \"People & company\", lastPull: \"12h ago\" },\n { name: \"LinkedIn Jobs\", type: \"Hiring signals\", lastPull: \"1d ago\" },\n { name: \"PR Newswire\", type: \"News & press\", lastPull: \"6h ago\" },\n { name: \"Clearbit\", type: \"Tech stack & firmographics\", lastPull: \"2h ago\" },\n ]\n\n return (\n <div className=\"mb-8\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-1.5 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors\"\n >\n Sources\n <ChevronDown className={`w-3.5 h-3.5 transition-transform duration-200 ${expanded ? \"rotate-180\" : \"\"}`} />\n </button>\n\n {expanded && (\n <div className=\"pt-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\">\n {sources.map((src, idx) => (\n <div key={idx} className=\"flex items-center justify-between text-xs text-muted-foreground py-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-flex items-center justify-center w-4 h-4 text-[9px] font-medium text-muted-foreground/50 border border-border rounded-full\">\n {idx + 1}\n </span>\n <span className=\"font-medium text-foreground\">{src.name}</span>\n <span className=\"text-muted-foreground/60\">&middot;</span>\n <span>{src.type}</span>\n </div>\n <span className=\"text-muted-foreground/50\">{src.lastPull}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/entity-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from \"./sheet\"\nimport { Badge } from \"./badge\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport {\n Plus,\n ExternalLink,\n Mail,\n FileText,\n MessageCircle,\n Briefcase,\n Building2,\n Users,\n X,\n ChevronDown,\n ChevronUp,\n Link as LinkIcon,\n Maximize2,\n Minimize2,\n CalendarDays,\n} from \"lucide-react\"\nimport { TimelineActivity, type TimelineEvent } from \"./timeline-activity\"\n\n// ---------------------------------------------------------------------------\n// EntityPanel – supports both Sheet (side panel) and fullscreen modes\n// ---------------------------------------------------------------------------\n\nexport function EntityPanel({\n isOpen,\n onClose,\n children,\n}: {\n isOpen: boolean\n onClose: (open: boolean) => void\n children?: React.ReactNode\n}) {\n const [isFullscreen, setIsFullscreen] = React.useState(false)\n\n React.useEffect(() => {\n if (!isOpen) setIsFullscreen(false)\n }, [isOpen])\n\n const handleClose = React.useCallback(() => {\n setIsFullscreen(false)\n onClose(false)\n }, [onClose])\n\n const panelContent = (\n <EntityPanelContext.Provider value={{ isFullscreen, setIsFullscreen, onClose: handleClose }}>\n {children}\n </EntityPanelContext.Provider>\n )\n\n if (isFullscreen && isOpen) {\n return (\n <div className=\"fixed inset-0 z-50 flex flex-col overflow-hidden bg-background\">\n <div className=\"flex-1 overflow-y-auto px-5 py-5\">{panelContent}</div>\n </div>\n )\n }\n\n return (\n <Sheet open={isOpen} onOpenChange={onClose}>\n <SheetContent\n side=\"right\"\n className=\"w-full sm:w-[500px] sm:max-w-[600px] overflow-hidden p-0 bg-background border-l border-border flex flex-col\"\n showCloseButton={false}\n >\n <SheetHeader className=\"sr-only p-0\">\n <SheetTitle>Entity panel</SheetTitle>\n </SheetHeader>\n <div className=\"flex-1 overflow-y-auto px-5 py-5\">{panelContent}</div>\n </SheetContent>\n </Sheet>\n )\n}\n\nconst EntityPanelContext = React.createContext<{\n isFullscreen: boolean\n setIsFullscreen: (v: boolean) => void\n onClose: () => void\n}>({\n isFullscreen: false,\n setIsFullscreen: () => {},\n onClose: () => {},\n})\n\nfunction useEntityPanel() {\n return React.useContext(EntityPanelContext)\n}\n\n// ---------------------------------------------------------------------------\n// EntityPanelHeader – MeetingDetail-inspired header bar\n// ---------------------------------------------------------------------------\n\nexport function EntityPanelHeader({\n icon,\n title,\n badgeLabel,\n subtitle: _subtitle,\n headerAction,\n}: {\n icon?: React.ReactNode\n title: string\n badgeLabel?: string\n subtitle?: string\n headerAction?: React.ReactNode\n}) {\n const { isFullscreen, setIsFullscreen, onClose } = useEntityPanel()\n\n return (\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2 min-w-0\">\n {icon ?? <CalendarDays className=\"w-5 h-5 text-muted-foreground shrink-0\" />}\n <h2 className=\"text-[16px] font-semibold text-foreground truncate\">{title}</h2>\n {badgeLabel && (\n <Badge\n variant=\"outline\"\n className=\"text-blue-600 border-blue-300 dark:border-blue-700 dark:text-blue-400 shadow-none px-2 py-0.5 text-[11px] font-medium shrink-0\"\n >\n {badgeLabel}\n </Badge>\n )}\n </div>\n <div className=\"flex items-center gap-1 shrink-0 ml-4 text-muted-foreground\">\n {headerAction}\n <button\n type=\"button\"\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title=\"Copy Link\"\n >\n <LinkIcon className=\"w-4 h-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setIsFullscreen(!isFullscreen)}\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n {isFullscreen ? (\n <Minimize2 className=\"w-4 h-4\" />\n ) : (\n <Maximize2 className=\"w-4 h-4\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1.5 rounded-md hover:bg-secondary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityPanelTabs – Overview/Details tab bar\n// ---------------------------------------------------------------------------\n\nexport function EntityPanelTabs({\n tabs,\n activeTab,\n onTabChange,\n}: {\n tabs: { id: string; label: string }[]\n activeTab: string\n onTabChange: (id: string) => void\n}) {\n return (\n <div className=\"flex items-center gap-5 border-b border-border mb-4\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange(tab.id)}\n className={`pb-2.5 text-[13px] font-medium border-b-2 transition-colors ${\n activeTab === tab.id\n ? \"border-primary text-foreground\"\n : \"border-transparent text-muted-foreground hover:text-foreground\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityMetadataGrid – key/value metadata rows with icons\n// ---------------------------------------------------------------------------\n\nexport interface EntityMetadataField {\n icon: React.ComponentType<{ className?: string }>\n label: string\n value: React.ReactNode\n}\n\nexport function EntityMetadataGrid({ fields }: { fields: EntityMetadataField[] }) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-[140px_1fr] gap-y-2.5 gap-x-4 mb-6 text-sm\">\n {fields.map((field, idx) => (\n <React.Fragment key={idx}>\n <div className=\"flex items-center gap-1.5 text-muted-foreground text-[13px]\">\n <field.icon className=\"w-3.5 h-3.5 shrink-0\" />\n <span>{field.label}</span>\n </div>\n <div className=\"text-foreground\">{field.value}</div>\n </React.Fragment>\n ))}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntitySection – clean section with title (MeetingDetail-style)\n// ---------------------------------------------------------------------------\n\nexport function EntitySection({\n title,\n children,\n action,\n}: {\n title: string\n children: React.ReactNode\n action?: React.ReactNode\n}) {\n return (\n <section className=\"mb-6\">\n <div className=\"flex items-center justify-between mb-2.5\">\n <h3 className=\"text-[13px] font-semibold text-foreground\">{title}</h3>\n {action}\n </div>\n {children}\n </section>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityActivityItem – clean activity row (MeetingDetail-style)\n// ---------------------------------------------------------------------------\n\nexport function EntityActivityItem({\n icon,\n title,\n description,\n date,\n}: {\n icon?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n date?: string\n}) {\n return (\n <div className=\"flex gap-3 text-[13px]\">\n <div className=\"mt-0.5 text-muted-foreground shrink-0\">\n {icon ?? <CalendarDays className=\"w-4 h-4\" />}\n </div>\n <div>\n <p className=\"text-foreground leading-relaxed\">{title}</p>\n {description && <p className=\"text-[11px] text-muted-foreground/70 mt-0.5\">{description}</p>}\n {date && <p className=\"text-[11px] text-muted-foreground/70 mt-0.5\">{date}</p>}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SystemActivity – standalone section for bottom of entity panel\n// ---------------------------------------------------------------------------\n\nexport function SystemActivity() {\n return (\n <EntitySection title=\"System Activity\">\n <div className=\"space-y-4\">\n <EntityActivityItem\n title={<><span className=\"font-medium\">System</span> enriched the lead</>}\n date=\"Today at 10:15 AM\"\n />\n <EntityActivityItem\n icon={<Mail className=\"w-4 h-4\" />}\n title={<><span className=\"font-medium\">Jackie Lee</span> submitted website form</>}\n date=\"Yesterday at 3:22 PM\"\n />\n </div>\n </EntitySection>\n )\n}\n\n// ---------------------------------------------------------------------------\n// PotentialContacts – unchanged from original\n// ---------------------------------------------------------------------------\n\nexport interface EntityPanelBrandIcons {\n linkedin?: string\n gmail?: string\n slack?: string\n gdoc?: string\n}\n\nfunction EntityPanelBrandIcon({\n src,\n alt,\n className,\n fallback,\n}: {\n src?: string\n alt: string\n className: string\n fallback: React.ReactNode\n}) {\n if (!src) {\n return <>{fallback}</>\n }\n\n return <img src={src} alt={alt} className={className} />\n}\n\nexport function PotentialContacts({\n icons,\n}: {\n icons?: Pick<EntityPanelBrandIcons, \"linkedin\" | \"gmail\">\n}) {\n return (\n <div className=\"space-y-2.5 mb-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-[13px] font-semibold text-foreground\">Potential Contacts</h3>\n <span className=\"text-xs text-muted-foreground\">3 identified</span>\n </div>\n <div className=\"space-y-0\">\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-indigo-50 text-indigo-700 border-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-300 dark:border-indigo-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">Primary</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Jackie Lee</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">VP Finance</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.gmail}\n alt=\"Gmail\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<Mail className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-green-50 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-300 dark:border-green-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">78%</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Marcus Webb</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">CEO</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 last:border-0 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-2.5 min-w-0\">\n <Badge variant=\"outline\" className=\"bg-amber-50 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800 shadow-none px-2 py-0 text-[11px] font-medium shrink-0\">65%</Badge>\n <span className=\"font-medium text-sm text-foreground truncate\">Priya Shah</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">Head of Ops</span>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.linkedin}\n alt=\"LinkedIn\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<LinkIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <button className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\">\n <EntityPanelBrandIcon\n src={icons?.gmail}\n alt=\"Gmail\"\n className=\"w-3.5 h-3.5 object-contain\"\n fallback={<Mail className=\"w-3.5 h-3.5 text-muted-foreground\" />}\n />\n </button>\n <Button size=\"sm\" className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\">\n <Plus className=\"w-3 h-3 mr-1\" /> Add to SF\n </Button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// RecentActivity\n// ---------------------------------------------------------------------------\n\nexport type ActivityItem = TimelineEvent\n\nexport function RecentActivity({\n title = \"Recent Activity\",\n count = \"10 total events\",\n filters = [],\n items = [],\n}: {\n title?: string\n count?: string\n filters?: string[]\n items?: TimelineEvent[]\n}) {\n return (\n <div id=\"entity-recent-activity\" className=\"space-y-3 mb-6 scroll-m-20\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-[13px] font-semibold text-foreground\">{title}</h3>\n {count && <span className=\"text-xs text-muted-foreground\">{count}</span>}\n </div>\n\n {filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {filters.map((filter) => (\n <Button\n key={filter}\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs rounded-md shadow-none font-medium border-border text-muted-foreground hover:text-foreground\"\n >\n {filter}\n </Button>\n ))}\n </div>\n )}\n\n <div className=\"relative\">\n <Input\n placeholder=\"Search activity...\"\n className=\"h-9 text-sm bg-background border-border shadow-none\"\n />\n </div>\n\n <div>\n <TimelineActivity events={items} />\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ConnectedApps\n// ---------------------------------------------------------------------------\n\nexport function ConnectedApps({\n icons,\n}: {\n icons?: Pick<EntityPanelBrandIcons, \"slack\" | \"gdoc\">\n}) {\n return (\n <div className=\"space-y-2.5 mb-6\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-[13px] font-semibold text-foreground\">Connected Apps</h3>\n <span className=\"text-xs text-muted-foreground\">3 connected</span>\n </div>\n\n <div className=\"space-y-0\">\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <EntityPanelBrandIcon\n src={icons?.slack}\n alt=\"Slack\"\n className=\"w-4 h-4 object-contain\"\n fallback={<MessageCircle className=\"w-4 h-4 text-muted-foreground\" />}\n />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">#lunchclub-acmeco</p>\n <p className=\"text-xs text-muted-foreground/60\">Slack Channel</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <EntityPanelBrandIcon\n src={icons?.gdoc}\n alt=\"Google Docs\"\n className=\"w-4 h-4 object-contain\"\n fallback={<FileText className=\"w-4 h-4 text-muted-foreground\" />}\n />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">Account Strategy Document</p>\n <p className=\"text-xs text-muted-foreground/60\">Google Document</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3 group py-2 border-b border-border/30 last:border-0 hover:bg-muted/20 -mx-2 px-2 rounded-sm transition-colors\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0\">\n <FileText className=\"w-4 h-4 text-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-sm text-foreground leading-snug truncate\">Customer Success Playbook</p>\n <p className=\"text-xs text-muted-foreground/60\">Notion Page</p>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <ExternalLink className=\"w-3 h-3 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity\" />\n <span className=\"text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground\">Open</span>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// EntityDetails – updated with MeetingDetail-inspired metadata grid + tabs\n// ---------------------------------------------------------------------------\n\nexport function EntityDetails({ onClose: _onClose }: { onClose?: () => void }) {\n const [activeTab, setActiveTab] = React.useState<\"overview\" | \"details\">(\"overview\")\n const [showMore, setShowMore] = React.useState(false)\n\n const leadFields: EntityMetadataField[] = [\n { icon: Users, label: \"Lead Name\", value: <span className=\"font-medium\">Jackie Lee</span> },\n { icon: Briefcase, label: \"Title\", value: <span className=\"font-medium\">VP Finance</span> },\n { icon: Building2, label: \"Company\", value: <span className=\"font-medium\">CloudKitchen</span> },\n { icon: Mail, label: \"Lead Source\", value: <span className=\"font-medium\">Inbound — Website form</span> },\n {\n icon: ({ className }) => (\n <div className={className}>\n <div className=\"w-3 h-3 rounded-full border-[2px] border-amber-500\" />\n </div>\n ),\n label: \"Lead Status\",\n value: (\n <Badge variant=\"outline\" className=\"text-amber-700 border-amber-200 bg-amber-50 dark:bg-amber-950 dark:text-amber-300 dark:border-amber-800 shadow-none font-medium px-2 py-0 text-[11px]\">\n New — Not Contacted\n </Badge>\n ),\n },\n { icon: Users, label: \"Lead Owner\", value: <span className=\"font-medium\">Sarah Johnson (SDR)</span> },\n {\n icon: Building2,\n label: \"Industry\",\n value: (\n <Badge variant=\"outline\" className=\"text-blue-700 border-blue-200 bg-blue-50 dark:bg-blue-950 dark:text-blue-300 dark:border-blue-800 shadow-none font-medium px-2 py-0 text-[11px]\">\n Food Tech / Logistics\n </Badge>\n ),\n },\n { icon: Users, label: \"Company Size\", value: <span className=\"font-medium\">200-500 employees</span> },\n ]\n\n const visibleFields = showMore ? leadFields : leadFields.slice(0, 6)\n\n return (\n <div className=\"space-y-0\">\n {/* Header */}\n <EntityPanelHeader\n icon={\n <div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center text-sm font-medium text-muted-foreground shrink-0\">\n CK\n </div>\n }\n title=\"CloudKitchen\"\n badgeLabel=\"Lead\"\n subtitle=\"Last enriched: Today at 10:15 AM\"\n />\n\n {/* Tabs */}\n <EntityPanelTabs\n tabs={[\n { id: \"overview\", label: \"Overview\" },\n { id: \"details\", label: \"Details\" },\n ]}\n activeTab={activeTab}\n onTabChange={(id) => setActiveTab(id as \"overview\" | \"details\")}\n />\n\n {activeTab === \"overview\" ? (\n <div className=\"space-y-0\">\n {/* Metadata Grid */}\n <EntityMetadataGrid fields={visibleFields} />\n\n {leadFields.length > 6 && (\n <button\n onClick={() => setShowMore(!showMore)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-6\"\n >\n {showMore ? \"See less\" : \"See more\"}\n {showMore ? <ChevronUp className=\"w-3 h-3\" /> : <ChevronDown className=\"w-3 h-3\" />}\n </button>\n )}\n\n {/* Enrichment as sections */}\n <EntitySection title=\"Company Signals\">\n <ul className=\"space-y-2\">\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Recent funding: $45M Series B, 3 months ago\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">1</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Hiring: 3 finance/treasury roles in last 30 days\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">2</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Market expansion: 8 &rarr; 15 US markets planned\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">3</span>\n </span>\n </li>\n </ul>\n </EntitySection>\n\n <EntitySection title=\"Contact Signals (Jackie Lee)\">\n <ul className=\"space-y-2\">\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Started role: 12 days ago\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n Previous: Deel — operations/finance\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n <li className=\"flex items-start gap-2 text-sm text-muted-foreground\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span>\n LinkedIn connections to existing customers: 2 detected\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">4</span>\n </span>\n </li>\n </ul>\n </EntitySection>\n\n <SourcesToggle />\n </div>\n ) : (\n <div className=\"space-y-0\">\n <EntitySection title=\"Estimated Tech Stack\">\n <div className=\"space-y-2\">\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Banking:</span>\n <span className=\"text-muted-foreground/50 italic\">Unknown</span>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Corporate Cards:</span>\n <span className=\"text-foreground font-medium\">\n Brex <span className=\"text-muted-foreground font-normal\">(from job posting requirements)</span>\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">2</span>\n </span>\n </div>\n <div className=\"flex items-start gap-2 text-sm\">\n <span className=\"text-muted-foreground/50 mt-1 shrink-0\">&bull;</span>\n <span className=\"text-muted-foreground min-w-[100px] shrink-0\">Payroll:</span>\n <span className=\"text-foreground font-medium\">\n Gusto <span className=\"text-muted-foreground font-normal\">(from LinkedIn integrations)</span>\n <span className=\"inline-flex items-center justify-center w-4 h-4 ml-1.5 align-text-top text-[9px] font-medium text-muted-foreground bg-muted/30 border border-border/50 rounded-full\">5</span>\n </span>\n </div>\n </div>\n </EntitySection>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// SourcesToggle – collapsible sources list\n// ---------------------------------------------------------------------------\n\nfunction SourcesToggle() {\n const [expanded, setExpanded] = React.useState(false)\n\n const sources = [\n { name: \"Crunchbase\", type: \"Funding data\", lastPull: \"2h ago\" },\n { name: \"LinkedIn\", type: \"People & company\", lastPull: \"12h ago\" },\n { name: \"LinkedIn Jobs\", type: \"Hiring signals\", lastPull: \"1d ago\" },\n { name: \"PR Newswire\", type: \"News & press\", lastPull: \"6h ago\" },\n { name: \"Clearbit\", type: \"Tech stack & firmographics\", lastPull: \"2h ago\" },\n ]\n\n return (\n <div className=\"mb-6\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-1.5 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors\"\n >\n Sources\n <ChevronDown className={`w-3.5 h-3.5 transition-transform duration-200 ${expanded ? \"rotate-180\" : \"\"}`} />\n </button>\n\n {expanded && (\n <div className=\"pt-3 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200\">\n {sources.map((src, idx) => (\n <div key={idx} className=\"flex items-center justify-between text-xs text-muted-foreground py-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-flex items-center justify-center w-4 h-4 text-[9px] font-medium text-muted-foreground/50 border border-border rounded-full\">\n {idx + 1}\n </span>\n <span className=\"font-medium text-foreground\">{src.name}</span>\n <span className=\"text-muted-foreground/60\">&middot;</span>\n <span>{src.type}</span>\n </div>\n <span className=\"text-muted-foreground/50\">{src.lastPull}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
@@ -11,6 +11,8 @@ interface SidebarNavItem {
11
11
  }
12
12
  interface SidebarNavSection {
13
13
  title?: string;
14
+ /** Optional icon shown to the left of the section title (expanded sidebars only). */
15
+ titleIconUrl?: string;
14
16
  items: SidebarNavItem[];
15
17
  moreItems?: SidebarNavItem[];
16
18
  }
@@ -234,7 +234,18 @@ function NavSection({
234
234
  onClick: () => setIsExpanded(!isExpanded),
235
235
  className: "flex w-full items-center justify-between mb-1 px-3 group cursor-pointer",
236
236
  children: [
237
- /* @__PURE__ */ jsx("span", { className: "text-xs font-bold tracking-widest text-sidebar-foreground/50 uppercase", children: section.title }),
237
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5 min-w-0", children: [
238
+ section.titleIconUrl && /* @__PURE__ */ jsx(
239
+ "img",
240
+ {
241
+ src: section.titleIconUrl,
242
+ alt: "",
243
+ "aria-hidden": "true",
244
+ className: "h-3.5 w-3.5 shrink-0 object-contain opacity-70"
245
+ }
246
+ ),
247
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-bold tracking-widest text-sidebar-foreground/50 uppercase truncate", children: section.title })
248
+ ] }),
238
249
  /* @__PURE__ */ jsx(
239
250
  ChevronDown,
240
251
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/quick-action-sidebar-nav.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Activity,\n BarChart2,\n Building,\n ChevronDown,\n Code,\n Inbox,\n Link as LinkIcon,\n LogOut,\n MessageSquare,\n MoreHorizontal,\n MoreVertical,\n PanelLeftClose,\n PanelLeftOpen,\n Plus,\n Search,\n Settings,\n Users,\n} from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Avatar, AvatarFallback } from \"./avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\nimport { QuickActionModal, type QuickActionTaskDraft, type QuickActionTemplate } from \"./quick-action-modal\"\n\nexport interface SidebarNavItem {\n id: string\n label: string\n icon: React.ComponentType<{ className?: string }>\n children?: SidebarNavItem[]\n}\n\nexport interface SidebarNavSection {\n title?: string\n items: SidebarNavItem[]\n moreItems?: SidebarNavItem[]\n}\n\nexport interface SidebarUserProfile {\n name: string\n email: string\n initials?: string\n}\n\nexport interface UserMenuItem {\n id: string\n label: string\n icon: React.ComponentType<{ className?: string }>\n destructive?: boolean\n}\n\nexport type ActiveVariant = \"default\" | \"gradient\"\n\ninterface QuickActionSidebarNavProps extends React.ComponentProps<\"aside\"> {\n brandLabel?: string\n brandSubtitle?: string\n brandImage?: string\n hideQuickAction?: boolean\n navSections?: SidebarNavSection[]\n activeItemId?: string\n activeVariant?: ActiveVariant\n onNavigate?: (itemId: string) => void\n user?: SidebarUserProfile\n userMenuItems?: UserMenuItem[]\n onUserMenuAction?: (itemId: string) => void\n onCreateTask?: (draft: QuickActionTaskDraft) => void\n defaultCollapsed?: boolean\n quickActionTemplates?: QuickActionTemplate[]\n quickActionTitle?: string\n quickActionDescription?: string\n}\n\nconst DEFAULT_NAV_SECTIONS: SidebarNavSection[] = [\n {\n items: [\n { id: \"home\", label: \"Home\", icon: Inbox },\n { id: \"inbox\", label: \"Inbox\", icon: Inbox },\n ],\n },\n {\n title: \"Focus\",\n items: [\n { id: \"inbox\", label: \"Unibox\", icon: Inbox },\n { id: \"accounts\", label: \"My Accounts\", icon: Building },\n { id: \"activity\", label: \"Activity\", icon: Activity },\n { id: \"dashboard\", label: \"Insights\", icon: BarChart2 },\n ],\n moreItems: [\n { id: \"search\", label: \"Search\", icon: Search },\n ],\n },\n {\n title: \"Assistant\",\n items: [\n { id: \"new-chat\", label: \"New chat\", icon: Plus },\n { id: \"chats\", label: \"Chats\", icon: MessageSquare },\n ],\n },\n {\n title: \"Your Teams\",\n items: [\n { id: \"team-a\", label: \"Team A\", icon: Users },\n { id: \"team-b\", label: \"Team B\", icon: Users },\n ],\n moreItems: [\n { id: \"more-teams\", label: \"More\", icon: MoreHorizontal },\n ],\n },\n]\n\nconst DEFAULT_USER: SidebarUserProfile = {\n name: \"John Doe\",\n email: \"jdoe@acmeco.com\",\n initials: \"JD\",\n}\n\nconst DEFAULT_USER_MENU: UserMenuItem[] = [\n { id: \"settings\", label: \"Settings\", icon: Settings },\n { id: \"dev\", label: \"Dev\", icon: Code },\n { id: \"integrations\", label: \"Integrations\", icon: LinkIcon },\n { id: \"sign-out\", label: \"Sign out\", icon: LogOut, destructive: true },\n]\n\nfunction NavItemRow({\n item,\n isActive,\n isCollapsed,\n activeVariant = \"default\",\n onClick,\n onNavigate,\n activeItemId,\n expandedItems,\n onToggleExpand,\n depth = 0,\n}: {\n item: SidebarNavItem\n isActive: boolean\n isCollapsed: boolean\n activeVariant?: ActiveVariant\n onClick?: () => void\n onNavigate?: (id: string) => void\n activeItemId?: string\n expandedItems?: Record<string, boolean>\n onToggleExpand?: (itemId: string) => void\n depth?: number\n}) {\n const activeClasses =\n activeVariant === \"gradient\"\n ? \"bg-gradient-to-r from-primary/10 to-transparent text-primary\"\n : \"bg-sidebar-accent text-sidebar-accent-foreground\"\n\n const iconActiveClasses =\n activeVariant === \"gradient\" ? \"text-primary\" : \"\"\n\n const hasChildren = item.children && item.children.length > 0\n const isExpanded = expandedItems?.[item.id] ?? false\n\n const content = (\n <div>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex flex-1 items-center gap-3 rounded-lg text-sm font-medium transition-colors\",\n isCollapsed ? \"justify-center p-2\" : \"px-3 py-2\",\n isActive\n ? activeClasses\n : \"text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent\",\n )}\n style={depth > 0 && !isCollapsed ? { paddingLeft: `${0.75 + depth * 1}rem` } : undefined}\n >\n <item.icon className={cn(\"shrink-0\", isCollapsed ? \"w-5 h-5\" : \"w-4 h-4\", isActive && iconActiveClasses)} />\n {!isCollapsed && <span className=\"flex-1 truncate text-left\">{item.label}</span>}\n </button>\n {hasChildren && !isCollapsed && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onToggleExpand?.(item.id)\n }}\n className=\"p-1 mr-1 rounded text-sidebar-foreground/40 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors\"\n >\n <ChevronDown\n className={cn(\n \"w-3.5 h-3.5 transition-transform duration-200\",\n !isExpanded && \"-rotate-90\",\n )}\n />\n </button>\n )}\n </div>\n {hasChildren && !isCollapsed && isExpanded && (\n <div className=\"space-y-0.5\">\n {item.children!.map((child) => (\n <NavItemRow\n key={child.id}\n item={child}\n isActive={activeItemId === child.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n activeItemId={activeItemId}\n onClick={() => onNavigate?.(child.id)}\n onNavigate={onNavigate}\n expandedItems={expandedItems}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n )\n\n if (isCollapsed) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg text-sm font-medium transition-colors\",\n \"justify-center p-2\",\n isActive\n ? activeClasses\n : \"text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent\",\n )}\n >\n <item.icon className={cn(\"shrink-0 w-5 h-5\", isActive && iconActiveClasses)} />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{item.label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return content\n}\n\nfunction NavSection({\n section,\n activeItemId,\n isCollapsed,\n activeVariant = \"default\",\n onNavigate,\n}: {\n section: SidebarNavSection\n activeItemId?: string\n isCollapsed: boolean\n activeVariant?: ActiveVariant\n onNavigate?: (id: string) => void\n}) {\n const [isExpanded, setIsExpanded] = React.useState(true)\n const [expandedItems, setExpandedItems] = React.useState<Record<string, boolean>>({})\n const hasTitle = !isCollapsed && section.title\n\n const handleToggleExpand = React.useCallback((itemId: string) => {\n setExpandedItems((prev) => ({ ...prev, [itemId]: !prev[itemId] }))\n }, [])\n\n return (\n <div className=\"px-3 py-2\">\n {hasTitle && (\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex w-full items-center justify-between mb-1 px-3 group cursor-pointer\"\n >\n <span className=\"text-xs font-bold tracking-widest text-sidebar-foreground/50 uppercase\">\n {section.title}\n </span>\n <ChevronDown\n className={cn(\n \"w-3 h-3 text-sidebar-foreground/40 transition-transform duration-200\",\n !isExpanded && \"-rotate-90\",\n )}\n />\n </button>\n )}\n {(isExpanded || isCollapsed || !section.title) && (\n <div className=\"space-y-0.5\">\n {section.items.map((item) => (\n <NavItemRow\n key={item.id}\n item={item}\n isActive={activeItemId === item.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n activeItemId={activeItemId}\n onClick={() => onNavigate?.(item.id)}\n onNavigate={onNavigate}\n expandedItems={expandedItems}\n onToggleExpand={handleToggleExpand}\n />\n ))}\n {!isCollapsed && section.moreItems && section.moreItems.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"flex items-center gap-3 w-full px-3 py-2 rounded-lg text-sm font-medium text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors outline-none\">\n <MoreHorizontal className=\"shrink-0 w-4 h-4\" />\n <span className=\"flex-1 text-left\">More</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" side=\"bottom\" className=\"w-48\">\n {section.moreItems.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={() => onNavigate?.(item.id)}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-2 w-4 h-4 text-muted-foreground\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {isCollapsed &&\n section.moreItems?.map((item) => (\n <NavItemRow\n key={item.id}\n item={item}\n isActive={activeItemId === item.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n onClick={() => onNavigate?.(item.id)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport function QuickActionSidebarNav({\n className,\n brandLabel = \"ACME CO\",\n brandSubtitle = \"Placeholder\",\n brandImage,\n hideQuickAction,\n navSections = DEFAULT_NAV_SECTIONS,\n activeItemId = \"inbox\",\n activeVariant = \"default\",\n onNavigate,\n user = DEFAULT_USER,\n userMenuItems = DEFAULT_USER_MENU,\n onUserMenuAction,\n onCreateTask,\n defaultCollapsed = false,\n quickActionTemplates,\n quickActionTitle,\n quickActionDescription,\n ...props\n}: QuickActionSidebarNavProps) {\n const [isQuickActionOpen, setIsQuickActionOpen] = React.useState(false)\n const [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed)\n\n const initials =\n user.initials ??\n (user.name\n ? user.name.charAt(0).toUpperCase()\n : user.email\n ? user.email.charAt(0).toUpperCase()\n : \"U\")\n\n return (\n <TooltipProvider delayDuration={0}>\n <aside\n className={cn(\n \"flex h-full flex-col overflow-hidden bg-sidebar text-sidebar-foreground border-r border-sidebar-border transition-all duration-200\",\n isCollapsed ? \"w-16\" : \"w-64\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n <div\n className={cn(\n \"relative flex shrink-0 items-center border-b border-sidebar-border\",\n isCollapsed ? \"justify-center h-16 px-2\" : \"px-6 py-4\",\n )}\n >\n {!isCollapsed && (\n <div className=\"flex items-center gap-2.5 pr-8\">\n {brandImage ? (\n <img src={brandImage} alt={brandLabel} className=\"h-10 object-contain\" />\n ) : (\n <>\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-sidebar-foreground text-sidebar\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-3.5 h-3.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-bold tracking-tight\">\n {brandLabel}\n </span>\n {brandSubtitle && (\n <span className=\"text-[10px] font-medium text-sidebar-foreground/50 uppercase tracking-wide\">\n {brandSubtitle}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(!isCollapsed)}\n className={cn(\n \"p-1.5 rounded-md text-sidebar-foreground/50 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors\",\n isCollapsed ? \"\" : \"absolute right-5 top-1/2 -translate-y-1/2\",\n )}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n {isCollapsed ? (\n <PanelLeftOpen className=\"w-4 h-4\" />\n ) : (\n <PanelLeftClose className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* Navigation */}\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden py-3 space-y-1\">\n {navSections.map((section, idx) => (\n <React.Fragment key={section.title ?? idx}>\n {idx > 0 && <div className=\"mx-4 my-2 border-t border-sidebar-border\" />}\n <NavSection\n section={section}\n activeItemId={activeItemId}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n onNavigate={onNavigate}\n />\n </React.Fragment>\n ))}\n </div>\n\n {!hideQuickAction && (\n <div className={cn(\"px-3 pb-3\", isCollapsed ? \"hidden\" : \"block\")}>\n <button\n type=\"button\"\n onClick={() => setIsQuickActionOpen(true)}\n className=\"w-full flex items-center justify-between px-3 py-2.5 rounded-lg border border-sidebar-border bg-sidebar-primary text-sidebar-primary-foreground hover:bg-sidebar-primary/90 transition-colors group shadow-sm\"\n >\n <div className=\"flex items-center gap-2\">\n <svg\n className=\"w-4 h-4 text-sidebar-primary-foreground/80 group-hover:text-sidebar-primary-foreground transition-colors\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n <span className=\"text-sm font-medium\">Quick Action</span>\n </div>\n <kbd className=\"hidden sm:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[11px] font-mono rounded bg-sidebar-primary-foreground/20 text-sidebar-primary-foreground\">\n <span className=\"text-xs\">&#8984;</span>K\n </kbd>\n </button>\n </div>\n )}\n\n {isCollapsed && !hideQuickAction && (\n <div className=\"px-2 pb-3\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setIsQuickActionOpen(true)}\n className=\"flex w-full items-center justify-center rounded-lg bg-sidebar-primary p-2.5 text-sidebar-primary-foreground shadow-sm transition-colors hover:bg-sidebar-primary/90\"\n title=\"Quick Action (⌘K)\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">Quick Action (⌘K)</TooltipContent>\n </Tooltip>\n </div>\n )}\n\n {/* User Profile Footer */}\n <div className=\"p-3 border-t border-sidebar-border shrink-0\">\n <DropdownMenu>\n <DropdownMenuTrigger\n className={cn(\n \"flex items-center w-full rounded-lg hover:bg-sidebar-accent transition-colors outline-none\",\n isCollapsed ? \"justify-center p-1\" : \"p-2 gap-3\",\n )}\n >\n <Avatar className=\"h-8 w-8 rounded-md\">\n <AvatarFallback className=\"rounded-md bg-primary/10 text-primary text-xs font-medium\">\n {initials}\n </AvatarFallback>\n </Avatar>\n\n {!isCollapsed && (\n <div className=\"flex flex-col items-start flex-1 truncate\">\n <span className=\"text-sm font-medium leading-none truncate\">\n {user.name}\n </span>\n <span className=\"text-xs text-sidebar-foreground/50 truncate mt-0.5\">\n {user.email}\n </span>\n </div>\n )}\n\n {!isCollapsed && (\n <MoreVertical className=\"w-4 h-4 text-sidebar-foreground/50 shrink-0\" />\n )}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent align=\"end\" side=\"right\" sideOffset={8} className=\"w-56\">\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"flex flex-col space-y-1\">\n <p className=\"text-sm font-medium leading-none\">{user.name}</p>\n <p className=\"text-xs leading-none text-muted-foreground\">{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, idx) => {\n const showSepBefore = item.destructive && idx > 0\n return (\n <React.Fragment key={item.id}>\n {showSepBefore && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => onUserMenuAction?.(item.id)}\n className={cn(\n \"cursor-pointer\",\n item.destructive && \"text-destructive focus:text-destructive\",\n )}\n >\n <item.icon className=\"mr-2 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </aside>\n\n {!hideQuickAction && (\n <QuickActionModal\n open={isQuickActionOpen}\n onOpenChange={setIsQuickActionOpen}\n onCreateTask={onCreateTask}\n templates={quickActionTemplates}\n title={quickActionTitle}\n description={quickActionDescription}\n />\n )}\n </TooltipProvider>\n )\n}\n"],"mappings":"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","names":["_a"]}
1
+ {"version":3,"sources":["../../src/components/quick-action-sidebar-nav.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Activity,\n BarChart2,\n Building,\n ChevronDown,\n Code,\n Inbox,\n Link as LinkIcon,\n LogOut,\n MessageSquare,\n MoreHorizontal,\n MoreVertical,\n PanelLeftClose,\n PanelLeftOpen,\n Plus,\n Search,\n Settings,\n Users,\n} from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { Avatar, AvatarFallback } from \"./avatar\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\nimport { QuickActionModal, type QuickActionTaskDraft, type QuickActionTemplate } from \"./quick-action-modal\"\n\nexport interface SidebarNavItem {\n id: string\n label: string\n icon: React.ComponentType<{ className?: string }>\n children?: SidebarNavItem[]\n}\n\nexport interface SidebarNavSection {\n title?: string\n /** Optional icon shown to the left of the section title (expanded sidebars only). */\n titleIconUrl?: string\n items: SidebarNavItem[]\n moreItems?: SidebarNavItem[]\n}\n\nexport interface SidebarUserProfile {\n name: string\n email: string\n initials?: string\n}\n\nexport interface UserMenuItem {\n id: string\n label: string\n icon: React.ComponentType<{ className?: string }>\n destructive?: boolean\n}\n\nexport type ActiveVariant = \"default\" | \"gradient\"\n\ninterface QuickActionSidebarNavProps extends React.ComponentProps<\"aside\"> {\n brandLabel?: string\n brandSubtitle?: string\n brandImage?: string\n hideQuickAction?: boolean\n navSections?: SidebarNavSection[]\n activeItemId?: string\n activeVariant?: ActiveVariant\n onNavigate?: (itemId: string) => void\n user?: SidebarUserProfile\n userMenuItems?: UserMenuItem[]\n onUserMenuAction?: (itemId: string) => void\n onCreateTask?: (draft: QuickActionTaskDraft) => void\n defaultCollapsed?: boolean\n quickActionTemplates?: QuickActionTemplate[]\n quickActionTitle?: string\n quickActionDescription?: string\n}\n\nconst DEFAULT_NAV_SECTIONS: SidebarNavSection[] = [\n {\n items: [\n { id: \"home\", label: \"Home\", icon: Inbox },\n { id: \"inbox\", label: \"Inbox\", icon: Inbox },\n ],\n },\n {\n title: \"Focus\",\n items: [\n { id: \"inbox\", label: \"Unibox\", icon: Inbox },\n { id: \"accounts\", label: \"My Accounts\", icon: Building },\n { id: \"activity\", label: \"Activity\", icon: Activity },\n { id: \"dashboard\", label: \"Insights\", icon: BarChart2 },\n ],\n moreItems: [\n { id: \"search\", label: \"Search\", icon: Search },\n ],\n },\n {\n title: \"Assistant\",\n items: [\n { id: \"new-chat\", label: \"New chat\", icon: Plus },\n { id: \"chats\", label: \"Chats\", icon: MessageSquare },\n ],\n },\n {\n title: \"Your Teams\",\n items: [\n { id: \"team-a\", label: \"Team A\", icon: Users },\n { id: \"team-b\", label: \"Team B\", icon: Users },\n ],\n moreItems: [\n { id: \"more-teams\", label: \"More\", icon: MoreHorizontal },\n ],\n },\n]\n\nconst DEFAULT_USER: SidebarUserProfile = {\n name: \"John Doe\",\n email: \"jdoe@acmeco.com\",\n initials: \"JD\",\n}\n\nconst DEFAULT_USER_MENU: UserMenuItem[] = [\n { id: \"settings\", label: \"Settings\", icon: Settings },\n { id: \"dev\", label: \"Dev\", icon: Code },\n { id: \"integrations\", label: \"Integrations\", icon: LinkIcon },\n { id: \"sign-out\", label: \"Sign out\", icon: LogOut, destructive: true },\n]\n\nfunction NavItemRow({\n item,\n isActive,\n isCollapsed,\n activeVariant = \"default\",\n onClick,\n onNavigate,\n activeItemId,\n expandedItems,\n onToggleExpand,\n depth = 0,\n}: {\n item: SidebarNavItem\n isActive: boolean\n isCollapsed: boolean\n activeVariant?: ActiveVariant\n onClick?: () => void\n onNavigate?: (id: string) => void\n activeItemId?: string\n expandedItems?: Record<string, boolean>\n onToggleExpand?: (itemId: string) => void\n depth?: number\n}) {\n const activeClasses =\n activeVariant === \"gradient\"\n ? \"bg-gradient-to-r from-primary/10 to-transparent text-primary\"\n : \"bg-sidebar-accent text-sidebar-accent-foreground\"\n\n const iconActiveClasses =\n activeVariant === \"gradient\" ? \"text-primary\" : \"\"\n\n const hasChildren = item.children && item.children.length > 0\n const isExpanded = expandedItems?.[item.id] ?? false\n\n const content = (\n <div>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex flex-1 items-center gap-3 rounded-lg text-sm font-medium transition-colors\",\n isCollapsed ? \"justify-center p-2\" : \"px-3 py-2\",\n isActive\n ? activeClasses\n : \"text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent\",\n )}\n style={depth > 0 && !isCollapsed ? { paddingLeft: `${0.75 + depth * 1}rem` } : undefined}\n >\n <item.icon className={cn(\"shrink-0\", isCollapsed ? \"w-5 h-5\" : \"w-4 h-4\", isActive && iconActiveClasses)} />\n {!isCollapsed && <span className=\"flex-1 truncate text-left\">{item.label}</span>}\n </button>\n {hasChildren && !isCollapsed && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onToggleExpand?.(item.id)\n }}\n className=\"p-1 mr-1 rounded text-sidebar-foreground/40 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors\"\n >\n <ChevronDown\n className={cn(\n \"w-3.5 h-3.5 transition-transform duration-200\",\n !isExpanded && \"-rotate-90\",\n )}\n />\n </button>\n )}\n </div>\n {hasChildren && !isCollapsed && isExpanded && (\n <div className=\"space-y-0.5\">\n {item.children!.map((child) => (\n <NavItemRow\n key={child.id}\n item={child}\n isActive={activeItemId === child.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n activeItemId={activeItemId}\n onClick={() => onNavigate?.(child.id)}\n onNavigate={onNavigate}\n expandedItems={expandedItems}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n )\n\n if (isCollapsed) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg text-sm font-medium transition-colors\",\n \"justify-center p-2\",\n isActive\n ? activeClasses\n : \"text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent\",\n )}\n >\n <item.icon className={cn(\"shrink-0 w-5 h-5\", isActive && iconActiveClasses)} />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{item.label}</TooltipContent>\n </Tooltip>\n )\n }\n\n return content\n}\n\nfunction NavSection({\n section,\n activeItemId,\n isCollapsed,\n activeVariant = \"default\",\n onNavigate,\n}: {\n section: SidebarNavSection\n activeItemId?: string\n isCollapsed: boolean\n activeVariant?: ActiveVariant\n onNavigate?: (id: string) => void\n}) {\n const [isExpanded, setIsExpanded] = React.useState(true)\n const [expandedItems, setExpandedItems] = React.useState<Record<string, boolean>>({})\n const hasTitle = !isCollapsed && section.title\n\n const handleToggleExpand = React.useCallback((itemId: string) => {\n setExpandedItems((prev) => ({ ...prev, [itemId]: !prev[itemId] }))\n }, [])\n\n return (\n <div className=\"px-3 py-2\">\n {hasTitle && (\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex w-full items-center justify-between mb-1 px-3 group cursor-pointer\"\n >\n <span className=\"flex items-center gap-1.5 min-w-0\">\n {section.titleIconUrl && (\n <img\n src={section.titleIconUrl}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-3.5 w-3.5 shrink-0 object-contain opacity-70\"\n />\n )}\n <span className=\"text-xs font-bold tracking-widest text-sidebar-foreground/50 uppercase truncate\">\n {section.title}\n </span>\n </span>\n <ChevronDown\n className={cn(\n \"w-3 h-3 text-sidebar-foreground/40 transition-transform duration-200\",\n !isExpanded && \"-rotate-90\",\n )}\n />\n </button>\n )}\n {(isExpanded || isCollapsed || !section.title) && (\n <div className=\"space-y-0.5\">\n {section.items.map((item) => (\n <NavItemRow\n key={item.id}\n item={item}\n isActive={activeItemId === item.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n activeItemId={activeItemId}\n onClick={() => onNavigate?.(item.id)}\n onNavigate={onNavigate}\n expandedItems={expandedItems}\n onToggleExpand={handleToggleExpand}\n />\n ))}\n {!isCollapsed && section.moreItems && section.moreItems.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"flex items-center gap-3 w-full px-3 py-2 rounded-lg text-sm font-medium text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors outline-none\">\n <MoreHorizontal className=\"shrink-0 w-4 h-4\" />\n <span className=\"flex-1 text-left\">More</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" side=\"bottom\" className=\"w-48\">\n {section.moreItems.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={() => onNavigate?.(item.id)}\n className=\"cursor-pointer\"\n >\n <item.icon className=\"mr-2 w-4 h-4 text-muted-foreground\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {isCollapsed &&\n section.moreItems?.map((item) => (\n <NavItemRow\n key={item.id}\n item={item}\n isActive={activeItemId === item.id}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n onClick={() => onNavigate?.(item.id)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport function QuickActionSidebarNav({\n className,\n brandLabel = \"ACME CO\",\n brandSubtitle = \"Placeholder\",\n brandImage,\n hideQuickAction,\n navSections = DEFAULT_NAV_SECTIONS,\n activeItemId = \"inbox\",\n activeVariant = \"default\",\n onNavigate,\n user = DEFAULT_USER,\n userMenuItems = DEFAULT_USER_MENU,\n onUserMenuAction,\n onCreateTask,\n defaultCollapsed = false,\n quickActionTemplates,\n quickActionTitle,\n quickActionDescription,\n ...props\n}: QuickActionSidebarNavProps) {\n const [isQuickActionOpen, setIsQuickActionOpen] = React.useState(false)\n const [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed)\n\n const initials =\n user.initials ??\n (user.name\n ? user.name.charAt(0).toUpperCase()\n : user.email\n ? user.email.charAt(0).toUpperCase()\n : \"U\")\n\n return (\n <TooltipProvider delayDuration={0}>\n <aside\n className={cn(\n \"flex h-full flex-col overflow-hidden bg-sidebar text-sidebar-foreground border-r border-sidebar-border transition-all duration-200\",\n isCollapsed ? \"w-16\" : \"w-64\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n <div\n className={cn(\n \"relative flex shrink-0 items-center border-b border-sidebar-border\",\n isCollapsed ? \"justify-center h-16 px-2\" : \"px-6 py-4\",\n )}\n >\n {!isCollapsed && (\n <div className=\"flex items-center gap-2.5 pr-8\">\n {brandImage ? (\n <img src={brandImage} alt={brandLabel} className=\"h-10 object-contain\" />\n ) : (\n <>\n <div className=\"flex h-6 w-6 items-center justify-center rounded-full bg-sidebar-foreground text-sidebar\">\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"w-3.5 h-3.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n </div>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-bold tracking-tight\">\n {brandLabel}\n </span>\n {brandSubtitle && (\n <span className=\"text-[10px] font-medium text-sidebar-foreground/50 uppercase tracking-wide\">\n {brandSubtitle}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n onClick={() => setIsCollapsed(!isCollapsed)}\n className={cn(\n \"p-1.5 rounded-md text-sidebar-foreground/50 hover:text-sidebar-foreground hover:bg-sidebar-accent transition-colors\",\n isCollapsed ? \"\" : \"absolute right-5 top-1/2 -translate-y-1/2\",\n )}\n title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n >\n {isCollapsed ? (\n <PanelLeftOpen className=\"w-4 h-4\" />\n ) : (\n <PanelLeftClose className=\"w-4 h-4\" />\n )}\n </button>\n </div>\n\n {/* Navigation */}\n <div className=\"flex-1 overflow-y-auto overflow-x-hidden py-3 space-y-1\">\n {navSections.map((section, idx) => (\n <React.Fragment key={section.title ?? idx}>\n {idx > 0 && <div className=\"mx-4 my-2 border-t border-sidebar-border\" />}\n <NavSection\n section={section}\n activeItemId={activeItemId}\n isCollapsed={isCollapsed}\n activeVariant={activeVariant}\n onNavigate={onNavigate}\n />\n </React.Fragment>\n ))}\n </div>\n\n {!hideQuickAction && (\n <div className={cn(\"px-3 pb-3\", isCollapsed ? \"hidden\" : \"block\")}>\n <button\n type=\"button\"\n onClick={() => setIsQuickActionOpen(true)}\n className=\"w-full flex items-center justify-between px-3 py-2.5 rounded-lg border border-sidebar-border bg-sidebar-primary text-sidebar-primary-foreground hover:bg-sidebar-primary/90 transition-colors group shadow-sm\"\n >\n <div className=\"flex items-center gap-2\">\n <svg\n className=\"w-4 h-4 text-sidebar-primary-foreground/80 group-hover:text-sidebar-primary-foreground transition-colors\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n <span className=\"text-sm font-medium\">Quick Action</span>\n </div>\n <kbd className=\"hidden sm:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[11px] font-mono rounded bg-sidebar-primary-foreground/20 text-sidebar-primary-foreground\">\n <span className=\"text-xs\">&#8984;</span>K\n </kbd>\n </button>\n </div>\n )}\n\n {isCollapsed && !hideQuickAction && (\n <div className=\"px-2 pb-3\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setIsQuickActionOpen(true)}\n className=\"flex w-full items-center justify-center rounded-lg bg-sidebar-primary p-2.5 text-sidebar-primary-foreground shadow-sm transition-colors hover:bg-sidebar-primary/90\"\n title=\"Quick Action (⌘K)\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 10V3L4 14h7v7l9-11h-7z\"\n />\n </svg>\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">Quick Action (⌘K)</TooltipContent>\n </Tooltip>\n </div>\n )}\n\n {/* User Profile Footer */}\n <div className=\"p-3 border-t border-sidebar-border shrink-0\">\n <DropdownMenu>\n <DropdownMenuTrigger\n className={cn(\n \"flex items-center w-full rounded-lg hover:bg-sidebar-accent transition-colors outline-none\",\n isCollapsed ? \"justify-center p-1\" : \"p-2 gap-3\",\n )}\n >\n <Avatar className=\"h-8 w-8 rounded-md\">\n <AvatarFallback className=\"rounded-md bg-primary/10 text-primary text-xs font-medium\">\n {initials}\n </AvatarFallback>\n </Avatar>\n\n {!isCollapsed && (\n <div className=\"flex flex-col items-start flex-1 truncate\">\n <span className=\"text-sm font-medium leading-none truncate\">\n {user.name}\n </span>\n <span className=\"text-xs text-sidebar-foreground/50 truncate mt-0.5\">\n {user.email}\n </span>\n </div>\n )}\n\n {!isCollapsed && (\n <MoreVertical className=\"w-4 h-4 text-sidebar-foreground/50 shrink-0\" />\n )}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent align=\"end\" side=\"right\" sideOffset={8} className=\"w-56\">\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"flex flex-col space-y-1\">\n <p className=\"text-sm font-medium leading-none\">{user.name}</p>\n <p className=\"text-xs leading-none text-muted-foreground\">{user.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {userMenuItems.map((item, idx) => {\n const showSepBefore = item.destructive && idx > 0\n return (\n <React.Fragment key={item.id}>\n {showSepBefore && <DropdownMenuSeparator />}\n <DropdownMenuItem\n onClick={() => onUserMenuAction?.(item.id)}\n className={cn(\n \"cursor-pointer\",\n item.destructive && \"text-destructive focus:text-destructive\",\n )}\n >\n <item.icon className=\"mr-2 h-4 w-4\" />\n <span>{item.label}</span>\n </DropdownMenuItem>\n </React.Fragment>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </aside>\n\n {!hideQuickAction && (\n <QuickActionModal\n open={isQuickActionOpen}\n onOpenChange={setIsQuickActionOpen}\n onCreateTask={onCreateTask}\n templates={quickActionTemplates}\n title={quickActionTitle}\n description={quickActionDescription}\n />\n )}\n </TooltipProvider>\n )\n}\n"],"mappings":"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","names":["_a"]}
@@ -182,7 +182,7 @@ function DetailView({
182
182
  )
183
183
  ] }),
184
184
  sections.signalBrief && (() => {
185
- var _a;
185
+ var _a, _b;
186
186
  const pct = signalData.score;
187
187
  const scoreColor = pct >= 70 ? "text-emerald-600" : pct >= 40 ? "text-amber-600" : "text-red-600";
188
188
  const barColor = pct >= 70 ? "bg-emerald-500" : pct >= 40 ? "bg-amber-500" : "bg-red-500";
@@ -207,9 +207,9 @@ function DetailView({
207
207
  /* @__PURE__ */ jsx(Citation, { number: 5, source: sourceItems[3] })
208
208
  ] })
209
209
  ] : signalData.evidence.map((ev, i) => /* @__PURE__ */ jsx("span", { children: ev }, i));
210
- const briefHeading = (signalBriefCopy == null ? void 0 : signalBriefCopy.heading) !== void 0 ? signalBriefCopy.heading : "Signal brief";
211
- const briefIntroRaw = signalBriefCopy == null ? void 0 : signalBriefCopy.intro;
212
- const briefIntro = briefIntroRaw === null ? null : typeof briefIntroRaw === "function" ? briefIntroRaw(item) : briefIntroRaw === void 0 ? `We detected signals that suggest a potential opportunity with ${item.company}.` : briefIntroRaw;
210
+ const briefHeading = (_a = signalBriefCopy == null ? void 0 : signalBriefCopy.heading) != null ? _a : "Signal brief";
211
+ const introOpt = signalBriefCopy == null ? void 0 : signalBriefCopy.intro;
212
+ const briefIntro = introOpt === null ? null : typeof introOpt === "function" ? introOpt(item) : introOpt != null ? introOpt : `We detected signals that suggest a potential opportunity with ${item.company}.`;
213
213
  return /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
214
214
  briefHeading ? /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground uppercase tracking-wider mb-3", children: briefHeading }) : null,
215
215
  briefIntro ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed mb-2", children: briefIntro }) : null,
@@ -253,7 +253,7 @@ function DetailView({
253
253
  ScoreBreakdown,
254
254
  {
255
255
  factors: signalData.factors,
256
- onFactorFeedback: (_a = signalData.onFactorFeedback) != null ? _a : ((key, type, detail) => console.log("Signal factor feedback:", { company: item.company, factor: key, type, detail }))
256
+ onFactorFeedback: (_b = signalData.onFactorFeedback) != null ? _b : ((key, type, detail) => console.log("Signal factor feedback:", { company: item.company, factor: key, type, detail }))
257
257
  }
258
258
  ),
259
259
  /* @__PURE__ */ jsx(SignalApproval.Actions, {})