@handled-ai/design-system 0.9.9 → 0.9.11

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.
@@ -14,7 +14,7 @@ const badgeColors = {
14
14
  };
15
15
  function ContactRow({ contact }) {
16
16
  var _a, _b;
17
- return /* @__PURE__ */ jsxs("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", children: [
17
+ return /* @__PURE__ */ jsxs("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", children: [
18
18
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [
19
19
  contact.badge && /* @__PURE__ */ jsx(
20
20
  Badge,
@@ -24,9 +24,9 @@ function ContactRow({ contact }) {
24
24
  children: contact.badge.label
25
25
  }
26
26
  ),
27
- /* @__PURE__ */ jsx("span", { className: "font-medium text-sm text-foreground truncate", children: contact.name }),
28
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm shrink-0", children: "\xB7" }),
29
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm truncate", children: contact.role })
27
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-[13px] text-foreground truncate", children: contact.name }),
28
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[13px] shrink-0", children: "\xB7" }),
29
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[13px] truncate", children: contact.role })
30
30
  ] }),
31
31
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [
32
32
  (_b = contact.channels) == null ? void 0 : _b.map((ch, i) => /* @__PURE__ */ jsx(
@@ -63,9 +63,9 @@ function ContactRow({ contact }) {
63
63
  ] });
64
64
  }
65
65
  function ContactList({ title, count, contacts, onAdd, addLabel }) {
66
- return /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
66
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2.5", children: [
67
67
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
68
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: title }),
68
+ /* @__PURE__ */ jsx("h3", { className: "text-[13px] font-semibold text-foreground", children: title }),
69
69
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
70
70
  count && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: count }),
71
71
  onAdd && /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: onAdd, className: "h-7 text-xs font-medium hover:bg-muted/50", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/contact-list.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Plus, X } from \"lucide-react\"\nimport { Badge } from \"./badge\"\nimport { Button } from \"./button\"\n\nexport interface ContactChannel {\n type: \"linkedin\" | \"gmail\" | \"salesforce\" | \"phone\" | \"custom\"\n icon: React.ReactNode\n label?: string\n onClick?: () => void\n}\n\nexport interface ContactItem {\n id: string\n name: string\n role: string\n badge?: {\n label: string\n color?: \"indigo\" | \"green\" | \"amber\" | \"red\" | \"muted\"\n }\n channels?: ContactChannel[]\n action?: {\n label: string\n onClick?: () => void\n }\n description?: string\n onDismiss?: () => void\n}\n\nexport interface ContactListProps {\n title?: string\n count?: string\n contacts: ContactItem[]\n onAdd?: () => void\n addLabel?: string\n}\n\nconst badgeColors: Record<string, string> = {\n indigo: \"bg-indigo-50 text-indigo-700 border-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-300 dark:border-indigo-800\",\n green: \"bg-green-50 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-300 dark:border-green-800\",\n amber: \"bg-amber-50 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800\",\n red: \"bg-red-50 text-red-700 border-red-200 dark:bg-red-900/30 dark:text-red-300 dark:border-red-800\",\n muted: \"bg-muted text-muted-foreground border-border\",\n}\n\nfunction ContactRow({ contact }: { contact: ContactItem }) {\n return (\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 {contact.badge && (\n <Badge\n variant=\"outline\"\n className={`shadow-none px-2 py-0 text-[11px] font-medium shrink-0 ${badgeColors[contact.badge.color ?? \"muted\"]}`}\n >\n {contact.badge.label}\n </Badge>\n )}\n <span className=\"font-medium text-sm text-foreground truncate\">{contact.name}</span>\n <span className=\"text-muted-foreground text-sm shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-sm truncate\">{contact.role}</span>\n </div>\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {contact.channels?.map((ch, i) => (\n <button\n key={i}\n onClick={ch.onClick}\n className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\"\n title={ch.label}\n >\n {ch.icon}\n </button>\n ))}\n {contact.action && (\n <Button\n size=\"sm\"\n className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\"\n onClick={contact.action.onClick}\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n {contact.action.label}\n </Button>\n )}\n {contact.onDismiss && (\n <button\n onClick={contact.onDismiss}\n className=\"h-6 w-6 flex items-center justify-center text-muted-foreground/40 hover:text-foreground hover:bg-muted rounded-md transition-colors opacity-0 group-hover:opacity-100\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function ContactList({ title, count, contacts, onAdd, addLabel }: ContactListProps) {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n <div className=\"flex items-center gap-3\">\n {count && <span className=\"text-xs text-muted-foreground\">{count}</span>}\n {onAdd && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onAdd} className=\"h-7 text-xs font-medium hover:bg-muted/50\">\n <Plus className=\"w-3.5 h-3.5 mr-1\" /> {addLabel ?? \"Add\"}\n </Button>\n )}\n </div>\n </div>\n\n <div className=\"space-y-0\">\n {contacts.map((contact) => (\n <ContactRow key={contact.id} contact={contact} />\n ))}\n </div>\n </div>\n )\n}\n"],"mappings":";AAkDM,SAEI,KAFJ;AA/CN,SAAS,MAAM,SAAS;AACxB,SAAS,aAAa;AACtB,SAAS,cAAc;AAkCvB,MAAM,cAAsC;AAAA,EAC1C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AACT;AAEA,SAAS,WAAW,EAAE,QAAQ,GAA6B;AA/C3D;AAgDE,SACE,qBAAC,SAAI,WAAU,0JACb;AAAA,yBAAC,SAAI,WAAU,qCACZ;AAAA,cAAQ,SACP;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAW,0DAA0D,aAAY,aAAQ,MAAM,UAAd,YAAuB,OAAO,CAAC;AAAA,UAE/G,kBAAQ,MAAM;AAAA;AAAA,MACjB;AAAA,MAEF,oBAAC,UAAK,WAAU,gDAAgD,kBAAQ,MAAK;AAAA,MAC7E,oBAAC,UAAK,WAAU,0CAAyC,kBAAQ;AAAA,MACjE,oBAAC,UAAK,WAAU,0CAA0C,kBAAQ,MAAK;AAAA,OACzE;AAAA,IAEA,qBAAC,SAAI,WAAU,oCACZ;AAAA,oBAAQ,aAAR,mBAAkB,IAAI,CAAC,IAAI,MAC1B;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,GAAG;AAAA,UACZ,WAAU;AAAA,UACV,OAAO,GAAG;AAAA,UAET,aAAG;AAAA;AAAA,QALC;AAAA,MAMP;AAAA,MAED,QAAQ,UACP;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,QAAQ,OAAO;AAAA,UAExB;AAAA,gCAAC,QAAK,WAAU,gBAAe;AAAA,YAC9B,QAAQ,OAAO;AAAA;AAAA;AAAA,MAClB;AAAA,MAED,QAAQ,aACP;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,QAAQ;AAAA,UACjB,WAAU;AAAA,UAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,MACzB;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEO,SAAS,YAAY,EAAE,OAAO,OAAO,UAAU,OAAO,SAAS,GAAqB;AACzF,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,yBAAC,SAAI,WAAU,qCACb;AAAA,0BAAC,QAAG,WAAU,yCAAyC,iBAAM;AAAA,MAC7D,qBAAC,SAAI,WAAU,2BACZ;AAAA,iBAAS,oBAAC,UAAK,WAAU,iCAAiC,iBAAM;AAAA,QAChE,SACC,qBAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,OAAO,WAAU,6CAC1D;AAAA,8BAAC,QAAK,WAAU,oBAAmB;AAAA,UAAE;AAAA,UAAE,8BAAY;AAAA,WACrD;AAAA,SAEJ;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,aACZ,mBAAS,IAAI,CAAC,YACb,oBAAC,cAA4B,WAAZ,QAAQ,EAAsB,CAChD,GACH;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/contact-list.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Plus, X } from \"lucide-react\"\nimport { Badge } from \"./badge\"\nimport { Button } from \"./button\"\n\nexport interface ContactChannel {\n type: \"linkedin\" | \"gmail\" | \"salesforce\" | \"phone\" | \"custom\"\n icon: React.ReactNode\n label?: string\n onClick?: () => void\n}\n\nexport interface ContactItem {\n id: string\n name: string\n role: string\n badge?: {\n label: string\n color?: \"indigo\" | \"green\" | \"amber\" | \"red\" | \"muted\"\n }\n channels?: ContactChannel[]\n action?: {\n label: string\n onClick?: () => void\n }\n description?: string\n onDismiss?: () => void\n}\n\nexport interface ContactListProps {\n title?: string\n count?: string\n contacts: ContactItem[]\n onAdd?: () => void\n addLabel?: string\n}\n\nconst badgeColors: Record<string, string> = {\n indigo: \"bg-indigo-50 text-indigo-700 border-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-300 dark:border-indigo-800\",\n green: \"bg-green-50 text-green-700 border-green-200 dark:bg-green-900/30 dark:text-green-300 dark:border-green-800\",\n amber: \"bg-amber-50 text-amber-700 border-amber-200 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800\",\n red: \"bg-red-50 text-red-700 border-red-200 dark:bg-red-900/30 dark:text-red-300 dark:border-red-800\",\n muted: \"bg-muted text-muted-foreground border-border\",\n}\n\nfunction ContactRow({ contact }: { contact: ContactItem }) {\n return (\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 {contact.badge && (\n <Badge\n variant=\"outline\"\n className={`shadow-none px-2 py-0 text-[11px] font-medium shrink-0 ${badgeColors[contact.badge.color ?? \"muted\"]}`}\n >\n {contact.badge.label}\n </Badge>\n )}\n <span className=\"font-medium text-[13px] text-foreground truncate\">{contact.name}</span>\n <span className=\"text-muted-foreground text-[13px] shrink-0\">&middot;</span>\n <span className=\"text-muted-foreground text-[13px] truncate\">{contact.role}</span>\n </div>\n\n <div className=\"flex items-center gap-1 shrink-0\">\n {contact.channels?.map((ch, i) => (\n <button\n key={i}\n onClick={ch.onClick}\n className=\"h-7 w-7 flex items-center justify-center hover:bg-muted rounded-md transition-colors\"\n title={ch.label}\n >\n {ch.icon}\n </button>\n ))}\n {contact.action && (\n <Button\n size=\"sm\"\n className=\"bg-foreground text-background hover:bg-foreground/90 h-6 text-[11px] font-medium shadow-none ml-1\"\n onClick={contact.action.onClick}\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n {contact.action.label}\n </Button>\n )}\n {contact.onDismiss && (\n <button\n onClick={contact.onDismiss}\n className=\"h-6 w-6 flex items-center justify-center text-muted-foreground/40 hover:text-foreground hover:bg-muted rounded-md transition-colors opacity-0 group-hover:opacity-100\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function ContactList({ title, count, contacts, onAdd, addLabel }: ContactListProps) {\n return (\n <div className=\"space-y-2.5\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-[13px] font-semibold text-foreground\">{title}</h3>\n <div className=\"flex items-center gap-3\">\n {count && <span className=\"text-xs text-muted-foreground\">{count}</span>}\n {onAdd && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onAdd} className=\"h-7 text-xs font-medium hover:bg-muted/50\">\n <Plus className=\"w-3.5 h-3.5 mr-1\" /> {addLabel ?? \"Add\"}\n </Button>\n )}\n </div>\n </div>\n\n <div className=\"space-y-0\">\n {contacts.map((contact) => (\n <ContactRow key={contact.id} contact={contact} />\n ))}\n </div>\n </div>\n )\n}\n"],"mappings":";AAkDM,SAEI,KAFJ;AA/CN,SAAS,MAAM,SAAS;AACxB,SAAS,aAAa;AACtB,SAAS,cAAc;AAkCvB,MAAM,cAAsC;AAAA,EAC1C,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AACT;AAEA,SAAS,WAAW,EAAE,QAAQ,GAA6B;AA/C3D;AAgDE,SACE,qBAAC,SAAI,WAAU,wJACb;AAAA,yBAAC,SAAI,WAAU,qCACZ;AAAA,cAAQ,SACP;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAW,0DAA0D,aAAY,aAAQ,MAAM,UAAd,YAAuB,OAAO,CAAC;AAAA,UAE/G,kBAAQ,MAAM;AAAA;AAAA,MACjB;AAAA,MAEF,oBAAC,UAAK,WAAU,oDAAoD,kBAAQ,MAAK;AAAA,MACjF,oBAAC,UAAK,WAAU,8CAA6C,kBAAQ;AAAA,MACrE,oBAAC,UAAK,WAAU,8CAA8C,kBAAQ,MAAK;AAAA,OAC7E;AAAA,IAEA,qBAAC,SAAI,WAAU,oCACZ;AAAA,oBAAQ,aAAR,mBAAkB,IAAI,CAAC,IAAI,MAC1B;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,GAAG;AAAA,UACZ,WAAU;AAAA,UACV,OAAO,GAAG;AAAA,UAET,aAAG;AAAA;AAAA,QALC;AAAA,MAMP;AAAA,MAED,QAAQ,UACP;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,QAAQ,OAAO;AAAA,UAExB;AAAA,gCAAC,QAAK,WAAU,gBAAe;AAAA,YAC9B,QAAQ,OAAO;AAAA;AAAA;AAAA,MAClB;AAAA,MAED,QAAQ,aACP;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,QAAQ;AAAA,UACjB,WAAU;AAAA,UAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,MACzB;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEO,SAAS,YAAY,EAAE,OAAO,OAAO,UAAU,OAAO,SAAS,GAAqB;AACzF,SACE,qBAAC,SAAI,WAAU,eACb;AAAA,yBAAC,SAAI,WAAU,qCACb;AAAA,0BAAC,QAAG,WAAU,6CAA6C,iBAAM;AAAA,MACjE,qBAAC,SAAI,WAAU,2BACZ;AAAA,iBAAS,oBAAC,UAAK,WAAU,iCAAiC,iBAAM;AAAA,QAChE,SACC,qBAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS,OAAO,WAAU,6CAC1D;AAAA,8BAAC,QAAK,WAAU,oBAAmB;AAAA,UAAE;AAAA,UAAE,8BAAY;AAAA,WACrD;AAAA,SAEJ;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,aACZ,mBAAS,IAAI,CAAC,YACb,oBAAC,cAA4B,WAAZ,QAAQ,EAAsB,CAChD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -18,6 +18,8 @@ type DataRow = {
