@handled-ai/design-system 0.9.6 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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":[]}
@@ -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
  {
@@ -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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@handled-ai/design-system",
3
- "version": "0.9.6",
3
+ "version": "0.9.7",
4
4
  "description": "Handled UI component library (shadcn-style, New York)",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@9.12.0",
@@ -47,7 +47,7 @@ const badgeColors: Record<string, string> = {
47
47
 
48
48
  function ContactRow({ contact }: { contact: ContactItem }) {
49
49
  return (
50
- <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">
50
+ <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">
51
51
  <div className="flex items-center gap-2.5 min-w-0">
52
52
  {contact.badge && (
53
53
  <Badge
@@ -57,9 +57,9 @@ function ContactRow({ contact }: { contact: ContactItem }) {
57
57
  {contact.badge.label}
58
58
  </Badge>
59
59
  )}
60
- <span className="font-medium text-sm text-foreground truncate">{contact.name}</span>
61
- <span className="text-muted-foreground text-sm shrink-0">&middot;</span>
62
- <span className="text-muted-foreground text-sm truncate">{contact.role}</span>
60
+ <span className="font-medium text-[13px] text-foreground truncate">{contact.name}</span>
61
+ <span className="text-muted-foreground text-[13px] shrink-0">&middot;</span>
62
+ <span className="text-muted-foreground text-[13px] truncate">{contact.role}</span>
63
63
  </div>
64
64
 
65
65
  <div className="flex items-center gap-1 shrink-0">
@@ -98,9 +98,9 @@ function ContactRow({ contact }: { contact: ContactItem }) {
98
98
 
99
99
  export function ContactList({ title, count, contacts, onAdd, addLabel }: ContactListProps) {
100
100
  return (
101
- <div className="space-y-3">
101
+ <div className="space-y-2.5">
102
102
  <div className="flex items-center justify-between">
103
- <h3 className="text-sm font-semibold text-foreground">{title}</h3>
103
+ <h3 className="text-[13px] font-semibold text-foreground">{title}</h3>
104
104
  <div className="flex items-center gap-3">
105
105
  {count && <span className="text-xs text-muted-foreground">{count}</span>}
106
106
  {onAdd && (
@@ -57,7 +57,7 @@ export function EntityPanel({
57
57
  if (isFullscreen && isOpen) {
58
58
  return (
59
59
  <div className="fixed inset-0 z-50 flex flex-col overflow-hidden bg-background">
60
- <div className="flex-1 overflow-y-auto px-6 py-6">{panelContent}</div>
60
+ <div className="flex-1 overflow-y-auto px-5 py-5">{panelContent}</div>
61
61
  </div>
62
62
  )
63
63
  }
@@ -72,7 +72,7 @@ export function EntityPanel({
72
72
  <SheetHeader className="sr-only p-0">
73
73
  <SheetTitle>Entity panel</SheetTitle>
74
74
  </SheetHeader>
75
- <div className="flex-1 overflow-y-auto px-6 py-6">{panelContent}</div>
75
+ <div className="flex-1 overflow-y-auto px-5 py-5">{panelContent}</div>
76
76
  </SheetContent>
77
77
  </Sheet>
78
78
  )
@@ -112,10 +112,10 @@ export function EntityPanelHeader({
112
112
  const { isFullscreen, setIsFullscreen, onClose } = useEntityPanel()
113
113
 
114
114
  return (
115
- <div className="flex items-center justify-between mb-6">
115
+ <div className="flex items-center justify-between mb-4">
116
116
  <div className="flex items-center gap-2 min-w-0">
117
117
  {icon ?? <CalendarDays className="w-5 h-5 text-muted-foreground shrink-0" />}
118
- <h2 className="text-lg font-semibold text-foreground truncate">{title}</h2>
118
+ <h2 className="text-[16px] font-semibold text-foreground truncate">{title}</h2>
119
119
  {badgeLabel && (
120
120
  <Badge
121
121
  variant="outline"
@@ -173,13 +173,13 @@ export function EntityPanelTabs({
173
173
  onTabChange: (id: string) => void
174
174
  }) {
175
175
  return (
176
- <div className="flex items-center gap-6 border-b border-border mb-6">
176
+ <div className="flex items-center gap-5 border-b border-border mb-4">
177
177
  {tabs.map((tab) => (
178
178
  <button
179
179
  key={tab.id}
180
180
  type="button"
181
181
  onClick={() => onTabChange(tab.id)}
182
- className={`pb-3 text-sm font-medium border-b-2 transition-colors ${
182
+ className={`pb-2.5 text-[13px] font-medium border-b-2 transition-colors ${
183
183
  activeTab === tab.id
184
184
  ? "border-primary text-foreground"
185
185
  : "border-transparent text-muted-foreground hover:text-foreground"
@@ -204,11 +204,11 @@ export interface EntityMetadataField {
204
204
 
205
205
  export function EntityMetadataGrid({ fields }: { fields: EntityMetadataField[] }) {
206
206
  return (
207
- <div className="grid grid-cols-1 md:grid-cols-[160px_1fr] gap-y-4 gap-x-6 mb-8 text-sm">
207
+ <div className="grid grid-cols-1 md:grid-cols-[140px_1fr] gap-y-2.5 gap-x-4 mb-6 text-sm">
208
208
  {fields.map((field, idx) => (
209
209
  <React.Fragment key={idx}>
210
- <div className="flex items-center gap-2 text-muted-foreground font-medium">
211
- <field.icon className="w-4 h-4" />
210
+ <div className="flex items-center gap-1.5 text-muted-foreground text-[13px]">
211
+ <field.icon className="w-3.5 h-3.5 shrink-0" />
212
212
  <span>{field.label}</span>
213
213
  </div>
214
214
  <div className="text-foreground">{field.value}</div>
@@ -232,9 +232,9 @@ export function EntitySection({
232
232
  action?: React.ReactNode
233
233
  }) {
234
234
  return (
235
- <section className="mb-8">
236
- <div className="flex items-center justify-between mb-3">
237
- <h3 className="text-sm font-semibold text-foreground">{title}</h3>
235
+ <section className="mb-6">
236
+ <div className="flex items-center justify-between mb-2.5">
237
+ <h3 className="text-[13px] font-semibold text-foreground">{title}</h3>
238
238
  {action}
239
239
  </div>
240
240
  {children}
@@ -328,13 +328,13 @@ export function PotentialContacts({
328
328
  icons?: Pick<EntityPanelBrandIcons, "linkedin" | "gmail">
329
329
  }) {
330
330
  return (
331
- <div className="space-y-3 mb-8">
331
+ <div className="space-y-2.5 mb-6">
332
332
  <div className="flex items-center justify-between">
333
- <h3 className="text-sm font-semibold text-foreground">Potential Contacts</h3>
333
+ <h3 className="text-[13px] font-semibold text-foreground">Potential Contacts</h3>
334
334
  <span className="text-xs text-muted-foreground">3 identified</span>
335
335
  </div>
336
- <div className="space-y-0 pt-1">
337
- <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">
336
+ <div className="space-y-0">
337
+ <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">
338
338
  <div className="flex items-center gap-2.5 min-w-0">
339
339
  <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>
340
340
  <span className="font-medium text-sm text-foreground truncate">Jackie Lee</span>
@@ -364,7 +364,7 @@ export function PotentialContacts({
364
364
  </div>
365
365
  </div>
366
366
 
367
- <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">
367
+ <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">
368
368
  <div className="flex items-center gap-2.5 min-w-0">
369
369
  <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>
370
370
  <span className="font-medium text-sm text-foreground truncate">Marcus Webb</span>
@@ -386,7 +386,7 @@ export function PotentialContacts({
386
386
  </div>
387
387
  </div>
388
388
 
389
- <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">
389
+ <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">
390
390
  <div className="flex items-center gap-2.5 min-w-0">
391
391
  <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>
392
392
  <span className="font-medium text-sm text-foreground truncate">Priya Shah</span>
@@ -438,9 +438,9 @@ export function RecentActivity({
438
438
  items?: TimelineEvent[]
439
439
  }) {
440
440
  return (
441
- <div id="entity-recent-activity" className="space-y-4 mb-8 scroll-m-20">
441
+ <div id="entity-recent-activity" className="space-y-3 mb-6 scroll-m-20">
442
442
  <div className="flex items-center justify-between">
443
- <h3 className="text-sm font-semibold text-foreground">{title}</h3>
443
+ <h3 className="text-[13px] font-semibold text-foreground">{title}</h3>
444
444
  {count && <span className="text-xs text-muted-foreground">{count}</span>}
445
445
  </div>
446
446
 
@@ -483,14 +483,14 @@ export function ConnectedApps({
483
483
  icons?: Pick<EntityPanelBrandIcons, "slack" | "gdoc">
484
484
  }) {
485
485
  return (
486
- <div className="space-y-3 mb-8">
486
+ <div className="space-y-2.5 mb-6">
487
487
  <div className="flex items-center justify-between">
488
- <h3 className="text-sm font-semibold text-foreground">Connected Apps</h3>
488
+ <h3 className="text-[13px] font-semibold text-foreground">Connected Apps</h3>
489
489
  <span className="text-xs text-muted-foreground">3 connected</span>
490
490
  </div>
491
491
 
492
- <div className="space-y-0 pt-1">
493
- <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">
492
+ <div className="space-y-0">
493
+ <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">
494
494
  <div className="flex items-center gap-3 min-w-0">
495
495
  <div className="w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0">
496
496
  <EntityPanelBrandIcon
@@ -511,7 +511,7 @@ export function ConnectedApps({
511
511
  </div>
512
512
  </div>
513
513
 
514
- <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">
514
+ <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">
515
515
  <div className="flex items-center gap-3 min-w-0">
516
516
  <div className="w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0">
517
517
  <EntityPanelBrandIcon
@@ -532,7 +532,7 @@ export function ConnectedApps({
532
532
  </div>
533
533
  </div>
534
534
 
535
- <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">
535
+ <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">
536
536
  <div className="flex items-center gap-3 min-w-0">
537
537
  <div className="w-8 h-8 rounded-md border border-border/60 bg-muted/30 flex items-center justify-center shrink-0">
538
538
  <FileText className="w-4 h-4 text-foreground" />
@@ -625,7 +625,7 @@ export function EntityDetails({ onClose: _onClose }: { onClose?: () => void }) {
625
625
  {leadFields.length > 6 && (
626
626
  <button
627
627
  onClick={() => setShowMore(!showMore)}
628
- className="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-8"
628
+ className="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors mb-6"
629
629
  >
630
630
  {showMore ? "See less" : "See more"}
631
631
  {showMore ? <ChevronUp className="w-3 h-3" /> : <ChevronDown className="w-3 h-3" />}
@@ -736,7 +736,7 @@ function SourcesToggle() {
736
736
  ]
737
737
 
738
738
  return (
739
- <div className="mb-8">
739
+ <div className="mb-6">
740
740
  <button
741
741
  onClick={() => setExpanded(!expanded)}
742
742
  className="flex items-center gap-1.5 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors"