chordia-ui 3.9.0 → 3.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/DataTable2.cjs.js +1 -1
  2. package/dist/DataTable2.cjs.js.map +1 -1
  3. package/dist/DataTable2.es.js +611 -604
  4. package/dist/DataTable2.es.js.map +1 -1
  5. package/dist/PerformancePanel.cjs.js +1 -1
  6. package/dist/PerformancePanel.cjs.js.map +1 -1
  7. package/dist/PerformancePanel.es.js +1068 -816
  8. package/dist/PerformancePanel.es.js.map +1 -1
  9. package/dist/SupervisorSelect.cjs.js +2 -0
  10. package/dist/SupervisorSelect.cjs.js.map +1 -0
  11. package/dist/SupervisorSelect.es.js +352 -0
  12. package/dist/SupervisorSelect.es.js.map +1 -0
  13. package/dist/components/Signals.cjs.js +1 -1
  14. package/dist/components/Signals.cjs.js.map +1 -1
  15. package/dist/components/Signals.es.js +273 -318
  16. package/dist/components/Signals.es.js.map +1 -1
  17. package/dist/components/UpdatedInteractionDetails.cjs.js +3 -3
  18. package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
  19. package/dist/components/UpdatedInteractionDetails.es.js +98 -92
  20. package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
  21. package/dist/components/performance.cjs.js +1 -1
  22. package/dist/components/performance.cjs.js.map +1 -1
  23. package/dist/components/performance.es.js +116 -349
  24. package/dist/components/performance.es.js.map +1 -1
  25. package/dist/components/reports.cjs.js +2 -2
  26. package/dist/components/reports.cjs.js.map +1 -1
  27. package/dist/components/reports.es.js +122 -141
  28. package/dist/components/reports.es.js.map +1 -1
  29. package/dist/index.cjs.js +1 -1
  30. package/dist/index.es.js +1 -1
  31. package/dist/pages/interactionDetails.cjs.js +2 -2
  32. package/dist/pages/interactionDetails.cjs.js.map +1 -1
  33. package/dist/pages/interactionDetails.es.js +130 -124
  34. package/dist/pages/interactionDetails.es.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/components/Signals/SignalDetailsPage.jsx +2 -29
  37. package/src/components/Signals/SignalsListPage.jsx +2 -24
  38. package/src/components/UpdatedInteractionDetails/UpdatedCoachingSynthesisCard.jsx +8 -1
  39. package/src/components/data/DataTable2.jsx +19 -5
  40. package/src/components/pages/interactionDetails/CoachingSynthesisCard.jsx +8 -1
  41. package/src/components/performance/PerformanceDetailsPage.jsx +230 -75
  42. package/src/components/performance/PerformancePanel.jsx +42 -45
  43. package/src/components/performance/index.js +27 -0
  44. package/src/components/performance/performanceApiMap.js +133 -0
  45. package/src/components/performance/performanceMetrics.js +63 -0
  46. package/src/components/performance/performanceRangeFormat.js +92 -0
  47. package/src/components/performance/performanceSparkline.js +52 -0
  48. package/src/components/reports/ReportsList.jsx +2 -25