18
18
  owner: string;
19
19
  opportunityCount: number;
20
20
  productAdoptionScore: number;
21
+ sourceSystem?: string;
22
+ sourceRef?: string;
21
23
  };
22
24
  interface DataTableProps {
23
25
  onRowClick?: (row: DataRow) => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/data-table.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Briefcase,\n Calendar,\n DollarSign,\n History,\n Link as LinkIcon,\n SearchX,\n TrendingUp,\n User,\n Users,\n} from \"lucide-react\"\nimport {\n createColumnHelper,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type SortingState,\n type VisibilityState,\n} from \"@tanstack/react-table\"\n\nimport { cn } from \"../lib/utils\"\nimport { Badge } from \"./badge\"\nimport {\n DataTableQuickViews,\n type DataTableQuickViewValue,\n} from \"./data-table-quick-views\"\nimport { DataTableToolbar } from \"./data-table-toolbar\"\nimport { type DataTableFilterCategory } from \"./data-table-filter\"\nimport { ScoreAnalysisModal } from \"./score-analysis-modal\"\nimport type { ScoreFactor } from \"./score-breakdown\"\nimport { Citation, type SourceDef } from \"./detail-view\"\n\nexport type DataRow = {\n id: string\n name: string\n industry: string[]\n accountRisks: string[]\n riskScore: number\n expansionScore: number\n growthIndicators: string[]\n lastInteraction: string\n lastInteractionDays: number\n createdAt: string\n revenue: string\n headcount: string\n lastFunding: string\n owner: string\n opportunityCount: number\n productAdoptionScore: number\n}\n\nconst QUICK_VIEWS = [\n \"Balance Flight Detected\",\n \"Not Touched in 30+ Days\",\n \"Open Opportunity, Stalled\",\n \"Growth Signal Detected\",\n \"Low Product Adoption\",\n]\n\nconst MORE_QUICK_VIEWS = [\n \"Missed meeting this week\",\n \"High churn risk score\",\n \"Key contact departed\",\n \"Recent large inflow\",\n \"Dormant (no payments)\",\n \"Support tickets elevated\",\n]\n\nconst FILTER_CATEGORIES: DataTableFilterCategory[] = [\n {\n id: \"industry\",\n label: \"Industry\",\n icon: Briefcase,\n options: [\n \"Software\",\n \"E-commerce\",\n \"Financial Technology\",\n \"Workforce Management\",\n \"Artificial Intelligence\",\n \"Health Technology\",\n \"Design\",\n ],\n },\n {\n id: \"lastInteraction\",\n label: \"Last interaction\",\n icon: History,\n options: [\"1 day ago\", \"3 days ago\", \"1 week ago\", \"1 month ago\", \"2 months ago\"],\n },\n {\n id: \"createdAt\",\n label: \"Created at\",\n icon: Calendar,\n options: [\"Last 30 days\", \"Last 90 days\", \"This year\", \"Last year\"],\n },\n {\n id: \"revenue\",\n label: \"Revenue\",\n icon: DollarSign,\n options: [\"$0 - $1M\", \"$1M - $10M\", \"$10M - $50M\", \"$50M+\"],\n },\n {\n id: \"headcount\",\n label: \"Headcount\",\n icon: Users,\n options: [\"11-50\", \"51-200\", \"201-500\", \"500-1000\", \"1000+\"],\n },\n {\n id: \"lastFunding\",\n label: \"Last funding\",\n icon: TrendingUp,\n options: [\"Seed\", \"Series A\", \"Series B\", \"Series C+\", \"Undisclosed\"],\n },\n {\n id: \"owner\",\n label: \"Owner\",\n icon: User,\n options: [\"Sam Lee\", \"Alex Morgan\", \"Jordan Case\", \"Taylor Reed\"],\n },\n {\n id: \"opportunityCount\",\n label: \"Opportunity count\",\n icon: LinkIcon,\n options: [\"0\", \"1\", \"2\", \"3+\"],\n },\n]\n\nconst ROWS: DataRow[] = [\n {\n id: \"rappi\",\n name: \"Rappi\",\n industry: [\"E-commerce\", \"Food Delivery\", \"Financial Technology\"],\n accountRisks: [\"Flight Risk\", \"Low Engagement\"],\n riskScore: 65,\n expansionScore: 45,\n growthIndicators: [\"Job Openings\", \"Recent Funding\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 7,\n createdAt: \"This year\",\n revenue: \"$10M - $50M\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 2,\n productAdoptionScore: 62,\n },\n {\n id: \"codeshot\",\n name: \"Codeshot\",\n industry: [\"Software\"],\n accountRisks: [\"Flight Risk\", \"Low Engagement\"],\n riskScore: 85,\n expansionScore: 20,\n growthIndicators: [],\n lastInteraction: \"2 months ago\",\n lastInteractionDays: 64,\n createdAt: \"Last year\",\n revenue: \"$1M - $10M\",\n headcount: \"201-500\",\n lastFunding: \"Series A\",\n owner: \"Alex Morgan\",\n opportunityCount: 1,\n productAdoptionScore: 31,\n },\n {\n id: \"lovi\",\n name: \"Lovi\",\n industry: [\"Artificial Intelligence\", \"Health Technology\"],\n accountRisks: [\"Low Engagement\", \"Key Contact Departure\"],\n riskScore: 55,\n expansionScore: 75,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 month ago\",\n lastInteractionDays: 36,\n createdAt: \"This year\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Jordan Case\",\n opportunityCount: 3,\n productAdoptionScore: 38,\n },\n {\n id: \"anthropic\",\n name: \"Anthropic\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 25,\n expansionScore: 68,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"3 days ago\",\n lastInteractionDays: 3,\n createdAt: \"Last 90 days\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 2,\n productAdoptionScore: 86,\n },\n {\n id: \"buildbear\",\n name: \"BuildBear\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 35,\n expansionScore: 92,\n growthIndicators: [\"Recent Funding\", \"Revenue Growth\"],\n lastInteraction: \"1 day ago\",\n lastInteractionDays: 1,\n createdAt: \"Last 30 days\",\n revenue: \"$1M - $10M\",\n headcount: \"51-200\",\n lastFunding: \"Seed\",\n owner: \"Taylor Reed\",\n opportunityCount: 2,\n productAdoptionScore: 91,\n },\n {\n id: \"content-mobbin\",\n name: \"Content-mobbin\",\n industry: [\"Workforce Management\"],\n accountRisks: [],\n riskScore: 28,\n expansionScore: 85,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 9,\n createdAt: \"Last 30 days\",\n revenue: \"$0 - $1M\",\n headcount: \"11-50\",\n lastFunding: \"Seed\",\n owner: \"Taylor Reed\",\n opportunityCount: 2,\n productAdoptionScore: 77,\n },\n {\n id: \"figma\",\n name: \"Figma\",\n industry: [\"Design\", \"Software\"],\n accountRisks: [],\n riskScore: 15,\n expansionScore: 88,\n growthIndicators: [\"Headcount Expansion\", \"Job Openings\"],\n lastInteraction: \"3 days ago\",\n lastInteractionDays: 3,\n createdAt: \"This year\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Alex Morgan\",\n opportunityCount: 1,\n productAdoptionScore: 94,\n },\n {\n id: \"loom\",\n name: \"Loom\",\n industry: [\"Software\"],\n accountRisks: [\"Key Contact Departure\"],\n riskScore: 35,\n expansionScore: 68,\n growthIndicators: [\"Headcount Expansion\", \"Job Openings\"],\n lastInteraction: \"1 month ago\",\n lastInteractionDays: 33,\n createdAt: \"Last year\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Jordan Case\",\n opportunityCount: 1,\n productAdoptionScore: 58,\n },\n {\n id: \"miro\",\n name: \"Miro\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 32,\n expansionScore: 55,\n growthIndicators: [],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 8,\n createdAt: \"This year\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 0,\n productAdoptionScore: 64,\n },\n {\n id: \"webflow\",\n name: \"Webflow\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 25,\n expansionScore: 72,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 10,\n createdAt: \"Last 90 days\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Alex Morgan\",\n opportunityCount: 2,\n productAdoptionScore: 71,\n },\n]\n\ntype ScoreAnalysisData = {\n title: string\n description: string\n whyNow: string\n evidence: React.ReactNode[]\n factors: ScoreFactor[]\n}\n\nconst RISK_SOURCES: SourceDef[] = [\n { id: 1, summary: \"Weekly active users declined 12% over the past 30 days with no recovery trend.\", meta: \"Product telemetry \\u00b7 2h ago\" },\n { id: 2, summary: \"Critical support ticket #4821 has been unresolved for over 48 hours.\", meta: \"Zendesk \\u00b7 6h ago\" },\n { id: 3, summary: \"Competitor mentions detected in recent Slack conversations from the finance team.\", meta: \"Slack signal \\u00b7 1d ago\" },\n]\n\nconst EXPANSION_SOURCES: SourceDef[] = [\n { id: 1, summary: \"Treasury feature utilization is above the 85th percentile compared to peer accounts.\", meta: \"Product telemetry \\u00b7 3h ago\" },\n { id: 2, summary: \"Multiple feature requests submitted for advanced reporting and API access.\", meta: \"Zendesk \\u00b7 1d ago\" },\n { id: 3, summary: \"Finance department headcount grew from 8 to 14 in the last quarter.\", meta: \"LinkedIn signal \\u00b7 2d ago\" },\n]\n\nconst SCORE_ANALYSIS: Record<string, (row: DataRow) => ScoreAnalysisData> = {\n Risk: (row) => ({\n title: \"Risk Score Analysis\",\n description:\n \"Estimated probability of churn within the next 90 days based on activity and support signals\",\n whyNow:\n row.riskScore >= 60\n ? \"Critical risk factors detected requiring immediate intervention to prevent churn.\"\n : \"Account health is stable, but monitoring recent support interactions is recommended.\",\n evidence: [\n <>Recent decline in <span className=\"font-medium text-foreground\">weekly active users (-12%)</span> with no recovery trend<Citation number={1} source={RISK_SOURCES[0]} /></>,\n <>Unresolved <span className=\"font-medium text-foreground\">critical support ticket</span> open for over 48 hours<Citation number={2} source={RISK_SOURCES[1]} /></>,\n <>Competitor presence detected in recent conversations from finance team<Citation number={3} source={RISK_SOURCES[2]} /></>,\n ],\n factors: [\n { key: \"engagement\", label: \"Engagement drop\", score: Math.min(row.riskScore + 10, 100), why: \"Weekly active users declined 12% over past 30 days\" },\n { key: \"support\", label: \"Support load\", score: Math.min(row.riskScore + 5, 100), why: \"Unresolved critical ticket open for >48h\" },\n { key: \"competitive\", label: \"Competitive risk\", score: null, risk: row.riskScore >= 60 ? \"High\" as const : \"Low\" as const, why: \"Competitor mentions detected in recent conversations\" },\n { key: \"usage\", label: \"Product usage\", score: Math.max(100 - row.riskScore, 10), why: \"Core feature adoption remains consistent\" },\n ],\n }),\n Expansion: (row) => ({\n title: \"Expansion Score Analysis\",\n description:\n \"Likelihood of successful upsell and cross-sell opportunities based on usage and engagement\",\n whyNow:\n row.expansionScore >= 70\n ? \"Usage patterns and growth signals indicate readiness for additional product adoption.\"\n : \"Moderate expansion potential; consider targeted engagement to increase adoption.\",\n evidence: [\n <>Treasury utilization above <span className=\"font-medium text-foreground\">85th percentile</span> vs peer accounts<Citation number={1} source={EXPANSION_SOURCES[0]} /></>,\n <>Frequent <span className=\"font-medium text-foreground\">feature requests</span> for advanced reporting and API access<Citation number={2} source={EXPANSION_SOURCES[1]} /></>,\n <>Recent <span className=\"font-medium text-foreground\">team expansion</span> in finance department (8 &rarr; 14)<Citation number={3} source={EXPANSION_SOURCES[2]} /></>,\n ],\n factors: [\n { key: \"usage-depth\", label: \"Usage depth\", score: Math.min(row.expansionScore + 8, 100), why: \"Active usage across 4+ core product features\" },\n { key: \"growth\", label: \"Growth signals\", score: row.expansionScore, why: row.growthIndicators.length > 0 ? row.growthIndicators.join(\", \") + \" detected\" : \"No active growth signals\" },\n { key: \"fit\", label: \"Product fit\", score: Math.min(row.expansionScore + 12, 100), why: \"Company profile matches high-expansion ICP\" },\n { key: \"timing\", label: \"Timing\", score: null, risk: row.expansionScore >= 70 ? \"Low\" as const : \"Medium\" as const, why: \"Within typical evaluation window for upsell\" },\n ],\n }),\n}\n\nconst QUICK_VIEW_FILTERS: Record<string, (row: DataRow) => boolean> = {\n \"Balance Flight Detected\": (row) => row.riskScore >= 60,\n \"Not Touched in 30+ Days\": (row) => row.lastInteractionDays >= 30,\n \"Open Opportunity, Stalled\": (row) =>\n row.opportunityCount > 0 && row.lastInteractionDays >= 21,\n \"Growth Signal Detected\": (row) => row.expansionScore >= 70,\n \"Low Product Adoption\": (row) => row.productAdoptionScore <= 40,\n \"Missed meeting this week\": (row) => row.lastInteractionDays >= 6,\n \"High churn risk score\": (row) => row.riskScore >= 75,\n \"Key contact departed\": (row) =>\n row.accountRisks.some((risk) => risk.toLowerCase().includes(\"contact\")),\n \"Recent large inflow\": (row) => row.expansionScore >= 85,\n \"Dormant (no payments)\": (row) => row.opportunityCount === 0,\n \"Support tickets elevated\": (row) =>\n row.accountRisks.some((risk) => risk.toLowerCase().includes(\"engagement\")),\n}\n\nconst columnHelper = createColumnHelper<DataRow>()\n\nconst DEFAULT_COLUMN_VISIBILITY: VisibilityState = {\n industry: false,\n lastInteraction: false,\n revenue: false,\n headcount: false,\n lastFunding: false,\n owner: false,\n opportunityCount: false,\n}\n\nfunction getEntityColor(name: string) {\n const colors = [\n \"bg-muted text-muted-foreground\",\n \"bg-gray-100 text-gray-600\",\n \"bg-zinc-100 text-zinc-600\",\n \"bg-blue-50 text-blue-600\",\n \"bg-indigo-50 text-indigo-600\",\n \"bg-violet-50 text-violet-600\",\n ]\n\n let hash = 0\n for (let i = 0; i < name.length; i += 1) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash)\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nfunction getIndustryColor(industry: string) {\n const colors: Record<string, string> = {\n \"E-commerce\": \"bg-emerald-50 text-emerald-700 border-emerald-100\",\n \"Food Delivery\": \"bg-blue-50 text-blue-700 border-blue-100\",\n \"Financial Technology\": \"bg-amber-50 text-amber-700 border-amber-100\",\n \"Workforce Management\": \"bg-violet-50 text-violet-700 border-violet-100\",\n \"Artificial Intelligence\": \"bg-rose-50 text-rose-700 border-rose-100\",\n \"Health Technology\": \"bg-orange-50 text-orange-700 border-orange-100\",\n Software: \"bg-muted text-muted-foreground border-border\",\n }\n\n return colors[industry] ?? \"bg-muted text-muted-foreground border-border\"\n}\n\nfunction toggleFilterValue(\n current: Record<string, string[]>,\n categoryId: string,\n option: string\n) {\n const currentValues = current[categoryId] ?? []\n const isActive = currentValues.includes(option)\n const nextValues = isActive\n ? currentValues.filter((value) => value !== option)\n : [...currentValues, option]\n\n return {\n ...current,\n [categoryId]: nextValues,\n }\n}\n\nfunction isRowMatchingCategoryFilter(\n row: DataRow,\n categoryId: string,\n options: string[]\n) {\n if (options.length === 0) {\n return true\n }\n\n switch (categoryId) {\n case \"industry\":\n return options.some((option) => row.industry.includes(option))\n case \"lastInteraction\":\n return options.includes(row.lastInteraction)\n case \"createdAt\":\n return options.includes(row.createdAt)\n case \"revenue\":\n return options.includes(row.revenue)\n case \"headcount\":\n return options.includes(row.headcount)\n case \"lastFunding\":\n return options.includes(row.lastFunding)\n case \"owner\":\n return options.includes(row.owner)\n case \"opportunityCount\":\n return options.some((option) => {\n if (option === \"3+\") {\n return row.opportunityCount >= 3\n }\n return row.opportunityCount === Number(option)\n })\n default:\n return true\n }\n}\n\nexport interface DataTableProps {\n onRowClick?: (row: DataRow) => void\n rows?: DataRow[]\n filterCategories?: DataTableFilterCategory[]\n quickViews?: string[]\n moreQuickViews?: string[]\n quickViewFilters?: Record<string, (row: DataRow) => boolean>\n iconMap?: { salesforce?: string }\n entityUrlBuilder?: (row: DataRow) => string\n onScoreFactorFeedback?: (account: string, scoreType: string, factorKey: string, type: \"up\" | \"down\" | null, detail?: string) => void\n onScoreApproveFeedback?: (account: string, scoreType: string, reasons: string[], detail: string) => void\n onScoreDismissFeedback?: (account: string, scoreType: string, reasons: string[], detail: string) => void\n}\n\nexport function DataTable({\n onRowClick,\n rows: rowsProp,\n filterCategories: filterCategoriesProp,\n quickViews: quickViewsProp,\n moreQuickViews: moreQuickViewsProp,\n quickViewFilters: quickViewFiltersProp,\n iconMap,\n entityUrlBuilder,\n onScoreFactorFeedback,\n onScoreApproveFeedback,\n onScoreDismissFeedback,\n}: DataTableProps = {}) {\n const resolvedRows = rowsProp ?? ROWS\n const resolvedFilterCategories = filterCategoriesProp ?? FILTER_CATEGORIES\n const resolvedQuickViews = quickViewsProp ?? QUICK_VIEWS\n const resolvedMoreQuickViews = moreQuickViewsProp ?? MORE_QUICK_VIEWS\n const resolvedQuickViewFilters = quickViewFiltersProp ?? QUICK_VIEW_FILTERS\n\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(\n DEFAULT_COLUMN_VISIBILITY\n )\n const [selectedFilters, setSelectedFilters] = React.useState<Record<string, string[]>>(\n {}\n )\n const [activeQuickView, setActiveQuickView] =\n React.useState<DataTableQuickViewValue>(null)\n const [scoreModal, setScoreModal] = React.useState<{\n row: DataRow\n type: \"Risk\" | \"Expansion\"\n } | null>(null)\n\n React.useEffect(() => {\n if (!activeQuickView) {\n return\n }\n\n setColumnVisibility((previous) => {\n const next = { ...previous }\n if (activeQuickView.includes(\"Touched\")) {\n next.lastInteraction = true\n }\n if (activeQuickView.includes(\"Growth\")) {\n next.expansionScore = true\n }\n if (activeQuickView.includes(\"risk\") || activeQuickView.includes(\"Risk\")) {\n next.riskScore = true\n }\n return next\n })\n }, [activeQuickView])\n\n const filteredRows = React.useMemo(() => {\n return resolvedRows.filter((row) => {\n const quickViewMatches = activeQuickView\n ? (resolvedQuickViewFilters[activeQuickView]?.(row) ?? true)\n : true\n\n if (!quickViewMatches) {\n return false\n }\n\n return Object.entries(selectedFilters).every(([categoryId, options]) =>\n isRowMatchingCategoryFilter(row, categoryId, options)\n )\n })\n }, [activeQuickView, selectedFilters, resolvedRows, resolvedQuickViewFilters])\n\n const columns = React.useMemo(\n () => [\n columnHelper.accessor(\"name\", {\n header: \"Entity\",\n cell: (info) => {\n const row = info.row.original\n const sfUrl = entityUrlBuilder?.(row)\n return (\n <div className=\"flex min-w-max items-center gap-3\">\n <div\n className={cn(\n \"flex h-6 w-6 shrink-0 items-center justify-center rounded text-[10px] font-bold\",\n getEntityColor(row.name)\n )}\n >\n {row.name.slice(0, 1)}\n </div>\n <span className=\"text-sm font-medium text-foreground\">\n {row.name}\n </span>\n {iconMap?.salesforce && (\n <a\n href={sfUrl ?? \"#\"}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n className=\"shrink-0 text-muted-foreground hover:text-foreground transition-colors\"\n >\n <img src={iconMap.salesforce} alt=\"Salesforce\" className=\"w-4 h-4 object-contain\" />\n </a>\n )}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"accountRisks\", {\n header: \"Risk Signals\",\n cell: (info) => {\n const risks = info.getValue()\n if (!risks.length) {\n return <span className=\"text-xs text-muted-foreground\">None</span>\n }\n\n return (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {risks.slice(0, 2).map((risk) => (\n <Badge\n key={risk}\n variant=\"outline\"\n className=\"rounded-md border-red-200 bg-red-50 px-2 py-0.5 text-xs font-normal text-red-700\"\n >\n {risk}\n </Badge>\n ))}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"riskScore\", {\n id: \"riskScore\",\n header: \"Risk Score\",\n cell: (info) => (\n <div\n className=\"inline-flex cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation()\n setScoreModal({ row: info.row.original, type: \"Risk\" })\n }}\n >\n <Badge\n variant=\"outline\"\n className={cn(\n \"px-2 py-0.5 text-xs font-medium hover:underline decoration-dotted underline-offset-2\",\n info.getValue() >= 60\n ? \"border-red-200 bg-red-50 text-red-700\"\n : \"border-border bg-muted/50 text-foreground\"\n )}\n >\n {info.getValue()}%\n </Badge>\n </div>\n ),\n }),\n columnHelper.accessor(\"expansionScore\", {\n id: \"expansionScore\",\n header: \"Expansion Score\",\n cell: (info) => (\n <div\n className=\"inline-flex cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation()\n setScoreModal({ row: info.row.original, type: \"Expansion\" })\n }}\n >\n <Badge\n variant=\"outline\"\n className={cn(\n \"px-2 py-0.5 text-xs font-medium hover:underline decoration-dotted underline-offset-2\",\n info.getValue() >= 70\n ? \"border-blue-200 bg-blue-50 text-blue-700\"\n : \"border-border bg-muted/50 text-foreground\"\n )}\n >\n {info.getValue()}%\n </Badge>\n </div>\n ),\n }),\n columnHelper.accessor(\"growthIndicators\", {\n header: \"Growth Signals\",\n cell: (info) => {\n const indicators = info.getValue()\n if (!indicators.length) {\n return <span className=\"text-xs text-muted-foreground\">None</span>\n }\n return (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {indicators.slice(0, 2).map((indicator) => (\n <Badge\n key={indicator}\n variant=\"outline\"\n className=\"rounded-md border-blue-200 bg-blue-50 px-2 py-0.5 text-xs font-normal text-blue-700\"\n >\n {indicator}\n </Badge>\n ))}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"industry\", {\n header: \"Industry\",\n cell: (info) => (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {info.getValue().slice(0, 2).map((industry) => (\n <Badge\n key={industry}\n variant=\"outline\"\n className={cn(\n \"rounded-md px-2 py-0.5 text-xs font-normal\",\n getIndustryColor(industry)\n )}\n >\n {industry}\n </Badge>\n ))}\n </div>\n ),\n }),\n columnHelper.accessor(\"lastInteraction\", {\n header: \"Last interaction\",\n cell: (info) => <span className=\"text-sm\">{info.getValue()}</span>,\n }),\n columnHelper.accessor(\"revenue\", {\n header: \"Revenue\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"headcount\", {\n header: \"Headcount\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"lastFunding\", {\n header: \"Last funding\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"owner\", {\n header: \"Owner\",\n cell: (info) => <span className=\"text-sm\">{info.getValue()}</span>,\n }),\n columnHelper.accessor(\"opportunityCount\", {\n header: \"Opportunity count\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n ],\n [iconMap, entityUrlBuilder]\n )\n\n const table = useReactTable({\n data: filteredRows,\n columns,\n state: {\n sorting,\n columnVisibility,\n },\n onSortingChange: setSorting,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const displayColumns = table.getAllLeafColumns().map((column) => {\n const header = column.columnDef.header\n const label = typeof header === \"string\" ? header : column.id\n\n return {\n id: column.id,\n label,\n visible: column.getIsVisible(),\n canHide: column.getCanHide(),\n }\n })\n\n const toggleCategoryFilter = (categoryId: string, option: string) => {\n setSelectedFilters((previous) => toggleFilterValue(previous, categoryId, option))\n }\n\n return (\n <div className=\"relative flex h-full min-h-[560px] flex-col bg-background\">\n <DataTableToolbar\n categories={resolvedFilterCategories}\n selectedFilters={selectedFilters}\n onToggleFilter={toggleCategoryFilter}\n sorting={sorting}\n onSortingChange={setSorting}\n displayColumns={displayColumns}\n onToggleColumn={(columnId) => table.getColumn(columnId)?.toggleVisibility()}\n onResetDisplay={() => setColumnVisibility(DEFAULT_COLUMN_VISIBILITY)}\n />\n\n <DataTableQuickViews\n quickViews={resolvedQuickViews}\n moreViews={resolvedMoreQuickViews}\n activeView={activeQuickView}\n onViewChange={setActiveQuickView}\n />\n\n <div className=\"relative min-h-0 flex-1 overflow-auto border-t border-border\">\n <table className=\"w-max min-w-full border-collapse text-sm\">\n <thead className=\"sticky top-0 z-10 bg-background\">\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className=\"border-b border-border\">\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n className=\"h-10 border-r border-border px-4 text-left text-xs font-medium text-muted-foreground/80 last:border-r-0\"\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.length > 0 ? (\n <>\n {table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n onClick={() => onRowClick?.(row.original)}\n className={cn(\n \"group border-b border-border/50 transition-colors hover:bg-muted/30\",\n onRowClick && \"cursor-pointer\",\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <td\n key={cell.id}\n className=\"border-r border-border/40 px-4 py-2.5 align-middle last:border-r-0\"\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))}\n <tr>\n <td\n className=\"px-4 py-2 text-xs text-muted-foreground\"\n colSpan={columns.length}\n >\n {table.getRowModel().rows.length} rows\n </td>\n </tr>\n </>\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"h-52 px-4 text-center\">\n <div className=\"flex flex-col items-center gap-1 text-muted-foreground\">\n <SearchX className=\"h-7 w-7 opacity-40\" />\n <p className=\"text-sm font-medium\">No rows found</p>\n <p className=\"text-xs\">Try adjusting your filters or quick views</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {scoreModal && (() => {\n const data = SCORE_ANALYSIS[scoreModal.type](scoreModal.row)\n return (\n <ScoreAnalysisModal\n open\n onOpenChange={(open) => { if (!open) setScoreModal(null) }}\n title={data.title}\n description={data.description}\n score={scoreModal.type === \"Risk\" ? scoreModal.row.riskScore : scoreModal.row.expansionScore}\n whyNow={data.whyNow}\n evidence={data.evidence}\n factors={data.factors}\n onFactorFeedback={onScoreFactorFeedback\n ? (key, type, detail) => onScoreFactorFeedback(scoreModal.row.name, scoreModal.type, key, type, detail)\n : (key, type, detail) => console.log(\"Factor feedback:\", { account: scoreModal.row.name, factor: key, type, detail })\n }\n companyName={scoreModal.row.name}\n opportunityUrl={`https://acme.lightning.force.com/lightning/r/Opportunity/006${scoreModal.row.id}/view`}\n onApprove={() => console.log(\"Approved signal — creating opportunity:\", { account: scoreModal.row.name, type: scoreModal.type })}\n onApproveFeedback={onScoreApproveFeedback\n ? (reasons, detail) => onScoreApproveFeedback(scoreModal.row.name, scoreModal.type, reasons, detail)\n : (reasons, detail) => console.log(\"Approval feedback:\", { account: scoreModal.row.name, reasons, detail })\n }\n onDismiss={onScoreDismissFeedback\n ? (reasons, detail) => onScoreDismissFeedback(scoreModal.row.name, scoreModal.type, reasons, detail)\n : (reasons, detail) => console.log(\"Dismissed signal:\", { account: scoreModal.row.name, reasons, detail })\n }\n />\n )\n })()}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/data-table.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n Briefcase,\n Calendar,\n DollarSign,\n History,\n Link as LinkIcon,\n SearchX,\n TrendingUp,\n User,\n Users,\n} from \"lucide-react\"\nimport {\n createColumnHelper,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type SortingState,\n type VisibilityState,\n} from \"@tanstack/react-table\"\n\nimport { cn } from \"../lib/utils\"\nimport { Badge } from \"./badge\"\nimport {\n DataTableQuickViews,\n type DataTableQuickViewValue,\n} from \"./data-table-quick-views\"\nimport { DataTableToolbar } from \"./data-table-toolbar\"\nimport { type DataTableFilterCategory } from \"./data-table-filter\"\nimport { ScoreAnalysisModal } from \"./score-analysis-modal\"\nimport type { ScoreFactor } from \"./score-breakdown\"\nimport { Citation, type SourceDef } from \"./detail-view\"\n\nexport type DataRow = {\n id: string\n name: string\n industry: string[]\n accountRisks: string[]\n riskScore: number\n expansionScore: number\n growthIndicators: string[]\n lastInteraction: string\n lastInteractionDays: number\n createdAt: string\n revenue: string\n headcount: string\n lastFunding: string\n owner: string\n opportunityCount: number\n productAdoptionScore: number\n sourceSystem?: string\n sourceRef?: string\n}\n\nconst QUICK_VIEWS = [\n \"Balance Flight Detected\",\n \"Not Touched in 30+ Days\",\n \"Open Opportunity, Stalled\",\n \"Growth Signal Detected\",\n \"Low Product Adoption\",\n]\n\nconst MORE_QUICK_VIEWS = [\n \"Missed meeting this week\",\n \"High churn risk score\",\n \"Key contact departed\",\n \"Recent large inflow\",\n \"Dormant (no payments)\",\n \"Support tickets elevated\",\n]\n\nconst FILTER_CATEGORIES: DataTableFilterCategory[] = [\n {\n id: \"industry\",\n label: \"Industry\",\n icon: Briefcase,\n options: [\n \"Software\",\n \"E-commerce\",\n \"Financial Technology\",\n \"Workforce Management\",\n \"Artificial Intelligence\",\n \"Health Technology\",\n \"Design\",\n ],\n },\n {\n id: \"lastInteraction\",\n label: \"Last interaction\",\n icon: History,\n options: [\"1 day ago\", \"3 days ago\", \"1 week ago\", \"1 month ago\", \"2 months ago\"],\n },\n {\n id: \"createdAt\",\n label: \"Created at\",\n icon: Calendar,\n options: [\"Last 30 days\", \"Last 90 days\", \"This year\", \"Last year\"],\n },\n {\n id: \"revenue\",\n label: \"Revenue\",\n icon: DollarSign,\n options: [\"$0 - $1M\", \"$1M - $10M\", \"$10M - $50M\", \"$50M+\"],\n },\n {\n id: \"headcount\",\n label: \"Headcount\",\n icon: Users,\n options: [\"11-50\", \"51-200\", \"201-500\", \"500-1000\", \"1000+\"],\n },\n {\n id: \"lastFunding\",\n label: \"Last funding\",\n icon: TrendingUp,\n options: [\"Seed\", \"Series A\", \"Series B\", \"Series C+\", \"Undisclosed\"],\n },\n {\n id: \"owner\",\n label: \"Owner\",\n icon: User,\n options: [\"Sam Lee\", \"Alex Morgan\", \"Jordan Case\", \"Taylor Reed\"],\n },\n {\n id: \"opportunityCount\",\n label: \"Opportunity count\",\n icon: LinkIcon,\n options: [\"0\", \"1\", \"2\", \"3+\"],\n },\n]\n\nconst ROWS: DataRow[] = [\n {\n id: \"rappi\",\n name: \"Rappi\",\n industry: [\"E-commerce\", \"Food Delivery\", \"Financial Technology\"],\n accountRisks: [\"Flight Risk\", \"Low Engagement\"],\n riskScore: 65,\n expansionScore: 45,\n growthIndicators: [\"Job Openings\", \"Recent Funding\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 7,\n createdAt: \"This year\",\n revenue: \"$10M - $50M\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 2,\n productAdoptionScore: 62,\n },\n {\n id: \"codeshot\",\n name: \"Codeshot\",\n industry: [\"Software\"],\n accountRisks: [\"Flight Risk\", \"Low Engagement\"],\n riskScore: 85,\n expansionScore: 20,\n growthIndicators: [],\n lastInteraction: \"2 months ago\",\n lastInteractionDays: 64,\n createdAt: \"Last year\",\n revenue: \"$1M - $10M\",\n headcount: \"201-500\",\n lastFunding: \"Series A\",\n owner: \"Alex Morgan\",\n opportunityCount: 1,\n productAdoptionScore: 31,\n },\n {\n id: \"lovi\",\n name: \"Lovi\",\n industry: [\"Artificial Intelligence\", \"Health Technology\"],\n accountRisks: [\"Low Engagement\", \"Key Contact Departure\"],\n riskScore: 55,\n expansionScore: 75,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 month ago\",\n lastInteractionDays: 36,\n createdAt: \"This year\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Jordan Case\",\n opportunityCount: 3,\n productAdoptionScore: 38,\n },\n {\n id: \"anthropic\",\n name: \"Anthropic\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 25,\n expansionScore: 68,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"3 days ago\",\n lastInteractionDays: 3,\n createdAt: \"Last 90 days\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 2,\n productAdoptionScore: 86,\n },\n {\n id: \"buildbear\",\n name: \"BuildBear\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 35,\n expansionScore: 92,\n growthIndicators: [\"Recent Funding\", \"Revenue Growth\"],\n lastInteraction: \"1 day ago\",\n lastInteractionDays: 1,\n createdAt: \"Last 30 days\",\n revenue: \"$1M - $10M\",\n headcount: \"51-200\",\n lastFunding: \"Seed\",\n owner: \"Taylor Reed\",\n opportunityCount: 2,\n productAdoptionScore: 91,\n },\n {\n id: \"content-mobbin\",\n name: \"Content-mobbin\",\n industry: [\"Workforce Management\"],\n accountRisks: [],\n riskScore: 28,\n expansionScore: 85,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 9,\n createdAt: \"Last 30 days\",\n revenue: \"$0 - $1M\",\n headcount: \"11-50\",\n lastFunding: \"Seed\",\n owner: \"Taylor Reed\",\n opportunityCount: 2,\n productAdoptionScore: 77,\n },\n {\n id: \"figma\",\n name: \"Figma\",\n industry: [\"Design\", \"Software\"],\n accountRisks: [],\n riskScore: 15,\n expansionScore: 88,\n growthIndicators: [\"Headcount Expansion\", \"Job Openings\"],\n lastInteraction: \"3 days ago\",\n lastInteractionDays: 3,\n createdAt: \"This year\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Alex Morgan\",\n opportunityCount: 1,\n productAdoptionScore: 94,\n },\n {\n id: \"loom\",\n name: \"Loom\",\n industry: [\"Software\"],\n accountRisks: [\"Key Contact Departure\"],\n riskScore: 35,\n expansionScore: 68,\n growthIndicators: [\"Headcount Expansion\", \"Job Openings\"],\n lastInteraction: \"1 month ago\",\n lastInteractionDays: 33,\n createdAt: \"Last year\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Jordan Case\",\n opportunityCount: 1,\n productAdoptionScore: 58,\n },\n {\n id: \"miro\",\n name: \"Miro\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 32,\n expansionScore: 55,\n growthIndicators: [],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 8,\n createdAt: \"This year\",\n revenue: \"$50M+\",\n headcount: \"1000+\",\n lastFunding: \"Series C+\",\n owner: \"Sam Lee\",\n opportunityCount: 0,\n productAdoptionScore: 64,\n },\n {\n id: \"webflow\",\n name: \"Webflow\",\n industry: [\"Software\"],\n accountRisks: [],\n riskScore: 25,\n expansionScore: 72,\n growthIndicators: [\"Recent Funding\", \"Headcount Expansion\"],\n lastInteraction: \"1 week ago\",\n lastInteractionDays: 10,\n createdAt: \"Last 90 days\",\n revenue: \"$10M - $50M\",\n headcount: \"500-1000\",\n lastFunding: \"Series B\",\n owner: \"Alex Morgan\",\n opportunityCount: 2,\n productAdoptionScore: 71,\n },\n]\n\ntype ScoreAnalysisData = {\n title: string\n description: string\n whyNow: string\n evidence: React.ReactNode[]\n factors: ScoreFactor[]\n}\n\nconst RISK_SOURCES: SourceDef[] = [\n { id: 1, summary: \"Weekly active users declined 12% over the past 30 days with no recovery trend.\", meta: \"Product telemetry \\u00b7 2h ago\" },\n { id: 2, summary: \"Critical support ticket #4821 has been unresolved for over 48 hours.\", meta: \"Zendesk \\u00b7 6h ago\" },\n { id: 3, summary: \"Competitor mentions detected in recent Slack conversations from the finance team.\", meta: \"Slack signal \\u00b7 1d ago\" },\n]\n\nconst EXPANSION_SOURCES: SourceDef[] = [\n { id: 1, summary: \"Treasury feature utilization is above the 85th percentile compared to peer accounts.\", meta: \"Product telemetry \\u00b7 3h ago\" },\n { id: 2, summary: \"Multiple feature requests submitted for advanced reporting and API access.\", meta: \"Zendesk \\u00b7 1d ago\" },\n { id: 3, summary: \"Finance department headcount grew from 8 to 14 in the last quarter.\", meta: \"LinkedIn signal \\u00b7 2d ago\" },\n]\n\nconst SCORE_ANALYSIS: Record<string, (row: DataRow) => ScoreAnalysisData> = {\n Risk: (row) => ({\n title: \"Risk Score Analysis\",\n description:\n \"Estimated probability of churn within the next 90 days based on activity and support signals\",\n whyNow:\n row.riskScore >= 60\n ? \"Critical risk factors detected requiring immediate intervention to prevent churn.\"\n : \"Account health is stable, but monitoring recent support interactions is recommended.\",\n evidence: [\n <>Recent decline in <span className=\"font-medium text-foreground\">weekly active users (-12%)</span> with no recovery trend<Citation number={1} source={RISK_SOURCES[0]} /></>,\n <>Unresolved <span className=\"font-medium text-foreground\">critical support ticket</span> open for over 48 hours<Citation number={2} source={RISK_SOURCES[1]} /></>,\n <>Competitor presence detected in recent conversations from finance team<Citation number={3} source={RISK_SOURCES[2]} /></>,\n ],\n factors: [\n { key: \"engagement\", label: \"Engagement drop\", score: Math.min(row.riskScore + 10, 100), why: \"Weekly active users declined 12% over past 30 days\" },\n { key: \"support\", label: \"Support load\", score: Math.min(row.riskScore + 5, 100), why: \"Unresolved critical ticket open for >48h\" },\n { key: \"competitive\", label: \"Competitive risk\", score: null, risk: row.riskScore >= 60 ? \"High\" as const : \"Low\" as const, why: \"Competitor mentions detected in recent conversations\" },\n { key: \"usage\", label: \"Product usage\", score: Math.max(100 - row.riskScore, 10), why: \"Core feature adoption remains consistent\" },\n ],\n }),\n Expansion: (row) => ({\n title: \"Expansion Score Analysis\",\n description:\n \"Likelihood of successful upsell and cross-sell opportunities based on usage and engagement\",\n whyNow:\n row.expansionScore >= 70\n ? \"Usage patterns and growth signals indicate readiness for additional product adoption.\"\n : \"Moderate expansion potential; consider targeted engagement to increase adoption.\",\n evidence: [\n <>Treasury utilization above <span className=\"font-medium text-foreground\">85th percentile</span> vs peer accounts<Citation number={1} source={EXPANSION_SOURCES[0]} /></>,\n <>Frequent <span className=\"font-medium text-foreground\">feature requests</span> for advanced reporting and API access<Citation number={2} source={EXPANSION_SOURCES[1]} /></>,\n <>Recent <span className=\"font-medium text-foreground\">team expansion</span> in finance department (8 &rarr; 14)<Citation number={3} source={EXPANSION_SOURCES[2]} /></>,\n ],\n factors: [\n { key: \"usage-depth\", label: \"Usage depth\", score: Math.min(row.expansionScore + 8, 100), why: \"Active usage across 4+ core product features\" },\n { key: \"growth\", label: \"Growth signals\", score: row.expansionScore, why: row.growthIndicators.length > 0 ? row.growthIndicators.join(\", \") + \" detected\" : \"No active growth signals\" },\n { key: \"fit\", label: \"Product fit\", score: Math.min(row.expansionScore + 12, 100), why: \"Company profile matches high-expansion ICP\" },\n { key: \"timing\", label: \"Timing\", score: null, risk: row.expansionScore >= 70 ? \"Low\" as const : \"Medium\" as const, why: \"Within typical evaluation window for upsell\" },\n ],\n }),\n}\n\nconst QUICK_VIEW_FILTERS: Record<string, (row: DataRow) => boolean> = {\n \"Balance Flight Detected\": (row) => row.riskScore >= 60,\n \"Not Touched in 30+ Days\": (row) => row.lastInteractionDays >= 30,\n \"Open Opportunity, Stalled\": (row) =>\n row.opportunityCount > 0 && row.lastInteractionDays >= 21,\n \"Growth Signal Detected\": (row) => row.expansionScore >= 70,\n \"Low Product Adoption\": (row) => row.productAdoptionScore <= 40,\n \"Missed meeting this week\": (row) => row.lastInteractionDays >= 6,\n \"High churn risk score\": (row) => row.riskScore >= 75,\n \"Key contact departed\": (row) =>\n row.accountRisks.some((risk) => risk.toLowerCase().includes(\"contact\")),\n \"Recent large inflow\": (row) => row.expansionScore >= 85,\n \"Dormant (no payments)\": (row) => row.opportunityCount === 0,\n \"Support tickets elevated\": (row) =>\n row.accountRisks.some((risk) => risk.toLowerCase().includes(\"engagement\")),\n}\n\nconst columnHelper = createColumnHelper<DataRow>()\n\nconst DEFAULT_COLUMN_VISIBILITY: VisibilityState = {\n industry: false,\n lastInteraction: false,\n revenue: false,\n headcount: false,\n lastFunding: false,\n owner: false,\n opportunityCount: false,\n}\n\nfunction getEntityColor(name: string) {\n const colors = [\n \"bg-muted text-muted-foreground\",\n \"bg-gray-100 text-gray-600\",\n \"bg-zinc-100 text-zinc-600\",\n \"bg-blue-50 text-blue-600\",\n \"bg-indigo-50 text-indigo-600\",\n \"bg-violet-50 text-violet-600\",\n ]\n\n let hash = 0\n for (let i = 0; i < name.length; i += 1) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash)\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nfunction getIndustryColor(industry: string) {\n const colors: Record<string, string> = {\n \"E-commerce\": \"bg-emerald-50 text-emerald-700 border-emerald-100\",\n \"Food Delivery\": \"bg-blue-50 text-blue-700 border-blue-100\",\n \"Financial Technology\": \"bg-amber-50 text-amber-700 border-amber-100\",\n \"Workforce Management\": \"bg-violet-50 text-violet-700 border-violet-100\",\n \"Artificial Intelligence\": \"bg-rose-50 text-rose-700 border-rose-100\",\n \"Health Technology\": \"bg-orange-50 text-orange-700 border-orange-100\",\n Software: \"bg-muted text-muted-foreground border-border\",\n }\n\n return colors[industry] ?? \"bg-muted text-muted-foreground border-border\"\n}\n\nfunction toggleFilterValue(\n current: Record<string, string[]>,\n categoryId: string,\n option: string\n) {\n const currentValues = current[categoryId] ?? []\n const isActive = currentValues.includes(option)\n const nextValues = isActive\n ? currentValues.filter((value) => value !== option)\n : [...currentValues, option]\n\n return {\n ...current,\n [categoryId]: nextValues,\n }\n}\n\nfunction isRowMatchingCategoryFilter(\n row: DataRow,\n categoryId: string,\n options: string[]\n) {\n if (options.length === 0) {\n return true\n }\n\n switch (categoryId) {\n case \"industry\":\n return options.some((option) => row.industry.includes(option))\n case \"lastInteraction\":\n return options.includes(row.lastInteraction)\n case \"createdAt\":\n return options.includes(row.createdAt)\n case \"revenue\":\n return options.includes(row.revenue)\n case \"headcount\":\n return options.includes(row.headcount)\n case \"lastFunding\":\n return options.includes(row.lastFunding)\n case \"owner\":\n return options.includes(row.owner)\n case \"opportunityCount\":\n return options.some((option) => {\n if (option === \"3+\") {\n return row.opportunityCount >= 3\n }\n return row.opportunityCount === Number(option)\n })\n default:\n return true\n }\n}\n\nexport interface DataTableProps {\n onRowClick?: (row: DataRow) => void\n rows?: DataRow[]\n filterCategories?: DataTableFilterCategory[]\n quickViews?: string[]\n moreQuickViews?: string[]\n quickViewFilters?: Record<string, (row: DataRow) => boolean>\n iconMap?: { salesforce?: string }\n entityUrlBuilder?: (row: DataRow) => string\n onScoreFactorFeedback?: (account: string, scoreType: string, factorKey: string, type: \"up\" | \"down\" | null, detail?: string) => void\n onScoreApproveFeedback?: (account: string, scoreType: string, reasons: string[], detail: string) => void\n onScoreDismissFeedback?: (account: string, scoreType: string, reasons: string[], detail: string) => void\n}\n\nexport function DataTable({\n onRowClick,\n rows: rowsProp,\n filterCategories: filterCategoriesProp,\n quickViews: quickViewsProp,\n moreQuickViews: moreQuickViewsProp,\n quickViewFilters: quickViewFiltersProp,\n iconMap,\n entityUrlBuilder,\n onScoreFactorFeedback,\n onScoreApproveFeedback,\n onScoreDismissFeedback,\n}: DataTableProps = {}) {\n const resolvedRows = rowsProp ?? ROWS\n const resolvedFilterCategories = filterCategoriesProp ?? FILTER_CATEGORIES\n const resolvedQuickViews = quickViewsProp ?? QUICK_VIEWS\n const resolvedMoreQuickViews = moreQuickViewsProp ?? MORE_QUICK_VIEWS\n const resolvedQuickViewFilters = quickViewFiltersProp ?? QUICK_VIEW_FILTERS\n\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>(\n DEFAULT_COLUMN_VISIBILITY\n )\n const [selectedFilters, setSelectedFilters] = React.useState<Record<string, string[]>>(\n {}\n )\n const [activeQuickView, setActiveQuickView] =\n React.useState<DataTableQuickViewValue>(null)\n const [scoreModal, setScoreModal] = React.useState<{\n row: DataRow\n type: \"Risk\" | \"Expansion\"\n } | null>(null)\n\n React.useEffect(() => {\n if (!activeQuickView) {\n return\n }\n\n setColumnVisibility((previous) => {\n const next = { ...previous }\n if (activeQuickView.includes(\"Touched\")) {\n next.lastInteraction = true\n }\n if (activeQuickView.includes(\"Growth\")) {\n next.expansionScore = true\n }\n if (activeQuickView.includes(\"risk\") || activeQuickView.includes(\"Risk\")) {\n next.riskScore = true\n }\n return next\n })\n }, [activeQuickView])\n\n const filteredRows = React.useMemo(() => {\n return resolvedRows.filter((row) => {\n const quickViewMatches = activeQuickView\n ? (resolvedQuickViewFilters[activeQuickView]?.(row) ?? true)\n : true\n\n if (!quickViewMatches) {\n return false\n }\n\n return Object.entries(selectedFilters).every(([categoryId, options]) =>\n isRowMatchingCategoryFilter(row, categoryId, options)\n )\n })\n }, [activeQuickView, selectedFilters, resolvedRows, resolvedQuickViewFilters])\n\n const columns = React.useMemo(\n () => [\n columnHelper.accessor(\"name\", {\n header: \"Entity\",\n cell: (info) => {\n const row = info.row.original\n const sfUrl = entityUrlBuilder?.(row)\n return (\n <div className=\"flex min-w-max items-center gap-3\">\n <div\n className={cn(\n \"flex h-6 w-6 shrink-0 items-center justify-center rounded text-[10px] font-bold\",\n getEntityColor(row.name)\n )}\n >\n {row.name.slice(0, 1)}\n </div>\n <span className=\"text-sm font-medium text-foreground\">\n {row.name}\n </span>\n {iconMap?.salesforce && (\n <a\n href={sfUrl ?? \"#\"}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n className=\"shrink-0 text-muted-foreground hover:text-foreground transition-colors\"\n >\n <img src={iconMap.salesforce} alt=\"Salesforce\" className=\"w-4 h-4 object-contain\" />\n </a>\n )}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"accountRisks\", {\n header: \"Risk Signals\",\n cell: (info) => {\n const risks = info.getValue()\n if (!risks.length) {\n return <span className=\"text-xs text-muted-foreground\">None</span>\n }\n\n return (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {risks.slice(0, 2).map((risk) => (\n <Badge\n key={risk}\n variant=\"outline\"\n className=\"rounded-md border-red-200 bg-red-50 px-2 py-0.5 text-xs font-normal text-red-700\"\n >\n {risk}\n </Badge>\n ))}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"riskScore\", {\n id: \"riskScore\",\n header: \"Risk Score\",\n cell: (info) => (\n <div\n className=\"inline-flex cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation()\n setScoreModal({ row: info.row.original, type: \"Risk\" })\n }}\n >\n <Badge\n variant=\"outline\"\n className={cn(\n \"px-2 py-0.5 text-xs font-medium hover:underline decoration-dotted underline-offset-2\",\n info.getValue() >= 60\n ? \"border-red-200 bg-red-50 text-red-700\"\n : \"border-border bg-muted/50 text-foreground\"\n )}\n >\n {info.getValue()}%\n </Badge>\n </div>\n ),\n }),\n columnHelper.accessor(\"expansionScore\", {\n id: \"expansionScore\",\n header: \"Expansion Score\",\n cell: (info) => (\n <div\n className=\"inline-flex cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation()\n setScoreModal({ row: info.row.original, type: \"Expansion\" })\n }}\n >\n <Badge\n variant=\"outline\"\n className={cn(\n \"px-2 py-0.5 text-xs font-medium hover:underline decoration-dotted underline-offset-2\",\n info.getValue() >= 70\n ? \"border-blue-200 bg-blue-50 text-blue-700\"\n : \"border-border bg-muted/50 text-foreground\"\n )}\n >\n {info.getValue()}%\n </Badge>\n </div>\n ),\n }),\n columnHelper.accessor(\"growthIndicators\", {\n header: \"Growth Signals\",\n cell: (info) => {\n const indicators = info.getValue()\n if (!indicators.length) {\n return <span className=\"text-xs text-muted-foreground\">None</span>\n }\n return (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {indicators.slice(0, 2).map((indicator) => (\n <Badge\n key={indicator}\n variant=\"outline\"\n className=\"rounded-md border-blue-200 bg-blue-50 px-2 py-0.5 text-xs font-normal text-blue-700\"\n >\n {indicator}\n </Badge>\n ))}\n </div>\n )\n },\n }),\n columnHelper.accessor(\"industry\", {\n header: \"Industry\",\n cell: (info) => (\n <div className=\"flex min-w-max items-center gap-1.5\">\n {info.getValue().slice(0, 2).map((industry) => (\n <Badge\n key={industry}\n variant=\"outline\"\n className={cn(\n \"rounded-md px-2 py-0.5 text-xs font-normal\",\n getIndustryColor(industry)\n )}\n >\n {industry}\n </Badge>\n ))}\n </div>\n ),\n }),\n columnHelper.accessor(\"lastInteraction\", {\n header: \"Last interaction\",\n cell: (info) => <span className=\"text-sm\">{info.getValue()}</span>,\n }),\n columnHelper.accessor(\"revenue\", {\n header: \"Revenue\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"headcount\", {\n header: \"Headcount\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"lastFunding\", {\n header: \"Last funding\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n columnHelper.accessor(\"owner\", {\n header: \"Owner\",\n cell: (info) => <span className=\"text-sm\">{info.getValue()}</span>,\n }),\n columnHelper.accessor(\"opportunityCount\", {\n header: \"Opportunity count\",\n cell: (info) => (\n <span className=\"rounded-md bg-muted/50 px-2 py-0.5 text-xs font-medium\">\n {info.getValue()}\n </span>\n ),\n }),\n ],\n [iconMap, entityUrlBuilder]\n )\n\n const table = useReactTable({\n data: filteredRows,\n columns,\n state: {\n sorting,\n columnVisibility,\n },\n onSortingChange: setSorting,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const displayColumns = table.getAllLeafColumns().map((column) => {\n const header = column.columnDef.header\n const label = typeof header === \"string\" ? header : column.id\n\n return {\n id: column.id,\n label,\n visible: column.getIsVisible(),\n canHide: column.getCanHide(),\n }\n })\n\n const toggleCategoryFilter = (categoryId: string, option: string) => {\n setSelectedFilters((previous) => toggleFilterValue(previous, categoryId, option))\n }\n\n return (\n <div className=\"relative flex h-full min-h-[560px] flex-col bg-background\">\n <DataTableToolbar\n categories={resolvedFilterCategories}\n selectedFilters={selectedFilters}\n onToggleFilter={toggleCategoryFilter}\n sorting={sorting}\n onSortingChange={setSorting}\n displayColumns={displayColumns}\n onToggleColumn={(columnId) => table.getColumn(columnId)?.toggleVisibility()}\n onResetDisplay={() => setColumnVisibility(DEFAULT_COLUMN_VISIBILITY)}\n />\n\n <DataTableQuickViews\n quickViews={resolvedQuickViews}\n moreViews={resolvedMoreQuickViews}\n activeView={activeQuickView}\n onViewChange={setActiveQuickView}\n />\n\n <div className=\"relative min-h-0 flex-1 overflow-auto border-t border-border\">\n <table className=\"w-max min-w-full border-collapse text-sm\">\n <thead className=\"sticky top-0 z-10 bg-background\">\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className=\"border-b border-border\">\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n className=\"h-10 border-r border-border px-4 text-left text-xs font-medium text-muted-foreground/80 last:border-r-0\"\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.length > 0 ? (\n <>\n {table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n onClick={() => onRowClick?.(row.original)}\n className={cn(\n \"group border-b border-border/50 transition-colors hover:bg-muted/30\",\n onRowClick && \"cursor-pointer\",\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <td\n key={cell.id}\n className=\"border-r border-border/40 px-4 py-2.5 align-middle last:border-r-0\"\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))}\n <tr>\n <td\n className=\"px-4 py-2 text-xs text-muted-foreground\"\n colSpan={columns.length}\n >\n {table.getRowModel().rows.length} rows\n </td>\n </tr>\n </>\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"h-52 px-4 text-center\">\n <div className=\"flex flex-col items-center gap-1 text-muted-foreground\">\n <SearchX className=\"h-7 w-7 opacity-40\" />\n <p className=\"text-sm font-medium\">No rows found</p>\n <p className=\"text-xs\">Try adjusting your filters or quick views</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n\n {scoreModal && (() => {\n const data = SCORE_ANALYSIS[scoreModal.type](scoreModal.row)\n return (\n <ScoreAnalysisModal\n open\n onOpenChange={(open) => { if (!open) setScoreModal(null) }}\n title={data.title}\n description={data.description}\n score={scoreModal.type === \"Risk\" ? scoreModal.row.riskScore : scoreModal.row.expansionScore}\n whyNow={data.whyNow}\n evidence={data.evidence}\n factors={data.factors}\n onFactorFeedback={onScoreFactorFeedback\n ? (key, type, detail) => onScoreFactorFeedback(scoreModal.row.name, scoreModal.type, key, type, detail)\n : (key, type, detail) => console.log(\"Factor feedback:\", { account: scoreModal.row.name, factor: key, type, detail })\n }\n companyName={scoreModal.row.name}\n opportunityUrl={`https://acme.lightning.force.com/lightning/r/Opportunity/006${scoreModal.row.id}/view`}\n onApprove={() => console.log(\"Approved signal — creating opportunity:\", { account: scoreModal.row.name, type: scoreModal.type })}\n onApproveFeedback={onScoreApproveFeedback\n ? (reasons, detail) => onScoreApproveFeedback(scoreModal.row.name, scoreModal.type, reasons, detail)\n : (reasons, detail) => console.log(\"Approval feedback:\", { account: scoreModal.row.name, reasons, detail })\n }\n onDismiss={onScoreDismissFeedback\n ? (reasons, detail) => onScoreDismissFeedback(scoreModal.row.name, scoreModal.type, reasons, detail)\n : (reasons, detail) => console.log(\"Dismissed signal:\", { account: scoreModal.row.name, reasons, detail })\n }\n />\n )\n })()}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
@@ -40,7 +40,7 @@ function EntityPanel({
40
40
  }, [onClose]);
41
41
  const panelContent = /* @__PURE__ */ jsx(EntityPanelContext.Provider, { value: { isFullscreen, setIsFullscreen, onClose: handleClose }, children });
42
42
  if (isFullscreen && isOpen) {
43
- return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex flex-col overflow-hidden bg-background", children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-6 py-6", children: panelContent }) });
43
+ return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex flex-col overflow-hidden bg-background", children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-5 py-5", children: panelContent }) });
44
44
  }
45
45
  return /* @__PURE__ */ jsx(Sheet, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ jsxs(
46
46
  SheetContent,
@@ -50,7 +50,7 @@ function EntityPanel({
50
50
  showCloseButton: false,
51
51
  children: [
52
52
  /* @__PURE__ */ jsx(SheetHeader, { className: "sr-only p-0", children: /* @__PURE__ */ jsx(SheetTitle, { children: "Entity panel" }) }),
53
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-6 py-6", children: panelContent })
53
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-5 py-5", children: panelContent })
54
54
  ]
55
55
  }
56
56
  ) });
@@ -73,10 +73,10 @@ function EntityPanelHeader({
73
73
  headerAction
74
74
  }) {
75
75
  const { isFullscreen, setIsFullscreen, onClose } = useEntityPanel();
76
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-6", children: [
76
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
77
77
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
78
78
  icon != null ? icon : /* @__PURE__ */ jsx(CalendarDays, { className: "w-5 h-5 text-muted-foreground shrink-0" }),
79
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-foreground truncate", children: title }),
79
+ /* @__PURE__ */ jsx("h2", { className: "text-[16px] font-semibold text-foreground truncate", children: title }),
80
80
  badgeLabel && /* @__PURE__ */ jsx(
81
81
  Badge,
82
82
  {
@@ -125,21 +125,21 @@ function EntityPanelTabs({
125
125
  activeTab,
126
126
  onTabChange
127
127
  }) {
128
- return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-6 border-b border-border mb-6", children: tabs.map((tab) => /* @__PURE__ */ jsx(
128
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-5 border-b border-border mb-4", children: tabs.map((tab) => /* @__PURE__ */ jsx(
129
129
  "button",
130
130
  {
131
131
  type: "button",
132
132
  onClick: () => onTabChange(tab.id),
133
- className: `pb-3 text-sm font-medium border-b-2 transition-colors ${activeTab === tab.id ? "border-primary text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`,
133
+ className: `pb-2.5 text-[13px] font-medium border-b-2 transition-colors ${activeTab === tab.id ? "border-primary text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`,
134
134
  children: tab.label
135
135
  },
136
136
  tab.id
137
137
  )) });
