@veploy/ploychat 0.1.0 → 0.1.1

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.
package/dist/index.js CHANGED
@@ -378,12 +378,15 @@ function ConnectChannel({ inbox, onClose }) {
378
378
  setBusy(false);
379
379
  }
380
380
  };
381
- const handleCreate = async () => {
381
+ const handleConnect = async () => {
382
382
  setError(null);
383
383
  setBusy(true);
384
384
  try {
385
- const ch = await inbox.createChannel("WhatsApp");
386
- setChannel(ch);
385
+ let ch = channel;
386
+ if (!ch) {
387
+ ch = await inbox.createChannel("WhatsApp");
388
+ setChannel(ch);
389
+ }
387
390
  await startConnect(ch);
388
391
  } catch (e) {
389
392
  setError(e.message);
@@ -404,31 +407,15 @@ function ConnectChannel({ inbox, onClose }) {
404
407
  status,
405
408
  ")"
406
409
  ] })
407
- ] }) : channel ? /* @__PURE__ */ jsxs("div", { className: "text-center py-4", children: [
408
- /* @__PURE__ */ jsxs("p", { className: "text-[13px] text-slate-600 mb-3", children: [
409
- "Canal: ",
410
- channel.display_name,
411
- " \xB7 ",
412
- channel.status
413
- ] }),
414
- /* @__PURE__ */ jsx2(
415
- "button",
416
- {
417
- disabled: busy,
418
- onClick: () => startConnect(channel),
419
- className: "bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 text-white px-4 py-2 rounded-lg text-[13px] font-medium",
420
- children: busy ? "Gerando\u2026" : "Gerar QR Code"
421
- }
422
- )
423
410
  ] }) : /* @__PURE__ */ jsxs("div", { className: "text-center py-4", children: [
424
- /* @__PURE__ */ jsx2("p", { className: "text-[13px] text-slate-600 mb-3", children: "Nenhum canal ainda. Crie um para conectar um n\xFAmero." }),
411
+ /* @__PURE__ */ jsx2("p", { className: "text-[13px] text-slate-600 mb-3", children: "Conecte um n\xFAmero de WhatsApp para come\xE7ar a atender." }),
425
412
  /* @__PURE__ */ jsx2(
426
413
  "button",
427
414
  {
428
415
  disabled: busy,
429
- onClick: handleCreate,
416
+ onClick: handleConnect,
430
417
  className: "bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 text-white px-4 py-2 rounded-lg text-[13px] font-medium",
431
- children: busy ? "Criando\u2026" : "Criar canal"
418
+ children: busy ? "Gerando\u2026" : "Gerar QR Code"
432
419
  }
433
420
  )
434
421
  ] })
@@ -2148,7 +2135,8 @@ function PloyChat({
2148
2135
  className
2149
2136
  }) {
2150
2137
  const config = { apiBase, workspaceId, getToken, supabase, supabaseUrl, supabaseAnonKey };
2151
- return /* @__PURE__ */ jsx6(PloyConfigProvider, { config, children: /* @__PURE__ */ jsx6("div", { className, style: { height: "100%", width: "100%" }, children: /* @__PURE__ */ jsx6(App, {}) }) });
2138
+ const rootClass = ["ploychat-root", className].filter(Boolean).join(" ");
2139
+ return /* @__PURE__ */ jsx6(PloyConfigProvider, { config, children: /* @__PURE__ */ jsx6("div", { className: rootClass, style: { height: "100%", width: "100%" }, children: /* @__PURE__ */ jsx6(App, {}) }) });
2152
2140
  }
2153
2141
  var PloyChat_default = PloyChat;
2154
2142
  export {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/App.jsx","../src/lib/useInbox.js","../src/lib/context.jsx","../src/lib/client.js","../src/lib/mappers.js","../src/components/ConnectChannel.jsx","../src/components/EmojiPicker.jsx","../src/components/TransferModal.jsx","../src/PloyChat.jsx"],"sourcesContent":["'use client'\n\nimport { useMemo, useRef, useState, useEffect } from 'react'\nimport { useInbox } from '@/lib/useInbox'\nimport ConnectChannel from '@/components/ConnectChannel'\nimport EmojiPicker from '@/components/EmojiPicker'\nimport TransferModal from '@/components/TransferModal'\n\n/* ---------- Ícones SVG inline (sem dependências) ---------- */\nconst Icon = ({ d, className = 'w-4 h-4', stroke = 1.8, fill = 'none' }) => (\n <svg viewBox=\"0 0 24 24\" className={className} fill={fill} stroke=\"currentColor\" strokeWidth={stroke} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {d}\n </svg>\n)\nconst I = {\n inbox: <Icon d={<><path d=\"M22 12h-6l-2 3h-4l-2-3H2\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11Z\"/></>} />,\n chat: <Icon d={<path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5Z\"/>} />,\n contacts: <Icon d={<><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75\"/></>} />,\n send: <Icon d={<><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></>} />,\n bolt: <Icon d={<polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/>} />,\n bulb: <Icon d={<><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/><path d=\"M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V18h6v-1.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\"/></>} />,\n book: <Icon d={<><path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"/><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z\"/></>} />,\n chart: <Icon d={<><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"/><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"/><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"/></>} />,\n users: <Icon d={<><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75\"/></>} />,\n grid: <Icon d={<><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/></>} />,\n briefcase: <Icon d={<><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"/></>} />,\n search: <Icon d={<><circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></>} />,\n filter: <Icon d={<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>} />,\n sort: <Icon d={<><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"m21 8-4-4-4 4\"/><path d=\"M17 4v16\"/></>} />,\n chevDown: <Icon d={<polyline points=\"6 9 12 15 18 9\"/>} />,\n chevRight: <Icon d={<polyline points=\"9 18 15 12 9 6\"/>} />,\n panel: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/></>} />,\n more: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/></>} />,\n star: <Icon d={<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>} />,\n phone: <Icon d={<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92Z\"/>} />,\n moon: <Icon d={<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z\"/>} />,\n check: <Icon d={<polyline points=\"20 6 9 17 4 12\"/>} />,\n paperclip: <Icon d={<path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"/>} />,\n emoji: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"/><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"/><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"/></>} />,\n mic: <Icon d={<><path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3Z\"/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/></>} />,\n image: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></>} />,\n file: <Icon d={<><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></>} />,\n pin: <Icon d={<><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></>} />,\n tag: <Icon d={<><path d=\"M20.59 13.41 13.42 20.58a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82Z\"/><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"/></>} />,\n link: <Icon d={<><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/></>} />,\n clock: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/></>} />,\n forward: <Icon d={<><polyline points=\"15 17 20 12 15 7\"/><path d=\"M4 18v-2a4 4 0 0 1 4-4h12\"/></>} />,\n x: <Icon d={<><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></>} />,\n external: <Icon d={<><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></>} />,\n plus: <Icon d={<><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></>} />,\n template: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"/></>} />,\n reply: <Icon d={<><polyline points=\"9 17 4 12 9 7\"/><path d=\"M20 18v-2a4 4 0 0 0-4-4H4\"/></>} />,\n whatsapp: <Icon d={<><path d=\"M20.52 3.48A11.93 11.93 0 0 0 12.02 0C5.4 0 .03 5.37.03 11.99c0 2.11.55 4.18 1.6 6L0 24l6.18-1.62a12 12 0 0 0 5.84 1.49h.01c6.62 0 11.99-5.37 11.99-11.99 0-3.2-1.25-6.21-3.5-8.4Z\"/><path d=\"M9.3 7.4c-.2-.5-.4-.5-.6-.5h-.5c-.2 0-.5.07-.7.34-.27.27-.93.91-.93 2.22 0 1.31.95 2.58 1.08 2.76.13.18 1.86 2.96 4.58 4.04 2.27.89 2.73.71 3.22.67.49-.05 1.58-.65 1.8-1.27.22-.62.22-1.16.15-1.27-.07-.11-.25-.18-.52-.31-.27-.13-1.58-.78-1.83-.87-.24-.09-.42-.13-.6.13-.18.27-.69.87-.84 1.05-.16.18-.31.2-.58.07-.27-.13-1.14-.42-2.17-1.34-.8-.71-1.34-1.59-1.5-1.86-.16-.27-.02-.41.12-.55.12-.12.27-.31.4-.47.13-.16.18-.27.27-.45.09-.18.04-.34-.02-.47-.07-.13-.6-1.43-.82-1.96Z\"/></>} fill=\"currentColor\" stroke=\"none\" />,\n home: <Icon d={<><path d=\"M3 9.5 12 3l9 6.5V20a1 1 0 0 1-1 1h-5v-7h-6v7H4a1 1 0 0 1-1-1V9.5Z\"/></>} />,\n calendar: <Icon d={<><rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/><line x1=\"8\" y1=\"2.5\" x2=\"8\" y2=\"6\"/><line x1=\"16\" y1=\"2.5\" x2=\"16\" y2=\"6\"/></>} />,\n building: <Icon d={<><rect x=\"4\" y=\"2.5\" width=\"16\" height=\"19\" rx=\"1.5\"/><path d=\"M9 21.5v-4h6v4\"/><path d=\"M8.5 7h.01M12 7h.01M15.5 7h.01M8.5 11h.01M12 11h.01M15.5 11h.01M8.5 15h.01M15.5 15h.01\"/></>} />,\n target: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/></>} />,\n kanban: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"14\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"10\"/></>} />,\n dollar: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><path d=\"M15 9c-.6-1.3-1.7-2-3-2-1.7 0-3 1-3 2.3 0 2.7 6 1.3 6 4 0 1.3-1.3 2.3-3 2.3-1.3 0-2.4-.7-3-2\"/><line x1=\"12\" y1=\"5.5\" x2=\"12\" y2=\"18.5\"/></>} />,\n checkCircle: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><polyline points=\"8.5 12 11 14.5 15.5 9.5\"/></>} />,\n globe: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><line x1=\"2.5\" y1=\"12\" x2=\"21.5\" y2=\"12\"/><path d=\"M12 2.5c2.5 2.7 4 6.1 4 9.5s-1.5 6.8-4 9.5C9.5 18.8 8 15.4 8 12s1.5-6.8 4-9.5z\"/></>} />,\n rocket: <Icon d={<><path d=\"M4.5 16.5c-1.5 1.3-2 5-2 5s3.7-.5 5-2c.7-.8.7-2.1-.1-2.9-.8-.8-2.1-.8-2.9-.1z\"/><path d=\"M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22 22 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3 2-4c1.6-1 5 0 5 0\"/><path d=\"M12 15v5s3-.5 4-2c1-1.6 0-5 0-5\"/></>} />,\n wand: <Icon d={<><path d=\"m3 21 9-9\"/><path d=\"M15 3v3\"/><path d=\"M19 7l-2 2\"/><path d=\"M21 11h-3\"/><path d=\"M19 15l-2-2\"/><path d=\"M15 17v-3\"/></>} />,\n doc: <Icon d={<><path d=\"M14 2.5H6.5A2 2 0 0 0 4.5 4.5v15a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V8.5z\"/><polyline points=\"14 2.5 14 8.5 20 8.5\"/><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"/><line x1=\"8\" y1=\"17\" x2=\"14\" y2=\"17\"/></>} />,\n gear: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.6 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></>} />,\n card: <Icon d={<><rect x=\"2\" y=\"5.5\" width=\"20\" height=\"13\" rx=\"2\"/><line x1=\"2\" y1=\"10\" x2=\"22\" y2=\"10\"/></>} />,\n chevDblL: <Icon d={<><path d=\"m11 17-5-5 5-5\"/><path d=\"m18 17-5-5 5-5\"/></>} />,\n chevDblR: <Icon d={<><path d=\"m13 17 5-5-5-5\"/><path d=\"m6 17 5-5-5-5\"/></>} />,\n chevUp: <Icon d={<polyline points=\"18 15 12 9 6 15\"/>} />,\n userPlus: <Icon d={<><path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"8.5\" cy=\"7\" r=\"4\"/><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"/><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"/></>} />,\n qrcode: <Icon d={<><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><path d=\"M14 14h3v3\"/><path d=\"M21 14v.01\"/><path d=\"M14 21h.01\"/><path d=\"M21 21v-3.5\"/><path d=\"M17.5 21h.01\"/></>} />,\n}\n\n/* ---------- Logo Veploy ---------- */\nconst VeployLogo = ({ size = 28 }) => (\n <svg viewBox=\"0 0 40 32\" width={size} height={(size * 32) / 40} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 8 L13 28 L17 22 L8 8 Z\" fill=\"#2f4a2d\" />\n <path d=\"M13 28 L36 0 L26 0 L11 22 Z\" fill=\"#b4e234\" />\n </svg>\n)\n\n/* ---------- Estrutura do menu ---------- */\nconst NAV_DATA = [\n { kind: 'item', id: 'home', label: 'Início', icon: 'home' },\n { kind: 'item', id: 'agenda', label: 'Agenda', icon: 'calendar', badge: 'NOVO' },\n { kind: 'section', label: 'Imóveis' },\n { kind: 'item', id: 'imoveis', label: 'Imóveis', icon: 'building' },\n { kind: 'item', id: 'proprietarios', label: 'Proprietários', icon: 'contacts' },\n { kind: 'item', id: 'stats-im', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'CRM' },\n { kind: 'item', id: 'leads', label: 'Leads', icon: 'target' },\n { kind: 'item', id: 'pool', label: 'Pool', icon: 'bolt' },\n { kind: 'item', id: 'funil', label: 'Funil', icon: 'kanban' },\n { kind: 'item', id: 'visitas', label: 'Visitas', icon: 'calendar' },\n { kind: 'item', id: 'propostas', label: 'Propostas', icon: 'dollar' },\n { kind: 'item', id: 'tarefas', label: 'Tarefas', icon: 'checkCircle' },\n { kind: 'item', id: 'stats-crm', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'Divulgação' },\n { kind: 'item', id: 'portais', label: 'Portais', icon: 'globe' },\n { kind: 'item', id: 'lp', label: 'Landing Pages', icon: 'rocket', badge: 'NOVO' },\n { kind: 'group', id: 'mais-div', label: 'Mais', icon: 'more', children: [\n { id: 'qr', label: 'QR Codes' },\n { id: 'links', label: 'Links rastreáveis' },\n { id: 'criativos', label: 'Gerador de criativos', badge: 'BETA' },\n ]},\n { kind: 'section', label: 'Site' },\n { kind: 'item', id: 'editor', label: 'Editor de interface', icon: 'wand' },\n { kind: 'item', id: 'blog', label: 'Blog', icon: 'doc' },\n { kind: 'item', id: 'stats-site', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'Configurações' },\n { kind: 'item', id: 'geral', label: 'Geral', icon: 'gear' },\n { kind: 'item', id: 'usuarios', label: 'Usuários', icon: 'contacts' },\n { kind: 'item', id: 'plano', label: 'Meu plano', icon: 'card' },\n { kind: 'group', id: 'mais-cfg', label: 'Mais', icon: 'more', children: [\n { id: 'integ', label: 'Integrações' },\n { id: 'webhooks', label: 'Webhooks' },\n ]},\n]\n\n/* ---------- Helpers visuais ---------- */\nconst Avatar = ({ name, size = 'md', color = 'bg-violet-500', online }) => {\n const sizes = { sm: 'w-7 h-7 text-[11px]', md: 'w-9 h-9 text-xs', lg: 'w-11 h-11 text-sm', xl: 'w-14 h-14 text-base' }\n const initials = name.split(' ').map(p => p[0]).slice(0, 2).join('').toUpperCase()\n return (\n <div className=\"relative inline-flex\">\n <div className={`${sizes[size]} ${color} rounded-full text-white font-semibold inline-flex items-center justify-center select-none shrink-0`}>\n {initials}\n </div>\n {online && <span className=\"absolute bottom-0 right-0 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white\" />}\n </div>\n )\n}\n\nconst Pill = ({ children, tone = 'slate' }) => {\n const tones = {\n slate: 'bg-slate-100 text-slate-700 ring-slate-200',\n amber: 'bg-amber-50 text-amber-700 ring-amber-200',\n emerald: 'bg-emerald-50 text-emerald-700 ring-emerald-200',\n rose: 'bg-rose-50 text-rose-700 ring-rose-200',\n violet: 'bg-violet-50 text-violet-700 ring-violet-200',\n sky: 'bg-sky-50 text-sky-700 ring-sky-200',\n yellow: 'bg-yellow-100 text-yellow-800 ring-yellow-200',\n }\n return (\n <span className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium ring-1 ring-inset ${tones[tone]}`}>\n {children}\n </span>\n )\n}\n\nconst Dot = ({ tone = 'emerald' }) => <span className={`inline-block w-1.5 h-1.5 rounded-full bg-${tone}-500`} />\n\n/* ---------- Dados mock ---------- */\nconst conversations = [\n {\n id: 'c1', name: 'Samir Patel', phone: '+55 11 98452-1023', avatarColor: 'bg-violet-500',\n preview: 'Olá! Vi o apto de 2 dorm em Vila Mariana, ainda está…',\n waitFor: '4m', unread: 0, sla: 'risk', priority: 'high', status: 'in_progress',\n ticket: '#8743', tier: 'Gold', assignee: 'Você',\n },\n {\n id: 'c2', name: 'Jenifer Souza', phone: '+55 21 99201-7811', avatarColor: 'bg-rose-500',\n preview: 'Oi, tenho uma dúvida sobre a fatura desse mês 🤔',\n waitFor: '8m', unread: 2, sla: 'breach', priority: 'urgent', status: 'open',\n ticket: '#8744', tier: 'Platinum', assignee: 'Você', starred: true,\n },\n {\n id: 'c3', name: 'Ingrid Bahia', phone: '+55 71 98800-4421', avatarColor: 'bg-sky-500',\n preview: 'Boa tarde, vamos prosseguir com a troca do plano…',\n waitFor: '17m', unread: 0, sla: 'ok', priority: 'normal', status: 'waiting',\n ticket: '#8746', tier: 'Silver', assignee: 'Você',\n },\n {\n id: 'c4', name: 'Sven Ribeiro', phone: '+55 47 98112-7755', avatarColor: 'bg-slate-700',\n preview: 'Sim, será processado em até 24h corridas.',\n waitFor: '23m', unread: 0, sla: 'ok', priority: 'low', status: 'in_progress',\n ticket: '#8749', tier: 'Bronze', assignee: 'Você',\n },\n {\n id: 'c5', name: 'Marcelo Tavares', phone: '+55 11 95542-3398', avatarColor: 'bg-amber-500',\n preview: 'Áudio · 0:42',\n waitFor: '34m', unread: 1, sla: 'risk', priority: 'high', status: 'open',\n ticket: '#8751', tier: 'Gold', assignee: 'Fila — Vendas',\n },\n {\n id: 'c6', name: 'Helena Prado', phone: '+55 31 99776-2210', avatarColor: 'bg-emerald-600',\n preview: 'Documento · contrato_v3.pdf',\n waitFor: '52m', unread: 0, sla: 'ok', priority: 'normal', status: 'waiting',\n ticket: '#8755', tier: 'Silver', assignee: 'Você',\n },\n]\n\nconst INITIAL_MESSAGES = [\n { id: 'm1', side: 'in', kind: 'text', text: 'Olá! Vi no site de vocês o apartamento de 2 dormitórios em Vila Mariana. Ainda está disponível? Tenho interesse em visitar essa semana.', time: '10:02', day: 'Hoje' },\n { id: 'm2', side: 'out', kind: 'text', text: 'Olá Samir! Tudo bem? Aqui é a Maria, corretora responsável. Sim, o imóvel está disponível! Pra eu te ajudar melhor, posso te perguntar uma coisa rápida — é pra moradia ou investimento? E você já tem uma faixa de valor em mente?', time: '10:04', status: 'read' },\n { id: 'm3', side: 'in', kind: 'text', text: 'Pra morar mesmo. Sou casado, sem filhos, e tô olhando algo na Zona Sul até R$ 900 mil. Preciso de vaga de garagem e, se possível, varanda.', time: '10:05' },\n { id: 'm4', side: 'in', kind: 'image', caption: 'Esse é o estilo de planta que eu gostei', meta: '1.4 MB · referencia.jpg', time: '10:06' },\n { id: 'm5', side: 'note', text: '@Alissa esse cliente tem o perfil ideal pro 65m² da Vila Mariana (cód. 856301) e pro 95m² em Moema (cód. 858033). Os dois ainda estão liberados pra visita amanhã? Quero confirmar antes de oferecer.', author: 'Maria Eduarda', time: '10:09' },\n { id: 'm6', side: 'system', text: 'Alissa Mendes foi adicionada à conversa', time: '10:10' },\n { id: 'm7', side: 'out', kind: 'text', text: 'Samir, tenho duas ótimas opções pra você dentro do orçamento e com vaga + varanda: um 2 dorm em Vila Mariana e um 3 dorm em Moema. Os dois estão liberados pra visita amanhã. Te mando agora os detalhes e fotos?', time: '10:18', status: 'read', author: 'Alissa Mendes' },\n { id: 'm8', side: 'in', kind: 'text', text: 'Perfeito, manda sim! 🙏', time: '10:20' },\n { id: 'm9', side: 'in', kind: 'audio', duration: '0:18', time: '10:21' },\n { id: 'm10', side: 'out', kind: 'text', text: 'Maravilha! Qual período da semana funciona melhor pra você visitar — manhã ou final do dia? Já adianto o agendamento com os proprietários. 😊', time: '10:24', status: 'delivered' },\n]\n\nconst quickReplies = [\n { id: 'q1', label: 'Saudação', text: 'Olá! Aqui é da imobiliária, tudo bem? Como posso te ajudar a encontrar o imóvel ideal?' },\n { id: 'q2', label: 'Perfil', text: 'Pra eu te enviar as melhores opções, me conta: é pra moradia ou investimento? Qual região e faixa de valor?' },\n { id: 'q3', label: 'Agendar visita', text: 'Posso já agendar a visita pra você. Qual o melhor dia e horário essa semana?' },\n { id: 'q4', label: 'Documentos', text: 'Pra avançar com a proposta, vou precisar de RG, CPF, comprovante de renda e residência. Pode me enviar por aqui mesmo.' },\n]\n\n/* ---------- Tons utilitários ---------- */\nconst slaInfo = {\n ok: { tone: 'emerald', label: 'No prazo' },\n risk: { tone: 'amber', label: 'Em risco' },\n breach: { tone: 'rose', label: 'Estourado' },\n}\nconst statusInfo = {\n open: { tone: 'sky', label: 'Aberto' },\n in_progress: { tone: 'amber', label: 'Em atendimento' },\n waiting: { tone: 'violet', label: 'Aguardando cliente' },\n resolved: { tone: 'emerald', label: 'Resolvido' },\n}\n\n/* ---------- Componente raiz ---------- */\nexport default function App() {\n const inbox = useInbox()\n const live = inbox.live\n const [mockActiveId, setMockActiveId] = useState('c1')\n const activeId = live ? inbox.activeId : mockActiveId\n const setActiveId = live ? inbox.setActiveId : setMockActiveId\n const [connectOpen, setConnectOpen] = useState(false)\n const [transferOpen, setTransferOpen] = useState(false)\n const [emojiOpen, setEmojiOpen] = useState(false)\n const [filterOpen, setFilterOpen] = useState(false)\n const [unreadOnly, setUnreadOnly] = useState(false)\n const [mineOnly, setMineOnly] = useState(false)\n const [recording, setRecording] = useState(false)\n const [recSecs, setRecSecs] = useState(0)\n const [composeMode, setComposeMode] = useState('reply')\n const [text, setText] = useState('')\n const [filter, setFilter] = useState('all')\n const [detailsOpen, setDetailsOpen] = useState(true)\n const [quickOpen, setQuickOpen] = useState(false)\n const [searchOpen, setSearchOpen] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [searchIndex, setSearchIndex] = useState(0)\n const [messages, setMessages] = useState(INITIAL_MESSAGES)\n const threadMessages = live ? inbox.messages : messages\n const convList = live ? inbox.conversations : conversations\n const scrollRef = useRef(null)\n const textareaRef = useRef(null)\n const imageInputRef = useRef(null)\n const fileInputRef = useRef(null)\n const mediaRecorderRef = useRef(null)\n const audioChunksRef = useRef([])\n const cancelAudioRef = useRef(false)\n const audioCtxRef = useRef(null)\n const analyserRef = useRef(null)\n const recTimerRef = useRef(null)\n\n // Lista de conversas redimensionável (arrasto estilo WhatsApp Web)\n const [listWidth, setListWidth] = useState(() => {\n if (typeof window !== 'undefined') {\n const v = parseInt(window.localStorage.getItem('veploy_chat_list_width') || '', 10)\n if (v >= 300 && v <= 600) return v\n }\n return 380\n })\n const resizingRef = useRef(false)\n const listWidthRef = useRef(listWidth)\n listWidthRef.current = listWidth\n useEffect(() => {\n const onMove = e => {\n if (!resizingRef.current) return\n setListWidth(Math.min(600, Math.max(300, e.clientX)))\n }\n const onUp = () => {\n if (!resizingRef.current) return\n resizingRef.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n try { window.localStorage.setItem('veploy_chat_list_width', String(listWidthRef.current)) } catch {}\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n return () => { window.removeEventListener('mousemove', onMove); window.removeEventListener('mouseup', onUp) }\n }, [])\n const startResize = e => {\n resizingRef.current = true\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n e.preventDefault()\n }\n\n const formatNow = () => {\n const d = new Date()\n return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`\n }\n\n const fileToDataUrl = (file) => new Promise((res, rej) => {\n const r = new FileReader(); r.onload = () => res(r.result); r.onerror = rej; r.readAsDataURL(file)\n })\n\n const insertEmoji = (e) => { setText(t => t + e); setEmojiOpen(false); textareaRef.current?.focus() }\n\n const sendMediaFile = async (file, kind) => {\n if (!file) return\n const previewUrl = URL.createObjectURL(file)\n const data = await fileToDataUrl(file)\n if (live) {\n inbox.sendMedia({ data, mime: file.type, kind, filename: file.name, previewUrl })\n } else {\n setMessages(ms => [...ms, { id: `m${Date.now()}`, side: 'out', kind, mediaUrl: previewUrl, meta: file.name, time: formatNow(), status: 'sent' }])\n }\n }\n const onPickImage = async (e) => { const f = e.target.files?.[0]; e.target.value = ''; await sendMediaFile(f, 'image') }\n const onPickFile = async (e) => { const f = e.target.files?.[0]; e.target.value = ''; await sendMediaFile(f, 'document') }\n\n const startRecording = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n const mr = new MediaRecorder(stream)\n audioChunksRef.current = []\n cancelAudioRef.current = false\n\n // medidor de nível ao vivo (waveform)\n const Ctx = window.AudioContext || window.webkitAudioContext\n const audioCtx = new Ctx()\n const source = audioCtx.createMediaStreamSource(stream)\n const analyser = audioCtx.createAnalyser()\n analyser.fftSize = 64\n source.connect(analyser)\n audioCtxRef.current = audioCtx\n analyserRef.current = analyser\n setRecSecs(0)\n clearInterval(recTimerRef.current)\n recTimerRef.current = setInterval(() => setRecSecs(s => s + 1), 1000)\n\n mr.ondataavailable = ev => { if (ev.data.size > 0) audioChunksRef.current.push(ev.data) }\n mr.onstop = async () => {\n stream.getTracks().forEach(t => t.stop())\n clearInterval(recTimerRef.current)\n try { audioCtxRef.current?.close() } catch {}\n analyserRef.current = null\n if (cancelAudioRef.current) return\n const blob = new Blob(audioChunksRef.current, { type: mr.mimeType || 'audio/webm' })\n const previewUrl = URL.createObjectURL(blob)\n const data = await fileToDataUrl(blob)\n if (live) inbox.sendMedia({ data, mime: blob.type, kind: 'audio', filename: 'audio', previewUrl })\n else setMessages(ms => [...ms, { id: `m${Date.now()}`, side: 'out', kind: 'audio', mediaUrl: previewUrl, time: formatNow(), status: 'sent' }])\n }\n mediaRecorderRef.current = mr\n mr.start()\n setRecording(true)\n } catch { alert('Não foi possível acessar o microfone') }\n }\n const stopRecording = (cancel = false) => {\n cancelAudioRef.current = cancel\n setRecording(false)\n try { mediaRecorderRef.current?.stop() } catch {}\n }\n\n // Esc cancela a gravação de voz\n useEffect(() => {\n if (!recording) return\n const onKey = e => { if (e.key === 'Escape') stopRecording(true) }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [recording])\n\n const handleSend = () => {\n const t = text.trim()\n if (!t) return\n if (live) {\n inbox.send(t, composeMode === 'note')\n setText('')\n return\n }\n const id = `m${Date.now()}`\n const time = formatNow()\n const msg = composeMode === 'note'\n ? { id, side: 'note', text: t, author: 'Maria Eduarda', time }\n : { id, side: 'out', kind: 'text', text: t, time, status: 'sent', author: 'Maria Eduarda' }\n setMessages(ms => [...ms, msg])\n setText('')\n }\n\n const searchMatches = useMemo(() => {\n const q = searchQuery.trim().toLowerCase()\n if (!q) return []\n return threadMessages.filter(m => {\n const t = (m.text || m.caption || '').toLowerCase()\n return t.includes(q)\n }).map(m => m.id)\n }, [searchQuery, threadMessages])\n\n useEffect(() => { setSearchIndex(0) }, [searchQuery])\n\n // Embed bridge: quando roda dentro de um host (iframe), recebe {token, workspace}\n // do host via postMessage e entra em modo live. Sem isso, fica em demo (não\n // utilizável \"por fora\"). Origens permitidas via NEXT_PUBLIC_EMBED_ORIGINS.\n useEffect(() => {\n if (typeof window === 'undefined' || window.parent === window) return\n const envOrigins = (typeof process !== 'undefined' && process.env && process.env.NEXT_PUBLIC_EMBED_ORIGINS) || ''\n const allowed = envOrigins.split(',').map(s => s.trim()).filter(Boolean)\n const onMsg = e => {\n if (allowed.length && !allowed.includes(e.origin)) return\n const d = e.data || {}\n if (d.type === 'veploy-chat-auth' && d.token && d.workspace) {\n const wasLive = !!localStorage.getItem('veploy_chat_token') && !!localStorage.getItem('veploy_chat_workspace')\n localStorage.setItem('veploy_chat_token', d.token)\n localStorage.setItem('veploy_chat_workspace', String(d.workspace))\n if (!wasLive) location.reload()\n }\n }\n window.addEventListener('message', onMsg)\n try { window.parent.postMessage({ type: 'veploy-chat-ready' }, '*') } catch {}\n return () => window.removeEventListener('message', onMsg)\n }, [])\n\n const currentMatchId = searchMatches[searchIndex]\n const openSearch = () => { setSearchOpen(true); setSearchQuery('') }\n const closeSearch = () => { setSearchOpen(false); setSearchQuery('') }\n const nextMatch = () => searchMatches.length && setSearchIndex(i => (i + 1) % searchMatches.length)\n const prevMatch = () => searchMatches.length && setSearchIndex(i => (i - 1 + searchMatches.length) % searchMatches.length)\n\n const active = convList.find(c => c.id === activeId)\n\n useEffect(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }, [activeId, threadMessages.length])\n\n const counts = useMemo(() => ({\n open: convList.filter(c => c.status !== 'resolved' && c.status !== 'waiting').length,\n pending: convList.filter(c => c.status === 'waiting').length,\n all: convList.length,\n }), [convList])\n\n const filtered = useMemo(() => {\n let list = convList\n if (filter === 'pending') list = list.filter(c => c.status === 'waiting')\n else if (filter !== 'all') list = list.filter(c => c.status !== 'resolved' && c.status !== 'waiting')\n if (unreadOnly) list = list.filter(c => c.unread > 0)\n if (mineOnly) list = list.filter(c => c._raw?.assignee_user_id && c._raw.assignee_user_id === inbox.me)\n return list\n }, [filter, convList, unreadOnly, mineOnly, inbox.me])\n\n return (\n <div className=\"h-full w-full bg-slate-100 flex text-slate-900\">\n {/* ---------- App container ---------- */}\n <main className=\"flex-1 flex overflow-hidden\">\n {/* ---------- Lista de conversas ---------- */}\n <section style={{ width: listWidth }} className=\"relative bg-white border-r border-slate-200 flex flex-col shrink-0\">\n <header className=\"px-4 pt-4 pb-3 border-b border-slate-100\">\n <div className=\"flex items-center justify-between mb-3\">\n <h1 className=\"font-semibold text-[15px]\">Caixa de entrada</h1>\n <div className=\"flex items-center gap-1\">\n {live && (\n <button onClick={() => setConnectOpen(true)} title=\"Conectar WhatsApp\"\n className=\"p-1.5 rounded-md hover:bg-emerald-50 text-emerald-600\">{I.qrcode}</button>\n )}\n <div className=\"relative\">\n <button onClick={() => setFilterOpen(v => !v)} title=\"Filtros\"\n className={`p-1.5 rounded-md ${(unreadOnly || mineOnly) ? 'bg-slate-900 text-white' : 'hover:bg-slate-100 text-slate-500'}`}>{I.filter}</button>\n {filterOpen && (\n <div className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-52 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <label className=\"flex items-center gap-2 px-3 py-1.5 hover:bg-slate-50 cursor-pointer\">\n <input type=\"checkbox\" checked={unreadOnly} onChange={e => setUnreadOnly(e.target.checked)} /> Só não lidas\n </label>\n {live && (\n <label className=\"flex items-center gap-2 px-3 py-1.5 hover:bg-slate-50 cursor-pointer\">\n <input type=\"checkbox\" checked={mineOnly} onChange={e => setMineOnly(e.target.checked)} /> Atribuídas a mim\n </label>\n )}\n {(unreadOnly || mineOnly) && (\n <button onClick={() => { setUnreadOnly(false); setMineOnly(false) }}\n className=\"w-full text-left px-3 py-1.5 text-slate-500 hover:bg-slate-50 border-t border-slate-100 mt-1\">Limpar filtros</button>\n )}\n </div>\n )}\n </div>\n <button className=\"p-1.5 rounded-md text-slate-300 cursor-not-allowed\" title=\"Ordenar (em breve)\">{I.sort}</button>\n </div>\n </div>\n <div className=\"relative\">\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400\">{I.search}</span>\n <input placeholder=\"Buscar conversas, nº ou ticket…\" className=\"w-full pl-8 pr-3 py-1.5 text-[13px] rounded-lg bg-slate-50 border border-slate-200 focus:bg-white focus:border-slate-300 outline-none\" />\n </div>\n <div className=\"flex items-center gap-2 mt-3 text-[12px]\">\n {[\n ['all', 'Todas', counts.all],\n ['pending', 'Pendentes', counts.pending],\n ['open', 'Abertas', counts.open],\n ].map(([k, l, n]) => (\n <button key={k} onClick={() => setFilter(k)}\n className={`relative px-3 py-1.5 rounded-full font-medium transition-colors\n ${filter === k ? 'bg-slate-900 text-white' : 'text-slate-600 hover:bg-slate-100'}`}>\n {l}\n {n > 0 && (\n <span className=\"absolute -top-1.5 -right-1.5 min-w-[18px] h-[18px] px-1 rounded-full bg-slate-500 text-white text-[10px] font-bold inline-flex items-center justify-center ring-2 ring-white tabular-nums\">\n {n > 99 ? '99+' : n}\n </span>\n )}\n </button>\n ))}\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto\">\n {filtered.map(c => (\n <ConversationItem key={c.id} c={c} active={c.id === activeId} onClick={() => { setActiveId(c.id); if (live) inbox.markRead(c.id) }} />\n ))}\n </div>\n\n <footer className=\"border-t border-slate-100 px-3 py-2 flex items-center justify-between text-[11px] text-slate-500\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse\" />\n Disponível para atender\n </div>\n <button className=\"hover:text-slate-700\">Pausar</button>\n </footer>\n\n {/* Handle de arrasto p/ redimensionar a lista (estilo WhatsApp Web) */}\n <div onMouseDown={startResize} title=\"Arraste para redimensionar\"\n className=\"absolute top-0 right-0 h-full w-1.5 cursor-col-resize hover:bg-emerald-400/40 active:bg-emerald-500/50 z-10\" />\n </section>\n\n {/* ---------- Chat ---------- */}\n <section className=\"flex-1 flex flex-col bg-slate-50 min-w-0\">\n {active && <ChatHeader c={active} onToggleDetails={() => setDetailsOpen(v => !v)} detailsOpen={detailsOpen} onOpenSearch={openSearch} onTransfer={() => setTransferOpen(true)} />}\n\n {searchOpen && (\n <SearchBar\n query={searchQuery}\n onChange={setSearchQuery}\n matches={searchMatches}\n currentIndex={searchIndex}\n onPrev={prevMatch}\n onNext={nextMatch}\n onClose={closeSearch}\n />\n )}\n\n {/* Thread */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto px-6 py-5 space-y-1\">\n <DayDivider label=\"Hoje\" />\n {threadMessages.map((m, i) => (\n <Message\n key={m.id}\n m={m}\n prev={threadMessages[i - 1]}\n searchQuery={searchOpen ? searchQuery : ''}\n isCurrentMatch={m.id === currentMatchId}\n />\n ))}\n <div className=\"text-center mt-4\">\n <span className=\"text-[11px] text-slate-400 inline-flex items-center gap-1\">\n <Avatar name={active?.name || ''} size=\"sm\" color={active?.avatarColor} /> Conversa criada por você · agora\n </span>\n </div>\n </div>\n\n {/* Compose */}\n <div className=\"px-6 pb-5\">\n <div className=\"bg-white border border-slate-200 rounded-2xl shadow-soft\">\n <div className=\"flex items-center gap-1 px-3 pt-2 text-[12px]\">\n {[\n ['reply', 'Mensagem'],\n ['note', 'Nota interna'],\n ].map(([k, l]) => (\n <button key={k} onClick={() => setComposeMode(k)}\n className={`px-2.5 py-1 rounded-md font-medium ${composeMode === k\n ? k === 'note' ? 'bg-yellow-100 text-yellow-800' : 'bg-slate-900 text-white'\n : 'text-slate-600 hover:bg-slate-100'}`}>\n {l}\n </button>\n ))}\n <div className=\"flex-1\" />\n <button onClick={() => setQuickOpen(v => !v)} className=\"px-2.5 py-1 text-slate-600 hover:bg-slate-100 rounded-md inline-flex items-center gap-1 font-medium\">\n ⌘K <span className=\"text-slate-400\">para respostas rápidas</span>\n </button>\n </div>\n\n {quickOpen && (\n <div className=\"px-3 py-2 border-t border-slate-100 bg-slate-50/60 flex flex-wrap gap-1.5\">\n {quickReplies.map(q => (\n <button key={q.id} onClick={() => { setText(q.text); setQuickOpen(false) }}\n className=\"text-[12px] bg-white border border-slate-200 hover:border-slate-300 px-2.5 py-1 rounded-md text-slate-700\">\n <span className=\"text-slate-400 mr-1\">/</span>{q.label}\n </button>\n ))}\n </div>\n )}\n\n <div className={`px-4 py-3 ${composeMode === 'note' ? 'bg-yellow-50' : ''}`}>\n <textarea\n ref={textareaRef}\n rows={3}\n value={text}\n onChange={e => setText(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }}\n placeholder={\n composeMode === 'note'\n ? 'Adicione uma nota interna — visível só para o time…'\n : 'Digite uma mensagem para Samir…'\n }\n className={`w-full text-[14px] resize-none bg-transparent outline-none placeholder:text-slate-400 ${composeMode === 'note' ? 'text-yellow-900 placeholder:text-yellow-600' : ''}`}\n />\n </div>\n\n <div className=\"flex items-center gap-1 px-3 py-2 border-t border-slate-100\">\n {recording ? (\n <div className=\"flex items-center gap-3 flex-1\">\n <span className=\"w-2 h-2 rounded-full bg-rose-500 animate-pulse shrink-0\" />\n <span className=\"text-[12.5px] text-rose-600 font-medium tabular-nums shrink-0\">{fmtSecs(recSecs)}</span>\n <AudioWave analyserRef={analyserRef} />\n <span className=\"text-[11px] text-slate-400 shrink-0 hidden sm:inline\">Esc cancela</span>\n <button onClick={() => stopRecording(true)} className=\"text-[12.5px] text-slate-500 px-2.5 py-1.5 rounded-lg hover:bg-slate-100 shrink-0\">Cancelar</button>\n <button onClick={() => stopRecording(false)} className=\"text-[13px] font-medium bg-emerald-600 hover:bg-emerald-700 text-white px-3 py-1.5 rounded-lg inline-flex items-center gap-1.5 shrink-0\">Enviar <span className=\"opacity-90\">{I.send}</span></button>\n </div>\n ) : (\n <>\n <div className=\"relative\">\n <button onClick={() => setEmojiOpen(v => !v)} title=\"Emoji\"\n className={`px-1.5 py-1.5 rounded-md inline-flex items-center ${emojiOpen ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>{I.emoji}</button>\n {emojiOpen && <EmojiPicker onPick={insertEmoji} />}\n </div>\n <AttachMenu onImage={() => imageInputRef.current?.click()} onFile={() => fileInputRef.current?.click()} />\n <button onClick={startRecording} title=\"Gravar áudio\"\n className=\"text-slate-500 hover:bg-slate-100 px-1.5 py-1.5 rounded-md inline-flex items-center\">{I.mic}</button>\n <div className=\"flex-1\" />\n <button\n onClick={handleSend}\n disabled={!text.trim()}\n className={`text-[13px] font-medium px-3.5 py-1.5 rounded-lg inline-flex items-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed ${\n composeMode === 'note'\n ? 'bg-yellow-500 hover:bg-yellow-600 text-white'\n : 'bg-emerald-600 hover:bg-emerald-700 text-white'\n }`}>\n {composeMode === 'note' ? 'Salvar nota' : 'Enviar'}\n <span className=\"opacity-90\">{I.send}</span>\n </button>\n </>\n )}\n <input ref={imageInputRef} type=\"file\" accept=\"image/*\" className=\"hidden\" onChange={onPickImage} />\n <input ref={fileInputRef} type=\"file\" className=\"hidden\" onChange={onPickFile} />\n </div>\n </div>\n </div>\n </section>\n\n {/* ---------- Detalhes ---------- */}\n {detailsOpen && active && <DetailsPanel c={active} onClose={() => setDetailsOpen(false)} />}\n </main>\n {connectOpen && <ConnectChannel inbox={inbox} onClose={() => setConnectOpen(false)} />}\n {transferOpen && active && (\n <TransferModal inbox={inbox} conversationId={active.id} currentAssignee={active._raw?.assignee_user_id} onClose={() => setTransferOpen(false)} />\n )}\n </div>\n )\n}\n\n/* ---------- Sidebar (recolhível) ---------- */\nfunction Sidebar({ collapsed, onToggle, activeId, onSelect }) {\n return collapsed\n ? <SidebarCollapsed onToggle={onToggle} activeId={activeId} onSelect={onSelect} />\n : <SidebarExpanded onToggle={onToggle} activeId={activeId} onSelect={onSelect} />\n}\n\nfunction SidebarCollapsed({ onToggle, activeId, onSelect }) {\n return (\n <aside className=\"w-16 bg-white border-r border-slate-200 flex flex-col items-center py-3 shrink-0\">\n <button onClick={onToggle} title=\"Expandir menu\"\n className=\"w-10 h-10 rounded-xl flex items-center justify-center text-slate-500 hover:bg-slate-100 hover:text-slate-900 mb-2\">\n {I.chevDblR}\n </button>\n <div className=\"flex-1 w-full overflow-y-auto flex flex-col items-center gap-0.5 px-3 pb-3\">\n {NAV_DATA.map((n, i) => {\n if (n.kind === 'section') return <div key={i} className=\"w-6 h-px bg-slate-200 my-2\" />\n if (n.kind === 'group') {\n return (\n <SidebarIconBtn key={n.id} icon={I[n.icon]} title={n.label} />\n )\n }\n return (\n <SidebarIconBtn key={n.id} icon={I[n.icon]} title={n.label}\n active={activeId === n.id} onClick={() => onSelect(n.id)} badge={n.badge} />\n )\n })}\n </div>\n </aside>\n )\n}\n\nfunction SidebarIconBtn({ icon, title, active, onClick, badge }) {\n return (\n <button onClick={onClick} title={title}\n className={`relative w-10 h-10 rounded-xl flex items-center justify-center transition-colors\n ${active ? 'bg-lime-300 text-slate-900' : 'text-slate-500 hover:bg-slate-100 hover:text-slate-900'}`}>\n {icon}\n {badge && (\n <span className=\"absolute -top-0.5 -right-0.5 w-2 h-2 bg-lime-400 rounded-full ring-2 ring-white\" />\n )}\n </button>\n )\n}\n\nfunction SidebarExpanded({ onToggle, activeId, onSelect }) {\n const [openGroups, setOpenGroups] = useState({ 'mais-div': true })\n const toggleGroup = id => setOpenGroups(g => ({ ...g, [id]: !g[id] }))\n\n return (\n <aside className=\"w-64 bg-white border-r border-slate-200 flex flex-col shrink-0\">\n <header className=\"px-4 pt-4 pb-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <VeployLogo size={26} />\n <span className=\"font-bold text-[18px] tracking-tight text-slate-900\">veploy</span>\n </div>\n <button onClick={onToggle} title=\"Recolher menu\"\n className=\"p-1.5 rounded-md text-slate-400 hover:bg-slate-100 hover:text-slate-700\">\n {I.chevDblL}\n </button>\n </header>\n\n <nav className=\"flex-1 overflow-y-auto px-3 pb-4 space-y-0.5\">\n {NAV_DATA.map((n, i) => {\n if (n.kind === 'section') {\n return (\n <div key={i} className=\"px-3 pt-4 pb-1.5 text-[10.5px] font-semibold uppercase tracking-[0.12em] text-slate-400\">\n {n.label}\n </div>\n )\n }\n if (n.kind === 'group') {\n const isOpen = openGroups[n.id]\n return (\n <div key={n.id}>\n <button onClick={() => toggleGroup(n.id)}\n className=\"w-full flex items-center gap-2.5 px-3 py-2 rounded-xl text-[13.5px] text-slate-500 hover:bg-slate-50 hover:text-slate-900\">\n <span className=\"w-5 h-5 flex items-center justify-center\">{I[n.icon]}</span>\n <span className=\"flex-1 text-left\">{n.label}</span>\n <span className={`text-slate-400 transition-transform ${isOpen ? '' : '-rotate-90'}`}>{I.chevDown}</span>\n </button>\n {isOpen && (\n <div className=\"ml-5 pl-4 border-l border-slate-200 mt-0.5 mb-1 space-y-0.5\">\n {n.children.map(child => (\n <button key={child.id} onClick={() => onSelect(child.id)}\n className={`w-full flex items-center gap-2 px-3 py-1.5 rounded-lg text-[13px]\n ${activeId === child.id ? 'bg-lime-300 text-slate-900 font-medium' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900'}`}>\n <span className=\"flex-1 text-left\">{child.label}</span>\n {child.badge && <NavBadge>{child.badge}</NavBadge>}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n }\n const active = activeId === n.id\n return (\n <button key={n.id} onClick={() => onSelect(n.id)}\n className={`w-full flex items-center gap-2.5 px-3 py-2 rounded-xl text-[13.5px] transition-colors\n ${active ? 'bg-lime-300 text-slate-900 font-semibold' : 'text-slate-700 hover:bg-slate-50'}`}>\n <span className={`w-5 h-5 flex items-center justify-center ${active ? 'text-slate-900' : 'text-slate-500'}`}>\n {I[n.icon]}\n </span>\n <span className=\"flex-1 text-left\">{n.label}</span>\n {n.badge && <NavBadge>{n.badge}</NavBadge>}\n </button>\n )\n })}\n </nav>\n </aside>\n )\n}\n\nfunction NavBadge({ children }) {\n return (\n <span className=\"text-[9.5px] font-bold tracking-wide bg-lime-300 text-slate-800 px-1.5 py-0.5 rounded-full\">\n {children}\n </span>\n )\n}\n\n/* ---------- Subcomponentes ---------- */\nfunction ConversationItem({ c, active, onClick }) {\n return (\n <button onClick={onClick}\n className={`w-full text-left px-3 py-3 border-l-2 transition-colors flex gap-3 ${\n active ? 'bg-slate-50 border-emerald-500' : 'border-transparent hover:bg-slate-50'\n }`}>\n <Avatar name={c.name} color={c.avatarColor} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <span className={`text-[13.5px] truncate ${c.unread ? 'font-semibold' : 'font-medium text-slate-800'}`}>{c.name}</span>\n {c.starred && <span className=\"text-amber-400\">{I.star}</span>}\n </div>\n <span className={`text-[11px] shrink-0 ${c.unread ? 'text-emerald-600 font-semibold' : 'text-slate-400'}`}>{c.waitFor}</span>\n </div>\n <div className=\"flex items-center justify-between gap-2 mt-0.5\">\n <p className={`text-[12.5px] truncate ${c.unread ? 'text-slate-700' : 'text-slate-500'}`}>{c.preview}</p>\n {c.unread > 0 && (\n <span className=\"shrink-0 min-w-[18px] h-[18px] px-1.5 rounded-full bg-emerald-500 text-white text-[10px] font-bold inline-flex items-center justify-center\">\n {c.unread}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5 mt-1.5\">\n <Pill tone=\"slate\">{c.ticket}</Pill>\n </div>\n </div>\n </button>\n )\n}\n\nfunction ChatHeader({ c, onToggleDetails, detailsOpen, onOpenSearch, onTransfer }) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef(null)\n useEffect(() => {\n if (!menuOpen) return\n const onDoc = e => { if (menuRef.current && !menuRef.current.contains(e.target)) setMenuOpen(false) }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [menuOpen])\n\n return (\n <header className=\"bg-white border-b border-slate-200 px-5 py-3 flex items-center gap-3 min-w-0\">\n <Avatar name={c.name} color={c.avatarColor} size=\"lg\" online />\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <h2 className=\"font-semibold text-[15px] truncate\">{c.name}</h2>\n </div>\n <div className=\"flex items-center gap-2 text-[12px] text-slate-500 mt-0.5 min-w-0\">\n <span className=\"inline-flex items-center gap-1 shrink-0\">{I.phone} {c.phone}</span>\n <span className=\"hidden lg:inline text-slate-300 shrink-0\">·</span>\n <span className=\"hidden lg:inline-flex items-center gap-1 shrink-0\">{I.tag} {c.ticket}</span>\n </div>\n </div>\n\n <div className=\"hidden 2xl:flex items-center gap-4 text-[12px] pr-3 border-r border-slate-200 shrink-0\">\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-[9.5px] uppercase tracking-wide text-slate-400\">SLA</span>\n <span className=\"font-semibold text-amber-600 tabular-nums\">02:14</span>\n </div>\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-[9.5px] uppercase tracking-wide text-slate-400\">1ª resposta</span>\n <span className=\"font-semibold text-emerald-600 tabular-nums\">00:48</span>\n </div>\n </div>\n\n <button className=\"shrink-0 text-[12.5px] font-medium bg-emerald-600 hover:bg-emerald-700 text-white px-3 py-1.5 rounded-lg inline-flex items-center gap-1.5\">\n {I.check} <span className=\"hidden lg:inline\">Resolver</span>\n </button>\n\n <div className=\"w-px h-6 bg-slate-200 shrink-0\" />\n\n <div className=\"flex items-center gap-0.5 shrink-0\">\n <button onClick={onToggleDetails} title=\"Detalhes\"\n className={`p-1.5 rounded-md ${detailsOpen ? 'bg-slate-900 text-white' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.panel}\n </button>\n <div ref={menuRef} className=\"relative\">\n <button onClick={() => setMenuOpen(v => !v)} title=\"Mais opções\"\n className={`p-1.5 rounded-md ${menuOpen ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.more}\n </button>\n {menuOpen && (\n <div className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-56 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <MenuItem icon={I.phone} label=\"Ligar\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.forward} label=\"Transferir\" onClick={() => { setMenuOpen(false); onTransfer?.() }} />\n <MenuItem icon={I.userPlus} label=\"Adicionar participantes\" onClick={() => setMenuOpen(false)} />\n <div className=\"my-1 h-px bg-slate-100\" />\n <MenuItem icon={I.search} label=\"Procurar na conversa\" onClick={() => { setMenuOpen(false); onOpenSearch?.() }} />\n <MenuItem icon={I.star} label=\"Marcar com estrela\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.tag} label=\"Editar tags\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.link} label=\"Copiar link da conversa\" onClick={() => setMenuOpen(false)} />\n <div className=\"my-1 h-px bg-slate-100\" />\n <MenuItem icon={I.x} label=\"Encerrar sem resolver\" tone=\"danger\" onClick={() => setMenuOpen(false)} />\n </div>\n )}\n </div>\n </div>\n </header>\n )\n}\n\nfunction MenuItem({ icon, label, onClick, tone }) {\n const color = tone === 'danger' ? 'text-rose-600 hover:bg-rose-50' : 'text-slate-700 hover:bg-slate-50'\n return (\n <button onClick={onClick}\n className={`w-full flex items-center gap-2.5 px-3 py-1.5 ${color}`}>\n <span className={tone === 'danger' ? 'text-rose-500' : 'text-slate-500'}>{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n </button>\n )\n}\n\nfunction SearchBar({ query, onChange, matches, currentIndex, onPrev, onNext, onClose }) {\n const inputRef = useRef(null)\n useEffect(() => { inputRef.current?.focus() }, [])\n useEffect(() => {\n const onKey = e => {\n if (e.key === 'Escape') onClose()\n if (e.key === 'Enter') { e.preventDefault(); e.shiftKey ? onPrev() : onNext() }\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [onClose, onPrev, onNext])\n\n return (\n <div className=\"bg-white border-b border-slate-200 px-5 py-2 flex items-center gap-3\">\n <span className=\"text-slate-400 shrink-0\">{I.search}</span>\n <input\n ref={inputRef}\n value={query}\n onChange={e => onChange(e.target.value)}\n placeholder=\"Procurar na conversa…\"\n className=\"flex-1 bg-transparent outline-none text-[13.5px] placeholder:text-slate-400 min-w-0\"\n />\n {query && (\n <span className=\"text-[12px] text-slate-500 tabular-nums shrink-0\">\n {matches.length === 0 ? 'sem resultados' : `${currentIndex + 1} de ${matches.length}`}\n </span>\n )}\n <div className=\"flex items-center gap-0.5 shrink-0\">\n <button onClick={onPrev} disabled={matches.length === 0}\n title=\"Anterior (Shift+Enter)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 disabled:opacity-30 disabled:hover:bg-transparent\">\n {I.chevUp}\n </button>\n <button onClick={onNext} disabled={matches.length === 0}\n title=\"Próximo (Enter)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 disabled:opacity-30 disabled:hover:bg-transparent\">\n {I.chevDown}\n </button>\n <button onClick={onClose} title=\"Fechar (Esc)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 ml-1\">\n {I.x}\n </button>\n </div>\n </div>\n )\n}\n\nfunction highlightText(text, query, isCurrent) {\n if (!query) return text\n const q = query.trim()\n if (!q) return text\n const lower = text.toLowerCase()\n const ql = q.toLowerCase()\n if (!lower.includes(ql)) return text\n const parts = []\n let last = 0\n let idx = lower.indexOf(ql)\n let key = 0\n while (idx !== -1) {\n if (idx > last) parts.push(text.slice(last, idx))\n parts.push(\n <mark key={key++} className={`rounded px-0.5 ${isCurrent ? 'bg-amber-400 text-slate-900' : 'bg-yellow-200 text-slate-900'}`}>\n {text.slice(idx, idx + ql.length)}\n </mark>\n )\n last = idx + ql.length\n idx = lower.indexOf(ql, last)\n }\n if (last < text.length) parts.push(text.slice(last))\n return parts\n}\n\nfunction DayDivider({ label }) {\n return (\n <div className=\"flex items-center justify-center my-3\">\n <span className=\"text-[11px] font-medium text-slate-600 bg-white border border-slate-200 rounded-full px-2.5 py-0.5 shadow-soft\">{label}</span>\n </div>\n )\n}\n\nfunction Ticks({ status }) {\n if (status === 'sent') return <span className=\"text-slate-400\">✓</span>\n if (status === 'delivered') return <span className=\"text-slate-400\">✓✓</span>\n if (status === 'read') return <span className=\"text-sky-500\">✓✓</span>\n return null\n}\n\nfunction Message({ m, searchQuery = '', isCurrentMatch = false }) {\n if (m.side === 'system') {\n return (\n <div className=\"flex justify-center my-2\">\n <span className=\"text-[11px] text-slate-500 bg-slate-100 rounded-full px-2.5 py-0.5\">{m.text} · {m.time}</span>\n </div>\n )\n }\n if (m.side === 'note') {\n return (\n <div className=\"flex justify-end my-2\">\n <div className={`max-w-[70%] bg-yellow-50 border rounded-2xl rounded-tr-sm px-3.5 py-2.5 shadow-soft ${isCurrentMatch ? 'border-amber-500 ring-2 ring-amber-300' : 'border-yellow-200'}`}>\n <div className=\"flex items-center justify-between gap-3 mb-1\">\n <span className=\"text-[11px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Nota interna · {m.author}</span>\n <span className=\"text-[11px] text-yellow-700\">{m.time}</span>\n </div>\n <p className=\"text-[13.5px] text-yellow-900 leading-relaxed\">{highlightText(m.text, searchQuery, isCurrentMatch)}</p>\n </div>\n </div>\n )\n }\n\n const isOut = m.side === 'out'\n return (\n <div className={`flex ${isOut ? 'justify-end' : 'justify-start'} group`}>\n {!isOut && <Avatar name=\"Samir Patel\" color=\"bg-violet-500\" size=\"sm\" />}\n <div className={`mx-2 max-w-[68%] ${isOut ? 'order-first' : ''}`}>\n <div className={`relative px-3.5 py-2.5 rounded-2xl shadow-soft ${\n isOut\n ? 'bg-emerald-600 text-white rounded-tr-sm'\n : 'bg-white border border-slate-200 text-slate-800 rounded-tl-sm'\n } ${isCurrentMatch ? 'ring-2 ring-amber-400' : ''}`}>\n {m.kind === 'text' && <p className=\"text-[13.5px] leading-relaxed whitespace-pre-wrap\">{highlightText(m.text, searchQuery, isCurrentMatch)}</p>}\n\n {m.kind === 'image' && (\n <div className=\"-mx-1 -mt-1\">\n {m.mediaUrl ? (\n <a href={m.mediaUrl} target=\"_blank\" rel=\"noreferrer\">\n <img src={m.mediaUrl} alt={m.caption || 'imagem'} className=\"w-64 max-h-72 object-cover rounded-lg\" />\n </a>\n ) : (\n <div className=\"w-64 h-40 rounded-lg bg-gradient-to-br from-slate-200 to-slate-300 flex items-center justify-center text-slate-500\">\n {I.image}\n </div>\n )}\n {m.caption && <p className=\"text-[13px] mt-2\">{highlightText(m.caption, searchQuery, isCurrentMatch)}</p>}\n </div>\n )}\n\n {m.kind === 'video' && (\n <div className=\"-mx-1 -mt-1\">\n {m.mediaUrl\n ? <video src={m.mediaUrl} controls className=\"w-64 rounded-lg\" />\n : <div className=\"w-64 h-40 rounded-lg bg-slate-200 flex items-center justify-center text-slate-500\">🎥</div>}\n {m.caption && <p className=\"text-[13px] mt-2\">{highlightText(m.caption, searchQuery, isCurrentMatch)}</p>}\n </div>\n )}\n\n {m.kind === 'document' && (\n <a href={m.mediaUrl || '#'} target=\"_blank\" rel=\"noreferrer\"\n className={`flex items-center gap-2.5 min-w-[200px] rounded-lg px-2 py-1.5 ${isOut ? 'bg-emerald-700/40' : 'bg-slate-100'}`}>\n <span className={isOut ? 'text-emerald-100' : 'text-slate-500'}>{I.file}</span>\n <span className=\"text-[13px] truncate flex-1\">{m.meta || m.caption || 'arquivo'}</span>\n </a>\n )}\n\n {m.kind === 'audio' && (\n <div className=\"flex items-center gap-3 min-w-[220px]\">\n <button className={`w-9 h-9 rounded-full inline-flex items-center justify-center ${isOut ? 'bg-emerald-700' : 'bg-slate-100 text-slate-700'}`}>\n ▶\n </button>\n <div className=\"flex-1\">\n <div className={`h-1 rounded-full ${isOut ? 'bg-emerald-700' : 'bg-slate-200'} relative overflow-hidden`}>\n <div className={`h-full w-2/5 ${isOut ? 'bg-white' : 'bg-emerald-500'}`} />\n </div>\n <div className={`text-[11px] mt-1 ${isOut ? 'text-emerald-100' : 'text-slate-500'}`}>{m.duration}</div>\n </div>\n <span className={isOut ? 'text-emerald-100' : 'text-slate-400'}>{I.mic}</span>\n </div>\n )}\n\n <div className={`flex items-center gap-1 justify-end mt-1 text-[10.5px] ${isOut ? 'text-emerald-100' : 'text-slate-400'}`}>\n {m.author && !isOut === false && <span className=\"mr-1\">{m.author}</span>}\n <span>{m.time}</span>\n {isOut && <Ticks status={m.status} />}\n </div>\n </div>\n\n {/* Hover actions */}\n <div className={`flex gap-1 mt-1 opacity-0 group-hover:opacity-100 transition-opacity ${isOut ? 'justify-end' : 'justify-start'}`}>\n <HoverBtn icon={I.reply} />\n <HoverBtn icon={I.forward} />\n <HoverBtn icon={I.emoji} />\n <HoverBtn icon={I.more} />\n </div>\n </div>\n {isOut && <Avatar name={m.author || 'Maria Eduarda'} color={m.author === 'Alissa Mendes' ? 'bg-sky-500' : 'bg-amber-500'} size=\"sm\" />}\n </div>\n )\n}\n\nfunction HoverBtn({ icon }) {\n return (\n <button className=\"p-1 rounded-md text-slate-400 bg-white border border-slate-200 hover:text-slate-700 shadow-soft\">{icon}</button>\n )\n}\n\nfunction ComposeBtn({ icon, label }) {\n return (\n <button className=\"text-slate-500 hover:bg-slate-100 px-1.5 py-1.5 rounded-md inline-flex items-center gap-1 text-[12px]\">\n {icon} {label && <span>{label}</span>}\n </button>\n )\n}\n\nfunction fmtSecs(s) {\n const m = Math.floor(s / 60)\n return `${m}:${String(s % 60).padStart(2, '0')}`\n}\n\n// Waveform estilo WhatsApp: acumula amostras de volume ao longo do tempo e\n// rola da direita p/ esquerda, mostrando o áudio \"passando\".\nfunction AudioWave({ analyserRef }) {\n const MAX = 56\n const [samples, setSamples] = useState([])\n useEffect(() => {\n let raf\n let last = 0\n const buf = []\n const loop = (ts) => {\n const an = analyserRef?.current\n if (an && ts - last > 70) {\n last = ts\n const data = new Uint8Array(an.fftSize)\n an.getByteTimeDomainData(data)\n let sum = 0\n for (let i = 0; i < data.length; i++) {\n const v = (data[i] - 128) / 128\n sum += v * v\n }\n const rms = Math.sqrt(sum / data.length)\n buf.push(Math.min(1, rms * 2.4))\n if (buf.length > MAX) buf.shift()\n setSamples([...buf])\n }\n raf = requestAnimationFrame(loop)\n }\n raf = requestAnimationFrame(loop)\n return () => cancelAnimationFrame(raf)\n }, [analyserRef])\n return (\n <div className=\"flex items-center justify-start gap-[2px] h-7 flex-1 min-w-0 overflow-hidden\">\n {samples.map((v, i) => (\n <span key={i} style={{ height: `${Math.max(2, v * 26)}px` }}\n className=\"w-[2px] bg-rose-400 rounded-full shrink-0\" />\n ))}\n </div>\n )\n}\n\nfunction AttachMenu({ onImage, onFile }) {\n const [open, setOpen] = useState(false)\n const ref = useRef(null)\n useEffect(() => {\n if (!open) return\n const onDoc = e => { if (ref.current && !ref.current.contains(e.target)) setOpen(false) }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [open])\n\n return (\n <div ref={ref} className=\"relative\">\n <button onClick={() => setOpen(v => !v)} title=\"Anexar\"\n className={`px-1.5 py-1.5 rounded-md inline-flex items-center ${open ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.paperclip}\n </button>\n {open && (\n <div className=\"absolute bottom-[calc(100%+6px)] left-0 z-20 w-44 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <MenuItem icon={I.image} label=\"Imagem\" onClick={() => { setOpen(false); onImage?.() }} />\n <MenuItem icon={I.file} label=\"Documento\" onClick={() => { setOpen(false); onFile?.() }} />\n </div>\n )}\n </div>\n )\n}\n\n/* ---------- Painel de detalhes ---------- */\nfunction DetailsPanel({ c, onClose }) {\n const [tab, setTab] = useState('details')\n return (\n <aside className=\"w-[340px] bg-white border-l border-slate-200 flex flex-col\">\n <header className=\"px-4 py-3 border-b border-slate-200 flex items-center justify-between\">\n <div className=\"flex gap-3 text-[12.5px]\">\n {[\n ['details', 'Detalhes'],\n ['notes', 'Notas'],\n ['history', 'Histórico'],\n ].map(([k, l]) => (\n <button key={k} onClick={() => setTab(k)}\n className={`pb-2 -mb-3 font-medium border-b-2 ${tab === k ? 'border-slate-900 text-slate-900' : 'border-transparent text-slate-500 hover:text-slate-800'}`}>\n {l}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <button className=\"p-1.5 rounded-md text-slate-500 hover:bg-slate-100\">{I.external}</button>\n <button onClick={onClose} className=\"p-1.5 rounded-md text-slate-500 hover:bg-slate-100\">{I.x}</button>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto\">\n {tab === 'details' && <DetailsTab c={c} />}\n {tab === 'notes' && <NotesTab />}\n {tab === 'history' && <HistoryTab />}\n </div>\n </aside>\n )\n}\n\nfunction Section({ title, action, children, defaultOpen = true }) {\n const [open, setOpen] = useState(defaultOpen)\n return (\n <div className=\"border-b border-slate-100\">\n <button onClick={() => setOpen(v => !v)} className=\"w-full px-4 pt-4 pb-2 flex items-center justify-between\">\n <span className=\"text-[11px] font-semibold uppercase tracking-wider text-slate-500\">{title}</span>\n <span className={`text-slate-400 transition-transform ${open ? '' : '-rotate-90'}`}>{I.chevDown}</span>\n </button>\n {open && <div className=\"px-4 pb-4 space-y-2.5\">{children}{action}</div>}\n </div>\n )\n}\n\nfunction Row({ label, children }) {\n return (\n <div className=\"flex items-start gap-3 text-[12.5px]\">\n <span className=\"w-28 shrink-0 text-slate-500 pt-0.5\">{label}</span>\n <div className=\"flex-1 min-w-0 text-slate-800\">{children}</div>\n </div>\n )\n}\n\nconst PROPERTY_CATALOG = [\n { id: '856235', title: 'Apto 80m² · Jardins · 2 dorm' },\n { id: '856301', title: 'Apto 65m² · Vila Mariana · 2 dorm' },\n { id: '857188', title: 'Cobertura 120m² · Itaim · 3 dorm' },\n { id: '854902', title: 'Casa 180m² · Alto de Pinheiros · 4 dorm' },\n { id: '855417', title: 'Studio 35m² · Pinheiros · 1 dorm' },\n { id: '858033', title: 'Apto 95m² · Moema · 3 dorm' },\n { id: '858720', title: 'Apto 110m² · Perdizes · 3 dorm' },\n]\n\nfunction PropertyLinker() {\n const [linked, setLinked] = useState([PROPERTY_CATALOG[0], PROPERTY_CATALOG[5]])\n const [query, setQuery] = useState('')\n const [adding, setAdding] = useState(false)\n const inputRef = useRef(null)\n const wrapRef = useRef(null)\n\n useEffect(() => { if (adding) inputRef.current?.focus() }, [adding])\n\n useEffect(() => {\n if (!adding) return\n const onDoc = e => { if (wrapRef.current && !wrapRef.current.contains(e.target)) closeAdd() }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [adding])\n\n const suggestions = useMemo(() => {\n const q = query.trim().toLowerCase()\n const linkedIds = new Set(linked.map(p => p.id))\n return PROPERTY_CATALOG.filter(p =>\n !linkedIds.has(p.id) &&\n (q === '' || p.id.toLowerCase().includes(q) || p.title.toLowerCase().includes(q))\n ).slice(0, 5)\n }, [query, linked])\n\n const closeAdd = () => { setAdding(false); setQuery('') }\n const addProperty = p => { setLinked(l => [...l, p]); closeAdd() }\n const removeProperty = id => setLinked(l => l.filter(p => p.id !== id))\n\n return (\n <div ref={wrapRef} className=\"w-full\">\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1\">\n {linked.map(p => (\n <div key={p.id} className=\"group inline-flex items-center gap-0.5 text-[13px] leading-tight\">\n <a href=\"#\" title={p.title}\n className=\"text-slate-700 underline underline-offset-2 hover:text-emerald-700 inline-flex items-center gap-1 tabular-nums\">\n {p.id}\n <span className=\"text-slate-400 group-hover:text-emerald-600\">{I.external}</span>\n </a>\n <button onClick={() => removeProperty(p.id)} title=\"Desvincular\"\n className=\"opacity-0 group-hover:opacity-100 p-0.5 text-slate-400 hover:text-rose-500 transition-opacity\">\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"2.5\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"/>\n </svg>\n </button>\n </div>\n ))}\n {!adding && (\n <button onClick={() => setAdding(true)} title=\"Vincular imóvel\"\n className=\"text-[11px] text-slate-500 hover:text-slate-800 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded-full border border-dashed border-slate-300 hover:border-slate-400 hover:bg-slate-50\">\n + imóvel\n </button>\n )}\n </div>\n\n {adding && (\n <div className=\"relative mt-2\">\n <span className=\"absolute left-2 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none\">{I.search}</span>\n <input\n ref={inputRef}\n value={query}\n onChange={e => setQuery(e.target.value)}\n onKeyDown={e => { if (e.key === 'Escape') closeAdd() }}\n placeholder=\"Código ou bairro…\"\n className=\"w-full pl-7 pr-2 py-1.5 text-[12px] rounded-lg bg-white border border-slate-300 outline-none focus:border-slate-400 placeholder:text-slate-400\"\n />\n {suggestions.length > 0 && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-30 bg-white border border-slate-200 rounded-lg shadow-lg overflow-hidden\">\n {suggestions.map(p => (\n <button key={p.id} onClick={() => addProperty(p)}\n className=\"w-full text-left px-2.5 py-1.5 hover:bg-slate-50 flex items-center gap-2 border-b border-slate-100 last:border-b-0\">\n <span className=\"text-[12.5px] font-mono font-semibold text-slate-700 tabular-nums\">{p.id}</span>\n <span className=\"text-slate-300\">·</span>\n <span className=\"text-[11.5px] text-slate-500 truncate flex-1 min-w-0\">{p.title}</span>\n <span className=\"text-slate-300 shrink-0\">{I.plus}</span>\n </button>\n ))}\n </div>\n )}\n {query.trim() && suggestions.length === 0 && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-30 bg-white border border-slate-200 rounded-lg shadow-lg px-3 py-2 text-[12px] text-slate-500\">\n Nenhum imóvel encontrado para \"{query.trim()}\".\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nfunction LinkRow({ icon, label }) {\n return (\n <button className=\"w-full flex items-center gap-2 text-[13px] text-slate-700 hover:bg-slate-50 -mx-1 px-1 py-1 rounded-md\">\n <span className=\"text-slate-500\">{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n <span className=\"text-slate-400\">{I.plus}</span>\n </button>\n )\n}\n\nfunction ActionRow({ icon, label, children, onClick }) {\n const [open, setOpen] = useState(false)\n const hasSubmenu = !!children\n const handle = () => hasSubmenu ? setOpen(v => !v) : onClick?.()\n return (\n <div>\n <button onClick={handle}\n className=\"w-full flex items-center gap-2 text-[13px] text-slate-700 hover:bg-slate-50 -mx-1 px-1 py-1 rounded-md\">\n <span className=\"text-slate-500\">{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n <span className={`text-slate-400 transition-transform ${hasSubmenu && open ? 'rotate-90' : ''}`}>\n {hasSubmenu ? I.chevRight : I.plus}\n </span>\n </button>\n {hasSubmenu && open && (\n <div className=\"ml-7 mt-0.5 mb-1 border-l border-slate-200 pl-3 space-y-0.5\">\n {children}\n </div>\n )}\n </div>\n )\n}\n\nfunction SubAction({ label, onClick }) {\n return (\n <button onClick={onClick}\n className=\"w-full text-left text-[12.5px] text-slate-600 hover:text-slate-900 hover:bg-slate-50 -mx-1 px-1.5 py-1 rounded-md\">\n {label}\n </button>\n )\n}\n\nfunction DetailsTab({ c }) {\n const palette = ['sky', 'rose', 'violet', 'emerald', 'amber', 'slate']\n const [tags, setTags] = useState([\n { label: 'Comprador', tone: 'sky' },\n { label: 'Quente', tone: 'rose' },\n { label: 'Apto 2-3 dorm', tone: 'violet' },\n { label: 'Zona Sul', tone: 'emerald' },\n { label: 'Até R$ 900k', tone: 'amber' },\n ])\n const [expanded, setExpanded] = useState(false)\n const [adding, setAdding] = useState(false)\n const [newTag, setNewTag] = useState('')\n const tagInputRef = useRef(null)\n useEffect(() => { if (adding) tagInputRef.current?.focus() }, [adding])\n\n const VISIBLE = 3\n const shownTags = expanded ? tags : tags.slice(0, VISIBLE)\n const hiddenCount = Math.max(0, tags.length - VISIBLE)\n\n const addTag = () => {\n const v = newTag.trim()\n if (v) setTags(t => [...t, { label: v, tone: palette[t.length % palette.length] }])\n setNewTag('')\n setAdding(false)\n }\n const removeTag = i => setTags(t => t.filter((_, idx) => idx !== i))\n\n return (\n <>\n <div className=\"px-4 pt-4 pb-3 flex items-start gap-3\">\n <Avatar name={c.name} color={c.avatarColor} size=\"xl\" online />\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-semibold truncate\">{c.name}</div>\n <div className=\"text-[12px] text-slate-500 truncate\">{c.phone}</div>\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {shownTags.map((t, i) => (\n <Pill key={`${t.label}-${i}`} tone={t.tone}>\n {t.label}\n <button onClick={() => removeTag(i)} title=\"Remover\"\n className=\"ml-0.5 -mr-0.5 opacity-60 hover:opacity-100\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"3\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"/>\n </svg>\n </button>\n </Pill>\n ))}\n {!expanded && hiddenCount > 0 && (\n <button onClick={() => setExpanded(true)}\n className=\"text-[11px] text-slate-500 hover:text-slate-800 px-1.5 py-0.5 rounded-full hover:bg-slate-100 self-center\">\n +{hiddenCount}\n </button>\n )}\n {expanded && tags.length > VISIBLE && (\n <button onClick={() => setExpanded(false)}\n className=\"text-[11px] text-slate-500 hover:text-slate-800 px-1.5 py-0.5 rounded-full hover:bg-slate-100 self-center\">\n mostrar menos\n </button>\n )}\n {adding ? (\n <input\n ref={tagInputRef}\n value={newTag}\n onChange={e => setNewTag(e.target.value)}\n onBlur={addTag}\n onKeyDown={e => {\n if (e.key === 'Enter') { e.preventDefault(); addTag() }\n if (e.key === 'Escape') { setNewTag(''); setAdding(false) }\n }}\n placeholder=\"nova tag…\"\n className=\"text-[11px] px-2 py-0.5 rounded-full bg-white border border-slate-300 outline-none focus:border-slate-500 w-24\"\n />\n ) : (\n <button onClick={() => { setExpanded(true); setAdding(true) }} title=\"Adicionar tag\"\n className=\"text-[11px] text-slate-500 hover:text-slate-800 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded-full border border-dashed border-slate-300 hover:border-slate-400 hover:bg-slate-50\">\n + tag\n </button>\n )}\n </div>\n </div>\n </div>\n\n <Section title=\"Atribuição\">\n <Row label=\"Atendente\">\n <span className=\"inline-flex items-center gap-1.5\">\n <Avatar name=\"Maria Eduarda\" size=\"sm\" color=\"bg-amber-500\" /> Maria Eduarda\n </span>\n </Row>\n <Row label=\"Departamento\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"w-5 h-5 rounded-md bg-rose-500 text-white text-[10px] flex items-center justify-center font-bold\">CO</span>\n Comercial\n </span>\n </Row>\n <Row label=\"Origem\">\n <span className=\"inline-flex items-center gap-1.5 text-emerald-700\">{I.whatsapp} WhatsApp Business</span>\n </Row>\n </Section>\n\n <Section title=\"Ticket\">\n <Row label=\"Tipo\"><Pill tone=\"rose\">🏠 Interesse em compra</Pill></Row>\n <Row label=\"Status\"><Pill tone={statusInfo[c.status].tone}>{statusInfo[c.status].label}</Pill></Row>\n <Row label=\"Prioridade\"><Pill tone={c.priority === 'urgent' ? 'rose' : c.priority === 'high' ? 'amber' : 'slate'}>Alta</Pill></Row>\n <Row label=\"Imóveis\"><PropertyLinker /></Row>\n <Row label=\"Aberto\">há 18 min</Row>\n </Section>\n\n <Section title=\"Ações\">\n <ActionRow icon={I.userPlus} label=\"Adicionar cliente\">\n <SubAction label=\"Proprietário\" />\n <SubAction label=\"Cliente\" />\n </ActionRow>\n <ActionRow icon={I.checkCircle} label=\"Criar tarefa\" />\n <ActionRow icon={I.calendar} label=\"Agendar visita\" />\n <ActionRow icon={I.file} label=\"Enviar documentos\" />\n </Section>\n\n </>\n )\n}\n\nfunction NotesTab() {\n return (\n <div className=\"p-4 space-y-3\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-xl p-3\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-[11.5px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Maria Eduarda</span>\n <span className=\"text-[11px] text-yellow-700\">há 11 min</span>\n </div>\n <p className=\"text-[13px] text-yellow-900\">Cliente Gold — perfil quente, decisão rápida. Já visitou conosco em fev/26 (ticket #7892), gostou da região mas o imóvel estava acima do orçamento.</p>\n </div>\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-xl p-3\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-[11.5px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Alissa Mendes</span>\n <span className=\"text-[11px] text-yellow-700\">há 4 min</span>\n </div>\n <p className=\"text-[13px] text-yellow-900\">Confirmei com os proprietários — Vila Mariana e Moema liberados pra visita amanhã das 10h às 17h.</p>\n </div>\n <button className=\"w-full text-[12.5px] py-2 rounded-lg border border-dashed border-slate-300 text-slate-500 hover:bg-slate-50 inline-flex items-center justify-center gap-1\">\n {I.plus} Nova nota\n </button>\n </div>\n )\n}\n\nfunction HistoryTab() {\n const items = [\n { t: 'Ticket #7892 — Visita apto Itaim', s: 'Sem proposta', when: 'fev/26', tone: 'slate' },\n { t: 'Ticket #7541 — Interesse em cobertura', s: 'Resolvido', when: 'jan/26', tone: 'emerald' },\n { t: 'Ticket #7233 — Pedido de matrícula', s: 'Resolvido', when: 'dez/25', tone: 'emerald' },\n { t: 'Ticket #6890 — Primeira simulação', s: 'Resolvido', when: 'out/25', tone: 'emerald' },\n ]\n return (\n <div className=\"p-4 space-y-2\">\n {items.map((it, i) => (\n <button key={i} className=\"w-full text-left bg-white border border-slate-200 hover:border-slate-300 rounded-xl p-3 flex items-start gap-3\">\n <span className=\"w-8 h-8 rounded-lg bg-slate-100 text-slate-500 flex items-center justify-center\">{I.chat}</span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-[13px] font-medium truncate\">{it.t}</p>\n <div className=\"flex items-center gap-2 mt-1\">\n <Pill tone={it.tone}>{it.s}</Pill>\n <span className=\"text-[11.5px] text-slate-500\">{it.when}</span>\n </div>\n </div>\n <span className=\"text-slate-400 mt-1\">{I.chevRight}</span>\n </button>\n ))}\n </div>\n )\n}\n","// src/lib/useInbox.js\n// Live inbox data layer, driven by the injected config (via <PloyChat>).\n'use client'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { usePloy } from './context'\nimport { mapConversation, mapMessage, nowHHMM } from './mappers'\n\nexport function useInbox() {\n const { client } = usePloy()\n const live = client.live\n\n const [conversations, setConversations] = useState([])\n const [activeId, setActiveId] = useState(null)\n const [messages, setMessages] = useState([])\n const [channels, setChannels] = useState([])\n const [agents, setAgents] = useState([])\n const [me, setMe] = useState(null)\n const [tenantId, setTenantId] = useState(null)\n const [loading, setLoading] = useState(live)\n const [error, setError] = useState(null)\n const activeIdRef = useRef(null)\n activeIdRef.current = activeId\n\n const api = client.apiFetch\n\n // identity + tenant (tenant drives the realtime topic; may differ from workspace)\n useEffect(() => {\n if (!live) return\n api('/v1/me')\n .then((m) => { if (m?.user?.id) setMe(m.user.id); if (m?.tenant_id) setTenantId(m.tenant_id) })\n .catch(() => {})\n }, [live, api])\n\n const loadConversations = useCallback(async () => {\n if (!live) return\n try {\n const data = await api('/v1/conversations?limit=50')\n const mapped = (data || []).map(mapConversation)\n setConversations(mapped)\n setActiveId((a) => a || mapped[0]?.id || null)\n } catch (e) { setError(e.message) } finally { setLoading(false) }\n }, [live, api])\n\n const loadMessages = useCallback(async (convId) => {\n if (!live || !convId) return\n try {\n const res = await api(`/v1/conversations/${convId}/messages?limit=50`)\n setMessages((res?.messages || []).slice().reverse().map(mapMessage))\n } catch (e) { setError(e.message) }\n }, [live, api])\n\n const loadChannels = useCallback(async () => {\n if (!live) return []\n try { const l = (await api('/v1/channels')) || []; setChannels(l); return l } catch { return [] }\n }, [live, api])\n\n const loadAgents = useCallback(async () => {\n if (!live) return []\n try { const l = (await api('/v1/agents')) || []; setAgents(l); return l } catch { return [] }\n }, [live, api])\n\n useEffect(() => { loadConversations(); loadChannels(); loadAgents() }, [loadConversations, loadChannels, loadAgents])\n useEffect(() => { loadMessages(activeId) }, [activeId, loadMessages])\n\n const markRead = useCallback(async (convId) => {\n if (!live || !convId) return\n setConversations((cs) => cs.map((c) => (c.id === convId ? { ...c, unread: 0 } : c)))\n try { await api(`/v1/conversations/${convId}/read`, { method: 'POST' }) } catch {}\n }, [live, api])\n\n const assign = useCallback(async (convId, userId) => {\n if (!live || !convId) return\n setConversations((cs) => cs.map((c) => (c.id === convId ? { ...c, _raw: { ...c._raw, assignee_user_id: userId } } : c)))\n try { await api(`/v1/conversations/${convId}/assign`, { method: 'POST', body: { assignee_user_id: userId } }) }\n catch (e) { setError(e.message) }\n }, [live, api])\n\n const send = useCallback(async (text, isNote = false) => {\n const t = (text || '').trim()\n if (!t || !live || !activeIdRef.current) return\n const tmpId = `tmp${Date.now()}`\n setMessages((ms) => [...ms, isNote\n ? { id: tmpId, side: 'note', kind: 'text', text: t, time: nowHHMM() }\n : { id: tmpId, side: 'out', kind: 'text', text: t, time: nowHHMM(), status: 'pending' }])\n try {\n const saved = await api(`/v1/conversations/${activeIdRef.current}/messages`, {\n method: 'POST', body: isNote ? { text: t, note: true } : { text: t },\n })\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? mapMessage(saved) : m)))\n } catch {\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...m, status: 'failed' } : m)))\n }\n }, [live, api])\n\n const sendMedia = useCallback(async ({ data, mime, kind, filename, previewUrl, caption }) => {\n if (!live || !activeIdRef.current || !data) return\n const tmpId = `tmp${Date.now()}`\n setMessages((ms) => [...ms, { id: tmpId, side: 'out', kind, mediaUrl: previewUrl || '', caption: caption || '', meta: filename || mime || '', time: nowHHMM(), status: 'pending' }])\n try {\n const saved = await api(`/v1/conversations/${activeIdRef.current}/messages`, {\n method: 'POST', body: { media: { data, mime, kind, filename }, caption },\n })\n const mapped = mapMessage(saved)\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...mapped, mediaUrl: mapped.mediaUrl || previewUrl || '' } : m)))\n } catch {\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...m, status: 'failed' } : m)))\n }\n }, [live, api])\n\n const createChannel = useCallback((displayName) => api('/v1/channels', { method: 'POST', body: { display_name: displayName } }), [api])\n const connect = useCallback((id) => api(`/v1/channels/${id}/connect`, { method: 'POST' }), [api])\n const channelStatus = useCallback((id) => api(`/v1/channels/${id}/status`), [api])\n\n // realtime fan-out (Supabase broadcast on inbox:{tenant})\n useEffect(() => {\n if (!live || !tenantId) return\n const sb = client.supabase\n if (!sb) return\n const ch = sb\n .channel(`inbox:${tenantId}`)\n .on('broadcast', { event: 'message.created' }, ({ payload }) => {\n if (payload?.conversation_id === activeIdRef.current) {\n setMessages((ms) => (ms.some((m) => m.id === payload.id) ? ms : [...ms, mapMessage(payload)]))\n }\n loadConversations()\n })\n .on('broadcast', { event: 'message.updated' }, ({ payload }) => {\n setMessages((ms) => ms.map((m) => (m.id === payload?.id ? { ...m, status: payload.status || m.status } : m)))\n })\n .on('broadcast', { event: 'conversation.updated' }, () => loadConversations())\n .on('broadcast', { event: 'channel.updated' }, () => loadChannels())\n .subscribe()\n return () => { sb.removeChannel(ch) }\n }, [live, tenantId, client, loadConversations, loadChannels])\n\n return {\n live, loading, error,\n conversations, activeId, setActiveId, messages,\n send, sendMedia, markRead, assign, me, agents, loadAgents,\n channels, loadChannels, createChannel, connect, channelStatus,\n }\n}\n","'use client'\nimport { createContext, useContext, useMemo } from 'react'\nimport { createPloyClient } from './client'\n\n// Config is injected by the host via <PloyChat> props — no env, no localStorage.\nconst PloyContext = createContext(null)\n\nexport function PloyConfigProvider({ config, children }) {\n // memo by the identity-relevant fields so the client isn't rebuilt each render\n const value = useMemo(() => {\n const client = createPloyClient(config)\n return { config, client }\n }, [config.apiBase, config.workspaceId, config.getToken, config.supabase, config.supabaseUrl, config.supabaseAnonKey])\n return <PloyContext.Provider value={value}>{children}</PloyContext.Provider>\n}\n\nexport function usePloy() {\n const ctx = useContext(PloyContext)\n if (!ctx) throw new Error('PloyChat components must be used within <PloyChat>')\n return ctx\n}\n","// src/lib/client.js\n// Builds a config-driven client (HTTP + realtime) from the injected config.\n// config: {\n// apiBase: string, // chat-api base URL\n// workspaceId: string, // host workspace/tenant the user is in\n// getToken: () => Promise<string|null>, // host session access_token\n// supabase?: SupabaseClient, // host's client (preferred, for realtime)\n// supabaseUrl?, supabaseAnonKey?, // OR url+anon to create one\n// }\nimport { createClient } from '@supabase/supabase-js'\n\nexport function createPloyClient(config = {}) {\n const apiBase = (config.apiBase || '').replace(/\\/+$/, '')\n\n async function apiFetch(path, { method = 'GET', body } = {}) {\n const headers = {}\n if (body) headers['Content-Type'] = 'application/json'\n const token = config.getToken ? await config.getToken() : null\n if (token) headers['Authorization'] = `Bearer ${token}`\n if (config.workspaceId) headers['X-Workspace'] = config.workspaceId\n\n const res = await fetch(`${apiBase}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n })\n const txt = await res.text()\n let json\n try { json = txt ? JSON.parse(txt) : null } catch { json = txt }\n if (!res.ok) {\n const err = new Error(json?.message || json?.error || `HTTP ${res.status}`)\n err.status = res.status\n err.body = json\n throw err\n }\n return json\n }\n\n // realtime client: prefer the host's supabase client; else build from url+anon\n let supabase = config.supabase || null\n if (!supabase && config.supabaseUrl && config.supabaseAnonKey) {\n supabase = createClient(config.supabaseUrl, config.supabaseAnonKey, {\n auth: { persistSession: false, autoRefreshToken: false },\n })\n }\n\n const live = !!(config.apiBase && config.workspaceId && config.getToken)\n\n return { apiFetch, supabase, live }\n}\n","// src/lib/mappers.js — backend (inbox_*) shapes -> the UI shapes App.jsx expects.\nconst PALETTE = ['bg-violet-500', 'bg-rose-500', 'bg-sky-500', 'bg-amber-500', 'bg-emerald-600', 'bg-slate-700']\nfunction hash(s = '') { let h = 0; for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0; return h }\nexport function colorFor(id = '') { return PALETTE[hash(id) % PALETTE.length] }\n\nconst pad = (n) => String(n).padStart(2, '0')\nexport function timeOf(iso) { if (!iso) return ''; const d = new Date(iso); return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\nexport function dayOf(iso) {\n if (!iso) return ''\n const d = new Date(iso); const now = new Date()\n if (d.toDateString() === now.toDateString()) return 'Hoje'\n const y = new Date(now); y.setDate(now.getDate() - 1)\n if (d.toDateString() === y.toDateString()) return 'Ontem'\n return d.toLocaleDateString('pt-BR')\n}\nexport function relTime(iso) {\n if (!iso) return ''\n const m = Math.floor((Date.now() - new Date(iso).getTime()) / 60000)\n if (m < 1) return 'agora'\n if (m < 60) return `${m}m`\n const h = Math.floor(m / 60); if (h < 24) return `${h}h`\n return `${Math.floor(h / 24)}d`\n}\nexport function nowHHMM() { const d = new Date(); return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\n\n// backend conversation.status -> UI status enum (statusInfo keys in App.jsx)\nconst STATUS_MAP = { open: 'open', pending: 'in_progress', resolved: 'resolved', snoozed: 'waiting' }\n\nexport function mapConversation(c) {\n const contact = c.contact || {}\n const name = contact.name || contact.push_name || contact.phone_e164 || contact.external_id || 'Contato'\n return {\n id: c.id,\n name,\n phone: contact.phone_e164 || '',\n avatarColor: colorFor(c.id),\n preview: c.last_message_preview || '',\n waitFor: relTime(c.last_message_at),\n unread: c.unread_count || 0,\n sla: 'ok',\n priority: c.priority || 'normal',\n status: STATUS_MAP[c.status] || 'open',\n ticket: c.property_ref ? `REF ${c.property_ref}` : `#${String(c.id).slice(0, 4)}`,\n starred: false,\n _raw: c,\n }\n}\n\nexport function mapMessage(m) {\n const ts = m.sent_at || m.created_at\n // internal note: kind='note', no direction, team-only\n if (m.kind === 'note') {\n return { id: m.id, side: 'note', kind: 'text', text: m.text || '', time: timeOf(ts), day: dayOf(ts), author: m.author_name, _raw: m }\n }\n if (m.kind === 'system') {\n return { id: m.id, side: 'system', kind: 'text', text: m.text || '', time: timeOf(ts), day: dayOf(ts), _raw: m }\n }\n let kind = m.kind || 'text'\n let text = m.text || ''\n if (!['text', 'image', 'audio', 'video', 'document'].includes(kind)) {\n text = m.text || m.caption || `[${kind}]`\n kind = 'text'\n }\n return {\n id: m.id,\n side: m.direction, // 'in' | 'out'\n kind,\n text,\n caption: m.caption || '',\n meta: m.media_mime || '',\n mediaUrl: m.media_url || '',\n time: timeOf(ts),\n day: dayOf(ts),\n status: m.status,\n _raw: m,\n }\n}\n","'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n// Minimal \"connect a WhatsApp number\" modal: create channel -> QR -> poll status.\nexport default function ConnectChannel({ inbox, onClose }) {\n const [channel, setChannel] = useState(null)\n const [qr, setQr] = useState(null)\n const [status, setStatus] = useState('idle')\n const [error, setError] = useState(null)\n const [busy, setBusy] = useState(false)\n const pollRef = useRef(null)\n\n const asDataUrl = (q) => (!q ? null : q.startsWith('data:') ? q : `data:image/png;base64,${q}`)\n\n useEffect(() => {\n (async () => {\n try {\n const list = await inbox.loadChannels()\n const c = (list || [])[0] || null\n setChannel(c)\n if (c) setStatus(c.status)\n } catch (e) { setError(e.message) }\n })()\n return () => clearInterval(pollRef.current)\n }, [inbox])\n\n const poll = (id) => {\n clearInterval(pollRef.current)\n pollRef.current = setInterval(async () => {\n try {\n const s = await inbox.channelStatus(id)\n setStatus(s.status)\n if (s.status === 'connected') { clearInterval(pollRef.current); inbox.loadChannels() }\n else { const res = await inbox.connect(id); if (res?.qr) setQr(asDataUrl(res.qr)) }\n } catch {}\n }, 3000)\n }\n\n const startConnect = async (ch) => {\n setError(null); setBusy(true); setStatus('connecting')\n try {\n const res = await inbox.connect(ch.id)\n setQr(asDataUrl(res?.qr))\n setStatus(res?.status || 'qr')\n poll(ch.id)\n } catch (e) { setError(e.message); setStatus('error') } finally { setBusy(false) }\n }\n\n const handleCreate = async () => {\n setError(null); setBusy(true)\n try { const ch = await inbox.createChannel('WhatsApp'); setChannel(ch); await startConnect(ch) }\n catch (e) { setError(e.message) } finally { setBusy(false) }\n }\n\n return (\n <div className=\"fixed inset-0 z-50 bg-black/40 flex items-center justify-center\" onClick={onClose}>\n <div className=\"bg-white rounded-2xl shadow-xl w-[380px] p-5\" onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"font-semibold text-[15px]\">Conectar WhatsApp</h3>\n <button onClick={onClose} className=\"text-slate-400 hover:text-slate-700 text-lg leading-none\">×</button>\n </div>\n\n {error && <div className=\"text-[12px] text-rose-600 mb-2 break-words\">{error}</div>}\n\n {status === 'connected' ? (\n <div className=\"text-center py-8 text-emerald-600 font-medium\">✓ Número conectado</div>\n ) : qr ? (\n <div className=\"text-center\">\n <img src={qr} alt=\"QR Code\" className=\"w-56 h-56 mx-auto rounded-lg border border-slate-200\" />\n <p className=\"text-[12px] text-slate-500 mt-3\">\n WhatsApp › Aparelhos conectados › Conectar um aparelho, e escaneie. ({status})\n </p>\n </div>\n ) : channel ? (\n <div className=\"text-center py-4\">\n <p className=\"text-[13px] text-slate-600 mb-3\">Canal: {channel.display_name} · {channel.status}</p>\n <button disabled={busy} onClick={() => startConnect(channel)}\n className=\"bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 text-white px-4 py-2 rounded-lg text-[13px] font-medium\">\n {busy ? 'Gerando…' : 'Gerar QR Code'}\n </button>\n </div>\n ) : (\n <div className=\"text-center py-4\">\n <p className=\"text-[13px] text-slate-600 mb-3\">Nenhum canal ainda. Crie um para conectar um número.</p>\n <button disabled={busy} onClick={handleCreate}\n className=\"bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 text-white px-4 py-2 rounded-lg text-[13px] font-medium\">\n {busy ? 'Criando…' : 'Criar canal'}\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\nimport { lazy, Suspense } from 'react'\n\n// Lazy-load emoji-picker-react (client-only; touches window). No next/dynamic so\n// the lib stays framework-agnostic. Category enum values used as string literals\n// to avoid a static import of the module on SSR.\nconst Picker = lazy(() => import('emoji-picker-react'))\n\nconst CATEGORIES_PT = [\n { category: 'suggested', name: 'Recentes' },\n { category: 'smileys_people', name: 'Rostos e pessoas' },\n { category: 'animals_nature', name: 'Animais e natureza' },\n { category: 'food_drink', name: 'Comidas e bebidas' },\n { category: 'travel_places', name: 'Viagens e lugares' },\n { category: 'activities', name: 'Atividades' },\n { category: 'objects', name: 'Objetos' },\n { category: 'symbols', name: 'Símbolos' },\n { category: 'flags', name: 'Bandeiras' },\n]\n\nexport default function EmojiPicker({ onPick }) {\n return (\n <div className=\"absolute bottom-[calc(100%+6px)] left-0 z-30 shadow-xl rounded-xl overflow-hidden\">\n <Suspense fallback={<div className=\"w-[340px] h-[420px] bg-white\" />}>\n <Picker\n onEmojiClick={(e) => onPick(e.emoji)}\n lazyLoadEmojis\n width={340}\n height={420}\n categories={CATEGORIES_PT}\n searchPlaceholder=\"Buscar emoji…\"\n previewConfig={{ showPreview: false }}\n />\n </Suspense>\n </div>\n )\n}\n","'use client'\nimport { useEffect, useState } from 'react'\n\n// Transferir conversa para outro agente do workspace.\nexport default function TransferModal({ inbox, conversationId, currentAssignee, onClose }) {\n const [agents, setAgents] = useState(inbox.agents || [])\n const [q, setQ] = useState('')\n\n useEffect(() => { inbox.loadAgents().then((a) => a && setAgents(a)) }, [inbox])\n\n const filtered = agents.filter((a) => {\n const s = q.trim().toLowerCase()\n if (!s) return true\n return (a.name || '').toLowerCase().includes(s) || (a.email || '').toLowerCase().includes(s)\n })\n\n const pick = (userId) => { inbox.assign(conversationId, userId); onClose() }\n const initials = (n) => (n || '?').split(' ').map((p) => p[0]).slice(0, 2).join('').toUpperCase()\n\n return (\n <div className=\"fixed inset-0 z-50 bg-black/40 flex items-center justify-center\" onClick={onClose}>\n <div className=\"bg-white rounded-2xl shadow-xl w-[380px] max-h-[72vh] flex flex-col\" onClick={(e) => e.stopPropagation()}>\n <div className=\"px-4 py-3 border-b border-slate-200 flex items-center justify-between\">\n <h3 className=\"font-semibold text-[15px]\">Transferir conversa</h3>\n <button onClick={onClose} className=\"text-slate-400 hover:text-slate-700 text-lg leading-none\">×</button>\n </div>\n <div className=\"p-3 border-b border-slate-100\">\n <input value={q} onChange={(e) => setQ(e.target.value)} placeholder=\"Buscar agente…\"\n className=\"w-full px-3 py-1.5 text-[13px] rounded-lg bg-slate-50 border border-slate-200 outline-none focus:bg-white focus:border-slate-300\" />\n </div>\n <div className=\"flex-1 overflow-y-auto p-2\">\n <button onClick={() => pick(null)}\n className=\"w-full text-left px-3 py-2 rounded-lg hover:bg-slate-50 text-[13px] text-slate-500\">\n Sem atribuição\n </button>\n {filtered.map((a) => (\n <button key={a.user_id} onClick={() => pick(a.user_id)}\n className={`w-full text-left px-3 py-2 rounded-lg hover:bg-slate-50 flex items-center gap-2.5 ${currentAssignee === a.user_id ? 'bg-emerald-50' : ''}`}>\n <span className=\"w-8 h-8 rounded-full bg-slate-200 text-slate-600 text-[11px] font-semibold flex items-center justify-center shrink-0\">\n {initials(a.name)}\n </span>\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-[13px] truncate\">{a.name}</span>\n <span className=\"block text-[11px] text-slate-400 truncate\">{[a.email, a.role].filter(Boolean).join(' · ')}</span>\n </span>\n {currentAssignee === a.user_id && <span className=\"text-emerald-600 text-[11px] font-medium shrink-0\">atual</span>}\n </button>\n ))}\n {filtered.length === 0 && <p className=\"text-center text-[12px] text-slate-400 py-6\">Nenhum agente encontrado</p>}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\nimport App from './components/App'\nimport { PloyConfigProvider } from './lib/context'\n\n/**\n * <PloyChat> — embeddable WhatsApp inbox.\n *\n * Props:\n * - apiBase: string chat-api base URL\n * - workspaceId: string host workspace/tenant the user is in\n * - getToken: () => Promise<string|null> host session access_token\n * - supabase?: SupabaseClient host's client (preferred, for realtime)\n * - supabaseUrl?, supabaseAnonKey? OR create one for realtime\n * - className?: string wrapper class (fills its container; give it a height)\n */\nexport function PloyChat({\n apiBase,\n workspaceId,\n getToken,\n supabase,\n supabaseUrl,\n supabaseAnonKey,\n className,\n}) {\n const config = { apiBase, workspaceId, getToken, supabase, supabaseUrl, supabaseAnonKey }\n return (\n <PloyConfigProvider config={config}>\n <div className={className} style={{ height: '100%', width: '100%' }}>\n <App />\n </div>\n </PloyConfigProvider>\n )\n}\n\nexport default PloyChat\n"],"mappings":"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","names":["useMemo","useRef","useState","useEffect","conversations","useEffect","useRef","useState","jsx","jsx","useEffect","useState","jsx","jsxs","jsx","jsxs","jsxs","jsx","useState","useRef","useEffect","_a","useMemo","jsxs","jsx","jsxs","jsx","useState","useRef","useEffect","useState","useEffect","jsx","useRef","jsxs","useMemo","useState","jsxs","jsx","useRef","useEffect","jsx"]}
1
+ {"version":3,"sources":["../src/components/App.jsx","../src/lib/useInbox.js","../src/lib/context.jsx","../src/lib/client.js","../src/lib/mappers.js","../src/components/ConnectChannel.jsx","../src/components/EmojiPicker.jsx","../src/components/TransferModal.jsx","../src/PloyChat.jsx"],"sourcesContent":["'use client'\n\nimport { useMemo, useRef, useState, useEffect } from 'react'\nimport { useInbox } from '@/lib/useInbox'\nimport ConnectChannel from '@/components/ConnectChannel'\nimport EmojiPicker from '@/components/EmojiPicker'\nimport TransferModal from '@/components/TransferModal'\n\n/* ---------- Ícones SVG inline (sem dependências) ---------- */\nconst Icon = ({ d, className = 'w-4 h-4', stroke = 1.8, fill = 'none' }) => (\n <svg viewBox=\"0 0 24 24\" className={className} fill={fill} stroke=\"currentColor\" strokeWidth={stroke} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {d}\n </svg>\n)\nconst I = {\n inbox: <Icon d={<><path d=\"M22 12h-6l-2 3h-4l-2-3H2\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11Z\"/></>} />,\n chat: <Icon d={<path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5Z\"/>} />,\n contacts: <Icon d={<><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75\"/></>} />,\n send: <Icon d={<><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"/></>} />,\n bolt: <Icon d={<polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/>} />,\n bulb: <Icon d={<><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/><path d=\"M12 2a7 7 0 0 0-4 12.7c.6.5 1 1.3 1 2.1V18h6v-1.2c0-.8.4-1.6 1-2.1A7 7 0 0 0 12 2Z\"/></>} />,\n book: <Icon d={<><path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"/><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2Z\"/></>} />,\n chart: <Icon d={<><line x1=\"18\" y1=\"20\" x2=\"18\" y2=\"10\"/><line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"/><line x1=\"6\" y1=\"20\" x2=\"6\" y2=\"14\"/></>} />,\n users: <Icon d={<><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75\"/></>} />,\n grid: <Icon d={<><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/></>} />,\n briefcase: <Icon d={<><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"/><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"/></>} />,\n search: <Icon d={<><circle cx=\"11\" cy=\"11\" r=\"8\"/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/></>} />,\n filter: <Icon d={<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>} />,\n sort: <Icon d={<><path d=\"m3 16 4 4 4-4\"/><path d=\"M7 20V4\"/><path d=\"m21 8-4-4-4 4\"/><path d=\"M17 4v16\"/></>} />,\n chevDown: <Icon d={<polyline points=\"6 9 12 15 18 9\"/>} />,\n chevRight: <Icon d={<polyline points=\"9 18 15 12 9 6\"/>} />,\n panel: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/></>} />,\n more: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/></>} />,\n star: <Icon d={<polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>} />,\n phone: <Icon d={<path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92Z\"/>} />,\n moon: <Icon d={<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z\"/>} />,\n check: <Icon d={<polyline points=\"20 6 9 17 4 12\"/>} />,\n paperclip: <Icon d={<path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"/>} />,\n emoji: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"/><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"/><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"/></>} />,\n mic: <Icon d={<><path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3Z\"/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/><line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/></>} />,\n image: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></>} />,\n file: <Icon d={<><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></>} />,\n pin: <Icon d={<><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></>} />,\n tag: <Icon d={<><path d=\"M20.59 13.41 13.42 20.58a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82Z\"/><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"/></>} />,\n link: <Icon d={<><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/></>} />,\n clock: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/></>} />,\n forward: <Icon d={<><polyline points=\"15 17 20 12 15 7\"/><path d=\"M4 18v-2a4 4 0 0 1 4-4h12\"/></>} />,\n x: <Icon d={<><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></>} />,\n external: <Icon d={<><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/><polyline points=\"15 3 21 3 21 9\"/><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/></>} />,\n plus: <Icon d={<><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/></>} />,\n template: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"/></>} />,\n reply: <Icon d={<><polyline points=\"9 17 4 12 9 7\"/><path d=\"M20 18v-2a4 4 0 0 0-4-4H4\"/></>} />,\n whatsapp: <Icon d={<><path d=\"M20.52 3.48A11.93 11.93 0 0 0 12.02 0C5.4 0 .03 5.37.03 11.99c0 2.11.55 4.18 1.6 6L0 24l6.18-1.62a12 12 0 0 0 5.84 1.49h.01c6.62 0 11.99-5.37 11.99-11.99 0-3.2-1.25-6.21-3.5-8.4Z\"/><path d=\"M9.3 7.4c-.2-.5-.4-.5-.6-.5h-.5c-.2 0-.5.07-.7.34-.27.27-.93.91-.93 2.22 0 1.31.95 2.58 1.08 2.76.13.18 1.86 2.96 4.58 4.04 2.27.89 2.73.71 3.22.67.49-.05 1.58-.65 1.8-1.27.22-.62.22-1.16.15-1.27-.07-.11-.25-.18-.52-.31-.27-.13-1.58-.78-1.83-.87-.24-.09-.42-.13-.6.13-.18.27-.69.87-.84 1.05-.16.18-.31.2-.58.07-.27-.13-1.14-.42-2.17-1.34-.8-.71-1.34-1.59-1.5-1.86-.16-.27-.02-.41.12-.55.12-.12.27-.31.4-.47.13-.16.18-.27.27-.45.09-.18.04-.34-.02-.47-.07-.13-.6-1.43-.82-1.96Z\"/></>} fill=\"currentColor\" stroke=\"none\" />,\n home: <Icon d={<><path d=\"M3 9.5 12 3l9 6.5V20a1 1 0 0 1-1 1h-5v-7h-6v7H4a1 1 0 0 1-1-1V9.5Z\"/></>} />,\n calendar: <Icon d={<><rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/><line x1=\"8\" y1=\"2.5\" x2=\"8\" y2=\"6\"/><line x1=\"16\" y1=\"2.5\" x2=\"16\" y2=\"6\"/></>} />,\n building: <Icon d={<><rect x=\"4\" y=\"2.5\" width=\"16\" height=\"19\" rx=\"1.5\"/><path d=\"M9 21.5v-4h6v4\"/><path d=\"M8.5 7h.01M12 7h.01M15.5 7h.01M8.5 11h.01M12 11h.01M15.5 11h.01M8.5 15h.01M15.5 15h.01\"/></>} />,\n target: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/></>} />,\n kanban: <Icon d={<><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"14\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"10\"/></>} />,\n dollar: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><path d=\"M15 9c-.6-1.3-1.7-2-3-2-1.7 0-3 1-3 2.3 0 2.7 6 1.3 6 4 0 1.3-1.3 2.3-3 2.3-1.3 0-2.4-.7-3-2\"/><line x1=\"12\" y1=\"5.5\" x2=\"12\" y2=\"18.5\"/></>} />,\n checkCircle: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><polyline points=\"8.5 12 11 14.5 15.5 9.5\"/></>} />,\n globe: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"9.5\"/><line x1=\"2.5\" y1=\"12\" x2=\"21.5\" y2=\"12\"/><path d=\"M12 2.5c2.5 2.7 4 6.1 4 9.5s-1.5 6.8-4 9.5C9.5 18.8 8 15.4 8 12s1.5-6.8 4-9.5z\"/></>} />,\n rocket: <Icon d={<><path d=\"M4.5 16.5c-1.5 1.3-2 5-2 5s3.7-.5 5-2c.7-.8.7-2.1-.1-2.9-.8-.8-2.1-.8-2.9-.1z\"/><path d=\"M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22 22 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3 2-4c1.6-1 5 0 5 0\"/><path d=\"M12 15v5s3-.5 4-2c1-1.6 0-5 0-5\"/></>} />,\n wand: <Icon d={<><path d=\"m3 21 9-9\"/><path d=\"M15 3v3\"/><path d=\"M19 7l-2 2\"/><path d=\"M21 11h-3\"/><path d=\"M19 15l-2-2\"/><path d=\"M15 17v-3\"/></>} />,\n doc: <Icon d={<><path d=\"M14 2.5H6.5A2 2 0 0 0 4.5 4.5v15a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V8.5z\"/><polyline points=\"14 2.5 14 8.5 20 8.5\"/><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"/><line x1=\"8\" y1=\"17\" x2=\"14\" y2=\"17\"/></>} />,\n gear: <Icon d={<><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.6 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></>} />,\n card: <Icon d={<><rect x=\"2\" y=\"5.5\" width=\"20\" height=\"13\" rx=\"2\"/><line x1=\"2\" y1=\"10\" x2=\"22\" y2=\"10\"/></>} />,\n chevDblL: <Icon d={<><path d=\"m11 17-5-5 5-5\"/><path d=\"m18 17-5-5 5-5\"/></>} />,\n chevDblR: <Icon d={<><path d=\"m13 17 5-5-5-5\"/><path d=\"m6 17 5-5-5-5\"/></>} />,\n chevUp: <Icon d={<polyline points=\"18 15 12 9 6 15\"/>} />,\n userPlus: <Icon d={<><path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"8.5\" cy=\"7\" r=\"4\"/><line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\"/><line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\"/></>} />,\n qrcode: <Icon d={<><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\"/><path d=\"M14 14h3v3\"/><path d=\"M21 14v.01\"/><path d=\"M14 21h.01\"/><path d=\"M21 21v-3.5\"/><path d=\"M17.5 21h.01\"/></>} />,\n}\n\n/* ---------- Logo Veploy ---------- */\nconst VeployLogo = ({ size = 28 }) => (\n <svg viewBox=\"0 0 40 32\" width={size} height={(size * 32) / 40} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 8 L13 28 L17 22 L8 8 Z\" fill=\"#2f4a2d\" />\n <path d=\"M13 28 L36 0 L26 0 L11 22 Z\" fill=\"#b4e234\" />\n </svg>\n)\n\n/* ---------- Estrutura do menu ---------- */\nconst NAV_DATA = [\n { kind: 'item', id: 'home', label: 'Início', icon: 'home' },\n { kind: 'item', id: 'agenda', label: 'Agenda', icon: 'calendar', badge: 'NOVO' },\n { kind: 'section', label: 'Imóveis' },\n { kind: 'item', id: 'imoveis', label: 'Imóveis', icon: 'building' },\n { kind: 'item', id: 'proprietarios', label: 'Proprietários', icon: 'contacts' },\n { kind: 'item', id: 'stats-im', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'CRM' },\n { kind: 'item', id: 'leads', label: 'Leads', icon: 'target' },\n { kind: 'item', id: 'pool', label: 'Pool', icon: 'bolt' },\n { kind: 'item', id: 'funil', label: 'Funil', icon: 'kanban' },\n { kind: 'item', id: 'visitas', label: 'Visitas', icon: 'calendar' },\n { kind: 'item', id: 'propostas', label: 'Propostas', icon: 'dollar' },\n { kind: 'item', id: 'tarefas', label: 'Tarefas', icon: 'checkCircle' },\n { kind: 'item', id: 'stats-crm', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'Divulgação' },\n { kind: 'item', id: 'portais', label: 'Portais', icon: 'globe' },\n { kind: 'item', id: 'lp', label: 'Landing Pages', icon: 'rocket', badge: 'NOVO' },\n { kind: 'group', id: 'mais-div', label: 'Mais', icon: 'more', children: [\n { id: 'qr', label: 'QR Codes' },\n { id: 'links', label: 'Links rastreáveis' },\n { id: 'criativos', label: 'Gerador de criativos', badge: 'BETA' },\n ]},\n { kind: 'section', label: 'Site' },\n { kind: 'item', id: 'editor', label: 'Editor de interface', icon: 'wand' },\n { kind: 'item', id: 'blog', label: 'Blog', icon: 'doc' },\n { kind: 'item', id: 'stats-site', label: 'Estatísticas', icon: 'chart' },\n { kind: 'section', label: 'Configurações' },\n { kind: 'item', id: 'geral', label: 'Geral', icon: 'gear' },\n { kind: 'item', id: 'usuarios', label: 'Usuários', icon: 'contacts' },\n { kind: 'item', id: 'plano', label: 'Meu plano', icon: 'card' },\n { kind: 'group', id: 'mais-cfg', label: 'Mais', icon: 'more', children: [\n { id: 'integ', label: 'Integrações' },\n { id: 'webhooks', label: 'Webhooks' },\n ]},\n]\n\n/* ---------- Helpers visuais ---------- */\nconst Avatar = ({ name, size = 'md', color = 'bg-violet-500', online }) => {\n const sizes = { sm: 'w-7 h-7 text-[11px]', md: 'w-9 h-9 text-xs', lg: 'w-11 h-11 text-sm', xl: 'w-14 h-14 text-base' }\n const initials = name.split(' ').map(p => p[0]).slice(0, 2).join('').toUpperCase()\n return (\n <div className=\"relative inline-flex\">\n <div className={`${sizes[size]} ${color} rounded-full text-white font-semibold inline-flex items-center justify-center select-none shrink-0`}>\n {initials}\n </div>\n {online && <span className=\"absolute bottom-0 right-0 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white\" />}\n </div>\n )\n}\n\nconst Pill = ({ children, tone = 'slate' }) => {\n const tones = {\n slate: 'bg-slate-100 text-slate-700 ring-slate-200',\n amber: 'bg-amber-50 text-amber-700 ring-amber-200',\n emerald: 'bg-emerald-50 text-emerald-700 ring-emerald-200',\n rose: 'bg-rose-50 text-rose-700 ring-rose-200',\n violet: 'bg-violet-50 text-violet-700 ring-violet-200',\n sky: 'bg-sky-50 text-sky-700 ring-sky-200',\n yellow: 'bg-yellow-100 text-yellow-800 ring-yellow-200',\n }\n return (\n <span className={`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium ring-1 ring-inset ${tones[tone]}`}>\n {children}\n </span>\n )\n}\n\nconst Dot = ({ tone = 'emerald' }) => <span className={`inline-block w-1.5 h-1.5 rounded-full bg-${tone}-500`} />\n\n/* ---------- Dados mock ---------- */\nconst conversations = [\n {\n id: 'c1', name: 'Samir Patel', phone: '+55 11 98452-1023', avatarColor: 'bg-violet-500',\n preview: 'Olá! Vi o apto de 2 dorm em Vila Mariana, ainda está…',\n waitFor: '4m', unread: 0, sla: 'risk', priority: 'high', status: 'in_progress',\n ticket: '#8743', tier: 'Gold', assignee: 'Você',\n },\n {\n id: 'c2', name: 'Jenifer Souza', phone: '+55 21 99201-7811', avatarColor: 'bg-rose-500',\n preview: 'Oi, tenho uma dúvida sobre a fatura desse mês 🤔',\n waitFor: '8m', unread: 2, sla: 'breach', priority: 'urgent', status: 'open',\n ticket: '#8744', tier: 'Platinum', assignee: 'Você', starred: true,\n },\n {\n id: 'c3', name: 'Ingrid Bahia', phone: '+55 71 98800-4421', avatarColor: 'bg-sky-500',\n preview: 'Boa tarde, vamos prosseguir com a troca do plano…',\n waitFor: '17m', unread: 0, sla: 'ok', priority: 'normal', status: 'waiting',\n ticket: '#8746', tier: 'Silver', assignee: 'Você',\n },\n {\n id: 'c4', name: 'Sven Ribeiro', phone: '+55 47 98112-7755', avatarColor: 'bg-slate-700',\n preview: 'Sim, será processado em até 24h corridas.',\n waitFor: '23m', unread: 0, sla: 'ok', priority: 'low', status: 'in_progress',\n ticket: '#8749', tier: 'Bronze', assignee: 'Você',\n },\n {\n id: 'c5', name: 'Marcelo Tavares', phone: '+55 11 95542-3398', avatarColor: 'bg-amber-500',\n preview: 'Áudio · 0:42',\n waitFor: '34m', unread: 1, sla: 'risk', priority: 'high', status: 'open',\n ticket: '#8751', tier: 'Gold', assignee: 'Fila — Vendas',\n },\n {\n id: 'c6', name: 'Helena Prado', phone: '+55 31 99776-2210', avatarColor: 'bg-emerald-600',\n preview: 'Documento · contrato_v3.pdf',\n waitFor: '52m', unread: 0, sla: 'ok', priority: 'normal', status: 'waiting',\n ticket: '#8755', tier: 'Silver', assignee: 'Você',\n },\n]\n\nconst INITIAL_MESSAGES = [\n { id: 'm1', side: 'in', kind: 'text', text: 'Olá! Vi no site de vocês o apartamento de 2 dormitórios em Vila Mariana. Ainda está disponível? Tenho interesse em visitar essa semana.', time: '10:02', day: 'Hoje' },\n { id: 'm2', side: 'out', kind: 'text', text: 'Olá Samir! Tudo bem? Aqui é a Maria, corretora responsável. Sim, o imóvel está disponível! Pra eu te ajudar melhor, posso te perguntar uma coisa rápida — é pra moradia ou investimento? E você já tem uma faixa de valor em mente?', time: '10:04', status: 'read' },\n { id: 'm3', side: 'in', kind: 'text', text: 'Pra morar mesmo. Sou casado, sem filhos, e tô olhando algo na Zona Sul até R$ 900 mil. Preciso de vaga de garagem e, se possível, varanda.', time: '10:05' },\n { id: 'm4', side: 'in', kind: 'image', caption: 'Esse é o estilo de planta que eu gostei', meta: '1.4 MB · referencia.jpg', time: '10:06' },\n { id: 'm5', side: 'note', text: '@Alissa esse cliente tem o perfil ideal pro 65m² da Vila Mariana (cód. 856301) e pro 95m² em Moema (cód. 858033). Os dois ainda estão liberados pra visita amanhã? Quero confirmar antes de oferecer.', author: 'Maria Eduarda', time: '10:09' },\n { id: 'm6', side: 'system', text: 'Alissa Mendes foi adicionada à conversa', time: '10:10' },\n { id: 'm7', side: 'out', kind: 'text', text: 'Samir, tenho duas ótimas opções pra você dentro do orçamento e com vaga + varanda: um 2 dorm em Vila Mariana e um 3 dorm em Moema. Os dois estão liberados pra visita amanhã. Te mando agora os detalhes e fotos?', time: '10:18', status: 'read', author: 'Alissa Mendes' },\n { id: 'm8', side: 'in', kind: 'text', text: 'Perfeito, manda sim! 🙏', time: '10:20' },\n { id: 'm9', side: 'in', kind: 'audio', duration: '0:18', time: '10:21' },\n { id: 'm10', side: 'out', kind: 'text', text: 'Maravilha! Qual período da semana funciona melhor pra você visitar — manhã ou final do dia? Já adianto o agendamento com os proprietários. 😊', time: '10:24', status: 'delivered' },\n]\n\nconst quickReplies = [\n { id: 'q1', label: 'Saudação', text: 'Olá! Aqui é da imobiliária, tudo bem? Como posso te ajudar a encontrar o imóvel ideal?' },\n { id: 'q2', label: 'Perfil', text: 'Pra eu te enviar as melhores opções, me conta: é pra moradia ou investimento? Qual região e faixa de valor?' },\n { id: 'q3', label: 'Agendar visita', text: 'Posso já agendar a visita pra você. Qual o melhor dia e horário essa semana?' },\n { id: 'q4', label: 'Documentos', text: 'Pra avançar com a proposta, vou precisar de RG, CPF, comprovante de renda e residência. Pode me enviar por aqui mesmo.' },\n]\n\n/* ---------- Tons utilitários ---------- */\nconst slaInfo = {\n ok: { tone: 'emerald', label: 'No prazo' },\n risk: { tone: 'amber', label: 'Em risco' },\n breach: { tone: 'rose', label: 'Estourado' },\n}\nconst statusInfo = {\n open: { tone: 'sky', label: 'Aberto' },\n in_progress: { tone: 'amber', label: 'Em atendimento' },\n waiting: { tone: 'violet', label: 'Aguardando cliente' },\n resolved: { tone: 'emerald', label: 'Resolvido' },\n}\n\n/* ---------- Componente raiz ---------- */\nexport default function App() {\n const inbox = useInbox()\n const live = inbox.live\n const [mockActiveId, setMockActiveId] = useState('c1')\n const activeId = live ? inbox.activeId : mockActiveId\n const setActiveId = live ? inbox.setActiveId : setMockActiveId\n const [connectOpen, setConnectOpen] = useState(false)\n const [transferOpen, setTransferOpen] = useState(false)\n const [emojiOpen, setEmojiOpen] = useState(false)\n const [filterOpen, setFilterOpen] = useState(false)\n const [unreadOnly, setUnreadOnly] = useState(false)\n const [mineOnly, setMineOnly] = useState(false)\n const [recording, setRecording] = useState(false)\n const [recSecs, setRecSecs] = useState(0)\n const [composeMode, setComposeMode] = useState('reply')\n const [text, setText] = useState('')\n const [filter, setFilter] = useState('all')\n const [detailsOpen, setDetailsOpen] = useState(true)\n const [quickOpen, setQuickOpen] = useState(false)\n const [searchOpen, setSearchOpen] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [searchIndex, setSearchIndex] = useState(0)\n const [messages, setMessages] = useState(INITIAL_MESSAGES)\n const threadMessages = live ? inbox.messages : messages\n const convList = live ? inbox.conversations : conversations\n const scrollRef = useRef(null)\n const textareaRef = useRef(null)\n const imageInputRef = useRef(null)\n const fileInputRef = useRef(null)\n const mediaRecorderRef = useRef(null)\n const audioChunksRef = useRef([])\n const cancelAudioRef = useRef(false)\n const audioCtxRef = useRef(null)\n const analyserRef = useRef(null)\n const recTimerRef = useRef(null)\n\n // Lista de conversas redimensionável (arrasto estilo WhatsApp Web)\n const [listWidth, setListWidth] = useState(() => {\n if (typeof window !== 'undefined') {\n const v = parseInt(window.localStorage.getItem('veploy_chat_list_width') || '', 10)\n if (v >= 300 && v <= 600) return v\n }\n return 380\n })\n const resizingRef = useRef(false)\n const listWidthRef = useRef(listWidth)\n listWidthRef.current = listWidth\n useEffect(() => {\n const onMove = e => {\n if (!resizingRef.current) return\n setListWidth(Math.min(600, Math.max(300, e.clientX)))\n }\n const onUp = () => {\n if (!resizingRef.current) return\n resizingRef.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n try { window.localStorage.setItem('veploy_chat_list_width', String(listWidthRef.current)) } catch {}\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n return () => { window.removeEventListener('mousemove', onMove); window.removeEventListener('mouseup', onUp) }\n }, [])\n const startResize = e => {\n resizingRef.current = true\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n e.preventDefault()\n }\n\n const formatNow = () => {\n const d = new Date()\n return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`\n }\n\n const fileToDataUrl = (file) => new Promise((res, rej) => {\n const r = new FileReader(); r.onload = () => res(r.result); r.onerror = rej; r.readAsDataURL(file)\n })\n\n const insertEmoji = (e) => { setText(t => t + e); setEmojiOpen(false); textareaRef.current?.focus() }\n\n const sendMediaFile = async (file, kind) => {\n if (!file) return\n const previewUrl = URL.createObjectURL(file)\n const data = await fileToDataUrl(file)\n if (live) {\n inbox.sendMedia({ data, mime: file.type, kind, filename: file.name, previewUrl })\n } else {\n setMessages(ms => [...ms, { id: `m${Date.now()}`, side: 'out', kind, mediaUrl: previewUrl, meta: file.name, time: formatNow(), status: 'sent' }])\n }\n }\n const onPickImage = async (e) => { const f = e.target.files?.[0]; e.target.value = ''; await sendMediaFile(f, 'image') }\n const onPickFile = async (e) => { const f = e.target.files?.[0]; e.target.value = ''; await sendMediaFile(f, 'document') }\n\n const startRecording = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n const mr = new MediaRecorder(stream)\n audioChunksRef.current = []\n cancelAudioRef.current = false\n\n // medidor de nível ao vivo (waveform)\n const Ctx = window.AudioContext || window.webkitAudioContext\n const audioCtx = new Ctx()\n const source = audioCtx.createMediaStreamSource(stream)\n const analyser = audioCtx.createAnalyser()\n analyser.fftSize = 64\n source.connect(analyser)\n audioCtxRef.current = audioCtx\n analyserRef.current = analyser\n setRecSecs(0)\n clearInterval(recTimerRef.current)\n recTimerRef.current = setInterval(() => setRecSecs(s => s + 1), 1000)\n\n mr.ondataavailable = ev => { if (ev.data.size > 0) audioChunksRef.current.push(ev.data) }\n mr.onstop = async () => {\n stream.getTracks().forEach(t => t.stop())\n clearInterval(recTimerRef.current)\n try { audioCtxRef.current?.close() } catch {}\n analyserRef.current = null\n if (cancelAudioRef.current) return\n const blob = new Blob(audioChunksRef.current, { type: mr.mimeType || 'audio/webm' })\n const previewUrl = URL.createObjectURL(blob)\n const data = await fileToDataUrl(blob)\n if (live) inbox.sendMedia({ data, mime: blob.type, kind: 'audio', filename: 'audio', previewUrl })\n else setMessages(ms => [...ms, { id: `m${Date.now()}`, side: 'out', kind: 'audio', mediaUrl: previewUrl, time: formatNow(), status: 'sent' }])\n }\n mediaRecorderRef.current = mr\n mr.start()\n setRecording(true)\n } catch { alert('Não foi possível acessar o microfone') }\n }\n const stopRecording = (cancel = false) => {\n cancelAudioRef.current = cancel\n setRecording(false)\n try { mediaRecorderRef.current?.stop() } catch {}\n }\n\n // Esc cancela a gravação de voz\n useEffect(() => {\n if (!recording) return\n const onKey = e => { if (e.key === 'Escape') stopRecording(true) }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [recording])\n\n const handleSend = () => {\n const t = text.trim()\n if (!t) return\n if (live) {\n inbox.send(t, composeMode === 'note')\n setText('')\n return\n }\n const id = `m${Date.now()}`\n const time = formatNow()\n const msg = composeMode === 'note'\n ? { id, side: 'note', text: t, author: 'Maria Eduarda', time }\n : { id, side: 'out', kind: 'text', text: t, time, status: 'sent', author: 'Maria Eduarda' }\n setMessages(ms => [...ms, msg])\n setText('')\n }\n\n const searchMatches = useMemo(() => {\n const q = searchQuery.trim().toLowerCase()\n if (!q) return []\n return threadMessages.filter(m => {\n const t = (m.text || m.caption || '').toLowerCase()\n return t.includes(q)\n }).map(m => m.id)\n }, [searchQuery, threadMessages])\n\n useEffect(() => { setSearchIndex(0) }, [searchQuery])\n\n // Embed bridge: quando roda dentro de um host (iframe), recebe {token, workspace}\n // do host via postMessage e entra em modo live. Sem isso, fica em demo (não\n // utilizável \"por fora\"). Origens permitidas via NEXT_PUBLIC_EMBED_ORIGINS.\n useEffect(() => {\n if (typeof window === 'undefined' || window.parent === window) return\n const envOrigins = (typeof process !== 'undefined' && process.env && process.env.NEXT_PUBLIC_EMBED_ORIGINS) || ''\n const allowed = envOrigins.split(',').map(s => s.trim()).filter(Boolean)\n const onMsg = e => {\n if (allowed.length && !allowed.includes(e.origin)) return\n const d = e.data || {}\n if (d.type === 'veploy-chat-auth' && d.token && d.workspace) {\n const wasLive = !!localStorage.getItem('veploy_chat_token') && !!localStorage.getItem('veploy_chat_workspace')\n localStorage.setItem('veploy_chat_token', d.token)\n localStorage.setItem('veploy_chat_workspace', String(d.workspace))\n if (!wasLive) location.reload()\n }\n }\n window.addEventListener('message', onMsg)\n try { window.parent.postMessage({ type: 'veploy-chat-ready' }, '*') } catch {}\n return () => window.removeEventListener('message', onMsg)\n }, [])\n\n const currentMatchId = searchMatches[searchIndex]\n const openSearch = () => { setSearchOpen(true); setSearchQuery('') }\n const closeSearch = () => { setSearchOpen(false); setSearchQuery('') }\n const nextMatch = () => searchMatches.length && setSearchIndex(i => (i + 1) % searchMatches.length)\n const prevMatch = () => searchMatches.length && setSearchIndex(i => (i - 1 + searchMatches.length) % searchMatches.length)\n\n const active = convList.find(c => c.id === activeId)\n\n useEffect(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight\n }, [activeId, threadMessages.length])\n\n const counts = useMemo(() => ({\n open: convList.filter(c => c.status !== 'resolved' && c.status !== 'waiting').length,\n pending: convList.filter(c => c.status === 'waiting').length,\n all: convList.length,\n }), [convList])\n\n const filtered = useMemo(() => {\n let list = convList\n if (filter === 'pending') list = list.filter(c => c.status === 'waiting')\n else if (filter !== 'all') list = list.filter(c => c.status !== 'resolved' && c.status !== 'waiting')\n if (unreadOnly) list = list.filter(c => c.unread > 0)\n if (mineOnly) list = list.filter(c => c._raw?.assignee_user_id && c._raw.assignee_user_id === inbox.me)\n return list\n }, [filter, convList, unreadOnly, mineOnly, inbox.me])\n\n return (\n <div className=\"h-full w-full bg-slate-100 flex text-slate-900\">\n {/* ---------- App container ---------- */}\n <main className=\"flex-1 flex overflow-hidden\">\n {/* ---------- Lista de conversas ---------- */}\n <section style={{ width: listWidth }} className=\"relative bg-white border-r border-slate-200 flex flex-col shrink-0\">\n <header className=\"px-4 pt-4 pb-3 border-b border-slate-100\">\n <div className=\"flex items-center justify-between mb-3\">\n <h1 className=\"font-semibold text-[15px]\">Caixa de entrada</h1>\n <div className=\"flex items-center gap-1\">\n {live && (\n <button onClick={() => setConnectOpen(true)} title=\"Conectar WhatsApp\"\n className=\"p-1.5 rounded-md hover:bg-emerald-50 text-emerald-600\">{I.qrcode}</button>\n )}\n <div className=\"relative\">\n <button onClick={() => setFilterOpen(v => !v)} title=\"Filtros\"\n className={`p-1.5 rounded-md ${(unreadOnly || mineOnly) ? 'bg-slate-900 text-white' : 'hover:bg-slate-100 text-slate-500'}`}>{I.filter}</button>\n {filterOpen && (\n <div className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-52 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <label className=\"flex items-center gap-2 px-3 py-1.5 hover:bg-slate-50 cursor-pointer\">\n <input type=\"checkbox\" checked={unreadOnly} onChange={e => setUnreadOnly(e.target.checked)} /> Só não lidas\n </label>\n {live && (\n <label className=\"flex items-center gap-2 px-3 py-1.5 hover:bg-slate-50 cursor-pointer\">\n <input type=\"checkbox\" checked={mineOnly} onChange={e => setMineOnly(e.target.checked)} /> Atribuídas a mim\n </label>\n )}\n {(unreadOnly || mineOnly) && (\n <button onClick={() => { setUnreadOnly(false); setMineOnly(false) }}\n className=\"w-full text-left px-3 py-1.5 text-slate-500 hover:bg-slate-50 border-t border-slate-100 mt-1\">Limpar filtros</button>\n )}\n </div>\n )}\n </div>\n <button className=\"p-1.5 rounded-md text-slate-300 cursor-not-allowed\" title=\"Ordenar (em breve)\">{I.sort}</button>\n </div>\n </div>\n <div className=\"relative\">\n <span className=\"absolute left-2.5 top-1/2 -translate-y-1/2 text-slate-400\">{I.search}</span>\n <input placeholder=\"Buscar conversas, nº ou ticket…\" className=\"w-full pl-8 pr-3 py-1.5 text-[13px] rounded-lg bg-slate-50 border border-slate-200 focus:bg-white focus:border-slate-300 outline-none\" />\n </div>\n <div className=\"flex items-center gap-2 mt-3 text-[12px]\">\n {[\n ['all', 'Todas', counts.all],\n ['pending', 'Pendentes', counts.pending],\n ['open', 'Abertas', counts.open],\n ].map(([k, l, n]) => (\n <button key={k} onClick={() => setFilter(k)}\n className={`relative px-3 py-1.5 rounded-full font-medium transition-colors\n ${filter === k ? 'bg-slate-900 text-white' : 'text-slate-600 hover:bg-slate-100'}`}>\n {l}\n {n > 0 && (\n <span className=\"absolute -top-1.5 -right-1.5 min-w-[18px] h-[18px] px-1 rounded-full bg-slate-500 text-white text-[10px] font-bold inline-flex items-center justify-center ring-2 ring-white tabular-nums\">\n {n > 99 ? '99+' : n}\n </span>\n )}\n </button>\n ))}\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto\">\n {filtered.map(c => (\n <ConversationItem key={c.id} c={c} active={c.id === activeId} onClick={() => { setActiveId(c.id); if (live) inbox.markRead(c.id) }} />\n ))}\n </div>\n\n <footer className=\"border-t border-slate-100 px-3 py-2 flex items-center justify-between text-[11px] text-slate-500\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse\" />\n Disponível para atender\n </div>\n <button className=\"hover:text-slate-700\">Pausar</button>\n </footer>\n\n {/* Handle de arrasto p/ redimensionar a lista (estilo WhatsApp Web) */}\n <div onMouseDown={startResize} title=\"Arraste para redimensionar\"\n className=\"absolute top-0 right-0 h-full w-1.5 cursor-col-resize hover:bg-emerald-400/40 active:bg-emerald-500/50 z-10\" />\n </section>\n\n {/* ---------- Chat ---------- */}\n <section className=\"flex-1 flex flex-col bg-slate-50 min-w-0\">\n {active && <ChatHeader c={active} onToggleDetails={() => setDetailsOpen(v => !v)} detailsOpen={detailsOpen} onOpenSearch={openSearch} onTransfer={() => setTransferOpen(true)} />}\n\n {searchOpen && (\n <SearchBar\n query={searchQuery}\n onChange={setSearchQuery}\n matches={searchMatches}\n currentIndex={searchIndex}\n onPrev={prevMatch}\n onNext={nextMatch}\n onClose={closeSearch}\n />\n )}\n\n {/* Thread */}\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto px-6 py-5 space-y-1\">\n <DayDivider label=\"Hoje\" />\n {threadMessages.map((m, i) => (\n <Message\n key={m.id}\n m={m}\n prev={threadMessages[i - 1]}\n searchQuery={searchOpen ? searchQuery : ''}\n isCurrentMatch={m.id === currentMatchId}\n />\n ))}\n <div className=\"text-center mt-4\">\n <span className=\"text-[11px] text-slate-400 inline-flex items-center gap-1\">\n <Avatar name={active?.name || ''} size=\"sm\" color={active?.avatarColor} /> Conversa criada por você · agora\n </span>\n </div>\n </div>\n\n {/* Compose */}\n <div className=\"px-6 pb-5\">\n <div className=\"bg-white border border-slate-200 rounded-2xl shadow-soft\">\n <div className=\"flex items-center gap-1 px-3 pt-2 text-[12px]\">\n {[\n ['reply', 'Mensagem'],\n ['note', 'Nota interna'],\n ].map(([k, l]) => (\n <button key={k} onClick={() => setComposeMode(k)}\n className={`px-2.5 py-1 rounded-md font-medium ${composeMode === k\n ? k === 'note' ? 'bg-yellow-100 text-yellow-800' : 'bg-slate-900 text-white'\n : 'text-slate-600 hover:bg-slate-100'}`}>\n {l}\n </button>\n ))}\n <div className=\"flex-1\" />\n <button onClick={() => setQuickOpen(v => !v)} className=\"px-2.5 py-1 text-slate-600 hover:bg-slate-100 rounded-md inline-flex items-center gap-1 font-medium\">\n ⌘K <span className=\"text-slate-400\">para respostas rápidas</span>\n </button>\n </div>\n\n {quickOpen && (\n <div className=\"px-3 py-2 border-t border-slate-100 bg-slate-50/60 flex flex-wrap gap-1.5\">\n {quickReplies.map(q => (\n <button key={q.id} onClick={() => { setText(q.text); setQuickOpen(false) }}\n className=\"text-[12px] bg-white border border-slate-200 hover:border-slate-300 px-2.5 py-1 rounded-md text-slate-700\">\n <span className=\"text-slate-400 mr-1\">/</span>{q.label}\n </button>\n ))}\n </div>\n )}\n\n <div className={`px-4 py-3 ${composeMode === 'note' ? 'bg-yellow-50' : ''}`}>\n <textarea\n ref={textareaRef}\n rows={3}\n value={text}\n onChange={e => setText(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }}\n placeholder={\n composeMode === 'note'\n ? 'Adicione uma nota interna — visível só para o time…'\n : 'Digite uma mensagem para Samir…'\n }\n className={`w-full text-[14px] resize-none bg-transparent outline-none placeholder:text-slate-400 ${composeMode === 'note' ? 'text-yellow-900 placeholder:text-yellow-600' : ''}`}\n />\n </div>\n\n <div className=\"flex items-center gap-1 px-3 py-2 border-t border-slate-100\">\n {recording ? (\n <div className=\"flex items-center gap-3 flex-1\">\n <span className=\"w-2 h-2 rounded-full bg-rose-500 animate-pulse shrink-0\" />\n <span className=\"text-[12.5px] text-rose-600 font-medium tabular-nums shrink-0\">{fmtSecs(recSecs)}</span>\n <AudioWave analyserRef={analyserRef} />\n <span className=\"text-[11px] text-slate-400 shrink-0 hidden sm:inline\">Esc cancela</span>\n <button onClick={() => stopRecording(true)} className=\"text-[12.5px] text-slate-500 px-2.5 py-1.5 rounded-lg hover:bg-slate-100 shrink-0\">Cancelar</button>\n <button onClick={() => stopRecording(false)} className=\"text-[13px] font-medium bg-emerald-600 hover:bg-emerald-700 text-white px-3 py-1.5 rounded-lg inline-flex items-center gap-1.5 shrink-0\">Enviar <span className=\"opacity-90\">{I.send}</span></button>\n </div>\n ) : (\n <>\n <div className=\"relative\">\n <button onClick={() => setEmojiOpen(v => !v)} title=\"Emoji\"\n className={`px-1.5 py-1.5 rounded-md inline-flex items-center ${emojiOpen ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>{I.emoji}</button>\n {emojiOpen && <EmojiPicker onPick={insertEmoji} />}\n </div>\n <AttachMenu onImage={() => imageInputRef.current?.click()} onFile={() => fileInputRef.current?.click()} />\n <button onClick={startRecording} title=\"Gravar áudio\"\n className=\"text-slate-500 hover:bg-slate-100 px-1.5 py-1.5 rounded-md inline-flex items-center\">{I.mic}</button>\n <div className=\"flex-1\" />\n <button\n onClick={handleSend}\n disabled={!text.trim()}\n className={`text-[13px] font-medium px-3.5 py-1.5 rounded-lg inline-flex items-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed ${\n composeMode === 'note'\n ? 'bg-yellow-500 hover:bg-yellow-600 text-white'\n : 'bg-emerald-600 hover:bg-emerald-700 text-white'\n }`}>\n {composeMode === 'note' ? 'Salvar nota' : 'Enviar'}\n <span className=\"opacity-90\">{I.send}</span>\n </button>\n </>\n )}\n <input ref={imageInputRef} type=\"file\" accept=\"image/*\" className=\"hidden\" onChange={onPickImage} />\n <input ref={fileInputRef} type=\"file\" className=\"hidden\" onChange={onPickFile} />\n </div>\n </div>\n </div>\n </section>\n\n {/* ---------- Detalhes ---------- */}\n {detailsOpen && active && <DetailsPanel c={active} onClose={() => setDetailsOpen(false)} />}\n </main>\n {connectOpen && <ConnectChannel inbox={inbox} onClose={() => setConnectOpen(false)} />}\n {transferOpen && active && (\n <TransferModal inbox={inbox} conversationId={active.id} currentAssignee={active._raw?.assignee_user_id} onClose={() => setTransferOpen(false)} />\n )}\n </div>\n )\n}\n\n/* ---------- Sidebar (recolhível) ---------- */\nfunction Sidebar({ collapsed, onToggle, activeId, onSelect }) {\n return collapsed\n ? <SidebarCollapsed onToggle={onToggle} activeId={activeId} onSelect={onSelect} />\n : <SidebarExpanded onToggle={onToggle} activeId={activeId} onSelect={onSelect} />\n}\n\nfunction SidebarCollapsed({ onToggle, activeId, onSelect }) {\n return (\n <aside className=\"w-16 bg-white border-r border-slate-200 flex flex-col items-center py-3 shrink-0\">\n <button onClick={onToggle} title=\"Expandir menu\"\n className=\"w-10 h-10 rounded-xl flex items-center justify-center text-slate-500 hover:bg-slate-100 hover:text-slate-900 mb-2\">\n {I.chevDblR}\n </button>\n <div className=\"flex-1 w-full overflow-y-auto flex flex-col items-center gap-0.5 px-3 pb-3\">\n {NAV_DATA.map((n, i) => {\n if (n.kind === 'section') return <div key={i} className=\"w-6 h-px bg-slate-200 my-2\" />\n if (n.kind === 'group') {\n return (\n <SidebarIconBtn key={n.id} icon={I[n.icon]} title={n.label} />\n )\n }\n return (\n <SidebarIconBtn key={n.id} icon={I[n.icon]} title={n.label}\n active={activeId === n.id} onClick={() => onSelect(n.id)} badge={n.badge} />\n )\n })}\n </div>\n </aside>\n )\n}\n\nfunction SidebarIconBtn({ icon, title, active, onClick, badge }) {\n return (\n <button onClick={onClick} title={title}\n className={`relative w-10 h-10 rounded-xl flex items-center justify-center transition-colors\n ${active ? 'bg-lime-300 text-slate-900' : 'text-slate-500 hover:bg-slate-100 hover:text-slate-900'}`}>\n {icon}\n {badge && (\n <span className=\"absolute -top-0.5 -right-0.5 w-2 h-2 bg-lime-400 rounded-full ring-2 ring-white\" />\n )}\n </button>\n )\n}\n\nfunction SidebarExpanded({ onToggle, activeId, onSelect }) {\n const [openGroups, setOpenGroups] = useState({ 'mais-div': true })\n const toggleGroup = id => setOpenGroups(g => ({ ...g, [id]: !g[id] }))\n\n return (\n <aside className=\"w-64 bg-white border-r border-slate-200 flex flex-col shrink-0\">\n <header className=\"px-4 pt-4 pb-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <VeployLogo size={26} />\n <span className=\"font-bold text-[18px] tracking-tight text-slate-900\">veploy</span>\n </div>\n <button onClick={onToggle} title=\"Recolher menu\"\n className=\"p-1.5 rounded-md text-slate-400 hover:bg-slate-100 hover:text-slate-700\">\n {I.chevDblL}\n </button>\n </header>\n\n <nav className=\"flex-1 overflow-y-auto px-3 pb-4 space-y-0.5\">\n {NAV_DATA.map((n, i) => {\n if (n.kind === 'section') {\n return (\n <div key={i} className=\"px-3 pt-4 pb-1.5 text-[10.5px] font-semibold uppercase tracking-[0.12em] text-slate-400\">\n {n.label}\n </div>\n )\n }\n if (n.kind === 'group') {\n const isOpen = openGroups[n.id]\n return (\n <div key={n.id}>\n <button onClick={() => toggleGroup(n.id)}\n className=\"w-full flex items-center gap-2.5 px-3 py-2 rounded-xl text-[13.5px] text-slate-500 hover:bg-slate-50 hover:text-slate-900\">\n <span className=\"w-5 h-5 flex items-center justify-center\">{I[n.icon]}</span>\n <span className=\"flex-1 text-left\">{n.label}</span>\n <span className={`text-slate-400 transition-transform ${isOpen ? '' : '-rotate-90'}`}>{I.chevDown}</span>\n </button>\n {isOpen && (\n <div className=\"ml-5 pl-4 border-l border-slate-200 mt-0.5 mb-1 space-y-0.5\">\n {n.children.map(child => (\n <button key={child.id} onClick={() => onSelect(child.id)}\n className={`w-full flex items-center gap-2 px-3 py-1.5 rounded-lg text-[13px]\n ${activeId === child.id ? 'bg-lime-300 text-slate-900 font-medium' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900'}`}>\n <span className=\"flex-1 text-left\">{child.label}</span>\n {child.badge && <NavBadge>{child.badge}</NavBadge>}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n }\n const active = activeId === n.id\n return (\n <button key={n.id} onClick={() => onSelect(n.id)}\n className={`w-full flex items-center gap-2.5 px-3 py-2 rounded-xl text-[13.5px] transition-colors\n ${active ? 'bg-lime-300 text-slate-900 font-semibold' : 'text-slate-700 hover:bg-slate-50'}`}>\n <span className={`w-5 h-5 flex items-center justify-center ${active ? 'text-slate-900' : 'text-slate-500'}`}>\n {I[n.icon]}\n </span>\n <span className=\"flex-1 text-left\">{n.label}</span>\n {n.badge && <NavBadge>{n.badge}</NavBadge>}\n </button>\n )\n })}\n </nav>\n </aside>\n )\n}\n\nfunction NavBadge({ children }) {\n return (\n <span className=\"text-[9.5px] font-bold tracking-wide bg-lime-300 text-slate-800 px-1.5 py-0.5 rounded-full\">\n {children}\n </span>\n )\n}\n\n/* ---------- Subcomponentes ---------- */\nfunction ConversationItem({ c, active, onClick }) {\n return (\n <button onClick={onClick}\n className={`w-full text-left px-3 py-3 border-l-2 transition-colors flex gap-3 ${\n active ? 'bg-slate-50 border-emerald-500' : 'border-transparent hover:bg-slate-50'\n }`}>\n <Avatar name={c.name} color={c.avatarColor} />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <span className={`text-[13.5px] truncate ${c.unread ? 'font-semibold' : 'font-medium text-slate-800'}`}>{c.name}</span>\n {c.starred && <span className=\"text-amber-400\">{I.star}</span>}\n </div>\n <span className={`text-[11px] shrink-0 ${c.unread ? 'text-emerald-600 font-semibold' : 'text-slate-400'}`}>{c.waitFor}</span>\n </div>\n <div className=\"flex items-center justify-between gap-2 mt-0.5\">\n <p className={`text-[12.5px] truncate ${c.unread ? 'text-slate-700' : 'text-slate-500'}`}>{c.preview}</p>\n {c.unread > 0 && (\n <span className=\"shrink-0 min-w-[18px] h-[18px] px-1.5 rounded-full bg-emerald-500 text-white text-[10px] font-bold inline-flex items-center justify-center\">\n {c.unread}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5 mt-1.5\">\n <Pill tone=\"slate\">{c.ticket}</Pill>\n </div>\n </div>\n </button>\n )\n}\n\nfunction ChatHeader({ c, onToggleDetails, detailsOpen, onOpenSearch, onTransfer }) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef(null)\n useEffect(() => {\n if (!menuOpen) return\n const onDoc = e => { if (menuRef.current && !menuRef.current.contains(e.target)) setMenuOpen(false) }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [menuOpen])\n\n return (\n <header className=\"bg-white border-b border-slate-200 px-5 py-3 flex items-center gap-3 min-w-0\">\n <Avatar name={c.name} color={c.avatarColor} size=\"lg\" online />\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <h2 className=\"font-semibold text-[15px] truncate\">{c.name}</h2>\n </div>\n <div className=\"flex items-center gap-2 text-[12px] text-slate-500 mt-0.5 min-w-0\">\n <span className=\"inline-flex items-center gap-1 shrink-0\">{I.phone} {c.phone}</span>\n <span className=\"hidden lg:inline text-slate-300 shrink-0\">·</span>\n <span className=\"hidden lg:inline-flex items-center gap-1 shrink-0\">{I.tag} {c.ticket}</span>\n </div>\n </div>\n\n <div className=\"hidden 2xl:flex items-center gap-4 text-[12px] pr-3 border-r border-slate-200 shrink-0\">\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-[9.5px] uppercase tracking-wide text-slate-400\">SLA</span>\n <span className=\"font-semibold text-amber-600 tabular-nums\">02:14</span>\n </div>\n <div className=\"flex flex-col items-end leading-tight\">\n <span className=\"text-[9.5px] uppercase tracking-wide text-slate-400\">1ª resposta</span>\n <span className=\"font-semibold text-emerald-600 tabular-nums\">00:48</span>\n </div>\n </div>\n\n <button className=\"shrink-0 text-[12.5px] font-medium bg-emerald-600 hover:bg-emerald-700 text-white px-3 py-1.5 rounded-lg inline-flex items-center gap-1.5\">\n {I.check} <span className=\"hidden lg:inline\">Resolver</span>\n </button>\n\n <div className=\"w-px h-6 bg-slate-200 shrink-0\" />\n\n <div className=\"flex items-center gap-0.5 shrink-0\">\n <button onClick={onToggleDetails} title=\"Detalhes\"\n className={`p-1.5 rounded-md ${detailsOpen ? 'bg-slate-900 text-white' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.panel}\n </button>\n <div ref={menuRef} className=\"relative\">\n <button onClick={() => setMenuOpen(v => !v)} title=\"Mais opções\"\n className={`p-1.5 rounded-md ${menuOpen ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.more}\n </button>\n {menuOpen && (\n <div className=\"absolute right-0 top-[calc(100%+6px)] z-20 w-56 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <MenuItem icon={I.phone} label=\"Ligar\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.forward} label=\"Transferir\" onClick={() => { setMenuOpen(false); onTransfer?.() }} />\n <MenuItem icon={I.userPlus} label=\"Adicionar participantes\" onClick={() => setMenuOpen(false)} />\n <div className=\"my-1 h-px bg-slate-100\" />\n <MenuItem icon={I.search} label=\"Procurar na conversa\" onClick={() => { setMenuOpen(false); onOpenSearch?.() }} />\n <MenuItem icon={I.star} label=\"Marcar com estrela\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.tag} label=\"Editar tags\" onClick={() => setMenuOpen(false)} />\n <MenuItem icon={I.link} label=\"Copiar link da conversa\" onClick={() => setMenuOpen(false)} />\n <div className=\"my-1 h-px bg-slate-100\" />\n <MenuItem icon={I.x} label=\"Encerrar sem resolver\" tone=\"danger\" onClick={() => setMenuOpen(false)} />\n </div>\n )}\n </div>\n </div>\n </header>\n )\n}\n\nfunction MenuItem({ icon, label, onClick, tone }) {\n const color = tone === 'danger' ? 'text-rose-600 hover:bg-rose-50' : 'text-slate-700 hover:bg-slate-50'\n return (\n <button onClick={onClick}\n className={`w-full flex items-center gap-2.5 px-3 py-1.5 ${color}`}>\n <span className={tone === 'danger' ? 'text-rose-500' : 'text-slate-500'}>{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n </button>\n )\n}\n\nfunction SearchBar({ query, onChange, matches, currentIndex, onPrev, onNext, onClose }) {\n const inputRef = useRef(null)\n useEffect(() => { inputRef.current?.focus() }, [])\n useEffect(() => {\n const onKey = e => {\n if (e.key === 'Escape') onClose()\n if (e.key === 'Enter') { e.preventDefault(); e.shiftKey ? onPrev() : onNext() }\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [onClose, onPrev, onNext])\n\n return (\n <div className=\"bg-white border-b border-slate-200 px-5 py-2 flex items-center gap-3\">\n <span className=\"text-slate-400 shrink-0\">{I.search}</span>\n <input\n ref={inputRef}\n value={query}\n onChange={e => onChange(e.target.value)}\n placeholder=\"Procurar na conversa…\"\n className=\"flex-1 bg-transparent outline-none text-[13.5px] placeholder:text-slate-400 min-w-0\"\n />\n {query && (\n <span className=\"text-[12px] text-slate-500 tabular-nums shrink-0\">\n {matches.length === 0 ? 'sem resultados' : `${currentIndex + 1} de ${matches.length}`}\n </span>\n )}\n <div className=\"flex items-center gap-0.5 shrink-0\">\n <button onClick={onPrev} disabled={matches.length === 0}\n title=\"Anterior (Shift+Enter)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 disabled:opacity-30 disabled:hover:bg-transparent\">\n {I.chevUp}\n </button>\n <button onClick={onNext} disabled={matches.length === 0}\n title=\"Próximo (Enter)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 disabled:opacity-30 disabled:hover:bg-transparent\">\n {I.chevDown}\n </button>\n <button onClick={onClose} title=\"Fechar (Esc)\"\n className=\"p-1 rounded-md text-slate-500 hover:bg-slate-100 ml-1\">\n {I.x}\n </button>\n </div>\n </div>\n )\n}\n\nfunction highlightText(text, query, isCurrent) {\n if (!query) return text\n const q = query.trim()\n if (!q) return text\n const lower = text.toLowerCase()\n const ql = q.toLowerCase()\n if (!lower.includes(ql)) return text\n const parts = []\n let last = 0\n let idx = lower.indexOf(ql)\n let key = 0\n while (idx !== -1) {\n if (idx > last) parts.push(text.slice(last, idx))\n parts.push(\n <mark key={key++} className={`rounded px-0.5 ${isCurrent ? 'bg-amber-400 text-slate-900' : 'bg-yellow-200 text-slate-900'}`}>\n {text.slice(idx, idx + ql.length)}\n </mark>\n )\n last = idx + ql.length\n idx = lower.indexOf(ql, last)\n }\n if (last < text.length) parts.push(text.slice(last))\n return parts\n}\n\nfunction DayDivider({ label }) {\n return (\n <div className=\"flex items-center justify-center my-3\">\n <span className=\"text-[11px] font-medium text-slate-600 bg-white border border-slate-200 rounded-full px-2.5 py-0.5 shadow-soft\">{label}</span>\n </div>\n )\n}\n\nfunction Ticks({ status }) {\n if (status === 'sent') return <span className=\"text-slate-400\">✓</span>\n if (status === 'delivered') return <span className=\"text-slate-400\">✓✓</span>\n if (status === 'read') return <span className=\"text-sky-500\">✓✓</span>\n return null\n}\n\nfunction Message({ m, searchQuery = '', isCurrentMatch = false }) {\n if (m.side === 'system') {\n return (\n <div className=\"flex justify-center my-2\">\n <span className=\"text-[11px] text-slate-500 bg-slate-100 rounded-full px-2.5 py-0.5\">{m.text} · {m.time}</span>\n </div>\n )\n }\n if (m.side === 'note') {\n return (\n <div className=\"flex justify-end my-2\">\n <div className={`max-w-[70%] bg-yellow-50 border rounded-2xl rounded-tr-sm px-3.5 py-2.5 shadow-soft ${isCurrentMatch ? 'border-amber-500 ring-2 ring-amber-300' : 'border-yellow-200'}`}>\n <div className=\"flex items-center justify-between gap-3 mb-1\">\n <span className=\"text-[11px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Nota interna · {m.author}</span>\n <span className=\"text-[11px] text-yellow-700\">{m.time}</span>\n </div>\n <p className=\"text-[13.5px] text-yellow-900 leading-relaxed\">{highlightText(m.text, searchQuery, isCurrentMatch)}</p>\n </div>\n </div>\n )\n }\n\n const isOut = m.side === 'out'\n return (\n <div className={`flex ${isOut ? 'justify-end' : 'justify-start'} group`}>\n {!isOut && <Avatar name=\"Samir Patel\" color=\"bg-violet-500\" size=\"sm\" />}\n <div className={`mx-2 max-w-[68%] ${isOut ? 'order-first' : ''}`}>\n <div className={`relative px-3.5 py-2.5 rounded-2xl shadow-soft ${\n isOut\n ? 'bg-emerald-600 text-white rounded-tr-sm'\n : 'bg-white border border-slate-200 text-slate-800 rounded-tl-sm'\n } ${isCurrentMatch ? 'ring-2 ring-amber-400' : ''}`}>\n {m.kind === 'text' && <p className=\"text-[13.5px] leading-relaxed whitespace-pre-wrap\">{highlightText(m.text, searchQuery, isCurrentMatch)}</p>}\n\n {m.kind === 'image' && (\n <div className=\"-mx-1 -mt-1\">\n {m.mediaUrl ? (\n <a href={m.mediaUrl} target=\"_blank\" rel=\"noreferrer\">\n <img src={m.mediaUrl} alt={m.caption || 'imagem'} className=\"w-64 max-h-72 object-cover rounded-lg\" />\n </a>\n ) : (\n <div className=\"w-64 h-40 rounded-lg bg-gradient-to-br from-slate-200 to-slate-300 flex items-center justify-center text-slate-500\">\n {I.image}\n </div>\n )}\n {m.caption && <p className=\"text-[13px] mt-2\">{highlightText(m.caption, searchQuery, isCurrentMatch)}</p>}\n </div>\n )}\n\n {m.kind === 'video' && (\n <div className=\"-mx-1 -mt-1\">\n {m.mediaUrl\n ? <video src={m.mediaUrl} controls className=\"w-64 rounded-lg\" />\n : <div className=\"w-64 h-40 rounded-lg bg-slate-200 flex items-center justify-center text-slate-500\">🎥</div>}\n {m.caption && <p className=\"text-[13px] mt-2\">{highlightText(m.caption, searchQuery, isCurrentMatch)}</p>}\n </div>\n )}\n\n {m.kind === 'document' && (\n <a href={m.mediaUrl || '#'} target=\"_blank\" rel=\"noreferrer\"\n className={`flex items-center gap-2.5 min-w-[200px] rounded-lg px-2 py-1.5 ${isOut ? 'bg-emerald-700/40' : 'bg-slate-100'}`}>\n <span className={isOut ? 'text-emerald-100' : 'text-slate-500'}>{I.file}</span>\n <span className=\"text-[13px] truncate flex-1\">{m.meta || m.caption || 'arquivo'}</span>\n </a>\n )}\n\n {m.kind === 'audio' && (\n <div className=\"flex items-center gap-3 min-w-[220px]\">\n <button className={`w-9 h-9 rounded-full inline-flex items-center justify-center ${isOut ? 'bg-emerald-700' : 'bg-slate-100 text-slate-700'}`}>\n ▶\n </button>\n <div className=\"flex-1\">\n <div className={`h-1 rounded-full ${isOut ? 'bg-emerald-700' : 'bg-slate-200'} relative overflow-hidden`}>\n <div className={`h-full w-2/5 ${isOut ? 'bg-white' : 'bg-emerald-500'}`} />\n </div>\n <div className={`text-[11px] mt-1 ${isOut ? 'text-emerald-100' : 'text-slate-500'}`}>{m.duration}</div>\n </div>\n <span className={isOut ? 'text-emerald-100' : 'text-slate-400'}>{I.mic}</span>\n </div>\n )}\n\n <div className={`flex items-center gap-1 justify-end mt-1 text-[10.5px] ${isOut ? 'text-emerald-100' : 'text-slate-400'}`}>\n {m.author && !isOut === false && <span className=\"mr-1\">{m.author}</span>}\n <span>{m.time}</span>\n {isOut && <Ticks status={m.status} />}\n </div>\n </div>\n\n {/* Hover actions */}\n <div className={`flex gap-1 mt-1 opacity-0 group-hover:opacity-100 transition-opacity ${isOut ? 'justify-end' : 'justify-start'}`}>\n <HoverBtn icon={I.reply} />\n <HoverBtn icon={I.forward} />\n <HoverBtn icon={I.emoji} />\n <HoverBtn icon={I.more} />\n </div>\n </div>\n {isOut && <Avatar name={m.author || 'Maria Eduarda'} color={m.author === 'Alissa Mendes' ? 'bg-sky-500' : 'bg-amber-500'} size=\"sm\" />}\n </div>\n )\n}\n\nfunction HoverBtn({ icon }) {\n return (\n <button className=\"p-1 rounded-md text-slate-400 bg-white border border-slate-200 hover:text-slate-700 shadow-soft\">{icon}</button>\n )\n}\n\nfunction ComposeBtn({ icon, label }) {\n return (\n <button className=\"text-slate-500 hover:bg-slate-100 px-1.5 py-1.5 rounded-md inline-flex items-center gap-1 text-[12px]\">\n {icon} {label && <span>{label}</span>}\n </button>\n )\n}\n\nfunction fmtSecs(s) {\n const m = Math.floor(s / 60)\n return `${m}:${String(s % 60).padStart(2, '0')}`\n}\n\n// Waveform estilo WhatsApp: acumula amostras de volume ao longo do tempo e\n// rola da direita p/ esquerda, mostrando o áudio \"passando\".\nfunction AudioWave({ analyserRef }) {\n const MAX = 56\n const [samples, setSamples] = useState([])\n useEffect(() => {\n let raf\n let last = 0\n const buf = []\n const loop = (ts) => {\n const an = analyserRef?.current\n if (an && ts - last > 70) {\n last = ts\n const data = new Uint8Array(an.fftSize)\n an.getByteTimeDomainData(data)\n let sum = 0\n for (let i = 0; i < data.length; i++) {\n const v = (data[i] - 128) / 128\n sum += v * v\n }\n const rms = Math.sqrt(sum / data.length)\n buf.push(Math.min(1, rms * 2.4))\n if (buf.length > MAX) buf.shift()\n setSamples([...buf])\n }\n raf = requestAnimationFrame(loop)\n }\n raf = requestAnimationFrame(loop)\n return () => cancelAnimationFrame(raf)\n }, [analyserRef])\n return (\n <div className=\"flex items-center justify-start gap-[2px] h-7 flex-1 min-w-0 overflow-hidden\">\n {samples.map((v, i) => (\n <span key={i} style={{ height: `${Math.max(2, v * 26)}px` }}\n className=\"w-[2px] bg-rose-400 rounded-full shrink-0\" />\n ))}\n </div>\n )\n}\n\nfunction AttachMenu({ onImage, onFile }) {\n const [open, setOpen] = useState(false)\n const ref = useRef(null)\n useEffect(() => {\n if (!open) return\n const onDoc = e => { if (ref.current && !ref.current.contains(e.target)) setOpen(false) }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [open])\n\n return (\n <div ref={ref} className=\"relative\">\n <button onClick={() => setOpen(v => !v)} title=\"Anexar\"\n className={`px-1.5 py-1.5 rounded-md inline-flex items-center ${open ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-100'}`}>\n {I.paperclip}\n </button>\n {open && (\n <div className=\"absolute bottom-[calc(100%+6px)] left-0 z-20 w-44 bg-white border border-slate-200 rounded-xl shadow-lg py-1.5 text-[13px]\">\n <MenuItem icon={I.image} label=\"Imagem\" onClick={() => { setOpen(false); onImage?.() }} />\n <MenuItem icon={I.file} label=\"Documento\" onClick={() => { setOpen(false); onFile?.() }} />\n </div>\n )}\n </div>\n )\n}\n\n/* ---------- Painel de detalhes ---------- */\nfunction DetailsPanel({ c, onClose }) {\n const [tab, setTab] = useState('details')\n return (\n <aside className=\"w-[340px] bg-white border-l border-slate-200 flex flex-col\">\n <header className=\"px-4 py-3 border-b border-slate-200 flex items-center justify-between\">\n <div className=\"flex gap-3 text-[12.5px]\">\n {[\n ['details', 'Detalhes'],\n ['notes', 'Notas'],\n ['history', 'Histórico'],\n ].map(([k, l]) => (\n <button key={k} onClick={() => setTab(k)}\n className={`pb-2 -mb-3 font-medium border-b-2 ${tab === k ? 'border-slate-900 text-slate-900' : 'border-transparent text-slate-500 hover:text-slate-800'}`}>\n {l}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-1\">\n <button className=\"p-1.5 rounded-md text-slate-500 hover:bg-slate-100\">{I.external}</button>\n <button onClick={onClose} className=\"p-1.5 rounded-md text-slate-500 hover:bg-slate-100\">{I.x}</button>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto\">\n {tab === 'details' && <DetailsTab c={c} />}\n {tab === 'notes' && <NotesTab />}\n {tab === 'history' && <HistoryTab />}\n </div>\n </aside>\n )\n}\n\nfunction Section({ title, action, children, defaultOpen = true }) {\n const [open, setOpen] = useState(defaultOpen)\n return (\n <div className=\"border-b border-slate-100\">\n <button onClick={() => setOpen(v => !v)} className=\"w-full px-4 pt-4 pb-2 flex items-center justify-between\">\n <span className=\"text-[11px] font-semibold uppercase tracking-wider text-slate-500\">{title}</span>\n <span className={`text-slate-400 transition-transform ${open ? '' : '-rotate-90'}`}>{I.chevDown}</span>\n </button>\n {open && <div className=\"px-4 pb-4 space-y-2.5\">{children}{action}</div>}\n </div>\n )\n}\n\nfunction Row({ label, children }) {\n return (\n <div className=\"flex items-start gap-3 text-[12.5px]\">\n <span className=\"w-28 shrink-0 text-slate-500 pt-0.5\">{label}</span>\n <div className=\"flex-1 min-w-0 text-slate-800\">{children}</div>\n </div>\n )\n}\n\nconst PROPERTY_CATALOG = [\n { id: '856235', title: 'Apto 80m² · Jardins · 2 dorm' },\n { id: '856301', title: 'Apto 65m² · Vila Mariana · 2 dorm' },\n { id: '857188', title: 'Cobertura 120m² · Itaim · 3 dorm' },\n { id: '854902', title: 'Casa 180m² · Alto de Pinheiros · 4 dorm' },\n { id: '855417', title: 'Studio 35m² · Pinheiros · 1 dorm' },\n { id: '858033', title: 'Apto 95m² · Moema · 3 dorm' },\n { id: '858720', title: 'Apto 110m² · Perdizes · 3 dorm' },\n]\n\nfunction PropertyLinker() {\n const [linked, setLinked] = useState([PROPERTY_CATALOG[0], PROPERTY_CATALOG[5]])\n const [query, setQuery] = useState('')\n const [adding, setAdding] = useState(false)\n const inputRef = useRef(null)\n const wrapRef = useRef(null)\n\n useEffect(() => { if (adding) inputRef.current?.focus() }, [adding])\n\n useEffect(() => {\n if (!adding) return\n const onDoc = e => { if (wrapRef.current && !wrapRef.current.contains(e.target)) closeAdd() }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [adding])\n\n const suggestions = useMemo(() => {\n const q = query.trim().toLowerCase()\n const linkedIds = new Set(linked.map(p => p.id))\n return PROPERTY_CATALOG.filter(p =>\n !linkedIds.has(p.id) &&\n (q === '' || p.id.toLowerCase().includes(q) || p.title.toLowerCase().includes(q))\n ).slice(0, 5)\n }, [query, linked])\n\n const closeAdd = () => { setAdding(false); setQuery('') }\n const addProperty = p => { setLinked(l => [...l, p]); closeAdd() }\n const removeProperty = id => setLinked(l => l.filter(p => p.id !== id))\n\n return (\n <div ref={wrapRef} className=\"w-full\">\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1\">\n {linked.map(p => (\n <div key={p.id} className=\"group inline-flex items-center gap-0.5 text-[13px] leading-tight\">\n <a href=\"#\" title={p.title}\n className=\"text-slate-700 underline underline-offset-2 hover:text-emerald-700 inline-flex items-center gap-1 tabular-nums\">\n {p.id}\n <span className=\"text-slate-400 group-hover:text-emerald-600\">{I.external}</span>\n </a>\n <button onClick={() => removeProperty(p.id)} title=\"Desvincular\"\n className=\"opacity-0 group-hover:opacity-100 p-0.5 text-slate-400 hover:text-rose-500 transition-opacity\">\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"2.5\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"/>\n </svg>\n </button>\n </div>\n ))}\n {!adding && (\n <button onClick={() => setAdding(true)} title=\"Vincular imóvel\"\n className=\"text-[11px] text-slate-500 hover:text-slate-800 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded-full border border-dashed border-slate-300 hover:border-slate-400 hover:bg-slate-50\">\n + imóvel\n </button>\n )}\n </div>\n\n {adding && (\n <div className=\"relative mt-2\">\n <span className=\"absolute left-2 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none\">{I.search}</span>\n <input\n ref={inputRef}\n value={query}\n onChange={e => setQuery(e.target.value)}\n onKeyDown={e => { if (e.key === 'Escape') closeAdd() }}\n placeholder=\"Código ou bairro…\"\n className=\"w-full pl-7 pr-2 py-1.5 text-[12px] rounded-lg bg-white border border-slate-300 outline-none focus:border-slate-400 placeholder:text-slate-400\"\n />\n {suggestions.length > 0 && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-30 bg-white border border-slate-200 rounded-lg shadow-lg overflow-hidden\">\n {suggestions.map(p => (\n <button key={p.id} onClick={() => addProperty(p)}\n className=\"w-full text-left px-2.5 py-1.5 hover:bg-slate-50 flex items-center gap-2 border-b border-slate-100 last:border-b-0\">\n <span className=\"text-[12.5px] font-mono font-semibold text-slate-700 tabular-nums\">{p.id}</span>\n <span className=\"text-slate-300\">·</span>\n <span className=\"text-[11.5px] text-slate-500 truncate flex-1 min-w-0\">{p.title}</span>\n <span className=\"text-slate-300 shrink-0\">{I.plus}</span>\n </button>\n ))}\n </div>\n )}\n {query.trim() && suggestions.length === 0 && (\n <div className=\"absolute top-full left-0 right-0 mt-1 z-30 bg-white border border-slate-200 rounded-lg shadow-lg px-3 py-2 text-[12px] text-slate-500\">\n Nenhum imóvel encontrado para \"{query.trim()}\".\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nfunction LinkRow({ icon, label }) {\n return (\n <button className=\"w-full flex items-center gap-2 text-[13px] text-slate-700 hover:bg-slate-50 -mx-1 px-1 py-1 rounded-md\">\n <span className=\"text-slate-500\">{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n <span className=\"text-slate-400\">{I.plus}</span>\n </button>\n )\n}\n\nfunction ActionRow({ icon, label, children, onClick }) {\n const [open, setOpen] = useState(false)\n const hasSubmenu = !!children\n const handle = () => hasSubmenu ? setOpen(v => !v) : onClick?.()\n return (\n <div>\n <button onClick={handle}\n className=\"w-full flex items-center gap-2 text-[13px] text-slate-700 hover:bg-slate-50 -mx-1 px-1 py-1 rounded-md\">\n <span className=\"text-slate-500\">{icon}</span>\n <span className=\"flex-1 text-left\">{label}</span>\n <span className={`text-slate-400 transition-transform ${hasSubmenu && open ? 'rotate-90' : ''}`}>\n {hasSubmenu ? I.chevRight : I.plus}\n </span>\n </button>\n {hasSubmenu && open && (\n <div className=\"ml-7 mt-0.5 mb-1 border-l border-slate-200 pl-3 space-y-0.5\">\n {children}\n </div>\n )}\n </div>\n )\n}\n\nfunction SubAction({ label, onClick }) {\n return (\n <button onClick={onClick}\n className=\"w-full text-left text-[12.5px] text-slate-600 hover:text-slate-900 hover:bg-slate-50 -mx-1 px-1.5 py-1 rounded-md\">\n {label}\n </button>\n )\n}\n\nfunction DetailsTab({ c }) {\n const palette = ['sky', 'rose', 'violet', 'emerald', 'amber', 'slate']\n const [tags, setTags] = useState([\n { label: 'Comprador', tone: 'sky' },\n { label: 'Quente', tone: 'rose' },\n { label: 'Apto 2-3 dorm', tone: 'violet' },\n { label: 'Zona Sul', tone: 'emerald' },\n { label: 'Até R$ 900k', tone: 'amber' },\n ])\n const [expanded, setExpanded] = useState(false)\n const [adding, setAdding] = useState(false)\n const [newTag, setNewTag] = useState('')\n const tagInputRef = useRef(null)\n useEffect(() => { if (adding) tagInputRef.current?.focus() }, [adding])\n\n const VISIBLE = 3\n const shownTags = expanded ? tags : tags.slice(0, VISIBLE)\n const hiddenCount = Math.max(0, tags.length - VISIBLE)\n\n const addTag = () => {\n const v = newTag.trim()\n if (v) setTags(t => [...t, { label: v, tone: palette[t.length % palette.length] }])\n setNewTag('')\n setAdding(false)\n }\n const removeTag = i => setTags(t => t.filter((_, idx) => idx !== i))\n\n return (\n <>\n <div className=\"px-4 pt-4 pb-3 flex items-start gap-3\">\n <Avatar name={c.name} color={c.avatarColor} size=\"xl\" online />\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-semibold truncate\">{c.name}</div>\n <div className=\"text-[12px] text-slate-500 truncate\">{c.phone}</div>\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {shownTags.map((t, i) => (\n <Pill key={`${t.label}-${i}`} tone={t.tone}>\n {t.label}\n <button onClick={() => removeTag(i)} title=\"Remover\"\n className=\"ml-0.5 -mr-0.5 opacity-60 hover:opacity-100\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"3\" fill=\"none\" strokeLinecap=\"round\">\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"/>\n </svg>\n </button>\n </Pill>\n ))}\n {!expanded && hiddenCount > 0 && (\n <button onClick={() => setExpanded(true)}\n className=\"text-[11px] text-slate-500 hover:text-slate-800 px-1.5 py-0.5 rounded-full hover:bg-slate-100 self-center\">\n +{hiddenCount}\n </button>\n )}\n {expanded && tags.length > VISIBLE && (\n <button onClick={() => setExpanded(false)}\n className=\"text-[11px] text-slate-500 hover:text-slate-800 px-1.5 py-0.5 rounded-full hover:bg-slate-100 self-center\">\n mostrar menos\n </button>\n )}\n {adding ? (\n <input\n ref={tagInputRef}\n value={newTag}\n onChange={e => setNewTag(e.target.value)}\n onBlur={addTag}\n onKeyDown={e => {\n if (e.key === 'Enter') { e.preventDefault(); addTag() }\n if (e.key === 'Escape') { setNewTag(''); setAdding(false) }\n }}\n placeholder=\"nova tag…\"\n className=\"text-[11px] px-2 py-0.5 rounded-full bg-white border border-slate-300 outline-none focus:border-slate-500 w-24\"\n />\n ) : (\n <button onClick={() => { setExpanded(true); setAdding(true) }} title=\"Adicionar tag\"\n className=\"text-[11px] text-slate-500 hover:text-slate-800 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded-full border border-dashed border-slate-300 hover:border-slate-400 hover:bg-slate-50\">\n + tag\n </button>\n )}\n </div>\n </div>\n </div>\n\n <Section title=\"Atribuição\">\n <Row label=\"Atendente\">\n <span className=\"inline-flex items-center gap-1.5\">\n <Avatar name=\"Maria Eduarda\" size=\"sm\" color=\"bg-amber-500\" /> Maria Eduarda\n </span>\n </Row>\n <Row label=\"Departamento\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className=\"w-5 h-5 rounded-md bg-rose-500 text-white text-[10px] flex items-center justify-center font-bold\">CO</span>\n Comercial\n </span>\n </Row>\n <Row label=\"Origem\">\n <span className=\"inline-flex items-center gap-1.5 text-emerald-700\">{I.whatsapp} WhatsApp Business</span>\n </Row>\n </Section>\n\n <Section title=\"Ticket\">\n <Row label=\"Tipo\"><Pill tone=\"rose\">🏠 Interesse em compra</Pill></Row>\n <Row label=\"Status\"><Pill tone={statusInfo[c.status].tone}>{statusInfo[c.status].label}</Pill></Row>\n <Row label=\"Prioridade\"><Pill tone={c.priority === 'urgent' ? 'rose' : c.priority === 'high' ? 'amber' : 'slate'}>Alta</Pill></Row>\n <Row label=\"Imóveis\"><PropertyLinker /></Row>\n <Row label=\"Aberto\">há 18 min</Row>\n </Section>\n\n <Section title=\"Ações\">\n <ActionRow icon={I.userPlus} label=\"Adicionar cliente\">\n <SubAction label=\"Proprietário\" />\n <SubAction label=\"Cliente\" />\n </ActionRow>\n <ActionRow icon={I.checkCircle} label=\"Criar tarefa\" />\n <ActionRow icon={I.calendar} label=\"Agendar visita\" />\n <ActionRow icon={I.file} label=\"Enviar documentos\" />\n </Section>\n\n </>\n )\n}\n\nfunction NotesTab() {\n return (\n <div className=\"p-4 space-y-3\">\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-xl p-3\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-[11.5px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Maria Eduarda</span>\n <span className=\"text-[11px] text-yellow-700\">há 11 min</span>\n </div>\n <p className=\"text-[13px] text-yellow-900\">Cliente Gold — perfil quente, decisão rápida. Já visitou conosco em fev/26 (ticket #7892), gostou da região mas o imóvel estava acima do orçamento.</p>\n </div>\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-xl p-3\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <span className=\"text-[11.5px] font-semibold text-yellow-800 inline-flex items-center gap-1\">{I.pin} Alissa Mendes</span>\n <span className=\"text-[11px] text-yellow-700\">há 4 min</span>\n </div>\n <p className=\"text-[13px] text-yellow-900\">Confirmei com os proprietários — Vila Mariana e Moema liberados pra visita amanhã das 10h às 17h.</p>\n </div>\n <button className=\"w-full text-[12.5px] py-2 rounded-lg border border-dashed border-slate-300 text-slate-500 hover:bg-slate-50 inline-flex items-center justify-center gap-1\">\n {I.plus} Nova nota\n </button>\n </div>\n )\n}\n\nfunction HistoryTab() {\n const items = [\n { t: 'Ticket #7892 — Visita apto Itaim', s: 'Sem proposta', when: 'fev/26', tone: 'slate' },\n { t: 'Ticket #7541 — Interesse em cobertura', s: 'Resolvido', when: 'jan/26', tone: 'emerald' },\n { t: 'Ticket #7233 — Pedido de matrícula', s: 'Resolvido', when: 'dez/25', tone: 'emerald' },\n { t: 'Ticket #6890 — Primeira simulação', s: 'Resolvido', when: 'out/25', tone: 'emerald' },\n ]\n return (\n <div className=\"p-4 space-y-2\">\n {items.map((it, i) => (\n <button key={i} className=\"w-full text-left bg-white border border-slate-200 hover:border-slate-300 rounded-xl p-3 flex items-start gap-3\">\n <span className=\"w-8 h-8 rounded-lg bg-slate-100 text-slate-500 flex items-center justify-center\">{I.chat}</span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-[13px] font-medium truncate\">{it.t}</p>\n <div className=\"flex items-center gap-2 mt-1\">\n <Pill tone={it.tone}>{it.s}</Pill>\n <span className=\"text-[11.5px] text-slate-500\">{it.when}</span>\n </div>\n </div>\n <span className=\"text-slate-400 mt-1\">{I.chevRight}</span>\n </button>\n ))}\n </div>\n )\n}\n","// src/lib/useInbox.js\n// Live inbox data layer, driven by the injected config (via <PloyChat>).\n'use client'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { usePloy } from './context'\nimport { mapConversation, mapMessage, nowHHMM } from './mappers'\n\nexport function useInbox() {\n const { client } = usePloy()\n const live = client.live\n\n const [conversations, setConversations] = useState([])\n const [activeId, setActiveId] = useState(null)\n const [messages, setMessages] = useState([])\n const [channels, setChannels] = useState([])\n const [agents, setAgents] = useState([])\n const [me, setMe] = useState(null)\n const [tenantId, setTenantId] = useState(null)\n const [loading, setLoading] = useState(live)\n const [error, setError] = useState(null)\n const activeIdRef = useRef(null)\n activeIdRef.current = activeId\n\n const api = client.apiFetch\n\n // identity + tenant (tenant drives the realtime topic; may differ from workspace)\n useEffect(() => {\n if (!live) return\n api('/v1/me')\n .then((m) => { if (m?.user?.id) setMe(m.user.id); if (m?.tenant_id) setTenantId(m.tenant_id) })\n .catch(() => {})\n }, [live, api])\n\n const loadConversations = useCallback(async () => {\n if (!live) return\n try {\n const data = await api('/v1/conversations?limit=50')\n const mapped = (data || []).map(mapConversation)\n setConversations(mapped)\n setActiveId((a) => a || mapped[0]?.id || null)\n } catch (e) { setError(e.message) } finally { setLoading(false) }\n }, [live, api])\n\n const loadMessages = useCallback(async (convId) => {\n if (!live || !convId) return\n try {\n const res = await api(`/v1/conversations/${convId}/messages?limit=50`)\n setMessages((res?.messages || []).slice().reverse().map(mapMessage))\n } catch (e) { setError(e.message) }\n }, [live, api])\n\n const loadChannels = useCallback(async () => {\n if (!live) return []\n try { const l = (await api('/v1/channels')) || []; setChannels(l); return l } catch { return [] }\n }, [live, api])\n\n const loadAgents = useCallback(async () => {\n if (!live) return []\n try { const l = (await api('/v1/agents')) || []; setAgents(l); return l } catch { return [] }\n }, [live, api])\n\n useEffect(() => { loadConversations(); loadChannels(); loadAgents() }, [loadConversations, loadChannels, loadAgents])\n useEffect(() => { loadMessages(activeId) }, [activeId, loadMessages])\n\n const markRead = useCallback(async (convId) => {\n if (!live || !convId) return\n setConversations((cs) => cs.map((c) => (c.id === convId ? { ...c, unread: 0 } : c)))\n try { await api(`/v1/conversations/${convId}/read`, { method: 'POST' }) } catch {}\n }, [live, api])\n\n const assign = useCallback(async (convId, userId) => {\n if (!live || !convId) return\n setConversations((cs) => cs.map((c) => (c.id === convId ? { ...c, _raw: { ...c._raw, assignee_user_id: userId } } : c)))\n try { await api(`/v1/conversations/${convId}/assign`, { method: 'POST', body: { assignee_user_id: userId } }) }\n catch (e) { setError(e.message) }\n }, [live, api])\n\n const send = useCallback(async (text, isNote = false) => {\n const t = (text || '').trim()\n if (!t || !live || !activeIdRef.current) return\n const tmpId = `tmp${Date.now()}`\n setMessages((ms) => [...ms, isNote\n ? { id: tmpId, side: 'note', kind: 'text', text: t, time: nowHHMM() }\n : { id: tmpId, side: 'out', kind: 'text', text: t, time: nowHHMM(), status: 'pending' }])\n try {\n const saved = await api(`/v1/conversations/${activeIdRef.current}/messages`, {\n method: 'POST', body: isNote ? { text: t, note: true } : { text: t },\n })\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? mapMessage(saved) : m)))\n } catch {\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...m, status: 'failed' } : m)))\n }\n }, [live, api])\n\n const sendMedia = useCallback(async ({ data, mime, kind, filename, previewUrl, caption }) => {\n if (!live || !activeIdRef.current || !data) return\n const tmpId = `tmp${Date.now()}`\n setMessages((ms) => [...ms, { id: tmpId, side: 'out', kind, mediaUrl: previewUrl || '', caption: caption || '', meta: filename || mime || '', time: nowHHMM(), status: 'pending' }])\n try {\n const saved = await api(`/v1/conversations/${activeIdRef.current}/messages`, {\n method: 'POST', body: { media: { data, mime, kind, filename }, caption },\n })\n const mapped = mapMessage(saved)\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...mapped, mediaUrl: mapped.mediaUrl || previewUrl || '' } : m)))\n } catch {\n setMessages((ms) => ms.map((m) => (m.id === tmpId ? { ...m, status: 'failed' } : m)))\n }\n }, [live, api])\n\n const createChannel = useCallback((displayName) => api('/v1/channels', { method: 'POST', body: { display_name: displayName } }), [api])\n const connect = useCallback((id) => api(`/v1/channels/${id}/connect`, { method: 'POST' }), [api])\n const channelStatus = useCallback((id) => api(`/v1/channels/${id}/status`), [api])\n\n // realtime fan-out (Supabase broadcast on inbox:{tenant})\n useEffect(() => {\n if (!live || !tenantId) return\n const sb = client.supabase\n if (!sb) return\n const ch = sb\n .channel(`inbox:${tenantId}`)\n .on('broadcast', { event: 'message.created' }, ({ payload }) => {\n if (payload?.conversation_id === activeIdRef.current) {\n setMessages((ms) => (ms.some((m) => m.id === payload.id) ? ms : [...ms, mapMessage(payload)]))\n }\n loadConversations()\n })\n .on('broadcast', { event: 'message.updated' }, ({ payload }) => {\n setMessages((ms) => ms.map((m) => (m.id === payload?.id ? { ...m, status: payload.status || m.status } : m)))\n })\n .on('broadcast', { event: 'conversation.updated' }, () => loadConversations())\n .on('broadcast', { event: 'channel.updated' }, () => loadChannels())\n .subscribe()\n return () => { sb.removeChannel(ch) }\n }, [live, tenantId, client, loadConversations, loadChannels])\n\n return {\n live, loading, error,\n conversations, activeId, setActiveId, messages,\n send, sendMedia, markRead, assign, me, agents, loadAgents,\n channels, loadChannels, createChannel, connect, channelStatus,\n }\n}\n","'use client'\nimport { createContext, useContext, useMemo } from 'react'\nimport { createPloyClient } from './client'\n\n// Config is injected by the host via <PloyChat> props — no env, no localStorage.\nconst PloyContext = createContext(null)\n\nexport function PloyConfigProvider({ config, children }) {\n // memo by the identity-relevant fields so the client isn't rebuilt each render\n const value = useMemo(() => {\n const client = createPloyClient(config)\n return { config, client }\n }, [config.apiBase, config.workspaceId, config.getToken, config.supabase, config.supabaseUrl, config.supabaseAnonKey])\n return <PloyContext.Provider value={value}>{children}</PloyContext.Provider>\n}\n\nexport function usePloy() {\n const ctx = useContext(PloyContext)\n if (!ctx) throw new Error('PloyChat components must be used within <PloyChat>')\n return ctx\n}\n","// src/lib/client.js\n// Builds a config-driven client (HTTP + realtime) from the injected config.\n// config: {\n// apiBase: string, // chat-api base URL\n// workspaceId: string, // host workspace/tenant the user is in\n// getToken: () => Promise<string|null>, // host session access_token\n// supabase?: SupabaseClient, // host's client (preferred, for realtime)\n// supabaseUrl?, supabaseAnonKey?, // OR url+anon to create one\n// }\nimport { createClient } from '@supabase/supabase-js'\n\nexport function createPloyClient(config = {}) {\n const apiBase = (config.apiBase || '').replace(/\\/+$/, '')\n\n async function apiFetch(path, { method = 'GET', body } = {}) {\n const headers = {}\n if (body) headers['Content-Type'] = 'application/json'\n const token = config.getToken ? await config.getToken() : null\n if (token) headers['Authorization'] = `Bearer ${token}`\n if (config.workspaceId) headers['X-Workspace'] = config.workspaceId\n\n const res = await fetch(`${apiBase}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n })\n const txt = await res.text()\n let json\n try { json = txt ? JSON.parse(txt) : null } catch { json = txt }\n if (!res.ok) {\n const err = new Error(json?.message || json?.error || `HTTP ${res.status}`)\n err.status = res.status\n err.body = json\n throw err\n }\n return json\n }\n\n // realtime client: prefer the host's supabase client; else build from url+anon\n let supabase = config.supabase || null\n if (!supabase && config.supabaseUrl && config.supabaseAnonKey) {\n supabase = createClient(config.supabaseUrl, config.supabaseAnonKey, {\n auth: { persistSession: false, autoRefreshToken: false },\n })\n }\n\n const live = !!(config.apiBase && config.workspaceId && config.getToken)\n\n return { apiFetch, supabase, live }\n}\n","// src/lib/mappers.js — backend (inbox_*) shapes -> the UI shapes App.jsx expects.\nconst PALETTE = ['bg-violet-500', 'bg-rose-500', 'bg-sky-500', 'bg-amber-500', 'bg-emerald-600', 'bg-slate-700']\nfunction hash(s = '') { let h = 0; for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0; return h }\nexport function colorFor(id = '') { return PALETTE[hash(id) % PALETTE.length] }\n\nconst pad = (n) => String(n).padStart(2, '0')\nexport function timeOf(iso) { if (!iso) return ''; const d = new Date(iso); return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\nexport function dayOf(iso) {\n if (!iso) return ''\n const d = new Date(iso); const now = new Date()\n if (d.toDateString() === now.toDateString()) return 'Hoje'\n const y = new Date(now); y.setDate(now.getDate() - 1)\n if (d.toDateString() === y.toDateString()) return 'Ontem'\n return d.toLocaleDateString('pt-BR')\n}\nexport function relTime(iso) {\n if (!iso) return ''\n const m = Math.floor((Date.now() - new Date(iso).getTime()) / 60000)\n if (m < 1) return 'agora'\n if (m < 60) return `${m}m`\n const h = Math.floor(m / 60); if (h < 24) return `${h}h`\n return `${Math.floor(h / 24)}d`\n}\nexport function nowHHMM() { const d = new Date(); return `${pad(d.getHours())}:${pad(d.getMinutes())}` }\n\n// backend conversation.status -> UI status enum (statusInfo keys in App.jsx)\nconst STATUS_MAP = { open: 'open', pending: 'in_progress', resolved: 'resolved', snoozed: 'waiting' }\n\nexport function mapConversation(c) {\n const contact = c.contact || {}\n const name = contact.name || contact.push_name || contact.phone_e164 || contact.external_id || 'Contato'\n return {\n id: c.id,\n name,\n phone: contact.phone_e164 || '',\n avatarColor: colorFor(c.id),\n preview: c.last_message_preview || '',\n waitFor: relTime(c.last_message_at),\n unread: c.unread_count || 0,\n sla: 'ok',\n priority: c.priority || 'normal',\n status: STATUS_MAP[c.status] || 'open',\n ticket: c.property_ref ? `REF ${c.property_ref}` : `#${String(c.id).slice(0, 4)}`,\n starred: false,\n _raw: c,\n }\n}\n\nexport function mapMessage(m) {\n const ts = m.sent_at || m.created_at\n // internal note: kind='note', no direction, team-only\n if (m.kind === 'note') {\n return { id: m.id, side: 'note', kind: 'text', text: m.text || '', time: timeOf(ts), day: dayOf(ts), author: m.author_name, _raw: m }\n }\n if (m.kind === 'system') {\n return { id: m.id, side: 'system', kind: 'text', text: m.text || '', time: timeOf(ts), day: dayOf(ts), _raw: m }\n }\n let kind = m.kind || 'text'\n let text = m.text || ''\n if (!['text', 'image', 'audio', 'video', 'document'].includes(kind)) {\n text = m.text || m.caption || `[${kind}]`\n kind = 'text'\n }\n return {\n id: m.id,\n side: m.direction, // 'in' | 'out'\n kind,\n text,\n caption: m.caption || '',\n meta: m.media_mime || '',\n mediaUrl: m.media_url || '',\n time: timeOf(ts),\n day: dayOf(ts),\n status: m.status,\n _raw: m,\n }\n}\n","'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n// Minimal \"connect a WhatsApp number\" modal: create channel -> QR -> poll status.\nexport default function ConnectChannel({ inbox, onClose }) {\n const [channel, setChannel] = useState(null)\n const [qr, setQr] = useState(null)\n const [status, setStatus] = useState('idle')\n const [error, setError] = useState(null)\n const [busy, setBusy] = useState(false)\n const pollRef = useRef(null)\n\n const asDataUrl = (q) => (!q ? null : q.startsWith('data:') ? q : `data:image/png;base64,${q}`)\n\n useEffect(() => {\n (async () => {\n try {\n const list = await inbox.loadChannels()\n const c = (list || [])[0] || null\n setChannel(c)\n if (c) setStatus(c.status)\n } catch (e) { setError(e.message) }\n })()\n return () => clearInterval(pollRef.current)\n }, [inbox])\n\n const poll = (id) => {\n clearInterval(pollRef.current)\n pollRef.current = setInterval(async () => {\n try {\n const s = await inbox.channelStatus(id)\n setStatus(s.status)\n if (s.status === 'connected') { clearInterval(pollRef.current); inbox.loadChannels() }\n else { const res = await inbox.connect(id); if (res?.qr) setQr(asDataUrl(res.qr)) }\n } catch {}\n }, 3000)\n }\n\n const startConnect = async (ch) => {\n setError(null); setBusy(true); setStatus('connecting')\n try {\n const res = await inbox.connect(ch.id)\n setQr(asDataUrl(res?.qr))\n setStatus(res?.status || 'qr')\n poll(ch.id)\n } catch (e) { setError(e.message); setStatus('error') } finally { setBusy(false) }\n }\n\n // Um clique só: o \"canal\" é a instância Evolution que hospeda a sessão e gera\n // o QR — necessário, mas não precisa ser um passo manual. Cria se não existir\n // e já parte pro QR.\n const handleConnect = async () => {\n setError(null); setBusy(true)\n try {\n let ch = channel\n if (!ch) { ch = await inbox.createChannel('WhatsApp'); setChannel(ch) }\n await startConnect(ch)\n } catch (e) { setError(e.message) } finally { setBusy(false) }\n }\n\n return (\n <div className=\"fixed inset-0 z-50 bg-black/40 flex items-center justify-center\" onClick={onClose}>\n <div className=\"bg-white rounded-2xl shadow-xl w-[380px] p-5\" onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"font-semibold text-[15px]\">Conectar WhatsApp</h3>\n <button onClick={onClose} className=\"text-slate-400 hover:text-slate-700 text-lg leading-none\">×</button>\n </div>\n\n {error && <div className=\"text-[12px] text-rose-600 mb-2 break-words\">{error}</div>}\n\n {status === 'connected' ? (\n <div className=\"text-center py-8 text-emerald-600 font-medium\">✓ Número conectado</div>\n ) : qr ? (\n <div className=\"text-center\">\n <img src={qr} alt=\"QR Code\" className=\"w-56 h-56 mx-auto rounded-lg border border-slate-200\" />\n <p className=\"text-[12px] text-slate-500 mt-3\">\n WhatsApp › Aparelhos conectados › Conectar um aparelho, e escaneie. ({status})\n </p>\n </div>\n ) : (\n <div className=\"text-center py-4\">\n <p className=\"text-[13px] text-slate-600 mb-3\">\n Conecte um número de WhatsApp para começar a atender.\n </p>\n <button disabled={busy} onClick={handleConnect}\n className=\"bg-emerald-600 hover:bg-emerald-700 disabled:opacity-50 text-white px-4 py-2 rounded-lg text-[13px] font-medium\">\n {busy ? 'Gerando…' : 'Gerar QR Code'}\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\nimport { lazy, Suspense } from 'react'\n\n// Lazy-load emoji-picker-react (client-only; touches window). No next/dynamic so\n// the lib stays framework-agnostic. Category enum values used as string literals\n// to avoid a static import of the module on SSR.\nconst Picker = lazy(() => import('emoji-picker-react'))\n\nconst CATEGORIES_PT = [\n { category: 'suggested', name: 'Recentes' },\n { category: 'smileys_people', name: 'Rostos e pessoas' },\n { category: 'animals_nature', name: 'Animais e natureza' },\n { category: 'food_drink', name: 'Comidas e bebidas' },\n { category: 'travel_places', name: 'Viagens e lugares' },\n { category: 'activities', name: 'Atividades' },\n { category: 'objects', name: 'Objetos' },\n { category: 'symbols', name: 'Símbolos' },\n { category: 'flags', name: 'Bandeiras' },\n]\n\nexport default function EmojiPicker({ onPick }) {\n return (\n <div className=\"absolute bottom-[calc(100%+6px)] left-0 z-30 shadow-xl rounded-xl overflow-hidden\">\n <Suspense fallback={<div className=\"w-[340px] h-[420px] bg-white\" />}>\n <Picker\n onEmojiClick={(e) => onPick(e.emoji)}\n lazyLoadEmojis\n width={340}\n height={420}\n categories={CATEGORIES_PT}\n searchPlaceholder=\"Buscar emoji…\"\n previewConfig={{ showPreview: false }}\n />\n </Suspense>\n </div>\n )\n}\n","'use client'\nimport { useEffect, useState } from 'react'\n\n// Transferir conversa para outro agente do workspace.\nexport default function TransferModal({ inbox, conversationId, currentAssignee, onClose }) {\n const [agents, setAgents] = useState(inbox.agents || [])\n const [q, setQ] = useState('')\n\n useEffect(() => { inbox.loadAgents().then((a) => a && setAgents(a)) }, [inbox])\n\n const filtered = agents.filter((a) => {\n const s = q.trim().toLowerCase()\n if (!s) return true\n return (a.name || '').toLowerCase().includes(s) || (a.email || '').toLowerCase().includes(s)\n })\n\n const pick = (userId) => { inbox.assign(conversationId, userId); onClose() }\n const initials = (n) => (n || '?').split(' ').map((p) => p[0]).slice(0, 2).join('').toUpperCase()\n\n return (\n <div className=\"fixed inset-0 z-50 bg-black/40 flex items-center justify-center\" onClick={onClose}>\n <div className=\"bg-white rounded-2xl shadow-xl w-[380px] max-h-[72vh] flex flex-col\" onClick={(e) => e.stopPropagation()}>\n <div className=\"px-4 py-3 border-b border-slate-200 flex items-center justify-between\">\n <h3 className=\"font-semibold text-[15px]\">Transferir conversa</h3>\n <button onClick={onClose} className=\"text-slate-400 hover:text-slate-700 text-lg leading-none\">×</button>\n </div>\n <div className=\"p-3 border-b border-slate-100\">\n <input value={q} onChange={(e) => setQ(e.target.value)} placeholder=\"Buscar agente…\"\n className=\"w-full px-3 py-1.5 text-[13px] rounded-lg bg-slate-50 border border-slate-200 outline-none focus:bg-white focus:border-slate-300\" />\n </div>\n <div className=\"flex-1 overflow-y-auto p-2\">\n <button onClick={() => pick(null)}\n className=\"w-full text-left px-3 py-2 rounded-lg hover:bg-slate-50 text-[13px] text-slate-500\">\n Sem atribuição\n </button>\n {filtered.map((a) => (\n <button key={a.user_id} onClick={() => pick(a.user_id)}\n className={`w-full text-left px-3 py-2 rounded-lg hover:bg-slate-50 flex items-center gap-2.5 ${currentAssignee === a.user_id ? 'bg-emerald-50' : ''}`}>\n <span className=\"w-8 h-8 rounded-full bg-slate-200 text-slate-600 text-[11px] font-semibold flex items-center justify-center shrink-0\">\n {initials(a.name)}\n </span>\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-[13px] truncate\">{a.name}</span>\n <span className=\"block text-[11px] text-slate-400 truncate\">{[a.email, a.role].filter(Boolean).join(' · ')}</span>\n </span>\n {currentAssignee === a.user_id && <span className=\"text-emerald-600 text-[11px] font-medium shrink-0\">atual</span>}\n </button>\n ))}\n {filtered.length === 0 && <p className=\"text-center text-[12px] text-slate-400 py-6\">Nenhum agente encontrado</p>}\n </div>\n </div>\n </div>\n )\n}\n","'use client'\nimport App from './components/App'\nimport { PloyConfigProvider } from './lib/context'\n\n/**\n * <PloyChat> — embeddable WhatsApp inbox.\n *\n * Props:\n * - apiBase: string chat-api base URL\n * - workspaceId: string host workspace/tenant the user is in\n * - getToken: () => Promise<string|null> host session access_token\n * - supabase?: SupabaseClient host's client (preferred, for realtime)\n * - supabaseUrl?, supabaseAnonKey? OR create one for realtime\n * - className?: string wrapper class (fills its container; give it a height)\n */\nexport function PloyChat({\n apiBase,\n workspaceId,\n getToken,\n supabase,\n supabaseUrl,\n supabaseAnonKey,\n className,\n}) {\n const config = { apiBase, workspaceId, getToken, supabase, supabaseUrl, supabaseAnonKey }\n // .ploychat-root: scope hook for the bundled reset in styles.css (@layer base).\n const rootClass = ['ploychat-root', className].filter(Boolean).join(' ')\n return (\n <PloyConfigProvider config={config}>\n <div className={rootClass} style={{ height: '100%', width: '100%' }}>\n <App />\n </div>\n </PloyConfigProvider>\n )\n}\n\nexport default PloyChat\n"],"mappings":"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","names":["useMemo","useRef","useState","useEffect","conversations","useEffect","useRef","useState","jsx","jsx","useEffect","useState","jsx","jsxs","jsx","jsxs","jsxs","jsx","useState","useRef","useEffect","_a","useMemo","jsxs","jsx","jsxs","jsx","useState","useRef","useEffect","useState","useEffect","jsx","useRef","jsxs","useMemo","useState","jsxs","jsx","useRef","useEffect","jsx"]}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- .container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-\[calc\(100\%\+6px\)\]{bottom:calc(100% + 6px)}.left-0{left:0}.left-2{left:.5rem}.left-2\.5{left:.625rem}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-\[calc\(100\%\+6px\)\]{top:calc(100% + 6px)}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.order-first{order:-9999}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-3{margin-bottom:-.75rem}.-mr-0\.5{margin-right:-.125rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-5{margin-left:1.25rem}.ml-7{margin-left:1.75rem}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[18px\]{height:18px}.h-\[420px\]{height:420px}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:18rem}.max-h-\[72vh\]{max-height:72vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/5{width:40%}.w-24{width:6rem}.w-28{width:7rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[2px\]{width:2px}.w-\[340px\]{width:340px}.w-\[380px\]{width:380px}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[18px\]{min-width:18px}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.max-w-\[440px\]{max-width:440px}.max-w-\[68\%\]{max-width:68%}.max-w-\[70\%\]{max-width:70%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y:-50%}.-rotate-90,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate:-90deg}.rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[2px\]{gap:2px}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-black\/40{background-color:rgba(0,0,0,.4)}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.bg-emerald-700\/40{background-color:rgba(4,120,87,.4)}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity,1))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity,1))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity,1))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-50\/60{background-color:rgba(248,250,252,.6)}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity,1))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-slate-200{--tw-gradient-from:#e2e8f0 var(--tw-gradient-from-position);--tw-gradient-to:rgba(226,232,240,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-slate-300{--tw-gradient-to:#cbd5e1 var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[9\.5px\]{font-size:9.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-soft{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);--tw-shadow-colored:0 1px 2px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity,1))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity,1))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity,1))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity,1))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity,1))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity,1))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity,1))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity,1))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity,1))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-yellow-600::-moz-placeholder{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.placeholder\:text-yellow-600::placeholder{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.hover\:bg-emerald-400\/40:hover{background-color:rgba(52,211,153,.4)}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\:opacity-100:hover{opacity:1}.focus\:border-slate-300:focus{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.focus\:border-slate-400:focus{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.focus\:border-slate-500:focus{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity,1))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.active\:bg-emerald-500\/50:active{background-color:rgba(16,185,129,.5)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:inline{display:inline}}@media (min-width:1024px){.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}}@media (min-width:1536px){.\32xl\:flex{display:flex}}
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.ploychat-root,.ploychat-root *,.ploychat-root :after,.ploychat-root :before{box-sizing:border-box;border:0 solid #e5e7eb}.ploychat-root{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;line-height:1.5;color:#0f172a;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.ploychat-root blockquote,.ploychat-root figure,.ploychat-root h1,.ploychat-root h2,.ploychat-root h3,.ploychat-root h4,.ploychat-root h5,.ploychat-root h6,.ploychat-root p{margin:0}.ploychat-root h1,.ploychat-root h2,.ploychat-root h3,.ploychat-root h4,.ploychat-root h5,.ploychat-root h6{font-size:inherit;font-weight:inherit}.ploychat-root ol,.ploychat-root ul{margin:0;padding:0;list-style:none}.ploychat-root a{color:inherit;text-decoration:inherit}.ploychat-root hr{height:0;color:inherit;border-top-width:1px}.ploychat-root button,.ploychat-root input,.ploychat-root optgroup,.ploychat-root select,.ploychat-root textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}.ploychat-root button,.ploychat-root select{text-transform:none}.ploychat-root [role=button],.ploychat-root button{cursor:pointer}.ploychat-root [type=button],.ploychat-root [type=reset],.ploychat-root [type=submit],.ploychat-root button{-webkit-appearance:button;background-color:transparent;background-image:none}.ploychat-root :disabled{cursor:default}.ploychat-root input::-moz-placeholder,.ploychat-root textarea::-moz-placeholder{opacity:1;color:#9ca3af}.ploychat-root input::placeholder,.ploychat-root textarea::placeholder{opacity:1;color:#9ca3af}.ploychat-root audio,.ploychat-root canvas,.ploychat-root embed,.ploychat-root iframe,.ploychat-root img,.ploychat-root object,.ploychat-root svg,.ploychat-root video{display:block;vertical-align:middle}.ploychat-root img,.ploychat-root video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-right-0\.5{right:-.125rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1\.5{top:-.375rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-\[calc\(100\%\+6px\)\]{bottom:calc(100% + 6px)}.left-0{left:0}.left-2{left:.5rem}.left-2\.5{left:.625rem}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-\[calc\(100\%\+6px\)\]{top:calc(100% + 6px)}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.order-first{order:-9999}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-3{margin-bottom:-.75rem}.-mr-0\.5{margin-right:-.125rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-5{margin-left:1.25rem}.ml-7{margin-left:1.75rem}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[18px\]{height:18px}.h-\[420px\]{height:420px}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:18rem}.max-h-\[72vh\]{max-height:72vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/5{width:40%}.w-24{width:6rem}.w-28{width:7rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[2px\]{width:2px}.w-\[340px\]{width:340px}.w-\[380px\]{width:380px}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[18px\]{min-width:18px}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.max-w-\[440px\]{max-width:440px}.max-w-\[68\%\]{max-width:68%}.max-w-\[70\%\]{max-width:70%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y:-50%}.-rotate-90,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate:-90deg}.rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[2px\]{gap:2px}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-black\/40{background-color:rgba(0,0,0,.4)}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.bg-emerald-700\/40{background-color:rgba(4,120,87,.4)}.bg-lime-300{--tw-bg-opacity:1;background-color:rgb(190 242 100/var(--tw-bg-opacity,1))}.bg-lime-400{--tw-bg-opacity:1;background-color:rgb(163 230 53/var(--tw-bg-opacity,1))}.bg-rose-400{--tw-bg-opacity:1;background-color:rgb(251 113 133/var(--tw-bg-opacity,1))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-50\/60{background-color:rgba(248,250,252,.6)}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity,1))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-slate-200{--tw-gradient-from:#e2e8f0 var(--tw-gradient-from-position);--tw-gradient-to:rgba(226,232,240,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-slate-300{--tw-gradient-to:#cbd5e1 var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-0\.5{padding-top:.125rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[9\.5px\]{font-size:9.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-emerald-100{--tw-text-opacity:1;color:rgb(209 250 229/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-rose-500{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-soft{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-soft{--tw-shadow:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);--tw-shadow-colored:0 1px 2px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity,1))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity,1))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity,1))}.ring-emerald-200{--tw-ring-opacity:1;--tw-ring-color:rgb(167 243 208/var(--tw-ring-opacity,1))}.ring-rose-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 205 211/var(--tw-ring-opacity,1))}.ring-sky-200{--tw-ring-opacity:1;--tw-ring-color:rgb(186 230 253/var(--tw-ring-opacity,1))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity,1))}.ring-violet-200{--tw-ring-opacity:1;--tw-ring-color:rgb(221 214 254/var(--tw-ring-opacity,1))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity,1))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ploychat-root .epr-emoji-category-label{text-transform:none!important}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.placeholder\:text-yellow-600::-moz-placeholder{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.placeholder\:text-yellow-600::placeholder{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-slate-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.hover\:border-slate-400:hover{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.hover\:bg-emerald-400\/40:hover{background-color:rgba(52,211,153,.4)}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.hover\:text-emerald-700:hover{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.hover\:text-rose-500:hover{--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity,1))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\:text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\:opacity-100:hover{opacity:1}.focus\:border-slate-300:focus{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.focus\:border-slate-400:focus{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.focus\:border-slate-500:focus{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity,1))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.active\:bg-emerald-500\/50:active{background-color:rgba(16,185,129,.5)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.group:hover .group-hover\:text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:inline{display:inline}}@media (min-width:1024px){.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}}@media (min-width:1536px){.\32xl\:flex{display:flex}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veploy/ploychat",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "PloyChat — embeddable WhatsApp inbox (React component).",
@@ -34,7 +34,7 @@
34
34
  "start": "next start",
35
35
  "lint": "next lint",
36
36
  "build:lib": "tsup && npm run build:css",
37
- "build:css": "tailwindcss -c tailwind.lib.config.js -i ./src/lib/styles.css -o ./dist/styles.css --minify",
37
+ "build:css": "tailwindcss -c tailwind.lib.config.cjs -i ./src/lib/styles.css -o ./dist/styles.css --minify",
38
38
  "prepublishOnly": "npm run build:lib"
39
39
  },
40
40
  "peerDependencies": {