@@ -1 +1 @@
1
- {"version":3,"file":"Signals.es.js","sources":["../../src/components/Signals/SignalDetailsPage.jsx","../../src/components/Signals/SignalsListPage.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport {\n ArrowLeft,\n CalendarDays,\n ChevronDown,\n Check,\n Download,\n Share2,\n FileText,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"../performance/PerformancePanel\";\n\nconst C = {\n ink: \"#2E3236\",\n muted: \"#808183\",\n border: \"#D9D9D9\",\n borderSubtle: \"#E6E6E6\",\n black: \"#0B0B0B\",\n white: \"#FFFFFF\",\n neutralBorder: \"#BFBFBF\",\n neutralLight: \"#E6E6E6\",\n neutral800: \"#323232\",\n neutral600: \"#676767\",\n neutral400: \"#989898\",\n fillTrack: \"#EFEFEF\",\n beige: \"rgba(243, 241, 229, 0.4)\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\nfunction formatLocalDate(date) {\n if (!(date instanceof Date)) {\n const parsed = new Date(date);\n if (Number.isNaN(parsed.getTime())) return String(date ?? \"\");\n date = parsed;\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"numeric\",\n });\n}\n\nconst DEFAULT_RANGE_OPTIONS = [\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n];\n\nconst RANGE_TO_MS = {\n \"8h\": 8 * 60 * 60 * 1000,\n \"1d\": 24 * 60 * 60 * 1000,\n \"7d\": 7 * 24 * 60 * 60 * 1000,\n \"30d\": 30 * 24 * 60 * 60 * 1000,\n};\n\nfunction computeWindowLabel(windowId) {\n const ms = RANGE_TO_MS[windowId];\n if (!ms) return \"\";\n const to = new Date();\n const from = new Date(to.getTime() - ms);\n return `${formatLocalDate(from)} – ${formatLocalDate(to)}`;\n}\n\nfunction RangeChip({ label, active = false, onClick }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n height: 32,\n minWidth: 31,\n padding: \"0 12px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.borderSubtle}`,\n background: active ? C.black : C.white,\n color: active ? C.white : C.black,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\n// KPI card that mirrors the Figma \"Total Calls\" tile: a large value, a small\n// muted delta hint inline to the right, and a label underneath.\nfunction KpiCard({ value, delta, label, style = {} }) {\n return (\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n boxSizing: \"border-box\",\n ...style,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8, minHeight: 36 }}>\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 500,\n color: C.ink,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.1,\n }}\n >\n {value}\n </span>\n {delta != null && delta !== \"\" && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n fontWeight: 500,\n color: C.muted,\n whiteSpace: \"nowrap\",\n }}\n >\n {delta}\n </span>\n )}\n </div>\n <span style={{ fontFamily: FONT_DISPLAY, fontSize: 13, color: C.ink, lineHeight: 1.2 }}>\n {label}\n </span>\n </div>\n );\n}\n\n// Triple sub-card for the \"Outcome Correlation\" tile. Each cell shows a primary\n// value plus a two-line caption. All labels are host-provided so the library\n// stays free of demo copy.\nfunction OutcomeCorrelationCard({\n title = \"\",\n present = { value: \"\", caption: \"\", sub: \"\" },\n absent = { value: \"\", caption: \"\", sub: \"\" },\n impact = { value: \"\", caption: \"\", sub: \"\" },\n style = {},\n}) {\n return (\n <div\n style={{\n flex: 1,\n background: C.beige,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n boxSizing: \"border-box\",\n minWidth: 0,\n ...style,\n }}\n >\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n <div style={{ display: \"flex\", alignItems: \"stretch\", gap: 24, minWidth: 0 }}>\n <OutcomeCell {...present} />\n <OutcomeCell {...absent} />\n <OutcomeCell {...impact} />\n </div>\n </div>\n );\n}\n\nfunction OutcomeCell({ value, caption, sub }) {\n return (\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n }}\n >\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 22,\n fontWeight: 500,\n color: C.muted,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.1,\n }}\n >\n {value}\n </span>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.ink, lineHeight: 1.2 }}>\n {caption}\n </span>\n {sub && (\n <span\n style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.neutral600, lineHeight: 1.2 }}\n >\n {sub}\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// Dropdown used by the Fire Rate Trend chart card to pick a comparison view.\n// Matches the View-By pattern from PerformancePanel (anchored popover).\nfunction ViewBySelect({ value, options = [], onChange }) {\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef(null);\n const popoverRef = React.useRef(null);\n React.useEffect(() => {\n if (!open) return;\n const handler = (e) => {\n if (\n popoverRef.current?.contains(e.target) ||\n triggerRef.current?.contains(e.target)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n const selected = options.find((o) => o.id === value) || options[0];\n return (\n <div style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n ref={triggerRef}\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n height: 24,\n padding: \"0 8px 0 0\",\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n color: C.ink,\n }}\n >\n {selected?.label}\n <ChevronDown\n size={14}\n strokeWidth={1.75}\n style={{ transform: open ? \"rotate(180deg)\" : \"none\", transition: \"transform 120ms ease\" }}\n />\n </button>\n {open && (\n <div\n ref={popoverRef}\n role=\"listbox\"\n style={{\n position: \"absolute\",\n top: 28,\n right: 0,\n zIndex: 30,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n boxShadow: \"0 8px 24px rgba(11, 11, 11, 0.12)\",\n minWidth: 200,\n padding: 4,\n fontFamily: FONT_DISPLAY,\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === value;\n return (\n <button\n key={opt.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onChange?.(opt.id);\n setOpen(false);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"8px 10px\",\n border: \"none\",\n background: isSelected ? C.borderSubtle : \"transparent\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n borderRadius: 6,\n }}\n >\n {isSelected ? (\n <Check size={16} color={C.ink} strokeWidth={1.75} />\n ) : (\n <span style={{ width: 16 }} />\n )}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// Two-series line chart (current + previous period). Series points are arrays\n// of y-numbers, equally spaced across the x-axis. The previous series is\n// rendered dashed; current is solid.\nfunction FireRateTrendChart({\n currentSeries = [],\n previousSeries = [],\n yLabels = [],\n height = 176,\n showPrevious = true,\n legendCurrentLabel = \"\",\n legendPreviousLabel = \"\",\n}) {\n const innerHeight = height - 8;\n const PADDING_LEFT = 32;\n const PADDING_RIGHT = 8;\n const viewWidth = 1080;\n const innerWidth = viewWidth - PADDING_LEFT - PADDING_RIGHT;\n\n const allValues = [...currentSeries, ...(showPrevious ? previousSeries : [])];\n const hasData = allValues.length > 0;\n if (!hasData) {\n return (\n <div\n style={{\n height,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n color: C.muted,\n }}\n >\n No data\n </div>\n );\n }\n\n const yMin = Math.min(...allValues, 0);\n const yMax = Math.max(...allValues, 1);\n const ySpan = yMax - yMin || 1;\n const sy = (y) => 12 + ((yMax - y) / ySpan) * (innerHeight - 24);\n const seriesToPath = (series) => {\n if (!series.length) return \"\";\n const step = series.length > 1 ? innerWidth / (series.length - 1) : 0;\n return series\n .map((y, i) => `${i === 0 ? \"M\" : \"L\"}${PADDING_LEFT + i * step},${sy(y)}`)\n .join(\" \");\n };\n\n const currentPath = seriesToPath(currentSeries);\n const previousPath = showPrevious ? seriesToPath(previousSeries) : \"\";\n\n const dots = (series) =>\n series.map((y, i) => {\n const step = series.length > 1 ? innerWidth / (series.length - 1) : 0;\n return { x: PADDING_LEFT + i * step, y: sy(y) };\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <svg\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${viewWidth} ${height}`}\n preserveAspectRatio=\"none\"\n >\n {/* y-axis labels (top / middle / bottom) */}\n {yLabels.map((l, i) => {\n const yPos =\n 12 + (i / Math.max(1, yLabels.length - 1)) * (innerHeight - 24);\n return (\n <text\n key={l + i}\n x={0}\n y={yPos + 3}\n fontFamily={FONT_DISPLAY}\n fontSize=\"10\"\n fill={C.neutral800}\n >\n {l}\n </text>\n );\n })}\n {/* baseline */}\n <line\n x1={PADDING_LEFT}\n y1={innerHeight}\n x2={viewWidth - PADDING_RIGHT}\n y2={innerHeight}\n stroke={C.border}\n strokeWidth=\"1\"\n />\n {/* faint grid lines at top + middle */}\n <line\n x1={PADDING_LEFT}\n y1={12}\n x2={viewWidth - PADDING_RIGHT}\n y2={12}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 4\"\n strokeWidth=\"1\"\n />\n {previousPath && (\n <path\n d={previousPath}\n stroke={C.neutral400}\n strokeWidth=\"1.5\"\n strokeDasharray=\"4 4\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n {currentPath && (\n <path\n d={currentPath}\n stroke={C.black}\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n {/* markers */}\n {showPrevious &&\n dots(previousSeries).map((p, i) => (\n <circle\n key={`prev-${i}`}\n cx={p.x}\n cy={p.y}\n r={3}\n fill={C.white}\n stroke={C.neutral400}\n strokeWidth=\"1.5\"\n />\n ))}\n {dots(currentSeries).map((p, i) => (\n <circle\n key={`cur-${i}`}\n cx={p.x}\n cy={p.y}\n r={3}\n fill={C.white}\n stroke={C.black}\n strokeWidth=\"1.5\"\n />\n ))}\n </svg>\n {/* Legend — only renders when the host provides labels for the series. */}\n {(legendCurrentLabel || (showPrevious && legendPreviousLabel)) && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 24,\n marginTop: 8,\n fontFamily: FONT_DISPLAY,\n fontSize: 11,\n color: C.ink,\n }}\n >\n {legendCurrentLabel && (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <span style={{ width: 20, height: 0, borderTop: `2px solid ${C.black}` }} />\n {legendCurrentLabel}\n </span>\n )}\n {showPrevious && legendPreviousLabel && (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <span\n style={{\n width: 20,\n height: 0,\n borderTop: `2px dashed ${C.neutral400}`,\n }}\n />\n {legendPreviousLabel}\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// Section heading: small icon-in-circle on the left, bold title, optional\n// trailing count badge on the right, and a hairline bottom divider. Used for\n// \"Co-occurring Signals\" and \"Evidence Samples\" — the same shape repeats in\n// both (matches Figma node 4010:1423).\nfunction SectionHeading({ icon: Icon, title, count }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n width: \"100%\",\n paddingBottom: 16,\n borderBottom: `1px solid ${C.border}`,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"#F3F7F7\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={20} color={C.ink} strokeWidth={1.75} />\n </div>\n <span\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 700,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n {count != null && count !== \"\" && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.muted,\n }}\n >\n {count}\n </span>\n )}\n </div>\n );\n}\n\n// Two-column list row: label on the left, value (or rate) on the right.\n// Used inside the Co-occurring Signals / Evidence Samples panels.\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"10px 0\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n lineHeight: 1.4,\n gap: 16,\n }}\n >\n <span style={{ color: C.ink, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {label}\n </span>\n <span style={{ color: C.muted, whiteSpace: \"nowrap\" }}>{value}</span>\n </div>\n );\n}\n\nfunction TwoColumnList({ items = [] }) {\n if (!items.length) {\n return (\n <div\n style={{ padding: \"12px 0\", fontFamily: FONT_DISPLAY, fontSize: 13, color: C.muted }}\n >\n No items available.\n </div>\n );\n }\n const half = Math.ceil(items.length / 2);\n const left = items.slice(0, half);\n const right = items.slice(half);\n return (\n <div style={{ display: \"flex\", gap: 24 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {left.map((row, i) => (\n <PercentRow key={`l-${i}`} {...row} />\n ))}\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {right.map((row, i) => (\n <PercentRow key={`r-${i}`} {...row} />\n ))}\n </div>\n </div>\n );\n}\n\n// Compass score dot rating used in the Recent Interactions table.\nfunction CompassDots({ value = 0, max = 5 }) {\n const v = typeof value === \"number\" ? value : parseFloat(value) || 0;\n const full = Math.floor(v);\n const hasPartial = v % 1 > 0 && full < max;\n return (\n <div style={{ display: \"inline-flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{ width: 10, height: 10, borderRadius: \"50%\", background: C.black }}\n />\n );\n }\n if (i === full && hasPartial) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <span style={{ width: 6, height: 6, borderRadius: \"50%\", background: C.black }} />\n </span>\n );\n }\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.white,\n border: `1px solid ${C.border}`,\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_AGENT_BREAKDOWN_COLUMNS = [\n { id: \"agent\", label: \"Agent\", width: 250, sortable: true, filterable: true },\n {\n id: \"fireCount\",\n label: \"Fire Count\",\n width: 174,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"totalCalls\",\n label: \"Total Calls\",\n width: 181,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"rate\",\n label: \"Rate\",\n width: 183,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"avgStrength\",\n label: \"Avg Strength\",\n width: 172,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n];\n\nexport const DEFAULT_RECENT_INTERACTION_COLUMNS = [\n { id: \"dateTime\", label: \"Date & Time\", width: 212, sortable: true },\n { id: \"agent\", label: \"Agent\", width: 224, sortable: true, filterable: true },\n { id: \"title\", label: \"Title\", width: 298, sortable: true, filterable: true },\n {\n id: \"strength\",\n label: \"Strength\",\n width: 172,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 183,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => {\n const num = typeof value === \"number\" ? value : parseFloat(value) || 0;\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12 }}>\n <span style={{ minWidth: 32 }}>{value}</span>\n <CompassDots value={num} />\n </span>\n );\n },\n },\n];\n\nexport default function SignalDetailsPage({\n className = \"\",\n // Header\n signalName = \"\",\n signalSubtitle = \"\",\n onBack,\n // Date controls\n dateRangeLabel = \"\",\n rangeOptions = DEFAULT_RANGE_OPTIONS,\n selectedWindow = \"30d\",\n onWindowChange,\n dateRangePicker,\n dateRange,\n onDateRangeChange,\n onExport,\n // KPI strip — primary tiles\n fireRateStat = { value: \"\", delta: \"\", label: \"\" },\n fireCountStat = { value: \"\", delta: \"\", label: \"\" },\n // Outcome correlation tile (3 sub-cells)\n outcomeCorrelation = {\n title: \"\",\n present: { value: \"\", caption: \"\", sub: \"\" },\n absent: { value: \"\", caption: \"\", sub: \"\" },\n impact: { value: \"\", caption: \"\", sub: \"\" },\n },\n // Fire Rate Trend chart\n chartTitle = \"\",\n chartLegendCurrentLabel = \"\",\n chartLegendPreviousLabel = \"\",\n chartYLabels = [],\n fireRateTrend = { currentSeries: [], previousSeries: [] },\n chartViewOptions = [],\n chartView,\n onChartViewChange,\n // Agent breakdown table\n agentBreakdownRows = [],\n agentBreakdownColumns = DEFAULT_AGENT_BREAKDOWN_COLUMNS,\n agentBreakdownTitle = \"\",\n onAgentClick,\n onAgentBreakdownVisibleColumnsChange,\n agentBreakdownInitialPageSize = 10,\n // Co-occurring signals\n coOccurringTitle = \"\",\n coOccurringItems = [],\n // Evidence samples\n evidenceTitle = \"\",\n evidenceItems = [],\n // Recent interactions table\n recentInteractions = [],\n recentInteractionColumns = DEFAULT_RECENT_INTERACTION_COLUMNS,\n recentInteractionsTitle = \"\",\n onInteractionClick,\n onRecentInteractionsVisibleColumnsChange,\n recentInteractionsInitialPageSize = 10,\n // Server-side pagination pass-through for both tables (optional).\n agentBreakdownTotal = null,\n agentBreakdownPage = null,\n agentBreakdownPageSize = null,\n onAgentBreakdownPageChange,\n onAgentBreakdownPageSizeChange,\n recentInteractionsTotal = null,\n recentInteractionsPage = null,\n recentInteractionsPageSize = null,\n onRecentInteractionsPageChange,\n onRecentInteractionsPageSizeChange,\n}) {\n // Internal fallback for the custom date range, matching PerformancePanel /\n // SignalsListPage so the time-range chips can become mutually exclusive with\n // a committed custom range.\n const [internalDateRange, setInternalDateRange] = React.useState(null);\n const effectiveDateRange = dateRange !== undefined ? dateRange : internalDateRange;\n const customRangeActive = !!(effectiveDateRange?.from && effectiveDateRange?.to);\n\n const handleDateRangeChange = (range) => {\n setInternalDateRange(range);\n onDateRangeChange?.(range);\n };\n const handleWindowChange = (id) => {\n setInternalDateRange(null);\n onDateRangeChange?.(null);\n onWindowChange?.(id);\n };\n\n const dateLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : dateRangeLabel || computeWindowLabel(selectedWindow);\n\n const [internalChartView, setInternalChartView] = React.useState(\n chartView ?? chartViewOptions[0]?.id ?? null,\n );\n const effectiveChartView = onChartViewChange ? chartView : internalChartView;\n const handleChartViewChange = (v) => {\n if (!onChartViewChange) setInternalChartView(v);\n onChartViewChange?.(v);\n };\n\n // Whether the previous-period line is drawn is driven by the option the\n // user picks. Each option in `chartViewOptions` may carry `showPrevious`;\n // missing or undefined falls back to true so the dual-series chart still\n // renders when the host hasn't customised the option set.\n const activeChartOption = chartViewOptions.find((o) => o.id === effectiveChartView);\n const showPreviousSeries =\n activeChartOption?.showPrevious === undefined\n ? true\n : !!activeChartOption.showPrevious;\n\n return (\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_DISPLAY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n padding: \"12px 32px 32px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 24,\n }}\n >\n {/* Header — back arrow + title + date controls + Export */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 12,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n aria-label=\"Back\"\n onClick={onBack}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: C.ink,\n padding: 0,\n flexShrink: 0,\n }}\n >\n <ArrowLeft size={20} strokeWidth={1.75} />\n </button>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n paddingLeft: 16,\n borderLeft: `1px solid ${C.border}`,\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 22,\n fontWeight: 500,\n color: C.ink,\n margin: 0,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {signalName}\n </h1>\n {signalSubtitle && (\n <span\n style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.muted, lineHeight: 1.2 }}\n >\n {signalSubtitle}\n </span>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\", flexWrap: \"wrap\" }}>\n {dateLabel && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n marginRight: 6,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {dateLabel}\n </span>\n )}\n {rangeOptions.map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => handleWindowChange(opt.id)}\n />\n ))}\n {dateRangePicker ? (\n dateRangePicker\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/*\n <button\n type=\"button\"\n onClick={() => onExport?.()}\n disabled={!onExport}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: `1px solid ${C.neutralBorder}`,\n background: C.white,\n cursor: onExport ? \"pointer\" : \"not-allowed\",\n opacity: onExport ? 1 : 0.5,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: C.neutral800,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n */}\n </div>\n </div>\n\n {/* KPI strip */}\n <div style={{ display: \"flex\", gap: 24, alignItems: \"stretch\" }}>\n <KpiCard\n value={fireRateStat.value}\n delta={fireRateStat.delta}\n label={fireRateStat.label}\n style={{ width: 272, flexShrink: 0 }}\n />\n <KpiCard\n value={fireCountStat.value}\n delta={fireCountStat.delta}\n label={fireCountStat.label}\n style={{ width: 272, flexShrink: 0 }}\n />\n <OutcomeCorrelationCard\n title={outcomeCorrelation.title}\n present={outcomeCorrelation.present}\n absent={outcomeCorrelation.absent}\n impact={outcomeCorrelation.impact}\n />\n </div>\n\n {/* Fire Rate Trend chart card */}\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n <span\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {chartTitle}\n </span>\n {chartViewOptions.length > 0 && (\n <ViewBySelect\n value={effectiveChartView}\n options={chartViewOptions}\n onChange={handleChartViewChange}\n />\n )}\n </div>\n <FireRateTrendChart\n currentSeries={fireRateTrend.currentSeries || []}\n previousSeries={fireRateTrend.previousSeries || []}\n yLabels={chartYLabels}\n showPrevious={showPreviousSeries}\n legendCurrentLabel={chartLegendCurrentLabel}\n legendPreviousLabel={chartLegendPreviousLabel}\n />\n </div>\n\n {/* By Agent table — title overlaps DataTable2's toolbar (which already\n renders the Columns button) so the row reads as one in the design. */}\n <div style={{ position: \"relative\" }}>\n {agentBreakdownTitle && (\n <span\n style={{\n position: \"absolute\",\n top: 14,\n left: 4,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 20,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n pointerEvents: \"none\",\n }}\n >\n {agentBreakdownTitle}\n </span>\n )}\n <DataTable2\n data={agentBreakdownRows}\n columns={agentBreakdownColumns}\n initialPageSize={agentBreakdownInitialPageSize}\n onRowClick={onAgentClick}\n onVisibleColumnsChange={onAgentBreakdownVisibleColumnsChange}\n totalCount={agentBreakdownTotal}\n page={agentBreakdownPage}\n pageSize={agentBreakdownPageSize}\n onPageChange={onAgentBreakdownPageChange}\n onPageSizeChange={onAgentBreakdownPageSizeChange}\n />\n </div>\n\n {/* Co-occurring Signals */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Share2} title={coOccurringTitle} />\n <TwoColumnList items={coOccurringItems} />\n </div>\n\n {/* Evidence Samples */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={FileText} title={evidenceTitle} />\n <TwoColumnList items={evidenceItems} />\n </div>\n\n {/* Recent Interactions table — same heading-overlap pattern as By Agent. */}\n <div style={{ position: \"relative\" }}>\n {recentInteractionsTitle && (\n <span\n style={{\n position: \"absolute\",\n top: 14,\n left: 0,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 20,\n fontWeight: 600,\n color: C.ink,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n pointerEvents: \"none\",\n }}\n >\n {recentInteractionsTitle}\n </span>\n )}\n <DataTable2\n data={recentInteractions}\n columns={recentInteractionColumns}\n initialPageSize={recentInteractionsInitialPageSize}\n onRowClick={onInteractionClick}\n onVisibleColumnsChange={onRecentInteractionsVisibleColumnsChange}\n totalCount={recentInteractionsTotal}\n page={recentInteractionsPage}\n pageSize={recentInteractionsPageSize}\n onPageChange={onRecentInteractionsPageChange}\n onPageSizeChange={onRecentInteractionsPageSizeChange}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { CalendarDays, Download } from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"../performance/PerformancePanel\";\nimport SignalDetailsPage from \"./SignalDetailsPage\";\n\nconst EMPTY_STAT = { value: \"\", label: \"\", trend: \"up\" };\n\nconst C = {\n ink: \"#2E3236\",\n muted: \"#808183\",\n border: \"#D9D9D9\",\n borderSubtle: \"#E6E6E6\",\n black: \"#0B0B0B\",\n white: \"#FFFFFF\",\n neutralBorder: \"#BFBFBF\",\n neutralLight: \"#E6E6E6\",\n neutral600: \"#676767\",\n neutral400: \"#989898\",\n fillTrack: \"#EFEFEF\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\n// Sparkline shape lifted from PerformancePanel so this page stays\n// self-contained — the design uses the same KPI card visual.\nfunction Sparkline({ trend = \"up\", width = 49.618, height = 35 }) {\n const id = React.useId();\n const linePath =\n \"M1.00049 13.5213C7.85975 11.7032 8.88149 4.73912 13.7838 4.73912C19.8344 4.73912 23.6237 17.166 29.1281 17.166C34.5998 17.166 37.4149 4.88121 43.4004 8.61051C47.9764 11.4616 50.6186 1.00024 50.6186 1.00024\";\n const areaPath =\n \"M1.00049 16.692C8.88149 15.6975 8.88149 7.79403 13.7838 7.79403C19.8344 7.79403 23.6237 21.4034 29.1281 21.4034C34.5998 21.4034 37.4149 8.93821 43.4004 12.7223C47.9764 15.6152 50.6186 5.00024 50.6186 5.00024V36.0002C50.6186 36.0002 10.8223 36.0002 1.00049 36.0002C1.00049 28.8653 1.00049 19.4871 1.00049 16.692Z\";\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 52 36\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n transform: trend === \"down\" ? \"scaleX(-1)\" : undefined,\n }}\n >\n <defs>\n <linearGradient\n id={`spark-${id}`}\n x1=\"9.96776\"\n y1=\"16.2053\"\n x2=\"9.96776\"\n y2=\"36.0002\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor={C.ink} />\n <stop offset=\"1\" stopColor={C.white} stopOpacity=\"0.01\" />\n </linearGradient>\n </defs>\n <path\n d={areaPath}\n fill={`url(#spark-${id})`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n opacity=\"0.1\"\n />\n <path\n d={linePath}\n stroke={C.ink}\n strokeWidth=\"2\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray={trend === \"down\" ? \"2 4\" : undefined}\n />\n </svg>\n );\n}\n\nfunction TrendArrow({ direction = \"up\", color = C.muted, size = 18 }) {\n const upPath =\n \"M12.4167 0.75H17.4167M17.4167 0.75V5.75M17.4167 0.75L10.3333 7.83333L6.16667 3.66667L0.75 9.08333\";\n const downPath =\n \"M12.4167 9.25H17.4167M17.4167 9.25V4.25M17.4167 9.25L10.3333 2.16667L6.16667 6.33333L0.75 0.91667\";\n return (\n <svg\n width={size}\n height={(size * 9.5) / 18}\n viewBox=\"0 0 19 10\"\n fill=\"none\"\n style={{ flexShrink: 0 }}\n >\n <path\n d={direction === \"up\" ? upPath : downPath}\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction StatCard({ value, label, trend = \"up\", style = {} }) {\n return (\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n boxSizing: \"border-box\",\n ...style,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\" }}>\n <Sparkline trend={trend} />\n <TrendArrow direction={trend} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, marginTop: 8 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 500,\n lineHeight: \"1.2\",\n color: C.ink,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_DISPLAY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>\n {label}\n </div>\n </div>\n </div>\n );\n}\n\nfunction RangeChip({ label, active = false, onClick }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n height: 32,\n minWidth: 31,\n padding: \"0 12px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.borderSubtle}`,\n background: active ? C.black : C.white,\n color: active ? C.white : C.black,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\nconst DEFAULT_RANGE_OPTIONS = [\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n];\n\nconst RANGE_TO_MS = {\n \"8h\": 8 * 60 * 60 * 1000,\n \"1d\": 24 * 60 * 60 * 1000,\n \"7d\": 7 * 24 * 60 * 60 * 1000,\n \"30d\": 30 * 24 * 60 * 60 * 1000,\n};\n\nfunction formatLocalDate(date) {\n return date.toLocaleDateString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"numeric\",\n });\n}\n\nfunction computeWindowLabel(windowId) {\n const ms = RANGE_TO_MS[windowId];\n if (!ms) return \"\";\n const to = new Date();\n const from = new Date(to.getTime() - ms);\n return `${formatLocalDate(from)} – ${formatLocalDate(to)}`;\n}\n\n// Fire Rate progress bar — number on the left, fill bar on the right.\n// Accepts numeric percentage (0–100) or a string like \"25%\".\nfunction FireRateBar({ value }) {\n const num =\n typeof value === \"number\"\n ? value\n : parseFloat(String(value ?? \"\").replace(\"%\", \"\")) || 0;\n const pct = Math.max(0, Math.min(100, num));\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12, width: \"100%\" }}>\n <span style={{ minWidth: 32, color: C.ink, fontVariantNumeric: \"tabular-nums\" }}>\n {pct}%\n </span>\n <span\n style={{\n flex: 1,\n height: 4,\n background: C.fillTrack,\n borderRadius: 2,\n overflow: \"hidden\",\n minWidth: 40,\n maxWidth: 80,\n }}\n >\n <span\n style={{\n display: \"block\",\n width: `${pct}%`,\n height: \"100%\",\n background: C.black,\n borderRadius: 2,\n }}\n />\n </span>\n </span>\n );\n}\n\n// Delta cell — trend arrow + signed numeric value. Accepts a number or a\n// string like \"+0.2\" / \"-1.2\".\nfunction DeltaCell({ value }) {\n if (value == null || value === \"\") return null;\n const num =\n typeof value === \"number\" ? value : parseFloat(String(value).replace(/[^-\\d.]/g, \"\"));\n const isFinite = Number.isFinite(num);\n const up = !isFinite || num >= 0;\n const display =\n typeof value === \"string\"\n ? value\n : isFinite\n ? `${num >= 0 ? \"+\" : \"\"}${num.toFixed(1)}`\n : String(value);\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <TrendArrow direction={up ? \"up\" : \"down\"} color={C.ink} size={16} />\n <span style={{ fontVariantNumeric: \"tabular-nums\" }}>{display}</span>\n </span>\n );\n}\n\n// Signed numeric (no arrow) — used for Compass Score in this design.\nfunction SignedNumber({ value }) {\n if (value == null || value === \"\") return null;\n const num =\n typeof value === \"number\" ? value : parseFloat(String(value).replace(/[^-\\d.]/g, \"\"));\n if (!Number.isFinite(num)) return <span>{String(value)}</span>;\n const sign = num >= 0 ? \"+\" : \"\";\n const display = typeof value === \"string\" && /^[+-]/.test(value) ? value : `${sign}${num}`;\n return <span style={{ fontVariantNumeric: \"tabular-nums\" }}>{display}</span>;\n}\n\nexport const DEFAULT_SIGNAL_COLUMNS = [\n { id: \"signal\", label: \"Signals\", width: 250, sortable: true, filterable: true },\n {\n id: \"fireRate\",\n label: \"Fire Rate\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <FireRateBar value={value} />,\n },\n {\n id: \"fires\",\n label: \"Fires\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"delta\",\n label: \"Delta\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <DeltaCell value={value} />,\n },\n {\n id: \"avgStrength\",\n label: \"Avg Strength\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"compass\",\n label: \"Agent Lift\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <SignedNumber value={value} />,\n },\n { id: \"topAgent\", label: \"Top Agent\", width: 178, sortable: true, filterable: true },\n];\n\nexport default function SignalsListPage({\n className = \"\",\n // Header\n title = \"\",\n dateRangeLabel = \"\",\n // KPI strip\n totalInteractionsStat = EMPTY_STAT,\n activeSignalsStat = EMPTY_STAT,\n // Table section heading — e.g. \"80 Active Signals\". When omitted, the\n // component derives a label from `activeSignalsStat.value`.\n activeSignalsHeading = \"\",\n // Time-range chips (8h / 1d / 7d / 30d). Override `rangeOptions` to customize.\n // `selectedWindow` is the currently-active option id; `onWindowChange(id)`\n // fires when the user picks a new chip.\n rangeOptions = DEFAULT_RANGE_OPTIONS,\n selectedWindow = \"30d\",\n onWindowChange,\n // Host-provided date-range picker node. Should render its own trigger button\n // and popover. When provided, replaces the built-in default picker.\n dateRangePicker,\n // Used by the built-in default picker when `dateRangePicker` is not provided.\n // `dateRange` is `{ from, to }` (Date objects); `onDateRangeChange` receives\n // the same shape when the user clicks Apply.\n dateRange,\n onDateRangeChange,\n // Table data\n signals = [],\n signalColumns = DEFAULT_SIGNAL_COLUMNS,\n initialPageSize = 10,\n onSignalClick,\n onVisibleColumnsChange,\n // Server-side pagination (optional pass-through to DataTable2).\n signalsTotal = null,\n signalsPage = null,\n signalsPageSize = null,\n onSignalsPageChange,\n onSignalsPageSizeChange,\n // Export button\n onExport,\n // Labels used by the auto-drill-down (when the host doesn't supply\n // `onSignalClick`). Empty by default so host apps don't see demo copy.\n fireRateStatLabel = \"\",\n fireCountStatLabel = \"\",\n}) {\n // Internal fallback for the custom date range when the host doesn't pass\n // `dateRange` / `onDateRangeChange`. Lifted here so the time-range chips can\n // become mutually exclusive with a committed custom range — same pattern as\n // PerformancePanel.\n const [internalDateRange, setInternalDateRange] = React.useState(null);\n const effectiveDateRange = dateRange !== undefined ? dateRange : internalDateRange;\n const customRangeActive = !!(effectiveDateRange?.from && effectiveDateRange?.to);\n\n const handleDateRangeChange = (range) => {\n setInternalDateRange(range);\n onDateRangeChange?.(range);\n };\n const handleWindowChange = (id) => {\n // Picking a chip cancels any active custom range so only one mode is\n // highlighted at a time.\n setInternalDateRange(null);\n onDateRangeChange?.(null);\n onWindowChange?.(id);\n };\n\n // Heading label: prefer the explicit override, otherwise compose from the\n // KPI value + label the host passed. Stays empty when neither is provided.\n const headingLabel =\n activeSignalsHeading ||\n (activeSignalsStat.value !== \"\" && activeSignalsStat.value != null\n ? `${activeSignalsStat.value} ${activeSignalsStat.label || \"\"}`.trim()\n : \"\");\n\n const dateLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : dateRangeLabel || computeWindowLabel(selectedWindow);\n\n // Drill-down state — when a row is clicked we surface SignalDetailsPage on\n // top of the list. If the host passes `onSignalClick` they own navigation\n // and we don't open the internal panel.\n const [selectedSignal, setSelectedSignal] = React.useState(null);\n const handleRowClick = (row) => {\n if (onSignalClick) {\n onSignalClick(row);\n return;\n }\n setSelectedSignal(row);\n };\n\n // Map a list row to the details-page KPI shape. The list only knows a\n // handful of fields, so the details panel mostly renders empty until the\n // host wires real data via onSignalClick — but at least the headline KPIs\n // and the signal name carry across so the drill-down feels continuous.\n const detailsProps = selectedSignal\n ? {\n signalName: selectedSignal.signal ?? \"\",\n fireRateStat: {\n value:\n selectedSignal.fireRate != null && selectedSignal.fireRate !== \"\"\n ? `${selectedSignal.fireRate}%`\n : \"\",\n delta: selectedSignal.delta ?? \"\",\n label: fireRateStatLabel,\n },\n fireCountStat: {\n value:\n typeof selectedSignal.fires === \"number\"\n ? selectedSignal.fires.toLocaleString()\n : selectedSignal.fires ?? \"\",\n delta: \"\",\n label: fireCountStatLabel,\n },\n selectedWindow,\n onWindowChange,\n dateRange: effectiveDateRange,\n onDateRangeChange: handleDateRangeChange,\n rangeOptions,\n dateRangePicker,\n onExport,\n }\n : null;\n\n return (\n <>\n {selectedSignal && (\n <SignalDetailsPage\n className={className}\n {...detailsProps}\n onBack={() => setSelectedSignal(null)}\n />\n )}\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_DISPLAY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n padding: \"12px 32px 32px\",\n flexDirection: \"column\",\n gap: 24,\n // Hide (don't unmount) while drilling into a signal so DataTable2's\n // internal filter / sort / pagination state survives the round trip.\n display: selectedSignal ? \"none\" : \"flex\",\n }}\n >\n {/* Header row — title on the left, date controls + export on the right. */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 12,\n flexWrap: \"wrap\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 24,\n fontWeight: 500,\n color: C.ink,\n margin: 0,\n lineHeight: \"1.2\",\n letterSpacing: \"-0.01em\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {title}\n </h1>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\", flexWrap: \"wrap\" }}>\n {dateLabel && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n marginRight: 6,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {dateLabel}\n </span>\n )}\n {rangeOptions.map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => handleWindowChange(opt.id)}\n />\n ))}\n {dateRangePicker ? (\n dateRangePicker\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/*\n <button\n type=\"button\"\n onClick={() => onExport?.()}\n disabled={!onExport}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: `1px solid ${C.neutralBorder}`,\n background: C.white,\n cursor: onExport ? \"pointer\" : \"not-allowed\",\n opacity: onExport ? 1 : 0.5,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: \"#323232\",\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n */}\n </div>\n </div>\n\n {/* KPI strip — two stat cards anchored to the left of the row. */}\n <div style={{ display: \"flex\", gap: 24 }}>\n <StatCard\n value={totalInteractionsStat.value}\n label={totalInteractionsStat.label}\n trend={totalInteractionsStat.trend}\n style={{ width: 264, flexShrink: 0 }}\n />\n <StatCard\n value={activeSignalsStat.value}\n label={activeSignalsStat.label}\n trend={activeSignalsStat.trend}\n style={{ width: 264, flexShrink: 0 }}\n />\n </div>\n\n {/* Table section. The heading sits on the same row as DataTable2's\n built-in toolbar (which renders the Columns button on the right),\n matching the Figma layout. Absolute positioning lets the heading\n overlap DataTable2's sticky toolbar without restructuring it. */}\n <div\n style={{\n position: \"relative\",\n paddingTop: 8,\n borderTop: `1px solid ${C.border}`,\n }}\n >\n {headingLabel && (\n <span\n style={{\n position: \"absolute\",\n top: 24,\n left: 0,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: C.ink,\n fontWeight: 500,\n lineHeight: 1.2,\n pointerEvents: \"none\",\n }}\n >\n {headingLabel}\n </span>\n )}\n\n <DataTable2\n data={signals}\n columns={signalColumns}\n initialPageSize={initialPageSize}\n onRowClick={handleRowClick}\n onVisibleColumnsChange={onVisibleColumnsChange}\n totalCount={signalsTotal}\n page={signalsPage}\n pageSize={signalsPageSize}\n onPageChange={onSignalsPageChange}\n onPageSizeChange={onSignalsPageSizeChange}\n />\n </div>\n </div>\n </>\n );\n}\n"],"names":["C","FONT_DISPLAY","formatLocalDate","date","parsed","DEFAULT_RANGE_OPTIONS","RANGE_TO_MS","computeWindowLabel","windowId","ms","to","from","RangeChip","label","active","onClick","jsx","KpiCard","value","delta","style","jsxs","OutcomeCorrelationCard","title","present","absent","impact","OutcomeCell","caption","sub","ViewBySelect","options","onChange","open","setOpen","React","triggerRef","popoverRef","handler","e","_a","_b","selected","o","v","ChevronDown","opt","isSelected","Check","FireRateTrendChart","currentSeries","previousSeries","yLabels","height","showPrevious","legendCurrentLabel","legendPreviousLabel","innerHeight","PADDING_LEFT","PADDING_RIGHT","viewWidth","innerWidth","allValues","yMin","yMax","ySpan","sy","y","seriesToPath","series","step","i","currentPath","previousPath","dots","l","yPos","p","SectionHeading","Icon","count","PercentRow","TwoColumnList","items","half","left","right","row","CompassDots","max","full","hasPartial","_","DEFAULT_AGENT_BREAKDOWN_COLUMNS","DEFAULT_RECENT_INTERACTION_COLUMNS","num","SignalDetailsPage","className","signalName","signalSubtitle","onBack","dateRangeLabel","rangeOptions","selectedWindow","onWindowChange","dateRangePicker","dateRange","onDateRangeChange","onExport","fireRateStat","fireCountStat","outcomeCorrelation","chartTitle","chartLegendCurrentLabel","chartLegendPreviousLabel","chartYLabels","fireRateTrend","chartViewOptions","chartView","onChartViewChange","agentBreakdownRows","agentBreakdownColumns","agentBreakdownTitle","onAgentClick","onAgentBreakdownVisibleColumnsChange","agentBreakdownInitialPageSize","coOccurringTitle","coOccurringItems","evidenceTitle","evidenceItems","recentInteractions","recentInteractionColumns","recentInteractionsTitle","onInteractionClick","onRecentInteractionsVisibleColumnsChange","recentInteractionsInitialPageSize","agentBreakdownTotal","agentBreakdownPage","agentBreakdownPageSize","onAgentBreakdownPageChange","onAgentBreakdownPageSizeChange","recentInteractionsTotal","recentInteractionsPage","recentInteractionsPageSize","onRecentInteractionsPageChange","onRecentInteractionsPageSizeChange","internalDateRange","setInternalDateRange","effectiveDateRange","customRangeActive","handleDateRangeChange","range","handleWindowChange","id","dateLabel","internalChartView","setInternalChartView","effectiveChartView","handleChartViewChange","activeChartOption","showPreviousSeries","ArrowLeft","CalendarDays","DateRangeButton","DataTable2","Share2","FileText","EMPTY_STAT","Sparkline","trend","width","linePath","areaPath","TrendArrow","direction","color","size","upPath","downPath","StatCard","FireRateBar","pct","DeltaCell","isFinite","up","display","SignedNumber","sign","DEFAULT_SIGNAL_COLUMNS","SignalsListPage","totalInteractionsStat","activeSignalsStat","activeSignalsHeading","signals","signalColumns","initialPageSize","onSignalClick","onVisibleColumnsChange","signalsTotal","signalsPage","signalsPageSize","onSignalsPageChange","onSignalsPageSizeChange","fireRateStatLabel","fireCountStatLabel","headingLabel","selectedSignal","setSelectedSignal","handleRowClick","detailsProps","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Signals.es.js","sources":["../../src/components/Signals/SignalDetailsPage.jsx","../../src/components/Signals/SignalsListPage.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport {\n ArrowLeft,\n CalendarDays,\n ChevronDown,\n Check,\n Download,\n Share2,\n FileText,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"../performance/PerformancePanel\";\nimport { computeWindowLabel, formatLocalDate } from \"../performance/performanceRangeFormat\";\n\nconst C = {\n ink: \"#2E3236\",\n muted: \"#808183\",\n border: \"#D9D9D9\",\n borderSubtle: \"#E6E6E6\",\n black: \"#0B0B0B\",\n white: \"#FFFFFF\",\n neutralBorder: \"#BFBFBF\",\n neutralLight: \"#E6E6E6\",\n neutral800: \"#323232\",\n neutral600: \"#676767\",\n neutral400: \"#989898\",\n fillTrack: \"#EFEFEF\",\n beige: \"rgba(243, 241, 229, 0.4)\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\nconst DEFAULT_RANGE_OPTIONS = [\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n];\n\nfunction RangeChip({ label, active = false, onClick }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n height: 32,\n minWidth: 31,\n padding: \"0 12px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.borderSubtle}`,\n background: active ? C.black : C.white,\n color: active ? C.white : C.black,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\n// KPI card that mirrors the Figma \"Total Calls\" tile: a large value, a small\n// muted delta hint inline to the right, and a label underneath.\nfunction KpiCard({ value, delta, label, style = {} }) {\n return (\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n boxSizing: \"border-box\",\n ...style,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8, minHeight: 36 }}>\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 500,\n color: C.ink,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.1,\n }}\n >\n {value}\n </span>\n {delta != null && delta !== \"\" && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n fontWeight: 500,\n color: C.muted,\n whiteSpace: \"nowrap\",\n }}\n >\n {delta}\n </span>\n )}\n </div>\n <span style={{ fontFamily: FONT_DISPLAY, fontSize: 13, color: C.ink, lineHeight: 1.2 }}>\n {label}\n </span>\n </div>\n );\n}\n\n// Triple sub-card for the \"Outcome Correlation\" tile. Each cell shows a primary\n// value plus a two-line caption. All labels are host-provided so the library\n// stays free of demo copy.\nfunction OutcomeCorrelationCard({\n title = \"\",\n present = { value: \"\", caption: \"\", sub: \"\" },\n absent = { value: \"\", caption: \"\", sub: \"\" },\n impact = { value: \"\", caption: \"\", sub: \"\" },\n style = {},\n}) {\n return (\n <div\n style={{\n flex: 1,\n background: C.beige,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n boxSizing: \"border-box\",\n minWidth: 0,\n ...style,\n }}\n >\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n <div style={{ display: \"flex\", alignItems: \"stretch\", gap: 24, minWidth: 0 }}>\n <OutcomeCell {...present} />\n <OutcomeCell {...absent} />\n <OutcomeCell {...impact} />\n </div>\n </div>\n );\n}\n\nfunction OutcomeCell({ value, caption, sub }) {\n return (\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n }}\n >\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 22,\n fontWeight: 500,\n color: C.muted,\n letterSpacing: \"-0.01em\",\n lineHeight: 1.1,\n }}\n >\n {value}\n </span>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.ink, lineHeight: 1.2 }}>\n {caption}\n </span>\n {sub && (\n <span\n style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.neutral600, lineHeight: 1.2 }}\n >\n {sub}\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// Dropdown used by the Fire Rate Trend chart card to pick a comparison view.\n// Matches the View-By pattern from PerformancePanel (anchored popover).\nfunction ViewBySelect({ value, options = [], onChange }) {\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef(null);\n const popoverRef = React.useRef(null);\n React.useEffect(() => {\n if (!open) return;\n const handler = (e) => {\n if (\n popoverRef.current?.contains(e.target) ||\n triggerRef.current?.contains(e.target)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open]);\n const selected = options.find((o) => o.id === value) || options[0];\n return (\n <div style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n ref={triggerRef}\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n height: 24,\n padding: \"0 8px 0 0\",\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n color: C.ink,\n }}\n >\n {selected?.label}\n <ChevronDown\n size={14}\n strokeWidth={1.75}\n style={{ transform: open ? \"rotate(180deg)\" : \"none\", transition: \"transform 120ms ease\" }}\n />\n </button>\n {open && (\n <div\n ref={popoverRef}\n role=\"listbox\"\n style={{\n position: \"absolute\",\n top: 28,\n right: 0,\n zIndex: 30,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n boxShadow: \"0 8px 24px rgba(11, 11, 11, 0.12)\",\n minWidth: 200,\n padding: 4,\n fontFamily: FONT_DISPLAY,\n }}\n >\n {options.map((opt) => {\n const isSelected = opt.id === value;\n return (\n <button\n key={opt.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onChange?.(opt.id);\n setOpen(false);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"8px 10px\",\n border: \"none\",\n background: isSelected ? C.borderSubtle : \"transparent\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n borderRadius: 6,\n }}\n >\n {isSelected ? (\n <Check size={16} color={C.ink} strokeWidth={1.75} />\n ) : (\n <span style={{ width: 16 }} />\n )}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// Two-series line chart (current + previous period). Series points are arrays\n// of y-numbers, equally spaced across the x-axis. The previous series is\n// rendered dashed; current is solid.\nfunction FireRateTrendChart({\n currentSeries = [],\n previousSeries = [],\n yLabels = [],\n height = 176,\n showPrevious = true,\n legendCurrentLabel = \"\",\n legendPreviousLabel = \"\",\n}) {\n const innerHeight = height - 8;\n const PADDING_LEFT = 32;\n const PADDING_RIGHT = 8;\n const viewWidth = 1080;\n const innerWidth = viewWidth - PADDING_LEFT - PADDING_RIGHT;\n\n const allValues = [...currentSeries, ...(showPrevious ? previousSeries : [])];\n const hasData = allValues.length > 0;\n if (!hasData) {\n return (\n <div\n style={{\n height,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontFamily: FONT_DISPLAY,\n fontSize: 12,\n color: C.muted,\n }}\n >\n No data\n </div>\n );\n }\n\n const yMin = Math.min(...allValues, 0);\n const yMax = Math.max(...allValues, 1);\n const ySpan = yMax - yMin || 1;\n const sy = (y) => 12 + ((yMax - y) / ySpan) * (innerHeight - 24);\n const seriesToPath = (series) => {\n if (!series.length) return \"\";\n const step = series.length > 1 ? innerWidth / (series.length - 1) : 0;\n return series\n .map((y, i) => `${i === 0 ? \"M\" : \"L\"}${PADDING_LEFT + i * step},${sy(y)}`)\n .join(\" \");\n };\n\n const currentPath = seriesToPath(currentSeries);\n const previousPath = showPrevious ? seriesToPath(previousSeries) : \"\";\n\n const dots = (series) =>\n series.map((y, i) => {\n const step = series.length > 1 ? innerWidth / (series.length - 1) : 0;\n return { x: PADDING_LEFT + i * step, y: sy(y) };\n });\n\n return (\n <div style={{ width: \"100%\" }}>\n <svg\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${viewWidth} ${height}`}\n preserveAspectRatio=\"none\"\n >\n {/* y-axis labels (top / middle / bottom) */}\n {yLabels.map((l, i) => {\n const yPos =\n 12 + (i / Math.max(1, yLabels.length - 1)) * (innerHeight - 24);\n return (\n <text\n key={l + i}\n x={0}\n y={yPos + 3}\n fontFamily={FONT_DISPLAY}\n fontSize=\"10\"\n fill={C.neutral800}\n >\n {l}\n </text>\n );\n })}\n {/* baseline */}\n <line\n x1={PADDING_LEFT}\n y1={innerHeight}\n x2={viewWidth - PADDING_RIGHT}\n y2={innerHeight}\n stroke={C.border}\n strokeWidth=\"1\"\n />\n {/* faint grid lines at top + middle */}\n <line\n x1={PADDING_LEFT}\n y1={12}\n x2={viewWidth - PADDING_RIGHT}\n y2={12}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 4\"\n strokeWidth=\"1\"\n />\n {previousPath && (\n <path\n d={previousPath}\n stroke={C.neutral400}\n strokeWidth=\"1.5\"\n strokeDasharray=\"4 4\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n {currentPath && (\n <path\n d={currentPath}\n stroke={C.black}\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n )}\n {/* markers */}\n {showPrevious &&\n dots(previousSeries).map((p, i) => (\n <circle\n key={`prev-${i}`}\n cx={p.x}\n cy={p.y}\n r={3}\n fill={C.white}\n stroke={C.neutral400}\n strokeWidth=\"1.5\"\n />\n ))}\n {dots(currentSeries).map((p, i) => (\n <circle\n key={`cur-${i}`}\n cx={p.x}\n cy={p.y}\n r={3}\n fill={C.white}\n stroke={C.black}\n strokeWidth=\"1.5\"\n />\n ))}\n </svg>\n {/* Legend — only renders when the host provides labels for the series. */}\n {(legendCurrentLabel || (showPrevious && legendPreviousLabel)) && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 24,\n marginTop: 8,\n fontFamily: FONT_DISPLAY,\n fontSize: 11,\n color: C.ink,\n }}\n >\n {legendCurrentLabel && (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <span style={{ width: 20, height: 0, borderTop: `2px solid ${C.black}` }} />\n {legendCurrentLabel}\n </span>\n )}\n {showPrevious && legendPreviousLabel && (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <span\n style={{\n width: 20,\n height: 0,\n borderTop: `2px dashed ${C.neutral400}`,\n }}\n />\n {legendPreviousLabel}\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// Section heading: small icon-in-circle on the left, bold title, optional\n// trailing count badge on the right, and a hairline bottom divider. Used for\n// \"Co-occurring Signals\" and \"Evidence Samples\" — the same shape repeats in\n// both (matches Figma node 4010:1423).\nfunction SectionHeading({ icon: Icon, title, count }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n width: \"100%\",\n paddingBottom: 16,\n borderBottom: `1px solid ${C.border}`,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"#F3F7F7\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={20} color={C.ink} strokeWidth={1.75} />\n </div>\n <span\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 700,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n {count != null && count !== \"\" && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.muted,\n }}\n >\n {count}\n </span>\n )}\n </div>\n );\n}\n\n// Two-column list row: label on the left, value (or rate) on the right.\n// Used inside the Co-occurring Signals / Evidence Samples panels.\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"10px 0\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n lineHeight: 1.4,\n gap: 16,\n }}\n >\n <span style={{ color: C.ink, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {label}\n </span>\n <span style={{ color: C.muted, whiteSpace: \"nowrap\" }}>{value}</span>\n </div>\n );\n}\n\nfunction TwoColumnList({ items = [] }) {\n if (!items.length) {\n return (\n <div\n style={{ padding: \"12px 0\", fontFamily: FONT_DISPLAY, fontSize: 13, color: C.muted }}\n >\n No items available.\n </div>\n );\n }\n const half = Math.ceil(items.length / 2);\n const left = items.slice(0, half);\n const right = items.slice(half);\n return (\n <div style={{ display: \"flex\", gap: 24 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {left.map((row, i) => (\n <PercentRow key={`l-${i}`} {...row} />\n ))}\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {right.map((row, i) => (\n <PercentRow key={`r-${i}`} {...row} />\n ))}\n </div>\n </div>\n );\n}\n\n// Compass score dot rating used in the Recent Interactions table.\nfunction CompassDots({ value = 0, max = 5 }) {\n const v = typeof value === \"number\" ? value : parseFloat(value) || 0;\n const full = Math.floor(v);\n const hasPartial = v % 1 > 0 && full < max;\n return (\n <div style={{ display: \"inline-flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{ width: 10, height: 10, borderRadius: \"50%\", background: C.black }}\n />\n );\n }\n if (i === full && hasPartial) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <span style={{ width: 6, height: 6, borderRadius: \"50%\", background: C.black }} />\n </span>\n );\n }\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.white,\n border: `1px solid ${C.border}`,\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_AGENT_BREAKDOWN_COLUMNS = [\n { id: \"agent\", label: \"Agent\", width: 250, sortable: true, filterable: true },\n {\n id: \"fireCount\",\n label: \"Fire Count\",\n width: 174,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"totalCalls\",\n label: \"Total Calls\",\n width: 181,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"rate\",\n label: \"Rate\",\n width: 183,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"avgStrength\",\n label: \"Avg Strength\",\n width: 172,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n];\n\nexport const DEFAULT_RECENT_INTERACTION_COLUMNS = [\n { id: \"dateTime\", label: \"Date & Time\", width: 212, sortable: true },\n { id: \"agent\", label: \"Agent\", width: 224, sortable: true, filterable: true },\n { id: \"title\", label: \"Title\", width: 298, sortable: true, filterable: true },\n {\n id: \"strength\",\n label: \"Strength\",\n width: 172,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 183,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => {\n const num = typeof value === \"number\" ? value : parseFloat(value) || 0;\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12 }}>\n <span style={{ minWidth: 32 }}>{value}</span>\n <CompassDots value={num} />\n </span>\n );\n },\n },\n];\n\nexport default function SignalDetailsPage({\n className = \"\",\n // Header\n signalName = \"\",\n signalSubtitle = \"\",\n onBack,\n // Date controls\n dateRangeLabel = \"\",\n rangeOptions = DEFAULT_RANGE_OPTIONS,\n selectedWindow = \"30d\",\n onWindowChange,\n dateRangePicker,\n dateRange,\n onDateRangeChange,\n onExport,\n // KPI strip — primary tiles\n fireRateStat = { value: \"\", delta: \"\", label: \"\" },\n fireCountStat = { value: \"\", delta: \"\", label: \"\" },\n // Outcome correlation tile (3 sub-cells)\n outcomeCorrelation = {\n title: \"\",\n present: { value: \"\", caption: \"\", sub: \"\" },\n absent: { value: \"\", caption: \"\", sub: \"\" },\n impact: { value: \"\", caption: \"\", sub: \"\" },\n },\n // Fire Rate Trend chart\n chartTitle = \"\",\n chartLegendCurrentLabel = \"\",\n chartLegendPreviousLabel = \"\",\n chartYLabels = [],\n fireRateTrend = { currentSeries: [], previousSeries: [] },\n chartViewOptions = [],\n chartView,\n onChartViewChange,\n // Agent breakdown table\n agentBreakdownRows = [],\n agentBreakdownColumns = DEFAULT_AGENT_BREAKDOWN_COLUMNS,\n agentBreakdownTitle = \"\",\n onAgentClick,\n onAgentBreakdownVisibleColumnsChange,\n agentBreakdownInitialPageSize = 10,\n // Co-occurring signals\n coOccurringTitle = \"\",\n coOccurringItems = [],\n // Evidence samples\n evidenceTitle = \"\",\n evidenceItems = [],\n // Recent interactions table\n recentInteractions = [],\n recentInteractionColumns = DEFAULT_RECENT_INTERACTION_COLUMNS,\n recentInteractionsTitle = \"\",\n onInteractionClick,\n onRecentInteractionsVisibleColumnsChange,\n recentInteractionsInitialPageSize = 10,\n // Server-side pagination pass-through for both tables (optional).\n agentBreakdownTotal = null,\n agentBreakdownPage = null,\n agentBreakdownPageSize = null,\n onAgentBreakdownPageChange,\n onAgentBreakdownPageSizeChange,\n recentInteractionsTotal = null,\n recentInteractionsPage = null,\n recentInteractionsPageSize = null,\n onRecentInteractionsPageChange,\n onRecentInteractionsPageSizeChange,\n}) {\n // Internal fallback for the custom date range, matching PerformancePanel /\n // SignalsListPage so the time-range chips can become mutually exclusive with\n // a committed custom range.\n const [internalDateRange, setInternalDateRange] = React.useState(null);\n const effectiveDateRange = dateRange !== undefined ? dateRange : internalDateRange;\n const customRangeActive = !!(effectiveDateRange?.from && effectiveDateRange?.to);\n\n const handleDateRangeChange = (range) => {\n setInternalDateRange(range);\n onDateRangeChange?.(range);\n };\n const handleWindowChange = (id) => {\n setInternalDateRange(null);\n onDateRangeChange?.(null);\n onWindowChange?.(id);\n };\n\n const dateLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : computeWindowLabel(selectedWindow) || dateRangeLabel;\n\n const [internalChartView, setInternalChartView] = React.useState(\n chartView ?? chartViewOptions[0]?.id ?? null,\n );\n const effectiveChartView = onChartViewChange ? chartView : internalChartView;\n const handleChartViewChange = (v) => {\n if (!onChartViewChange) setInternalChartView(v);\n onChartViewChange?.(v);\n };\n\n // Whether the previous-period line is drawn is driven by the option the\n // user picks. Each option in `chartViewOptions` may carry `showPrevious`;\n // missing or undefined falls back to true so the dual-series chart still\n // renders when the host hasn't customised the option set.\n const activeChartOption = chartViewOptions.find((o) => o.id === effectiveChartView);\n const showPreviousSeries =\n activeChartOption?.showPrevious === undefined\n ? true\n : !!activeChartOption.showPrevious;\n\n return (\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_DISPLAY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n padding: \"12px 32px 32px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 24,\n }}\n >\n {/* Header — back arrow + title + date controls + Export */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 12,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n aria-label=\"Back\"\n onClick={onBack}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n background: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n color: C.ink,\n padding: 0,\n flexShrink: 0,\n }}\n >\n <ArrowLeft size={20} strokeWidth={1.75} />\n </button>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n paddingLeft: 16,\n borderLeft: `1px solid ${C.border}`,\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 22,\n fontWeight: 500,\n color: C.ink,\n margin: 0,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {signalName}\n </h1>\n {signalSubtitle && (\n <span\n style={{ fontFamily: FONT_DISPLAY, fontSize: 12, color: C.muted, lineHeight: 1.2 }}\n >\n {signalSubtitle}\n </span>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\", flexWrap: \"wrap\" }}>\n {dateLabel && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n marginRight: 6,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {dateLabel}\n </span>\n )}\n {rangeOptions.map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => handleWindowChange(opt.id)}\n />\n ))}\n {dateRangePicker ? (\n dateRangePicker\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/*\n <button\n type=\"button\"\n onClick={() => onExport?.()}\n disabled={!onExport}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: `1px solid ${C.neutralBorder}`,\n background: C.white,\n cursor: onExport ? \"pointer\" : \"not-allowed\",\n opacity: onExport ? 1 : 0.5,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: C.neutral800,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n */}\n </div>\n </div>\n\n {/* KPI strip */}\n <div style={{ display: \"flex\", gap: 24, alignItems: \"stretch\" }}>\n <KpiCard\n value={fireRateStat.value}\n delta={fireRateStat.delta}\n label={fireRateStat.label}\n style={{ width: 272, flexShrink: 0 }}\n />\n <KpiCard\n value={fireCountStat.value}\n delta={fireCountStat.delta}\n label={fireCountStat.label}\n style={{ width: 272, flexShrink: 0 }}\n />\n <OutcomeCorrelationCard\n title={outcomeCorrelation.title}\n present={outcomeCorrelation.present}\n absent={outcomeCorrelation.absent}\n impact={outcomeCorrelation.impact}\n />\n </div>\n\n {/* Fire Rate Trend chart card */}\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n <span\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {chartTitle}\n </span>\n {chartViewOptions.length > 0 && (\n <ViewBySelect\n value={effectiveChartView}\n options={chartViewOptions}\n onChange={handleChartViewChange}\n />\n )}\n </div>\n <FireRateTrendChart\n currentSeries={fireRateTrend.currentSeries || []}\n previousSeries={fireRateTrend.previousSeries || []}\n yLabels={chartYLabels}\n showPrevious={showPreviousSeries}\n legendCurrentLabel={chartLegendCurrentLabel}\n legendPreviousLabel={chartLegendPreviousLabel}\n />\n </div>\n\n {/* By Agent table — title overlaps DataTable2's toolbar (which already\n renders the Columns button) so the row reads as one in the design. */}\n <div style={{ position: \"relative\" }}>\n {agentBreakdownTitle && (\n <span\n style={{\n position: \"absolute\",\n top: 14,\n left: 4,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 20,\n fontWeight: 500,\n color: C.ink,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n pointerEvents: \"none\",\n }}\n >\n {agentBreakdownTitle}\n </span>\n )}\n <DataTable2\n data={agentBreakdownRows}\n columns={agentBreakdownColumns}\n initialPageSize={agentBreakdownInitialPageSize}\n onRowClick={onAgentClick}\n onVisibleColumnsChange={onAgentBreakdownVisibleColumnsChange}\n totalCount={agentBreakdownTotal}\n page={agentBreakdownPage}\n pageSize={agentBreakdownPageSize}\n onPageChange={onAgentBreakdownPageChange}\n onPageSizeChange={onAgentBreakdownPageSizeChange}\n />\n </div>\n\n {/* Co-occurring Signals */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Share2} title={coOccurringTitle} />\n <TwoColumnList items={coOccurringItems} />\n </div>\n\n {/* Evidence Samples */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={FileText} title={evidenceTitle} />\n <TwoColumnList items={evidenceItems} />\n </div>\n\n {/* Recent Interactions table — same heading-overlap pattern as By Agent. */}\n <div style={{ position: \"relative\" }}>\n {recentInteractionsTitle && (\n <span\n style={{\n position: \"absolute\",\n top: 14,\n left: 0,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 20,\n fontWeight: 600,\n color: C.ink,\n lineHeight: 1.2,\n letterSpacing: \"-0.01em\",\n pointerEvents: \"none\",\n }}\n >\n {recentInteractionsTitle}\n </span>\n )}\n <DataTable2\n data={recentInteractions}\n columns={recentInteractionColumns}\n initialPageSize={recentInteractionsInitialPageSize}\n onRowClick={onInteractionClick}\n onVisibleColumnsChange={onRecentInteractionsVisibleColumnsChange}\n totalCount={recentInteractionsTotal}\n page={recentInteractionsPage}\n pageSize={recentInteractionsPageSize}\n onPageChange={onRecentInteractionsPageChange}\n onPageSizeChange={onRecentInteractionsPageSizeChange}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { CalendarDays, Download } from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"../performance/PerformancePanel\";\nimport { computeWindowLabel, formatLocalDate } from \"../performance/performanceRangeFormat\";\nimport SignalDetailsPage from \"./SignalDetailsPage\";\n\nconst EMPTY_STAT = { value: \"\", label: \"\", trend: \"up\" };\n\nconst C = {\n ink: \"#2E3236\",\n muted: \"#808183\",\n border: \"#D9D9D9\",\n borderSubtle: \"#E6E6E6\",\n black: \"#0B0B0B\",\n white: \"#FFFFFF\",\n neutralBorder: \"#BFBFBF\",\n neutralLight: \"#E6E6E6\",\n neutral600: \"#676767\",\n neutral400: \"#989898\",\n fillTrack: \"#EFEFEF\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\n// Sparkline shape lifted from PerformancePanel so this page stays\n// self-contained — the design uses the same KPI card visual.\nfunction Sparkline({ trend = \"up\", width = 49.618, height = 35 }) {\n const id = React.useId();\n const linePath =\n \"M1.00049 13.5213C7.85975 11.7032 8.88149 4.73912 13.7838 4.73912C19.8344 4.73912 23.6237 17.166 29.1281 17.166C34.5998 17.166 37.4149 4.88121 43.4004 8.61051C47.9764 11.4616 50.6186 1.00024 50.6186 1.00024\";\n const areaPath =\n \"M1.00049 16.692C8.88149 15.6975 8.88149 7.79403 13.7838 7.79403C19.8344 7.79403 23.6237 21.4034 29.1281 21.4034C34.5998 21.4034 37.4149 8.93821 43.4004 12.7223C47.9764 15.6152 50.6186 5.00024 50.6186 5.00024V36.0002C50.6186 36.0002 10.8223 36.0002 1.00049 36.0002C1.00049 28.8653 1.00049 19.4871 1.00049 16.692Z\";\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 52 36\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n transform: trend === \"down\" ? \"scaleX(-1)\" : undefined,\n }}\n >\n <defs>\n <linearGradient\n id={`spark-${id}`}\n x1=\"9.96776\"\n y1=\"16.2053\"\n x2=\"9.96776\"\n y2=\"36.0002\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor={C.ink} />\n <stop offset=\"1\" stopColor={C.white} stopOpacity=\"0.01\" />\n </linearGradient>\n </defs>\n <path\n d={areaPath}\n fill={`url(#spark-${id})`}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n opacity=\"0.1\"\n />\n <path\n d={linePath}\n stroke={C.ink}\n strokeWidth=\"2\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray={trend === \"down\" ? \"2 4\" : undefined}\n />\n </svg>\n );\n}\n\nfunction TrendArrow({ direction = \"up\", color = C.muted, size = 18 }) {\n const upPath =\n \"M12.4167 0.75H17.4167M17.4167 0.75V5.75M17.4167 0.75L10.3333 7.83333L6.16667 3.66667L0.75 9.08333\";\n const downPath =\n \"M12.4167 9.25H17.4167M17.4167 9.25V4.25M17.4167 9.25L10.3333 2.16667L6.16667 6.33333L0.75 0.91667\";\n return (\n <svg\n width={size}\n height={(size * 9.5) / 18}\n viewBox=\"0 0 19 10\"\n fill=\"none\"\n style={{ flexShrink: 0 }}\n >\n <path\n d={direction === \"up\" ? upPath : downPath}\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction StatCard({ value, label, trend = \"up\", style = {} }) {\n return (\n <div\n style={{\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n boxSizing: \"border-box\",\n ...style,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\" }}>\n <Sparkline trend={trend} />\n <TrendArrow direction={trend} />\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, marginTop: 8 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 500,\n lineHeight: \"1.2\",\n color: C.ink,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_DISPLAY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>\n {label}\n </div>\n </div>\n </div>\n );\n}\n\nfunction RangeChip({ label, active = false, onClick }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n height: 32,\n minWidth: 31,\n padding: \"0 12px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.borderSubtle}`,\n background: active ? C.black : C.white,\n color: active ? C.white : C.black,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\nconst DEFAULT_RANGE_OPTIONS = [\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n];\n\n// Fire Rate progress bar — number on the left, fill bar on the right.\n// Accepts numeric percentage (0–100) or a string like \"25%\".\nfunction FireRateBar({ value }) {\n const num =\n typeof value === \"number\"\n ? value\n : parseFloat(String(value ?? \"\").replace(\"%\", \"\")) || 0;\n const pct = Math.max(0, Math.min(100, num));\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12, width: \"100%\" }}>\n <span style={{ minWidth: 32, color: C.ink, fontVariantNumeric: \"tabular-nums\" }}>\n {pct}%\n </span>\n <span\n style={{\n flex: 1,\n height: 4,\n background: C.fillTrack,\n borderRadius: 2,\n overflow: \"hidden\",\n minWidth: 40,\n maxWidth: 80,\n }}\n >\n <span\n style={{\n display: \"block\",\n width: `${pct}%`,\n height: \"100%\",\n background: C.black,\n borderRadius: 2,\n }}\n />\n </span>\n </span>\n );\n}\n\n// Delta cell — trend arrow + signed numeric value. Accepts a number or a\n// string like \"+0.2\" / \"-1.2\".\nfunction DeltaCell({ value }) {\n if (value == null || value === \"\") return null;\n const num =\n typeof value === \"number\" ? value : parseFloat(String(value).replace(/[^-\\d.]/g, \"\"));\n const isFinite = Number.isFinite(num);\n const up = !isFinite || num >= 0;\n const display =\n typeof value === \"string\"\n ? value\n : isFinite\n ? `${num >= 0 ? \"+\" : \"\"}${num.toFixed(1)}`\n : String(value);\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <TrendArrow direction={up ? \"up\" : \"down\"} color={C.ink} size={16} />\n <span style={{ fontVariantNumeric: \"tabular-nums\" }}>{display}</span>\n </span>\n );\n}\n\n// Signed numeric (no arrow) — used for Compass Score in this design.\nfunction SignedNumber({ value }) {\n if (value == null || value === \"\") return null;\n const num =\n typeof value === \"number\" ? value : parseFloat(String(value).replace(/[^-\\d.]/g, \"\"));\n if (!Number.isFinite(num)) return <span>{String(value)}</span>;\n const sign = num >= 0 ? \"+\" : \"\";\n const display = typeof value === \"string\" && /^[+-]/.test(value) ? value : `${sign}${num}`;\n return <span style={{ fontVariantNumeric: \"tabular-nums\" }}>{display}</span>;\n}\n\nexport const DEFAULT_SIGNAL_COLUMNS = [\n { id: \"signal\", label: \"Signals\", width: 250, sortable: true, filterable: true },\n {\n id: \"fireRate\",\n label: \"Fire Rate\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <FireRateBar value={value} />,\n },\n {\n id: \"fires\",\n label: \"Fires\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"delta\",\n label: \"Delta\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <DeltaCell value={value} />,\n },\n {\n id: \"avgStrength\",\n label: \"Avg Strength\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n },\n {\n id: \"compass\",\n label: \"Agent Lift\",\n width: 140,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => <SignedNumber value={value} />,\n },\n { id: \"topAgent\", label: \"Top Agent\", width: 178, sortable: true, filterable: true },\n];\n\nexport default function SignalsListPage({\n className = \"\",\n // Header\n title = \"\",\n dateRangeLabel = \"\",\n // KPI strip\n totalInteractionsStat = EMPTY_STAT,\n activeSignalsStat = EMPTY_STAT,\n // Table section heading — e.g. \"80 Active Signals\". When omitted, the\n // component derives a label from `activeSignalsStat.value`.\n activeSignalsHeading = \"\",\n // Time-range chips (8h / 1d / 7d / 30d). Override `rangeOptions` to customize.\n // `selectedWindow` is the currently-active option id; `onWindowChange(id)`\n // fires when the user picks a new chip.\n rangeOptions = DEFAULT_RANGE_OPTIONS,\n selectedWindow = \"30d\",\n onWindowChange,\n // Host-provided date-range picker node. Should render its own trigger button\n // and popover. When provided, replaces the built-in default picker.\n dateRangePicker,\n // Used by the built-in default picker when `dateRangePicker` is not provided.\n // `dateRange` is `{ from, to }` (Date objects); `onDateRangeChange` receives\n // the same shape when the user clicks Apply.\n dateRange,\n onDateRangeChange,\n // Table data\n signals = [],\n signalColumns = DEFAULT_SIGNAL_COLUMNS,\n initialPageSize = 10,\n onSignalClick,\n onVisibleColumnsChange,\n // Server-side pagination (optional pass-through to DataTable2).\n signalsTotal = null,\n signalsPage = null,\n signalsPageSize = null,\n onSignalsPageChange,\n onSignalsPageSizeChange,\n // Export button\n onExport,\n // Labels used by the auto-drill-down (when the host doesn't supply\n // `onSignalClick`). Empty by default so host apps don't see demo copy.\n fireRateStatLabel = \"\",\n fireCountStatLabel = \"\",\n}) {\n // Internal fallback for the custom date range when the host doesn't pass\n // `dateRange` / `onDateRangeChange`. Lifted here so the time-range chips can\n // become mutually exclusive with a committed custom range — same pattern as\n // PerformancePanel.\n const [internalDateRange, setInternalDateRange] = React.useState(null);\n const effectiveDateRange = dateRange !== undefined ? dateRange : internalDateRange;\n const customRangeActive = !!(effectiveDateRange?.from && effectiveDateRange?.to);\n\n const handleDateRangeChange = (range) => {\n setInternalDateRange(range);\n onDateRangeChange?.(range);\n };\n const handleWindowChange = (id) => {\n // Picking a chip cancels any active custom range so only one mode is\n // highlighted at a time.\n setInternalDateRange(null);\n onDateRangeChange?.(null);\n onWindowChange?.(id);\n };\n\n // Heading label: prefer the explicit override, otherwise compose from the\n // KPI value + label the host passed. Stays empty when neither is provided.\n const headingLabel =\n activeSignalsHeading ||\n (activeSignalsStat.value !== \"\" && activeSignalsStat.value != null\n ? `${activeSignalsStat.value} ${activeSignalsStat.label || \"\"}`.trim()\n : \"\");\n\n const dateLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : computeWindowLabel(selectedWindow) || dateRangeLabel;\n\n // Drill-down state — when a row is clicked we surface SignalDetailsPage on\n // top of the list. If the host passes `onSignalClick` they own navigation\n // and we don't open the internal panel.\n const [selectedSignal, setSelectedSignal] = React.useState(null);\n const handleRowClick = (row) => {\n if (onSignalClick) {\n onSignalClick(row);\n return;\n }\n setSelectedSignal(row);\n };\n\n // Map a list row to the details-page KPI shape. The list only knows a\n // handful of fields, so the details panel mostly renders empty until the\n // host wires real data via onSignalClick — but at least the headline KPIs\n // and the signal name carry across so the drill-down feels continuous.\n const detailsProps = selectedSignal\n ? {\n signalName: selectedSignal.signal ?? \"\",\n fireRateStat: {\n value:\n selectedSignal.fireRate != null && selectedSignal.fireRate !== \"\"\n ? `${selectedSignal.fireRate}%`\n : \"\",\n delta: selectedSignal.delta ?? \"\",\n label: fireRateStatLabel,\n },\n fireCountStat: {\n value:\n typeof selectedSignal.fires === \"number\"\n ? selectedSignal.fires.toLocaleString()\n : selectedSignal.fires ?? \"\",\n delta: \"\",\n label: fireCountStatLabel,\n },\n selectedWindow,\n onWindowChange,\n dateRange: effectiveDateRange,\n onDateRangeChange: handleDateRangeChange,\n rangeOptions,\n dateRangePicker,\n onExport,\n }\n : null;\n\n return (\n <>\n {selectedSignal && (\n <SignalDetailsPage\n className={className}\n {...detailsProps}\n onBack={() => setSelectedSignal(null)}\n />\n )}\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_DISPLAY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n padding: \"12px 32px 32px\",\n flexDirection: \"column\",\n gap: 24,\n // Hide (don't unmount) while drilling into a signal so DataTable2's\n // internal filter / sort / pagination state survives the round trip.\n display: selectedSignal ? \"none\" : \"flex\",\n }}\n >\n {/* Header row — title on the left, date controls + export on the right. */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 12,\n flexWrap: \"wrap\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 24,\n fontWeight: 500,\n color: C.ink,\n margin: 0,\n lineHeight: \"1.2\",\n letterSpacing: \"-0.01em\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {title}\n </h1>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\", flexWrap: \"wrap\" }}>\n {dateLabel && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_DISPLAY,\n fontSize: 13,\n color: C.ink,\n marginRight: 6,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {dateLabel}\n </span>\n )}\n {rangeOptions.map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => handleWindowChange(opt.id)}\n />\n ))}\n {dateRangePicker ? (\n dateRangePicker\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/*\n <button\n type=\"button\"\n onClick={() => onExport?.()}\n disabled={!onExport}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: `1px solid ${C.neutralBorder}`,\n background: C.white,\n cursor: onExport ? \"pointer\" : \"not-allowed\",\n opacity: onExport ? 1 : 0.5,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: \"#323232\",\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n */}\n </div>\n </div>\n\n {/* KPI strip — two stat cards anchored to the left of the row. */}\n <div style={{ display: \"flex\", gap: 24 }}>\n <StatCard\n value={totalInteractionsStat.value}\n label={totalInteractionsStat.label}\n trend={totalInteractionsStat.trend}\n style={{ width: 264, flexShrink: 0 }}\n />\n <StatCard\n value={activeSignalsStat.value}\n label={activeSignalsStat.label}\n trend={activeSignalsStat.trend}\n style={{ width: 264, flexShrink: 0 }}\n />\n </div>\n\n {/* Table section. The heading sits on the same row as DataTable2's\n built-in toolbar (which renders the Columns button on the right),\n matching the Figma layout. Absolute positioning lets the heading\n overlap DataTable2's sticky toolbar without restructuring it. */}\n <div\n style={{\n position: \"relative\",\n paddingTop: 8,\n borderTop: `1px solid ${C.border}`,\n }}\n >\n {headingLabel && (\n <span\n style={{\n position: \"absolute\",\n top: 24,\n left: 0,\n zIndex: 40,\n fontFamily: FONT_DISPLAY,\n fontSize: 14,\n color: C.ink,\n fontWeight: 500,\n lineHeight: 1.2,\n pointerEvents: \"none\",\n }}\n >\n {headingLabel}\n </span>\n )}\n\n <DataTable2\n data={signals}\n columns={signalColumns}\n initialPageSize={initialPageSize}\n onRowClick={handleRowClick}\n onVisibleColumnsChange={onVisibleColumnsChange}\n totalCount={signalsTotal}\n page={signalsPage}\n pageSize={signalsPageSize}\n onPageChange={onSignalsPageChange}\n onPageSizeChange={onSignalsPageSizeChange}\n />\n </div>\n </div>\n </>\n );\n}\n"],"names":["C","FONT_DISPLAY","DEFAULT_RANGE_OPTIONS","RangeChip","label","active","onClick","jsx","KpiCard","value","delta","style","jsxs","OutcomeCorrelationCard","title","present","absent","impact","OutcomeCell","caption","sub","ViewBySelect","options","onChange","open","setOpen","React","triggerRef","popoverRef","handler","e","_a","_b","selected","o","v","ChevronDown","opt","isSelected","Check","FireRateTrendChart","currentSeries","previousSeries","yLabels","height","showPrevious","legendCurrentLabel","legendPreviousLabel","innerHeight","PADDING_LEFT","PADDING_RIGHT","viewWidth","innerWidth","allValues","yMin","yMax","ySpan","sy","y","seriesToPath","series","step","i","currentPath","previousPath","dots","l","yPos","p","SectionHeading","Icon","count","PercentRow","TwoColumnList","items","half","left","right","row","CompassDots","max","full","hasPartial","_","DEFAULT_AGENT_BREAKDOWN_COLUMNS","DEFAULT_RECENT_INTERACTION_COLUMNS","num","SignalDetailsPage","className","signalName","signalSubtitle","onBack","dateRangeLabel","rangeOptions","selectedWindow","onWindowChange","dateRangePicker","dateRange","onDateRangeChange","onExport","fireRateStat","fireCountStat","outcomeCorrelation","chartTitle","chartLegendCurrentLabel","chartLegendPreviousLabel","chartYLabels","fireRateTrend","chartViewOptions","chartView","onChartViewChange","agentBreakdownRows","agentBreakdownColumns","agentBreakdownTitle","onAgentClick","onAgentBreakdownVisibleColumnsChange","agentBreakdownInitialPageSize","coOccurringTitle","coOccurringItems","evidenceTitle","evidenceItems","recentInteractions","recentInteractionColumns","recentInteractionsTitle","onInteractionClick","onRecentInteractionsVisibleColumnsChange","recentInteractionsInitialPageSize","agentBreakdownTotal","agentBreakdownPage","agentBreakdownPageSize","onAgentBreakdownPageChange","onAgentBreakdownPageSizeChange","recentInteractionsTotal","recentInteractionsPage","recentInteractionsPageSize","onRecentInteractionsPageChange","onRecentInteractionsPageSizeChange","internalDateRange","setInternalDateRange","effectiveDateRange","customRangeActive","handleDateRangeChange","range","handleWindowChange","id","dateLabel","formatLocalDate","computeWindowLabel","internalChartView","setInternalChartView","effectiveChartView","handleChartViewChange","activeChartOption","showPreviousSeries","ArrowLeft","CalendarDays","DateRangeButton","DataTable2","Share2","FileText","EMPTY_STAT","Sparkline","trend","width","linePath","areaPath","TrendArrow","direction","color","size","upPath","downPath","StatCard","FireRateBar","pct","DeltaCell","isFinite","up","display","SignedNumber","sign","DEFAULT_SIGNAL_COLUMNS","SignalsListPage","totalInteractionsStat","activeSignalsStat","activeSignalsHeading","signals","signalColumns","initialPageSize","onSignalClick","onVisibleColumnsChange","signalsTotal","signalsPage","signalsPageSize","onSignalsPageChange","onSignalsPageSizeChange","fireRateStatLabel","fireCountStatLabel","headingLabel","selectedSignal","setSelectedSignal","handleRowClick","detailsProps","Fragment"],"mappings":"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"}