138
138
  }
139
139
  function EntityMetadataGrid({ fields }) {
140
- return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-[160px_1fr] gap-y-4 gap-x-6 mb-8 text-sm", children: fields.map((field, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
141
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground font-medium", children: [
142
- /* @__PURE__ */ jsx(field.icon, { className: "w-4 h-4" }),
140
+ return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-[140px_1fr] gap-y-2.5 gap-x-4 mb-6 text-sm", children: fields.map((field, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
141
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-muted-foreground text-[13px]", children: [
142
+ /* @__PURE__ */ jsx(field.icon, { className: "w-3.5 h-3.5 shrink-0" }),
143
143
  /* @__PURE__ */ jsx("span", { children: field.label })
144
144
  ] }),
145
145
  /* @__PURE__ */ jsx("div", { className: "text-foreground", children: field.value })
@@ -150,9 +150,9 @@ function EntitySection({
150
150
  children,
151
151
  action
152
152
  }) {
153
- return /* @__PURE__ */ jsxs("section", { className: "mb-8", children: [
154
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
155
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: title }),
153
+ return /* @__PURE__ */ jsxs("section", { className: "mb-6", children: [
154
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2.5", children: [
155
+ /* @__PURE__ */ jsx("h3", { className: "text-[13px] font-semibold text-foreground", children: title }),
156
156
  action
157
157
  ] }),
158
158
  children
@@ -212,13 +212,13 @@ function EntityPanelBrandIcon({
212
212
  function PotentialContacts({
213
213
  icons
214
214
  }) {
215
- return /* @__PURE__ */ jsxs("div", { className: "space-y-3 mb-8", children: [
215
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 mb-6", children: [
216
216
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
217
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: "Potential Contacts" }),
217
+ /* @__PURE__ */ jsx("h3", { className: "text-[13px] font-semibold text-foreground", children: "Potential Contacts" }),
218
218
  /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "3 identified" })
219
219
  ] }),
220
- /* @__PURE__ */ jsxs("div", { className: "space-y-0 pt-1", children: [
221
- /* @__PURE__ */ jsxs("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", children: [
220
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0", children: [
221
+ /* @__PURE__ */ jsxs("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", children: [
222
222
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [
223
223
  /* @__PURE__ */ jsx(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", children: "Primary" }),
224
224
  /* @__PURE__ */ jsx("span", { className: "font-medium text-sm text-foreground truncate", children: "Jackie Lee" }),
@@ -250,7 +250,7 @@ function PotentialContacts({
250
250
  ] })
251
251
  ] })
252
252
  ] }),
253
- /* @__PURE__ */ jsxs("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", children: [
253
+ /* @__PURE__ */ jsxs("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", children: [
254
254
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [
255
255
  /* @__PURE__ */ jsx(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", children: "78%" }),
256
256
  /* @__PURE__ */ jsx("span", { className: "font-medium text-sm text-foreground truncate", children: "Marcus Webb" }),
@@ -273,7 +273,7 @@ function PotentialContacts({
273
273
  ] })
274
274
  ] })
275
275
  ] }),
276
- /* @__PURE__ */ jsxs("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", children: [
276
+ /* @__PURE__ */ jsxs("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", children: [
277
277
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [
278
278
  /* @__PURE__ */ jsx(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", children: "65%" }),
279
279
  /* @__PURE__ */ jsx("span", { className: "font-medium text-sm text-foreground truncate", children: "Priya Shah" }),
@@ -314,9 +314,9 @@ function RecentActivity({
314
314
  filters = [],
315
315
  items = []
316
316
  }) {
317
- return /* @__PURE__ */ jsxs("div", { id: "entity-recent-activity", className: "space-y-4 mb-8 scroll-m-20", children: [
317
+ return /* @__PURE__ */ jsxs("div", { id: "entity-recent-activity", className: "space-y-3 mb-6 scroll-m-20", children: [
318
318
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
319
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: title }),
319
+ /* @__PURE__ */ jsx("h3", { className: "text-[13px] font-semibold text-foreground", children: title }),
320
320
  count && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: count })
321
321
  ] }),
322
322
  filters.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-1.5", children: filters.map((filter) => /* @__PURE__ */ jsx(
@@ -342,13 +342,13 @@ function RecentActivity({
342
342
  function ConnectedApps({
343
343
  icons
344
344
  }) {
345
- return /* @__PURE__ */ jsxs("div", { className: "space-y-3 mb-8", children: [
345
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2.5 mb-6", children: [
346
346
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
347
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: "Connected Apps" }),
347
+ /* @__PURE__ */ jsx("h3", { className: "text-[13px] font-semibold text-foreground", children: "Connected Apps" }),
348
348
  /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "3 connected" })
349
349
  ] }),
350
- /* @__PURE__ */ jsxs("div", { className: "space-y-0 pt-1", children: [
351
- /* @__PURE__ */ jsxs("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", children: [
350
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0", children: [
351
+ /* @__PURE__ */ jsxs("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", children: [
352
352
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 min-w-0", children: [
353
353
  /* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(
354
354
  EntityPanelBrandIcon,
@@ -369,7 +369,7 @@ function ConnectedApps({
369
369
  /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground", children: "Open" })
370
370
  ] })
371
371
  ] }),
372
- /* @__PURE__ */ jsxs("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", children: [
372
+ /* @__PURE__ */ jsxs("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", children: [
373
373
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 min-w-0", children: [
374
374
  /* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(
375
375
  EntityPanelBrandIcon,
@@ -390,7 +390,7 @@ function ConnectedApps({
390
390
  /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer hover:text-foreground", children: "Open" })
391
391
  ] })
392
392
  ] }),
393
- /* @__PURE__ */ jsxs("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", children: [
393
+ /* @__PURE__ */ jsxs("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", children: [
394
394
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 min-w-0", children: [
395
395
  /* @__PURE__ */ jsx("div", { className: "w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0", children: /* @__PURE__ */ jsx(FileText, { className: "w-4 h-4 text-foreground" }) }),
396
396
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
@@ -455,7 +455,7 @@ function EntityDetails({ onClose: _onClose }) {
455
455
  "button",
456
456
  {
457
457
  onClick: () => setShowMore(!showMore),
458
- className: "flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-8",
458
+ className: "flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-6",
459
459
  children: [
460
460
  showMore ? "See less" : "See more",
461
461
  showMore ? /* @__PURE__ */ jsx(ChevronUp, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "w-3 h-3" })
@@ -545,7 +545,7 @@ function SourcesToggle() {
545
545
  { name: "PR Newswire", type: "News & press", lastPull: "6h ago" },
546
546
  { name: "Clearbit", type: "Tech stack & firmographics", lastPull: "2h ago" }
547
547
  ];
548
- return /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
548
+ return /* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
549
549
  /* @__PURE__ */ jsxs(
550
550
  "button",
551
551
  {