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":"PerformancePanel.es.js","sources":["../src/components/performance/PerformanceDetailsPage.jsx","../src/components/performance/PerformancePanel.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport {\n ArrowLeft,\n ArrowRight,\n CalendarDays,\n Download,\n Phone,\n ChevronDown,\n ChevronUp,\n ChevronLeft,\n ChevronRight,\n TrendingUp,\n Lightbulb,\n ShieldCheck,\n FolderKanban,\n Layers,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"./PerformancePanel\";\n\n// Color values resolve to CSS variables declared in `src/tokens/colors.css`.\n// Anything new added here MUST first be added to that file as a `--*` token.\nconst C = {\n ink: \"var(--color-text)\",\n muted: \"var(--color-text-secondary)\",\n border: \"var(--grey-absent)\",\n borderSubtle: \"var(--neutral-100)\",\n iconCircle: \"var(--surface-hover)\",\n black: \"var(--neutral-900)\",\n white: \"var(--grey-white)\",\n neutralBorder: \"var(--neutral-250)\",\n neutral800: \"var(--neutral-800)\",\n neutral600: \"var(--neutral-600)\",\n neutral450: \"var(--neutral-450)\",\n neutral400: \"var(--neutral-400)\",\n neutral300: \"var(--neutral-300)\",\n neutral150: \"var(--neutral-150)\",\n neutral100: \"var(--neutral-100)\",\n beige: \"var(--surface-warm-40)\",\n shadowCard: \"var(--shadow-card)\",\n // Section accent colors are passed to SectionHeading via `iconColor`.\n railCompliance: \"var(--rail-compliance)\",\n accentYellow: \"var(--accent-yellow)\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\nconst FONT_BODY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\n// MM/DD/YYYY in the viewer's local timezone — matches PerformancePanel's\n// `formatLocalDate`. Accepts Date instances or strings (e.g. \"2026-03-16\");\n// returns the input untouched if it can't be parsed.\nfunction formatDisplayDate(input) {\n if (!input) return \"\";\n const opts = { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" };\n if (input instanceof Date) {\n return Number.isNaN(input.getTime()) ? \"\" : input.toLocaleDateString(\"en-US\", opts);\n }\n const str = String(input).trim();\n const ymd = str.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})/);\n if (ymd) {\n const d = new Date(Number(ymd[1]), Number(ymd[2]) - 1, Number(ymd[3]));\n return d.toLocaleDateString(\"en-US\", opts);\n }\n const parsed = new Date(str);\n if (!Number.isNaN(parsed.getTime())) return parsed.toLocaleDateString(\"en-US\", opts);\n return str;\n}\n\n// Canned curve used when the caller doesn't supply real points. Kept around\n// so existing demos / fixtures don't visually regress.\nconst SPARK_DEFAULT_LINE =\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\";\nconst SPARK_DEFAULT_AREA =\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\n// Project a numeric series onto an SVG viewBox so we can draw a real line +\n// filled area. Returns `null` when there aren't enough usable values (so the\n// caller can fall back to the canned curve).\nfunction buildSparkPaths(points, vbW = 52, vbH = 36) {\n if (!Array.isArray(points)) return null;\n const numeric = points\n .map((p) => Number(p))\n .filter((n) => Number.isFinite(n));\n if (numeric.length < 2) return null;\n const min = Math.min(...numeric);\n const max = Math.max(...numeric);\n // Inset so the stroke doesn't clip and a flat line still draws horizontally.\n const padY = 4;\n const span = max - min || 1;\n const usableH = vbH - padY * 2 - 4; // leave a little headroom at bottom too\n const sx = (i) => (numeric.length === 1 ? 0 : (i / (numeric.length - 1)) * (vbW - 2)) + 1;\n const sy = (v) => padY + (1 - (v - min) / span) * usableH;\n let line = \"\";\n for (let i = 0; i < numeric.length; i++) {\n line += `${i === 0 ? \"M\" : \"L\"}${sx(i).toFixed(2)},${sy(numeric[i]).toFixed(2)}`;\n }\n const lastX = sx(numeric.length - 1);\n const firstX = sx(0);\n const area = `${line} L${lastX.toFixed(2)},${vbH} L${firstX.toFixed(2)},${vbH} Z`;\n return { line, area };\n}\n\nfunction Sparkline({ trend = \"up\", points, width = 49.618, height = 35 }) {\n const id = React.useId();\n const built = buildSparkPaths(points);\n const linePath = built ? built.line : SPARK_DEFAULT_LINE;\n const areaPath = built ? built.area : SPARK_DEFAULT_AREA;\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 // Only mirror the canned curve. When real points are supplied the\n // shape already reflects direction, so no mirror needed.\n transform: !built && 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 // Dashed only when we don't have real points and trend is \"down\"\n // (matches the pre-existing decorative behavior).\n strokeDasharray={!built && trend === \"down\" ? \"2 4\" : undefined}\n />\n </svg>\n );\n}\n\nfunction KpiCell({ value, label, sub, trend = \"up\", points }) {\n return (\n <div\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n minWidth: 0,\n }}\n >\n <Sparkline trend={trend} points={points} />\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6, minWidth: 0 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 400,\n lineHeight: \"1.2\",\n color: C.muted,\n letterSpacing: \"-0.01em\",\n whiteSpace: \"nowrap\",\n }}\n >\n {value}\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.ink,\n lineHeight: \"1.2\",\n }}\n >\n {label}\n </span>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.neutral600,\n lineHeight: \"1.2\",\n }}\n >\n {sub}\n </span>\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_BODY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\nfunction FilterButton({ icon: Icon, children, active = false }) {\n return (\n <button\n type=\"button\"\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.neutralBorder}`,\n background: active ? C.black : C.white,\n cursor: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: active ? C.white : C.neutral800,\n fontWeight: active ? 600 : 400,\n whiteSpace: \"nowrap\",\n }}\n >\n {Icon && <Icon size={18} strokeWidth={1.75} />}\n {children}\n </button>\n );\n}\n\nconst DEFAULT_LINE_POINTS = [\n [0, 30],\n [60, 50],\n [120, 95],\n [180, 60],\n [240, 70],\n [300, 80],\n];\n\nfunction CompassLineChart({\n // When omitted, y-axis labels are auto-derived from `points` (5 evenly-spaced\n // ticks from max → min). Pass a custom array to override the formatting.\n yLabels: yLabelsProp,\n xLabels = [],\n // points: array of [x, y] pairs OR array of y-numbers (auto-distributed in x).\n // y is in DATA space — the chart auto-scales it to pixel space using the\n // points' own min/max (with a small padding).\n points,\n // index of the marker to render filled (defaults to the last point)\n highlightIndex,\n}) {\n const width = 460;\n const height = 110;\n const hasData = Array.isArray(points) && points.length > 0;\n const gradId = React.useId();\n // Cap the visible x-axis ticks regardless of how many points are passed —\n // long trends (60+ days) would otherwise overflow the card.\n const MAX_X_TICKS = 6;\n const allXLabels = Array.isArray(xLabels) ? xLabels : [];\n const visibleXLabels =\n allXLabels.length <= MAX_X_TICKS\n ? allXLabels\n : Array.from({ length: MAX_X_TICKS }, (_, i) =>\n allXLabels[Math.round((i * (allXLabels.length - 1)) / (MAX_X_TICKS - 1))]\n );\n // Vertical grid lines at evenly-spaced positions matching the visible ticks.\n const gridCount = Math.max(2, visibleXLabels.length || MAX_X_TICKS);\n const gridXs = Array.from({ length: gridCount }, (_, i) => (i / (gridCount - 1)) * width);\n\n if (!hasData) {\n // Empty state: render an empty 133px chart skeleton with just the grid\n // lines — no placeholder copy. Hosts that supply only headline value/\n // delta still get a clean card without \"No data\" text bleeding through.\n return (\n <div style={{ display: \"flex\", gap: 8, height: 133, width: \"100%\" }}>\n <div style={{ width: 24, flexShrink: 0 }} />\n <div style={{ flex: 1, position: \"relative\", minWidth: 0 }}>\n <svg\n width=\"100%\"\n height={height + 14}\n viewBox={`0 0 ${width} ${height + 14}`}\n preserveAspectRatio=\"none\"\n >\n {gridXs.map((gx, i) => (\n <line\n key={`grid-${i}`}\n x1={gx}\n y1=\"0\"\n x2={gx}\n y2={height}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 3\"\n strokeWidth=\"1\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n </div>\n </div>\n );\n }\n\n // Normalize to [x, y] pairs in DATA space.\n const dataPairs = Array.isArray(points[0])\n ? points\n : points.map((y, i) => [i, y]);\n const yValues = dataPairs.map(([, y]) => y);\n const yDataMin = Math.min(...yValues);\n const yDataMax = Math.max(...yValues);\n // Pad the range so the curve isn't pinned to the very top/bottom; if all\n // values are identical, give the axis a 1-unit cushion so it still draws.\n const yPad = yDataMax === yDataMin ? Math.max(Math.abs(yDataMax) * 0.1, 1) : (yDataMax - yDataMin) * 0.1;\n const yMin = yDataMin - yPad;\n const yMax = yDataMax + yPad;\n const ySpan = yMax - yMin || 1;\n const sy = (y) => ((yMax - y) / ySpan) * height;\n const normalized = dataPairs.map(([x, y]) => [x, sy(y)]);\n\n // Auto-derive y-axis labels (5 evenly-spaced ticks from max → min) when the\n // caller didn't pass an override.\n const yLabels =\n yLabelsProp && yLabelsProp.length\n ? yLabelsProp\n : Array.from({ length: 5 }, (_, i) => {\n const v = yMax - (i / 4) * (yMax - yMin);\n const abs = Math.abs(v);\n const decimals = abs >= 100 ? 0 : abs >= 10 ? 1 : 2;\n return v.toFixed(decimals);\n });\n const minX = normalized[0][0];\n const maxX = normalized[normalized.length - 1][0];\n const xSpan = maxX - minX || 1;\n const sx = (x) => ((x - minX) / xSpan) * width;\n const linePath = normalized\n .map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"}${sx(x)},${y}`)\n .join(\" \");\n const areaPath = `${linePath} L${sx(normalized[normalized.length - 1][0])},${height} L${sx(normalized[0][0])},${height} Z`;\n const highlight = highlightIndex == null ? normalized.length - 1 : highlightIndex;\n return (\n <div style={{ display: \"flex\", gap: 8, height: 133, width: \"100%\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n padding: \"14px 0\",\n fontFamily: FONT_BODY,\n fontSize: 10,\n color: C.neutral800,\n flexShrink: 0,\n }}\n >\n {yLabels.map((l) => (\n <span key={l}>{l}</span>\n ))}\n </div>\n <div style={{ flex: 1, position: \"relative\", minWidth: 0 }}>\n <svg\n width=\"100%\"\n height={height + 14}\n viewBox={`0 0 ${width} ${height + 14}`}\n preserveAspectRatio=\"none\"\n >\n <defs>\n <linearGradient id={`area-${gradId}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" style={{ stopColor: C.black, stopOpacity: 0.08 }} />\n <stop offset=\"100%\" style={{ stopColor: C.black, stopOpacity: 0 }} />\n </linearGradient>\n </defs>\n {gridXs.map((gx, i) => (\n <line\n key={`grid-${i}`}\n x1={gx}\n y1=\"0\"\n x2={gx}\n y2={height}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 3\"\n strokeWidth=\"1\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n <path d={areaPath} fill={`url(#area-${gradId})`} />\n <path\n d={linePath}\n stroke={C.black}\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n {normalized.map(([x, y], i) => {\n const isHighlight = i === highlight;\n return (\n <circle\n key={i}\n cx={sx(x)}\n cy={y}\n r={isHighlight ? 4 : 3}\n fill={isHighlight ? C.black : C.white}\n stroke={C.black}\n strokeWidth=\"1.5\"\n vectorEffect=\"non-scaling-stroke\"\n />\n );\n })}\n </svg>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingRight: 6,\n fontFamily: FONT_BODY,\n fontSize: 10,\n color: C.neutral800,\n marginTop: 6,\n overflow: \"hidden\",\n }}\n >\n {visibleXLabels.map((l, i) => (\n <span key={i} style={{ whiteSpace: \"nowrap\" }}>{l}</span>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nfunction ChartCard({ title, value, delta, children }) {\n return (\n <div\n style={{\n flex: 1,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 24,\n minWidth: 0,\n boxShadow: C.shadowCard,\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-end\" }}>\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 15,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"flex-end\",\n gap: 4,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n }}\n >\n <span style={{ fontSize: 20, color: C.black, lineHeight: 1 }}>{value}</span>\n <span style={{ fontSize: 10, color: C.neutral300, lineHeight: 1 }}>{delta}</span>\n </span>\n </div>\n <div style={{ flex: 1 }}>{children}</div>\n </div>\n );\n}\n\nfunction SectionHeading({ icon: Icon, title, trailing, iconColor = C.ink, bordered = false }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n paddingBottom: bordered ? 12 : 0,\n borderBottom: bordered ? `1px solid ${C.border}` : \"none\",\n }}\n >\n <div\n style={{\n width: 24,\n height: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={22} strokeWidth={1.75} style={{ color: iconColor }} />\n </div>\n <div\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n textTransform: \"uppercase\",\n letterSpacing: \"0.02em\",\n }}\n >\n {title}\n </div>\n {trailing && (\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.ink }}>{trailing}</div>\n )}\n </div>\n );\n}\n\n// Hosts emit `text` (matches PerformancePanel's accordion); legacy callers\n// may pass `bullet`. Accept either so existing consumers don't break.\n// When `href` is provided the label renders as an underlined link that\n// opens in a new tab (used by Performance guidance examples → interaction\n// detail page).\nfunction CitationRow({ text, bullet, citation, date, href }) {\n const label = text ?? bullet ?? \"\";\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n lineHeight: \"24px\",\n gap: 16,\n }}\n >\n {href ? (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: C.ink,\n textDecoration: \"underline\",\n textUnderlineOffset: 2,\n textDecorationColor: C.border,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {label}\n </a>\n ) : (\n <span style={{ minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {label}\n </span>\n )}\n <span style={{ display: \"inline-flex\", gap: 4, whiteSpace: \"nowrap\" }}>\n <span style={{ color: C.ink }}>{citation}</span>\n {date ? <span style={{ color: C.muted }}>({date})</span> : null}\n </span>\n </div>\n );\n}\n\nfunction AccordionRow({\n title,\n summary,\n calls,\n // Hosts emit `percent` (matches PerformancePanel's accordion); legacy\n // callers may still send `delta`. Accept either.\n percent,\n delta,\n bullets,\n defaultExpanded = false,\n}) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n const trailing = percent ?? delta ?? \"\";\n const rows = Array.isArray(bullets) ? bullets : [];\n // Outer container is a div so the bullet rows inside (which may hold\n // <a> links to the interaction detail page) aren't nested inside an\n // interactive <button>. Header still toggles via the inner button.\n return (\n <div style={{ borderTop: `1px solid ${C.border}` }}>\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n style={{\n border: \"none\",\n background: \"transparent\",\n padding: 16,\n display: \"flex\",\n gap: 12,\n alignItems: \"flex-start\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n }}\n >\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 12, minWidth: 0 }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontWeight: 500,\n fontSize: 14,\n color: C.black,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </span>\n <span style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.muted, lineHeight: \"24px\" }}>\n {summary}\n </span>\n </div>\n <div style={{ display: \"flex\", gap: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <Phone size={12} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink }}>{calls}</span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <TrendingUp size={12} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink }}>{trailing}</span>\n </div>\n </div>\n </div>\n <ChevronDown\n size={20}\n color={C.ink}\n strokeWidth={2}\n style={{\n flexShrink: 0,\n transform: expanded ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n }}\n />\n </button>\n {expanded && rows.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n padding: \"0 16px 16px\",\n }}\n >\n {rows.map((b, i) => (\n <CitationRow key={i} {...b} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"8px 8px 12px\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: \"1.2\",\n }}\n >\n <span style={{ color: C.ink }}>{label}</span>\n <span style={{ color: C.muted }}>{value}</span>\n </div>\n );\n}\n\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: \"flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\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\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\n />\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 display: \"inline-block\",\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_SESSION_COLUMNS = [\n { id: \"title\", label: \"Title\", width: 220, sortable: true, filterable: true },\n { id: \"date\", label: \"Date\", width: 170, sortable: true },\n { id: \"duration\", label: \"Duration\", width: 170, sortable: true },\n { id: \"lift\", label: \"Lift\", width: 120, sortable: true },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 220,\n sortable: true,\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\n\nfunction SubSectionHeading({ icon: Icon, title }) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, width: \"100%\" }}>\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: C.iconCircle,\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 fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n </div>\n );\n}\n\nexport default function PerformanceDetailsPage({\n agentName = \"\",\n startDate = \"\",\n endDate = \"\",\n totalCalls = \"\",\n onBack,\n className = \"\",\n // KPI strip\n kpiBaseline = { value: \"\", label: \"\", sub: \"\", trend: \"up\" },\n kpiAgentLift = { value: \"\", label: \"\", sub: \"\", trend: \"down\" },\n kpiScore = { value: \"\", label: \"\", sub: \"\", trend: \"up\" },\n // Chart cards (Baseline / Agent Lift / Score / CSAT / Volume)\n // Each takes { value, delta, yLabels?, xLabels?, points? }.\n // points is an array of [x, y] pairs OR a flat array of y-numbers.\n baselineChart = { value: \"\", delta: \"\" },\n agentLiftChart = { value: \"\", delta: \"\" },\n scoreChart = { value: \"\", delta: \"\" },\n csatChart = { value: \"\", delta: \"\" },\n volumeChart = { value: \"\", delta: \"\" },\n // Insight sections — titles and chart-card labels stay empty by default\n // so the library doesn't ship demo copy.\n guidanceItems = [],\n strengthItems = [],\n callDrivers = [],\n callParadigms = [],\n strengthsTitle = \"\",\n guidanceTitle = \"\",\n callMixTitle = \"\",\n driversTitle = \"\",\n paradigmsTitle = \"\",\n sessionsTitle = \"\",\n baselineChartTitle = \"\",\n agentLiftChartTitle = \"\",\n scoreChartTitle = \"\",\n csatChartTitle = \"\",\n volumeChartTitle = \"\",\n // Sessions table\n sessions = [],\n sessionColumns = [],\n initialPageSize = 10,\n // Time-range chips state — mirrors PerformancePanel so the active chip /\n // Date Range highlight survives the navigation into the details page.\n // Callbacks are optional; when omitted the controls are display-only.\n selectedWindow = \"30d\",\n onWindowChange,\n dateRange,\n onDateRangeChange,\n // Server-side pagination for the sessions table. When all four are provided\n // the table switches to controlled / server-paginated mode and the host is\n // expected to refetch when the user changes page or page size.\n sessionsTotal = null,\n sessionsPage = null,\n sessionsPageSize = null,\n onSessionsPageChange,\n onSessionsPageSizeChange,\n // Fires when the user clicks the Export CSV button in the header. Disabled\n // if no handler is provided.\n onExport,\n // Fires when the user clicks a row in the sessions table.\n onSessionClick,\n // Fires whenever the user toggles columns in the sessions table's column\n // picker — hosts can scope their CSV export to whatever the user has visible.\n onSessionsVisibleColumnsChange,\n}) {\n const customRangeActive = !!(dateRange?.from && dateRange?.to);\n\n // A chart card is only worth rendering when the host has something concrete\n // for it — either a headline value, a delta, or actual chart points. Without\n // that we'd ship empty frames with \"No data\" inside, which leaks library\n // demo copy. Hosts populate progressively; gallery passes everything.\n const hasChartData = (c) =>\n !!(c && (c.value || c.delta || (Array.isArray(c.points) && c.points.length > 0)));\n const showRow1 =\n hasChartData(baselineChart) || hasChartData(agentLiftChart) || hasChartData(scoreChart);\n const showRow2 = hasChartData(csatChart) || hasChartData(volumeChart);\n\n return (\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_BODY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"23px 32px\",\n minHeight: 78,\n boxSizing: \"border-box\",\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 paddingLeft: 16,\n borderLeft: `1px solid ${C.border}`,\n flex: 1,\n minWidth: 0,\n alignSelf: \"stretch\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 24,\n fontWeight: 400,\n color: C.ink,\n margin: 0,\n lineHeight: 1,\n whiteSpace: \"nowrap\",\n }}\n >\n {agentName}\n </h1>\n </div>\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_BODY,\n fontSize: 14,\n lineHeight: \"24px\",\n color: C.neutral800,\n flexShrink: 0,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n </div>\n\n <div\n style={{\n padding: \"0 32px 32px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 16,\n paddingLeft: 49,\n }}\n >\n <div style={{ display: \"flex\", gap: 16, alignItems: \"center\" }}>\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <CalendarDays size={14} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {formatDisplayDate(startDate)}\n </span>\n <ArrowRight size={12} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {formatDisplayDate(endDate)}\n </span>\n </div>\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <Phone size={14} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {totalCalls}\n </span>\n </div>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n {[\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n ].map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => onWindowChange?.(opt.id)}\n />\n ))}\n <DateRangeButton value={dateRange} onChange={onDateRangeChange} />\n </div>\n </div>\n\n <div\n style={{\n background: C.beige,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n gap: 24,\n alignItems: \"center\",\n }}\n >\n <KpiCell\n value={kpiBaseline.value}\n label={kpiBaseline.label}\n sub={kpiBaseline.sub}\n trend={kpiBaseline.trend}\n points={kpiBaseline.points}\n />\n <ArrowRight size={20} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <KpiCell\n value={kpiAgentLift.value}\n label={kpiAgentLift.label}\n sub={kpiAgentLift.sub}\n trend={kpiAgentLift.trend}\n points={kpiAgentLift.points}\n />\n <ArrowRight size={20} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <KpiCell\n value={kpiScore.value}\n label={kpiScore.label}\n sub={kpiScore.sub}\n trend={kpiScore.trend}\n points={kpiScore.points}\n />\n </div>\n\n {showRow1 && (\n <div style={{ display: \"flex\", gap: 24 }}>\n {hasChartData(baselineChart) && (\n <ChartCard title={baselineChartTitle} value={baselineChart.value} delta={baselineChart.delta}>\n <CompassLineChart\n yLabels={baselineChart.yLabels}\n xLabels={baselineChart.xLabels}\n points={baselineChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(agentLiftChart) && (\n <ChartCard title={agentLiftChartTitle} value={agentLiftChart.value} delta={agentLiftChart.delta}>\n <CompassLineChart\n yLabels={agentLiftChart.yLabels}\n xLabels={agentLiftChart.xLabels}\n points={agentLiftChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(scoreChart) && (\n <ChartCard title={scoreChartTitle} value={scoreChart.value} delta={scoreChart.delta}>\n <CompassLineChart\n yLabels={scoreChart.yLabels}\n xLabels={scoreChart.xLabels}\n points={scoreChart.points}\n />\n </ChartCard>\n )}\n </div>\n )}\n\n {showRow2 && (\n <div style={{ display: \"flex\", gap: 24 }}>\n {hasChartData(csatChart) && (\n <ChartCard title={csatChartTitle} value={csatChart.value} delta={csatChart.delta}>\n <CompassLineChart\n yLabels={csatChart.yLabels}\n xLabels={csatChart.xLabels}\n points={csatChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(volumeChart) && (\n <ChartCard title={volumeChartTitle} value={volumeChart.value} delta={volumeChart.delta}>\n <CompassLineChart\n yLabels={volumeChart.yLabels}\n xLabels={volumeChart.xLabels}\n points={volumeChart.points}\n />\n </ChartCard>\n )}\n </div>\n )}\n\n <div style={{ display: \"flex\", gap: 24, marginTop: 8, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 16, minWidth: 0 }}>\n <SectionHeading icon={ShieldCheck} title={strengthsTitle} iconColor={C.railCompliance} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {strengthItems.map((item, i) => (\n <AccordionRow key={i} {...item} />\n ))}\n </div>\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 16, minWidth: 0 }}>\n <SectionHeading icon={Lightbulb} title={guidanceTitle} iconColor={C.accentYellow} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {guidanceItems.map((item, i) => (\n <AccordionRow key={i} {...item} />\n ))}\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16, marginTop: 8 }}>\n <SectionHeading icon={Phone} title={callMixTitle} iconColor={C.railCompliance} />\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <SubSectionHeading icon={FolderKanban} title={driversTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callDrivers.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <SubSectionHeading icon={Layers} title={paradigmsTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callParadigms.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16, marginTop: 8 }}>\n {sessionsTitle && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {sessionsTitle}\n </span>\n )}\n <DataTable2\n data={sessions}\n columns={sessionColumns}\n initialPageSize={initialPageSize}\n totalCount={sessionsTotal}\n page={sessionsPage}\n pageSize={sessionsPageSize}\n onPageChange={onSessionsPageChange}\n onPageSizeChange={onSessionsPageSizeChange}\n onRowClick={onSessionClick}\n onVisibleColumnsChange={onSessionsVisibleColumnsChange}\n />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Download,\n ChevronDown,\n CalendarDays,\n Search,\n ChevronLeft,\n ChevronRight,\n TrendingUp,\n Lightbulb,\n ShieldCheck,\n Phone,\n Signal,\n FolderKanban,\n Layers,\n Check,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport PerformanceDetailsPage from \"./PerformanceDetailsPage\";\n\nconst EMPTY_STAT = { value: \"\", label: \"\", trend: \"up\" };\n\n// Color values resolve to CSS variables declared in `src/tokens/colors.css`.\n// Anything new added here MUST first be added to that file as a `--*` token.\nconst C = {\n ink: \"var(--color-text)\",\n muted: \"var(--color-text-secondary)\",\n border: \"var(--grey-absent)\",\n borderSubtle: \"var(--neutral-100)\",\n iconCircle: \"var(--surface-hover)\",\n black: \"var(--neutral-900)\",\n white: \"var(--grey-white)\",\n green: \"var(--color-green)\",\n red: \"var(--color-red-strong)\",\n neutralBorder: \"var(--neutral-250)\",\n neutralLight: \"var(--neutral-100)\",\n beige: \"var(--surface-warm-40)\",\n // Extras needed by inline literals in this file:\n neutral800: \"var(--neutral-800)\", // button/text label grey\n textInk: \"var(--text-ink)\", // body subtitle (#1E2125)\n textFaintGrey: \"var(--text-faint-grey)\", // disabled calendar day text\n hoverWarm40: \"var(--hover-warm-40)\", // calendar in-range highlight\n shadowPopover: \"var(--shadow-popover)\",\n shadowDropdown: \"var(--shadow-dropdown)\",\n railCompliance: \"var(--rail-compliance)\", // section icon accent\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\nconst FONT_BODY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\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 }) {\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 width={18} height={9.5} viewBox=\"0 0 19 10\" fill=\"none\" style={{ flexShrink: 0 }}>\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\", muted = false, beigeBg = false, style = {} }) {\n return (\n <div\n style={{\n background: beigeBg ? C.beige : 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: muted ? C.muted : C.ink,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>{label}</div>\n </div>\n </div>\n );\n}\n\nfunction StatSubCell({ value, label, trend = \"up\", withDivider = false }) {\n return (\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n paddingLeft: withDivider ? 24 : 0,\n borderLeft: withDivider ? `1px solid ${C.border}` : \"none\",\n minWidth: 0,\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.muted,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>{label}</div>\n </div>\n </div>\n );\n}\n\nfunction FilterButton({ icon: Icon, children, trailing: Trailing }) {\n return (\n <button\n type=\"button\"\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: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.neutral800,\n whiteSpace: \"nowrap\",\n }}\n >\n {Icon && <Icon size={18} strokeWidth={1.75} />}\n {children}\n {Trailing && <Trailing size={16} strokeWidth={2} />}\n </button>\n );\n}\n\nconst MONTH_NAMES = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n];\nconst DOW_LABELS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nfunction startOfDay(d) {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n}\n\nfunction buildCalendarGrid(year, month) {\n // Returns 42 dates (6 weeks). Leading/trailing days are from neighbour months.\n const first = new Date(year, month, 1);\n const startWeekday = first.getDay();\n const gridStart = new Date(year, month, 1 - startWeekday);\n return Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n}\n\nfunction DateRangePopover({ value, onApply, onClose, anchorRef }) {\n const popoverRef = React.useRef(null);\n const [from, setFrom] = React.useState(value?.from ? startOfDay(value.from) : null);\n const [to, setTo] = React.useState(value?.to ? startOfDay(value.to) : null);\n const initialMonth = from || new Date();\n const [viewYear, setViewYear] = React.useState(initialMonth.getFullYear());\n const [viewMonth, setViewMonth] = React.useState(initialMonth.getMonth());\n const [pos, setPos] = React.useState({ top: 0, left: 0 });\n\n // Position under the trigger (right-aligned so it doesn't overflow viewport).\n // Recomputed on scroll/resize so the popover stays attached to the button\n // when the page scrolls — same pattern as the Columns dropdown in DataTable2.\n React.useLayoutEffect(() => {\n const updatePosition = () => {\n if (!anchorRef?.current) return;\n const r = anchorRef.current.getBoundingClientRect();\n const POPOVER_WIDTH = 320;\n setPos({\n top: r.bottom + 6,\n left: Math.max(8, r.right - POPOVER_WIDTH),\n });\n };\n updatePosition();\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n }, [anchorRef]);\n\n // Close on outside click / Escape.\n React.useEffect(() => {\n const handleClick = (e) => {\n if (popoverRef.current?.contains(e.target)) return;\n if (anchorRef?.current?.contains(e.target)) return;\n onClose();\n };\n const handleKey = (e) => { if (e.key === \"Escape\") onClose(); };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [onClose, anchorRef]);\n\n const days = buildCalendarGrid(viewYear, viewMonth);\n const today = startOfDay(new Date());\n\n const handleDayClick = (d) => {\n const day = startOfDay(d);\n // Block future dates — they'd never be valid for \"data up to now\" filters.\n if (day > today) return;\n if (!from || (from && to)) {\n setFrom(day);\n setTo(null);\n } else if (day < from) {\n setFrom(day);\n } else {\n setTo(day);\n }\n };\n\n const goPrev = () => {\n if (viewMonth === 0) { setViewMonth(11); setViewYear(viewYear - 1); }\n else setViewMonth(viewMonth - 1);\n };\n const goNext = () => {\n if (viewMonth === 11) { setViewMonth(0); setViewYear(viewYear + 1); }\n else setViewMonth(viewMonth + 1);\n };\n\n const isInRange = (d) => from && to && d >= from && d <= to;\n const isEdge = (d) => (from && d.getTime() === from.getTime()) || (to && d.getTime() === to.getTime());\n\n return createPortal(\n <div\n ref={popoverRef}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n width: 320,\n background: C.white,\n border: `1px solid ${C.borderSubtle}`,\n borderRadius: 12,\n boxShadow: C.shadowPopover,\n padding: 16,\n zIndex: 9999,\n fontFamily: FONT_BODY,\n }}\n >\n {/* Month header with prev/next */}\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button type=\"button\" onClick={goPrev} style={navBtnStyle} aria-label=\"Previous month\">\n <ChevronLeft size={18} strokeWidth={1.75} />\n </button>\n <div style={{ fontSize: 14, fontWeight: 600, color: C.ink }}>\n {MONTH_NAMES[viewMonth]} {viewYear}\n </div>\n <button type=\"button\" onClick={goNext} style={navBtnStyle} aria-label=\"Next month\">\n <ChevronRight size={18} strokeWidth={1.75} />\n </button>\n </div>\n\n {/* Day-of-week header */}\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 1fr)\", gap: 2, marginBottom: 4 }}>\n {DOW_LABELS.map((d) => (\n <div key={d} style={{ textAlign: \"center\", fontSize: 12, color: C.muted, padding: \"4px 0\" }}>\n {d}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 1fr)\", gap: 2 }}>\n {days.map((d) => {\n const inMonth = d.getMonth() === viewMonth;\n const inRange = isInRange(d);\n const edge = isEdge(d);\n const isToday = d.getTime() === today.getTime();\n const isFuture = d > today;\n return (\n <button\n key={d.toISOString()}\n type=\"button\"\n onClick={() => handleDayClick(d)}\n disabled={isFuture}\n aria-disabled={isFuture}\n style={{\n height: 36,\n border: \"none\",\n borderRadius: 8,\n background: edge ? C.black : inRange ? C.hoverWarm40 : \"transparent\",\n color: edge ? C.white : isFuture ? C.textFaintGrey : inMonth ? C.ink : C.muted,\n fontFamily: FONT_BODY,\n fontSize: 13,\n fontWeight: isToday ? 500 : 400,\n cursor: isFuture ? \"not-allowed\" : \"pointer\",\n opacity: isFuture ? 0.6 : 1,\n }}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Footer */}\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginTop: 12, paddingTop: 12, borderTop: `1px solid ${C.borderSubtle}` }}>\n <button\n type=\"button\"\n onClick={() => { setFrom(null); setTo(null); }}\n style={{ background: \"transparent\", border: \"none\", padding: 0, cursor: \"pointer\", fontSize: 14, fontWeight: 500, color: C.ink }}\n >\n Clear\n </button>\n <button\n type=\"button\"\n disabled={!from || !to}\n onClick={() => { onApply({ from, to }); onClose(); }}\n style={{\n background: !from || !to ? C.neutralBorder : C.black,\n color: C.white,\n border: \"none\",\n borderRadius: 10,\n height: 30,\n padding: \"0 16px\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n fontWeight: 600,\n cursor: !from || !to ? \"not-allowed\" : \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n </div>,\n document.body,\n );\n}\n\nconst navBtnStyle = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n border: \"none\",\n background: \"transparent\",\n borderRadius: 6,\n cursor: \"pointer\",\n color: C.ink,\n};\n\nfunction DateRangeButton({ value, onChange }) {\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef(null);\n // Highlighted only after the user clicks Apply in the popover (i.e. once a\n // custom date range is committed). Just opening the popover does not\n // activate the button — same active treatment as the 30d/8h/1d/7d chips.\n const active = !!(value?.from && value?.to);\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.neutralBorder}`,\n background: active ? C.black : C.white,\n cursor: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: active ? C.white : C.neutral800,\n fontWeight: active ? 600 : 400,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={18} strokeWidth={1.75} />\n Date Range\n </button>\n {open && (\n <DateRangePopover\n value={value}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n onApply={(range) => onChange?.(range)}\n />\n )}\n </>\n );\n}\n\nexport { DateRangeButton };\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_BODY,\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 // MM/DD/YYYY in the viewer's local timezone (toLocaleDateString uses local TZ by default).\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\nfunction SearchBar() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n width: 260,\n padding: \"0 12px\",\n borderRadius: 11,\n background: C.white,\n border: `1px solid ${C.neutralLight}`,\n }}\n >\n <Search size={16} strokeWidth={2} style={{ color: \"var(--neutral-400)\" }} />\n <input\n placeholder=\"Search\"\n style={{\n flex: 1,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n }}\n />\n </div>\n );\n}\n\nfunction CompassRating({ 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: \"flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\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\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\n />\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 display: \"inline-block\",\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_AGENT_COLUMNS = [\n { id: \"agent\", label: \"Agent\", width: 180, sortable: true, filterable: true },\n { id: \"supervisor\", label: \"Supervisor\", width: 170, sortable: true, filterable: true },\n { id: \"calls\", label: \"Calls\", width: 100, sortable: true },\n { id: \"baseline\", label: \"Baseline\", width: 110, sortable: true },\n { id: \"lift\", label: \"Lift\", width: 100, sortable: true },\n { id: \"score\", label: \"Score\", width: 100, sortable: true, filterable: true, filterType: \"number\" },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 200,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12 }}>\n <span style={{ minWidth: 32 }}>{value}</span>\n <CompassRating value={typeof value === \"number\" ? value : 0} />\n </span>\n ),\n },\n { id: \"totalDuration\", label: \"Total Duration\", width: 150, sortable: true, filterable: true, filterType: \"duration\", filterShowPresets: false },\n { id: \"avgDuration\", label: \"Average Duration\", width: 170, sortable: true, filterable: true, filterType: \"duration\", filterShowPresets: false },\n];\n\n\nfunction SectionHeading({ icon: Icon, title, trailing, iconColor = C.ink, bordered = false }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n paddingBottom: bordered ? 12 : 0,\n borderBottom: bordered ? `1px solid ${C.border}` : \"none\",\n }}\n >\n <div\n style={{\n width: 24,\n height: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={22} strokeWidth={1.75} style={{ color: iconColor }} />\n </div>\n <div\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: \"1.2\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.02em\",\n }}\n >\n {title}\n </div>\n {trailing && (\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.ink }}>{trailing}</div>\n )}\n </div>\n );\n}\n\nfunction SubSectionHeading({ icon: Icon, title }) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, width: \"100%\" }}>\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: C.iconCircle,\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 fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </span>\n </div>\n );\n}\n\nfunction AccordionItem({ title, summary, calls, percent, bullets, defaultExpanded = false }) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n const rows = Array.isArray(bullets) ? bullets : [];\n // Outer container is a div (not a button) so the bullet rows inside can\n // hold <a> link elements without nesting interactive HTML — clicking\n // the header still toggles via the inner button below.\n return (\n <div style={{ borderTop: `1px solid ${C.border}` }}>\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n style={{\n border: \"none\",\n background: \"transparent\",\n padding: 16,\n display: \"flex\",\n gap: 12,\n alignItems: \"flex-start\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n minWidth: 0,\n }}\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 14,\n color: C.black,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.muted, lineHeight: \"24px\" }}>\n {summary}\n </div>\n </div>\n <div style={{ display: \"flex\", gap: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <Phone size={14} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink, lineHeight: 1.5 }}>\n {calls}\n </span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <TrendingUp size={14} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink, lineHeight: 1.5 }}>\n {percent}\n </span>\n </div>\n </div>\n </div>\n <ChevronDown\n size={20}\n color={C.ink}\n strokeWidth={2}\n style={{\n flexShrink: 0,\n transform: expanded ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n }}\n />\n </button>\n {expanded && rows.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n padding: \"0 16px 16px\",\n }}\n >\n {rows.map((b, i) => (\n <div\n key={i}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n lineHeight: \"24px\",\n gap: 16,\n }}\n >\n {b.href ? (\n <a\n href={b.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: C.ink,\n textDecoration: \"underline\",\n textUnderlineOffset: 2,\n textDecorationColor: C.border,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {b.text}\n </a>\n ) : (\n <span\n style={{\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {b.text}\n </span>\n )}\n <span style={{ display: \"inline-flex\", gap: 4, whiteSpace: \"nowrap\" }}>\n <span style={{ color: C.ink }}>{b.citation}</span>\n <span style={{ color: C.muted }}>({b.date})</span>\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"12px 0\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: \"24px\",\n }}\n >\n <span style={{ color: C.ink }}>{label}</span>\n <span style={{ color: C.muted }}>{value}</span>\n </div>\n );\n}\n\nfunction EmptyState({ message = \"\" }) {\n if (!message) return null;\n return (\n <div\n style={{\n padding: \"16px 0\",\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.muted,\n lineHeight: 1.5,\n }}\n >\n {message}\n </div>\n );\n}\n\nexport default function PerformancePanel({\n className = \"\",\n onAgentClick,\n // Header text — empty defaults so host apps don't see demo copy. Hosts pass\n // their own page title / subtitle (the gallery in dev/App.jsx demonstrates\n // the intended \"Performance\" / \"Agent performance metrics...\" wording).\n title = \"\",\n subtitle = \"\",\n dateRangeLabel = \"\",\n // View-by dropdown. `initialViewBy` seeds internal state on mount;\n // `onViewByChange(id)` fires when the user selects a different option.\n viewByOptions = [],\n initialViewBy = \"\",\n onViewByChange,\n // Label rendered above the View-by option list inside the popover. Empty by\n // default; the gallery passes \"Aggregated By\" to reproduce the Figma copy.\n aggregatedByLabel = \"\",\n // KPI strip\n volumeStat = EMPTY_STAT,\n compassStat = EMPTY_STAT,\n baselineSubStat = EMPTY_STAT,\n agentLiftSubStat = EMPTY_STAT,\n scoreSubStat = EMPTY_STAT,\n // Agent table\n agentRows = [],\n agentColumns = [],\n initialPageSize = 10,\n // Insight sections — all titles, empty-state copy, and the section icons /\n // colors are host-driven so the library renders nothing concrete by default.\n guidanceItems = [],\n strengthItems = [],\n callDrivers = [],\n callParadigms = [],\n topSignalsLeft = [],\n topSignalsRight = [],\n topSignalsTrailing = \"\",\n strengthsTitle = \"\",\n guidanceTitle = \"\",\n callMixTitle = \"\",\n driversTitle = \"\",\n paradigmsTitle = \"\",\n topSignalsTitle = \"\",\n emptyStrengthsMessage = \"\",\n emptyGuidanceMessage = \"\",\n emptyDriversMessage = \"\",\n emptyParadigmsMessage = \"\",\n emptyTopSignalsMessage = \"\",\n // Time-range chips (8h / 1d / 7d / 30d). Override `rangeOptions` to customize.\n // `selectedWindow` is the currently-active option id; `onWindowChange(id)` fires\n // 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 // (Same slot pattern as DataTableFilters2's `dateRangePicker` prop.)\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 // Fires when the user clicks the Export CSV button in the header.\n onExport,\n // Fires whenever the user toggles columns in the table's column picker —\n // hosts can scope their CSV export to whatever the user has visible.\n onVisibleColumnsChange,\n}) {\n const [selectedAgent, setSelectedAgent] = React.useState(null);\n const [viewByOpen, setViewByOpen] = React.useState(false);\n const [viewBy, setViewBy] = React.useState(initialViewBy);\n // Internal fallback for the custom date range when the host doesn't pass\n // `dateRange` / `onDateRangeChange`. Lifted up to this component (rather\n // than living inside DateRangeButton) so the time-range chips can become\n // mutually exclusive with 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 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 const viewByTriggerRef = React.useRef(null);\n const viewByPopoverRef = React.useRef(null);\n\n React.useEffect(() => {\n if (!viewByOpen) return;\n const handler = (e) => {\n if (\n viewByPopoverRef.current?.contains(e.target) ||\n viewByTriggerRef.current?.contains(e.target)\n ) {\n return;\n }\n setViewByOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [viewByOpen]);\n\n const viewByLabel =\n viewByOptions.find((o) => o.id === viewBy)?.label || (viewByOptions[0]?.label ?? \"\");\n\n const handleRowClick = (row) => {\n if (onAgentClick) {\n onAgentClick(row);\n return;\n }\n setSelectedAgent(row);\n };\n\n // Keep the panel (including DataTable2) mounted while a details page is shown,\n // so filters / sort / pagination are preserved when the user navigates back.\n return (\n <>\n {selectedAgent && (() => {\n // Compute the start/end the details page should show. Custom range\n // wins; otherwise derive from the selected window so the chip view\n // and the date display stay consistent across the two pages.\n let detailsFrom = null;\n let detailsTo = null;\n if (customRangeActive) {\n detailsFrom = effectiveDateRange.from;\n detailsTo = effectiveDateRange.to;\n } else {\n const ms = RANGE_TO_MS[selectedWindow];\n if (ms) {\n detailsTo = new Date();\n detailsFrom = new Date(detailsTo.getTime() - ms);\n }\n }\n return (\n <PerformanceDetailsPage\n className={className}\n agentName={selectedAgent.agent}\n startDate={detailsFrom || \"\"}\n endDate={detailsTo || \"\"}\n totalCalls={`${selectedAgent.calls} Calls`}\n onBack={() => setSelectedAgent(null)}\n selectedWindow={selectedWindow}\n dateRange={effectiveDateRange}\n />\n );\n })()}\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_BODY,\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) when drilling into agent details so DataTable2's\n // internal filter / sort / pagination state survives the round trip.\n display: selectedAgent ? \"none\" : \"flex\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8, paddingTop: 12 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 4 }}>\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 }}\n >\n {title}\n </h1>\n <p style={{ fontFamily: FONT_BODY, fontSize: 14, color: \"var(--neutral-950)\", margin: 0, lineHeight: \"1.4\" }}>\n {subtitle}\n </p>\n </div>\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_BODY,\n fontSize: 14,\n color: C.neutral800,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n ref={viewByTriggerRef}\n onClick={() => setViewByOpen((v) => !v)}\n aria-haspopup=\"listbox\"\n aria-expanded={viewByOpen}\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: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n lineHeight: \"24px\",\n color: C.neutral800,\n whiteSpace: \"nowrap\",\n }}\n >\n {viewByLabel}\n <ChevronDown\n size={20}\n strokeWidth={1.75}\n style={{\n transform: viewByOpen ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 120ms ease\",\n }}\n />\n </button>\n {viewByOpen && (\n <div\n ref={viewByPopoverRef}\n role=\"listbox\"\n style={{\n position: \"absolute\",\n top: 36,\n left: 0,\n zIndex: 20,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 4,\n boxShadow: C.shadowDropdown,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 144,\n fontFamily: FONT_BODY,\n }}\n >\n {aggregatedByLabel && (\n <div\n style={{\n padding: 12,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 13,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {aggregatedByLabel}\n </div>\n )}\n {viewByOptions.map((opt) => {\n const isSelected = viewBy === opt.id;\n return (\n <button\n key={opt.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n if (opt.id !== viewBy) {\n setViewBy(opt.id);\n onViewByChange?.(opt.id);\n }\n setViewByOpen(false);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: isSelected ? 12 : \"12px 12px 12px 40px\",\n borderTop: `1px solid ${C.border}`,\n borderLeft: \"none\",\n borderRight: \"none\",\n borderBottom: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: 1.2,\n color: C.ink,\n width: \"100%\",\n }}\n >\n {isSelected && (\n <Check size={20} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n )}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n {(() => {\n // Custom range wins if active; otherwise the active chip drives\n // the label (preserving the legacy `dateRangeLabel` override).\n const customLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : \"\";\n const label = customLabel || dateRangeLabel || computeWindowLabel(selectedWindow);\n return label ? (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.ink,\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {label}\n </span>\n ) : null;\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 <React.Suspense\n fallback={<FilterButton icon={CalendarDays}>Date Range</FilterButton>}\n >\n {dateRangePicker}\n </React.Suspense>\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/* <SearchBar /> */}\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 24 }}>\n <StatCard value={volumeStat.value} label={volumeStat.label} trend={volumeStat.trend} style={{ width: 264, flexShrink: 0 }} />\n <StatCard value={compassStat.value} label={compassStat.label} trend={compassStat.trend} style={{ width: 264, flexShrink: 0 }} />\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 gap: 24,\n alignItems: \"stretch\",\n boxSizing: \"border-box\",\n }}\n >\n <StatSubCell value={baselineSubStat.value} label={baselineSubStat.label} trend={baselineSubStat.trend} />\n <StatSubCell value={agentLiftSubStat.value} label={agentLiftSubStat.label} trend={agentLiftSubStat.trend} withDivider />\n <StatSubCell value={scoreSubStat.value} label={scoreSubStat.label} trend={scoreSubStat.trend} withDivider />\n </div>\n </div>\n\n <DataTable2\n data={agentRows}\n columns={agentColumns}\n initialPageSize={initialPageSize}\n onRowClick={handleRowClick}\n onVisibleColumnsChange={onVisibleColumnsChange}\n />\n\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={ShieldCheck} title={strengthsTitle} iconColor=\"var(--rail-compliance)\" />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n borderBottom: `1px solid ${C.border}`,\n maxHeight: 480,\n overflowY: \"auto\",\n }}\n >\n {strengthItems.length === 0 ? (\n <EmptyState message={emptyStrengthsMessage} />\n ) : (\n strengthItems.map((item, i) => <AccordionItem key={i} {...item} />)\n )}\n </div>\n </div>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Lightbulb} title={guidanceTitle} iconColor=\"var(--rail-compliance)\" />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n borderBottom: `1px solid ${C.border}`,\n maxHeight: 480,\n overflowY: \"auto\",\n }}\n >\n {guidanceItems.length === 0 ? (\n <EmptyState message={emptyGuidanceMessage} />\n ) : (\n guidanceItems.map((item, i) => <AccordionItem key={i} {...item} />)\n )}\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Phone} title={callMixTitle} iconColor=\"var(--rail-compliance)\" />\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <SubSectionHeading icon={FolderKanban} title={driversTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callDrivers.length === 0 ? (\n <EmptyState message={emptyDriversMessage} />\n ) : (\n callDrivers.map((row, i) => <PercentRow key={i} {...row} />)\n )}\n </div>\n </div>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <SubSectionHeading icon={Layers} title={paradigmsTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callParadigms.length === 0 ? (\n <EmptyState message={emptyParadigmsMessage} />\n ) : (\n callParadigms.map((row, i) => <PercentRow key={i} {...row} />)\n )}\n </div>\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Signal} title={topSignalsTitle} iconColor=\"var(--rail-compliance)\" trailing={topSignalsTrailing} bordered />\n {topSignalsLeft.length === 0 && topSignalsRight.length === 0 ? (\n <EmptyState message={emptyTopSignalsMessage} />\n ) : (\n <div style={{ display: \"flex\", gap: 24 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {topSignalsLeft.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {topSignalsRight.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </>\n );\n}\n"],"names":["C","FONT_DISPLAY","FONT_BODY","formatDisplayDate","input","opts","str","ymd","parsed","SPARK_DEFAULT_LINE","SPARK_DEFAULT_AREA","buildSparkPaths","points","vbW","vbH","numeric","p","n","min","max","padY","span","usableH","sx","i","sy","v","line","lastX","firstX","area","Sparkline","trend","width","height","id","React","built","linePath","areaPath","jsxs","jsx","KpiCell","value","label","sub","RangeChip","active","onClick","CompassLineChart","yLabelsProp","xLabels","highlightIndex","hasData","gradId","MAX_X_TICKS","allXLabels","visibleXLabels","_","gridCount","gridXs","gx","dataPairs","yValues","yDataMin","yDataMax","yPad","yMin","yMax","ySpan","normalized","x","y","yLabels","abs","decimals","minX","xSpan","highlight","l","isHighlight","ChartCard","title","delta","children","SectionHeading","Icon","trailing","iconColor","bordered","CitationRow","text","bullet","citation","date","href","AccordionRow","summary","calls","percent","bullets","defaultExpanded","expanded","setExpanded","rows","Phone","TrendingUp","ChevronDown","b","PercentRow","CompassDots","full","hasPartial","DEFAULT_SESSION_COLUMNS","num","SubSectionHeading","PerformanceDetailsPage","agentName","startDate","endDate","totalCalls","onBack","className","kpiBaseline","kpiAgentLift","kpiScore","baselineChart","agentLiftChart","scoreChart","csatChart","volumeChart","guidanceItems","strengthItems","callDrivers","callParadigms","strengthsTitle","guidanceTitle","callMixTitle","driversTitle","paradigmsTitle","sessionsTitle","baselineChartTitle","agentLiftChartTitle","scoreChartTitle","csatChartTitle","volumeChartTitle","sessions","sessionColumns","initialPageSize","selectedWindow","onWindowChange","dateRange","onDateRangeChange","sessionsTotal","sessionsPage","sessionsPageSize","onSessionsPageChange","onSessionsPageSizeChange","onExport","onSessionClick","onSessionsVisibleColumnsChange","customRangeActive","hasChartData","c","showRow1","showRow2","ArrowLeft","Download","CalendarDays","ArrowRight","opt","DateRangeButton","ShieldCheck","item","Lightbulb","FolderKanban","row","Layers","DataTable2","EMPTY_STAT","TrendArrow","direction","color","StatCard","muted","beigeBg","style","StatSubCell","withDivider","FilterButton","Trailing","MONTH_NAMES","DOW_LABELS","startOfDay","d","buildCalendarGrid","year","month","startWeekday","gridStart","DateRangePopover","onApply","onClose","anchorRef","popoverRef","from","setFrom","to","setTo","initialMonth","viewYear","setViewYear","viewMonth","setViewMonth","pos","setPos","updatePosition","r","POPOVER_WIDTH","handleClick","e","_a","_b","handleKey","days","today","handleDayClick","day","goPrev","goNext","isInRange","isEdge","createPortal","navBtnStyle","ChevronLeft","ChevronRight","inMonth","inRange","edge","isToday","isFuture","onChange","open","setOpen","triggerRef","Fragment","o","range","DEFAULT_RANGE_OPTIONS","RANGE_TO_MS","formatLocalDate","computeWindowLabel","windowId","ms","CompassRating","DEFAULT_AGENT_COLUMNS","AccordionItem","EmptyState","message","PerformancePanel","onAgentClick","subtitle","dateRangeLabel","viewByOptions","initialViewBy","onViewByChange","aggregatedByLabel","volumeStat","compassStat","baselineSubStat","agentLiftSubStat","scoreSubStat","agentRows","agentColumns","topSignalsLeft","topSignalsRight","topSignalsTrailing","topSignalsTitle","emptyStrengthsMessage","emptyGuidanceMessage","emptyDriversMessage","emptyParadigmsMessage","emptyTopSignalsMessage","rangeOptions","dateRangePicker","onVisibleColumnsChange","selectedAgent","setSelectedAgent","viewByOpen","setViewByOpen","viewBy","setViewBy","internalDateRange","setInternalDateRange","effectiveDateRange","handleDateRangeChange","handleWindowChange","viewByTriggerRef","viewByPopoverRef","handler","viewByLabel","handleRowClick","detailsFrom","detailsTo","isSelected","Check","Signal"],"mappings":";;;;;AAwBA,MAAMA,IAAI;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,YAAY;AAAA;AAAA,EAEZ,gBAAgB;AAAA,EAChB,cAAc;AAChB,GAEMC,IAAe,oEACfC,IAAY;AAKlB,SAASC,GAAkBC,GAAO;AAChC,MAAI,CAACA;AAAc,WAAA;AACnB,QAAMC,IAAO,EAAE,OAAO,WAAW,KAAK,WAAW,MAAM;AACvD,MAAID,aAAiB;AACZ,WAAA,OAAO,MAAMA,EAAM,QAAS,CAAA,IAAI,KAAKA,EAAM,mBAAmB,SAASC,CAAI;AAEpF,QAAMC,IAAM,OAAOF,CAAK,EAAE,KAAK,GACzBG,IAAMD,EAAI,MAAM,8BAA8B;AACpD,MAAIC;AAEK,WADG,IAAI,KAAK,OAAOA,EAAI,CAAC,CAAC,GAAG,OAAOA,EAAI,CAAC,CAAC,IAAI,GAAG,OAAOA,EAAI,CAAC,CAAC,CAAC,EAC5D,mBAAmB,SAASF,CAAI;AAErC,QAAAG,IAAS,IAAI,KAAKF,CAAG;AAC3B,SAAK,OAAO,MAAME,EAAO,SAAS,IAC3BF,IADqCE,EAAO,mBAAmB,SAASH,CAAI;AAErF;AAIA,MAAMI,KACJ,iNACIC,KACJ;AAKF,SAASC,GAAgBC,GAAQC,IAAM,IAAIC,IAAM,IAAI;AAC/C,MAAA,CAAC,MAAM,QAAQF,CAAM;AAAU,WAAA;AACnC,QAAMG,IAAUH,EACb,IAAI,CAACI,MAAM,OAAOA,CAAC,CAAC,EACpB,OAAO,CAACC,MAAM,OAAO,SAASA,CAAC,CAAC;AACnC,MAAIF,EAAQ,SAAS;AAAU,WAAA;AAC/B,QAAMG,IAAM,KAAK,IAAI,GAAGH,CAAO,GACzBI,IAAM,KAAK,IAAI,GAAGJ,CAAO,GAEzBK,IAAO,GACPC,IAAOF,IAAMD,KAAO,GACpBI,IAAUR,IAAMM,IAAO,IAAI,GAC3BG,IAAK,CAACC,OAAOT,EAAQ,WAAW,IAAI,IAAKS,KAAKT,EAAQ,SAAS,MAAOF,IAAM,MAAM,GAClFY,IAAK,CAACC,MAAMN,KAAQ,KAAKM,IAAIR,KAAOG,KAAQC;AAClD,MAAIK,IAAO;AACX,WAASH,IAAI,GAAGA,IAAIT,EAAQ,QAAQS;AAC1B,IAAAG,KAAA,GAAGH,MAAM,IAAI,MAAM,GAAG,GAAGD,EAAGC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAIC,EAAGV,EAAQS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEhF,QAAMI,IAAQL,EAAGR,EAAQ,SAAS,CAAC,GAC7Bc,IAASN,EAAG,CAAC,GACbO,IAAO,GAAGH,CAAI,KAAKC,EAAM,QAAQ,CAAC,CAAC,IAAId,CAAG,KAAKe,EAAO,QAAQ,CAAC,CAAC,IAAIf,CAAG;AACtE,SAAA,EAAE,MAAAa,GAAM,MAAAG;AACjB;AAEA,SAASC,GAAU,EAAE,OAAAC,IAAQ,MAAM,QAAApB,GAAQ,OAAAqB,IAAQ,QAAQ,QAAAC,IAAS,MAAM;AAClE,QAAAC,IAAKC,EAAM,SACXC,IAAQ1B,GAAgBC,CAAM,GAC9B0B,IAAWD,IAAQA,EAAM,OAAO5B,IAChC8B,IAAWF,IAAQA,EAAM,OAAO3B;AAEpC,SAAA,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAAP;AAAA,MACA,QAAAC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO;AAAA,QACL,YAAY;AAAA;AAAA;AAAA,QAGZ,WAAW,CAACG,KAASL,MAAU,SAAS,eAAe;AAAA,MACzD;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAS,EAAC,QACC,EAAA,UAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI,SAASL,CAAE;AAAA,YACf,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,eAAc;AAAA,YAEd,UAAA;AAAA,cAAC,gBAAAM,EAAA,QAAA,EAAK,WAAWzC,EAAE,IAAK,CAAA;AAAA,cACxB,gBAAAyC,EAAC,UAAK,QAAO,KAAI,WAAWzC,EAAE,OAAO,aAAY,QAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAE5D;AAAA,QACA,gBAAAyC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAGF;AAAA,YACH,MAAM,cAAcJ,CAAE;AAAA,YACtB,UAAS;AAAA,YACT,UAAS;AAAA,YACT,SAAQ;AAAA,UAAA;AAAA,QACV;AAAA,QACA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAGH;AAAA,YACH,QAAQtC,EAAE;AAAA,YACV,aAAY;AAAA,YACZ,MAAK;AAAA,YACL,eAAc;AAAA,YACd,gBAAe;AAAA,YAGf,iBAAiB,CAACqC,KAASL,MAAU,SAAS,QAAQ;AAAA,UAAA;AAAA,QACxD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASU,GAAQ,EAAE,OAAAC,GAAO,OAAAC,GAAO,KAAAC,GAAK,OAAAb,IAAQ,MAAM,QAAApB,KAAU;AAE1D,SAAA,gBAAA4B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA,MACZ;AAAA,MAEA,UAAA;AAAA,QAAC,gBAAAC,EAAAV,IAAA,EAAU,OAAAC,GAAc,QAAApB,EAAgB,CAAA;AAAA,QACxC,gBAAA4B,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,EAAA,GACxE,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAYxC;AAAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,OAAOD,EAAE;AAAA,gBACT,eAAe;AAAA,gBACf,YAAY;AAAA,cACd;AAAA,cAEC,UAAA2C;AAAA,YAAA;AAAA,UACH;AAAA,UACA,gBAAAH,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,YAAYvC;AAAAA,kBACZ,UAAU;AAAA,kBACV,OAAOF,EAAE;AAAA,kBACT,YAAY;AAAA,gBACd;AAAA,gBAEC,UAAA4C;AAAA,cAAA;AAAA,YACH;AAAA,YACA,gBAAAH;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,YAAYvC;AAAAA,kBACZ,UAAU;AAAA,kBACV,OAAOF,EAAE;AAAA,kBACT,YAAY;AAAA,gBACd;AAAA,gBAEC,UAAA6C;AAAA,cAAA;AAAA,YACH;AAAA,UAAA,GACF;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASC,GAAU,EAAE,OAAAF,GAAO,QAAAG,IAAS,IAAO,SAAAC,KAAW;AAEnD,SAAA,gBAAAP;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAO;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQD,IAAS,SAAS,aAAa/C,EAAE,YAAY;AAAA,QACrD,YAAY+C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,QACjC,OAAO+C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,QAC5B,YAAYE;AAAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MAEC,UAAA0C;AAAA,IAAA;AAAA,EAAA;AAGP;AAsCA,SAASK,GAAiB;AAAA;AAAA;AAAA,EAGxB,SAASC;AAAA,EACT,SAAAC,IAAU,CAAC;AAAA;AAAA;AAAA;AAAA,EAIX,QAAAvC;AAAA;AAAA,EAEA,gBAAAwC;AACF,GAAG;AAGD,QAAMC,IAAU,MAAM,QAAQzC,CAAM,KAAKA,EAAO,SAAS,GACnD0C,IAASlB,EAAM,SAGfmB,IAAc,GACdC,IAAa,MAAM,QAAQL,CAAO,IAAIA,IAAU,IAChDM,IACJD,EAAW,UAAUD,IACjBC,IACA,MAAM;AAAA,IAAK,EAAE,QAAQD,EAAY;AAAA,IAAG,CAACG,GAAGlC,MACtCgC,EAAW,KAAK,MAAOhC,KAAKgC,EAAW,SAAS,MAAOD,IAAc,EAAE,CAAC;AAAA,EAAA,GAG1EI,IAAY,KAAK,IAAI,GAAGF,EAAe,UAAUF,CAAW,GAC5DK,IAAS,MAAM,KAAK,EAAE,QAAQD,EAAa,GAAA,CAACD,GAAGlC,MAAOA,KAAKmC,IAAY,KAAM,GAAK;AAExF,MAAI,CAACN;AAIH,WACG,gBAAAb,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAAG,QAAQ,KAAK,OAAO,OAAA,GACzD,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,OAAO,EAAE,OAAO,IAAI,YAAY,KAAK;AAAA,MAC1C,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,UAAU,YAAY,UAAU,EACrD,GAAA,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAQ,MAAS;AAAA,UACjB,SAAS,WAAgB,MAAS,EAAE;AAAA,UACpC,qBAAoB;AAAA,UAEnB,UAAOmB,EAAA,IAAI,CAACC,GAAIrC,MACf,gBAAAiB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,IAAIoB;AAAA,cACJ,IAAG;AAAA,cACH,IAAIA;AAAA,cACJ,IAAI;AAAA,cACJ,QAAQ7D,EAAE;AAAA,cACV,iBAAgB;AAAA,cAChB,aAAY;AAAA,cACZ,cAAa;AAAA,YAAA;AAAA,YARR,QAAQwB,CAAC;AAAA,UAAA,CAUjB;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IACF,EAAA,CAAA;AAKJ,QAAMsC,IAAY,MAAM,QAAQlD,EAAO,CAAC,CAAC,IACrCA,IACAA,EAAO,IAAI,CAAC,GAAGY,MAAM,CAACA,GAAG,CAAC,CAAC,GACzBuC,IAAUD,EAAU,IAAI,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,GACpCE,IAAW,KAAK,IAAI,GAAGD,CAAO,GAC9BE,IAAW,KAAK,IAAI,GAAGF,CAAO,GAG9BG,IAAOD,MAAaD,IAAW,KAAK,IAAI,KAAK,IAAIC,CAAQ,IAAI,KAAK,CAAC,KAAKA,IAAWD,KAAY,KAC/FG,IAAOH,IAAWE,GAClBE,IAAOH,IAAWC,GAClBG,IAAQD,IAAOD,KAAQ,GACvB1C,IAAK,CAAC,OAAQ2C,IAAO,KAAKC,IAAS,KACnCC,IAAaR,EAAU,IAAI,CAAC,CAACS,GAAGC,CAAC,MAAM,CAACD,GAAG9C,EAAG+C,CAAC,CAAC,CAAC,GAIjDC,IACJvB,KAAeA,EAAY,SACvBA,IACA,MAAM,KAAK,EAAE,QAAQ,EAAK,GAAA,CAACQ,GAAGlC,MAAM;AAClC,UAAME,IAAI0C,IAAQ5C,IAAI,KAAM4C,IAAOD,IAC7BO,IAAM,KAAK,IAAIhD,CAAC,GAChBiD,KAAWD,KAAO,MAAM,IAAIA,KAAO,KAAK,IAAI;AAC3C,WAAAhD,EAAE,QAAQiD,EAAQ;AAAA,EAAA,CAC1B,GACDC,IAAON,EAAW,CAAC,EAAE,CAAC,GAEtBO,IADOP,EAAWA,EAAW,SAAS,CAAC,EAAE,CAAC,IAC3BM,KAAQ,GACvBrD,IAAK,CAACgD,OAAQA,IAAIK,KAAQC,IAAS,KACnCvC,IAAWgC,EACd,IAAI,CAAC,CAACC,GAAGC,CAAC,GAAGhD,MAAM,GAAGA,MAAM,IAAI,MAAM,GAAG,GAAGD,EAAGgD,CAAC,CAAC,IAAIC,CAAC,EAAE,EACxD,KAAK,GAAG,GACLjC,IAAW,GAAGD,CAAQ,KAAKf,EAAG+C,EAAWA,EAAW,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,SAAe/C,EAAG+C,EAAW,CAAC,EAAE,CAAC,CAAC,CAAC,UACtGQ,IAAY1B,KAAyBkB,EAAW,SAAS;AAC/D,SACG,gBAAA9B,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAAG,QAAQ,KAAK,OAAO,OAAA,GACzD,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,YAAYvC;AAAAA,UACZ,UAAU;AAAA,UACV,OAAOF,EAAE;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QAEC,UAAAyE,EAAQ,IAAI,CAACM,wBACX,QAAc,EAAA,UAAAA,EAAA,GAAJA,CAAM,CAClB;AAAA,MAAA;AAAA,IACH;AAAA,IACA,gBAAAvC,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,UAAU,YAAY,UAAU,EAAA,GACrD,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAQ,MAAS;AAAA,UACjB,SAAS,WAAgB,MAAS,EAAE;AAAA,UACpC,qBAAoB;AAAA,UAEpB,UAAA;AAAA,YAAA,gBAAAC,EAAC,QACC,EAAA,UAAA,gBAAAD,EAAC,kBAAe,EAAA,IAAI,QAAQc,CAAM,IAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAC5D,UAAA;AAAA,cAAC,gBAAAb,EAAA,QAAA,EAAK,QAAO,MAAK,OAAO,EAAE,WAAWzC,EAAE,OAAO,aAAa,KAAQ,EAAA,CAAA;AAAA,cACpE,gBAAAyC,EAAC,QAAK,EAAA,QAAO,QAAO,OAAO,EAAE,WAAWzC,EAAE,OAAO,aAAa,EAAK,EAAA,CAAA;AAAA,YAAA,EAAA,CACrE,EACF,CAAA;AAAA,YACC4D,EAAO,IAAI,CAACC,GAAIrC,MACf,gBAAAiB;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,IAAIoB;AAAA,gBACJ,IAAG;AAAA,gBACH,IAAIA;AAAA,gBACJ,IAAI;AAAA,gBACJ,QAAQ7D,EAAE;AAAA,gBACV,iBAAgB;AAAA,gBAChB,aAAY;AAAA,gBACZ,cAAa;AAAA,cAAA;AAAA,cARR,QAAQwB,CAAC;AAAA,YAAA,CAUjB;AAAA,8BACA,QAAK,EAAA,GAAGe,GAAU,MAAM,aAAae,CAAM,KAAK;AAAA,YACjD,gBAAAb;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,GAAGH;AAAA,gBACH,QAAQtC,EAAE;AAAA,gBACV,aAAY;AAAA,gBACZ,MAAK;AAAA,gBACL,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,cAAa;AAAA,cAAA;AAAA,YACf;AAAA,YACCsE,EAAW,IAAI,CAAC,CAACC,GAAGC,CAAC,GAAGhD,MAAM;AAC7B,oBAAMwD,IAAcxD,MAAMsD;AAExB,qBAAA,gBAAArC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,IAAIlB,EAAGgD,CAAC;AAAA,kBACR,IAAIC;AAAA,kBACJ,GAAGQ,IAAc,IAAI;AAAA,kBACrB,MAAMA,IAAchF,EAAE,QAAQA,EAAE;AAAA,kBAChC,QAAQA,EAAE;AAAA,kBACV,aAAY;AAAA,kBACZ,cAAa;AAAA,gBAAA;AAAA,gBAPRwB;AAAA,cAAA;AAAA,YAQP,CAEH;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,MACA,gBAAAiB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,YAAYvC;AAAAA,YACZ,UAAU;AAAA,YACV,OAAOF,EAAE;AAAA,YACT,WAAW;AAAA,YACX,UAAU;AAAA,UACZ;AAAA,UAEC,UAAeyD,EAAA,IAAI,CAACsB,GAAGvD,MACrB,gBAAAiB,EAAA,QAAA,EAAa,OAAO,EAAE,YAAY,SAAa,GAAA,UAAAsC,EAAA,GAArCvD,CAAuC,CACnD;AAAA,QAAA;AAAA,MACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,SAASyD,GAAU,EAAE,OAAAC,GAAO,OAAAvC,GAAO,OAAAwC,GAAO,UAAAC,KAAY;AAElD,SAAA,gBAAA5C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAYxC,EAAE;AAAA,QACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,QAC7B,cAAc;AAAA,QACd,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,UAAU;AAAA,QACV,WAAWA,EAAE;AAAA,MACf;AAAA,MAEA,UAAA;AAAA,QAAC,gBAAAwC,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,YAAY,WAAA,GAC1E,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAYxC;AAAAA,gBACZ,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,OAAOD,EAAE;AAAA,gBACT,YAAY;AAAA,cACd;AAAA,cAEC,UAAAkF;AAAA,YAAA;AAAA,UACH;AAAA,UACA,gBAAA1C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,gBACL,YAAYvC;AAAAA,gBACZ,YAAY;AAAA,cACd;AAAA,cAEA,UAAA;AAAA,gBAAC,gBAAAwC,EAAA,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAOzC,EAAE,OAAO,YAAY,EAAE,GAAI,UAAM2C,EAAA,CAAA;AAAA,gBACpE,gBAAAF,EAAA,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAOzC,EAAE,YAAY,YAAY,EAAE,GAAI,UAAMmF,EAAA,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5E;AAAA,QAAA,GACF;AAAA,0BACC,OAAI,EAAA,OAAO,EAAE,MAAM,EAAA,GAAM,UAAAC,GAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzC;AAEA,SAASC,GAAe,EAAE,MAAMC,GAAM,OAAAJ,GAAO,UAAAK,GAAU,WAAAC,IAAYxF,EAAE,KAAK,UAAAyF,IAAW,GAAA,GAAS;AAE1F,SAAA,gBAAAjD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,eAAeiD,IAAW,KAAK;AAAA,QAC/B,cAAcA,IAAW,aAAazF,EAAE,MAAM,KAAK;AAAA,MACrD;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAyC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,YAAY;AAAA,YACd;AAAA,YAEA,UAAA,gBAAAA,EAAC6C,GAAK,EAAA,MAAM,IAAI,aAAa,MAAM,OAAO,EAAE,OAAOE,EAAa,EAAA,CAAA;AAAA,UAAA;AAAA,QAClE;AAAA,QACA,gBAAA/C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,MAAM;AAAA,cACN,YAAYxC;AAAAA,cACZ,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,OAAOD,EAAE;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,eAAe;AAAA,YACjB;AAAA,YAEC,UAAAkF;AAAA,UAAA;AAAA,QACH;AAAA,QACCK,KACC,gBAAA9C,EAAC,OAAI,EAAA,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,IAAA,GAAQ,UAASuF,GAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIrF;AAOA,SAASG,GAAY,EAAE,MAAAC,GAAM,QAAAC,GAAQ,UAAAC,GAAU,MAAAC,GAAM,MAAAC,KAAQ;AACrD,QAAAnD,IAAQ+C,KAAQC,KAAU;AAE9B,SAAA,gBAAApD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAYtC;AAAAA,QACZ,UAAU;AAAA,QACV,OAAOF,EAAE;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,MACP;AAAA,MAEC,UAAA;AAAA,QACC+F,IAAA,gBAAAtD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAAsD;AAAA,YACA,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,OAAO;AAAA,cACL,OAAO/F,EAAE;AAAA,cACT,gBAAgB;AAAA,cAChB,qBAAqB;AAAA,cACrB,qBAAqBA,EAAE;AAAA,cACvB,UAAU;AAAA,cACV,UAAU;AAAA,cACV,cAAc;AAAA,cACd,YAAY;AAAA,YACd;AAAA,YAEC,UAAA4C;AAAA,UAAA;AAAA,QAAA,IAGH,gBAAAH,EAAC,QAAK,EAAA,OAAO,EAAE,UAAU,GAAG,UAAU,UAAU,cAAc,YAAY,YAAY,SAAA,GACnF,UACHG,GAAA;AAAA,QAEF,gBAAAJ,EAAC,QAAK,EAAA,OAAO,EAAE,SAAS,eAAe,KAAK,GAAG,YAAY,SAAA,GACzD,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,OAAOzC,EAAE,OAAQ,UAAS6F,GAAA;AAAA,UACxCC,sBAAQ,QAAK,EAAA,OAAO,EAAE,OAAO9F,EAAE,MAAS,GAAA,UAAA;AAAA,YAAA;AAAA,YAAE8F;AAAA,YAAK;AAAA,UAAA,EAAA,CAAC,IAAU;AAAA,QAAA,GAC7D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASE,GAAa;AAAA,EACpB,OAAAd;AAAA,EACA,SAAAe;AAAA,EACA,OAAAC;AAAA;AAAA;AAAA,EAGA,SAAAC;AAAA,EACA,OAAAhB;AAAA,EACA,SAAAiB;AAAA,EACA,iBAAAC,IAAkB;AACpB,GAAG;AACD,QAAM,CAACC,GAAUC,CAAW,IAAInE,EAAM,SAASiE,CAAe,GACxDd,IAAWY,KAAWhB,KAAS,IAC/BqB,IAAO,MAAM,QAAQJ,CAAO,IAAIA,IAAU;AAK9C,SAAA,gBAAA5D,EAAC,SAAI,OAAO,EAAE,WAAW,aAAaxC,EAAE,MAAM,GAAA,GAC5C,UAAA;AAAA,IAAA,gBAAAwC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM+D,EAAY,CAAC7E,MAAM,CAACA,CAAC;AAAA,QACpC,iBAAe4E;AAAA,QACf,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,SAAS;AAAA,UACT,KAAK;AAAA,UACL,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,WAAW;AAAA,UACX,YAAYpG;AAAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAsC,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,UAAU,EAClF,GAAA,UAAA;AAAA,YAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC3D,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,YAAYvC;AAAAA,oBACZ,YAAY;AAAA,oBACZ,UAAU;AAAA,oBACV,OAAOF,EAAE;AAAA,oBACT,YAAY;AAAA,kBACd;AAAA,kBAEC,UAAAkF;AAAA,gBAAA;AAAA,cACH;AAAA,cACC,gBAAAzC,EAAA,QAAA,EAAK,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,OAAO,YAAY,OAAA,GAC7E,UACHiG,GAAA;AAAA,YAAA,GACF;AAAA,YACA,gBAAAzD,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAClC,GAAA,UAAA;AAAA,cAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,gBAAA,gBAAAC,EAACgE,MAAM,MAAM,IAAI,OAAOzG,EAAE,KAAK,aAAa,MAAM;AAAA,gBACjD,gBAAAyC,EAAA,QAAA,EAAK,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,IAAI,GAAI,UAAMkG,EAAA,CAAA;AAAA,cAAA,GAC7E;AAAA,cACA,gBAAA1D,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,gBAAA,gBAAAC,EAACiE,MAAW,MAAM,IAAI,OAAO1G,EAAE,KAAK,aAAa,MAAM;AAAA,gBACtD,gBAAAyC,EAAA,QAAA,EAAK,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,IAAI,GAAI,UAASuF,EAAA,CAAA;AAAA,cAAA,GAChF;AAAA,YAAA,GACF;AAAA,UAAA,GACF;AAAA,UACA,gBAAA9C;AAAA,YAACkE;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,OAAO3G,EAAE;AAAA,cACT,aAAa;AAAA,cACb,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,WAAWsG,IAAW,mBAAmB;AAAA,gBACzC,YAAY;AAAA,cACd;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACCA,KAAYE,EAAK,SAAS,KACzB,gBAAA/D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,KAAK;AAAA,UACL,SAAS;AAAA,QACX;AAAA,QAEC,UAAA+D,EAAK,IAAI,CAACI,GAAGpF,wBACXkE,IAAqB,EAAA,GAAGkB,EAAP,GAAApF,CAAU,CAC7B;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,SAASqF,GAAW,EAAE,OAAAjE,GAAO,OAAAD,KAAS;AAElC,SAAA,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,cAAc,aAAaxC,EAAE,MAAM;AAAA,QACnC,YAAYE;AAAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAuC,EAAC,UAAK,OAAO,EAAE,OAAOzC,EAAE,OAAQ,UAAM4C,GAAA;AAAA,QACtC,gBAAAH,EAAC,UAAK,OAAO,EAAE,OAAOzC,EAAE,SAAU,UAAM2C,GAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9C;AAEA,SAASmE,GAAY,EAAE,OAAAnE,IAAQ,GAAG,KAAAxB,IAAM,KAAK;AAC3C,QAAMO,IAAI,OAAOiB,KAAU,WAAWA,IAAQ,WAAWA,CAAK,KAAK,GAC7DoE,IAAO,KAAK,MAAMrF,CAAC,GACnBsF,IAAatF,IAAI,IAAI,KAAKqF,IAAO5F;AACvC,2BACG,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACnC,gBAAM,KAAK,EAAE,QAAQA,EAAK,CAAA,EAAE,IAAI,CAACuC,GAAGlC,MAC/BA,IAAIuF,IAEJ,gBAAAtE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAYzC,EAAE;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IAAA;AAAA,IAPKwB;AAAA,EAAA,IAWPA,MAAMuF,KAAQC,IAEd,gBAAAvE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAClB;AAAA,MAEA,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAYzC,EAAE;AAAA,YACd,SAAS;AAAA,UACX;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAlBKwB;AAAA,EAAA,IAuBT,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAYzC,EAAE;AAAA,QACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,QAC7B,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IAAA;AAAA,IATKwB;AAAA,EAAA,CAYV,EACH,CAAA;AAEJ;AAEO,MAAMyF,KAA0B;AAAA,EACrC,EAAE,IAAI,SAAS,OAAO,SAAS,OAAO,KAAK,UAAU,IAAM,YAAY,GAAK;AAAA,EAC5E,EAAE,IAAI,QAAQ,OAAO,QAAQ,OAAO,KAAK,UAAU,GAAK;AAAA,EACxD,EAAE,IAAI,YAAY,OAAO,YAAY,OAAO,KAAK,UAAU,GAAK;AAAA,EAChE,EAAE,IAAI,QAAQ,OAAO,QAAQ,OAAO,KAAK,UAAU,GAAK;AAAA,EACxD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ,CAACtE,MAAU;AACjB,YAAMuE,IAAM,OAAOvE,KAAU,WAAWA,IAAQ,WAAWA,CAAK,KAAK;AAEnE,aAAA,gBAAAH,EAAC,QAAK,EAAA,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,GAAA,GAChE,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,UAAU,MAAO,UAAME,GAAA;AAAA,QACtC,gBAAAF,EAACqE,IAAY,EAAA,OAAOI,EAAK,CAAA;AAAA,MAC3B,EAAA,CAAA;AAAA,IAEJ;AAAA,EACF;AACF;AAGA,SAASC,GAAkB,EAAE,MAAM7B,GAAM,OAAAJ,KAAS;AAChD,SACG,gBAAA1C,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,OAAO,OAAA,GACnE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAYzC,EAAE;AAAA,UACd,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,YAAY;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAyC,EAAC6C,KAAK,MAAM,IAAI,OAAOtF,EAAE,KAAK,aAAa,KAAM,CAAA;AAAA,MAAA;AAAA,IACnD;AAAA,IACA,gBAAAyC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,YAAYxC;AAAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAOD,EAAE;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QAEC,UAAAkF;AAAA,MAAA;AAAA,IACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,SAAwBkC,GAAuB;AAAA,EAC7C,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,SAAAC,IAAU;AAAA,EACV,YAAAC,IAAa;AAAA,EACb,QAAAC;AAAA,EACA,WAAAC,IAAY;AAAA;AAAA,EAEZ,aAAAC,IAAc,EAAE,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK;AAAA,EAC3D,cAAAC,IAAe,EAAE,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,OAAO;AAAA,EAC9D,UAAAC,IAAW,EAAE,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA,EAIxD,eAAAC,IAAgB,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,EACvC,gBAAAC,IAAiB,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,EACxC,YAAAC,IAAa,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,EACpC,WAAAC,IAAY,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,EACnC,aAAAC,IAAc,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA;AAAA;AAAA,EAGrC,eAAAC,IAAgB,CAAC;AAAA,EACjB,eAAAC,IAAgB,CAAC;AAAA,EACjB,aAAAC,IAAc,CAAC;AAAA,EACf,eAAAC,IAAgB,CAAC;AAAA,EACjB,gBAAAC,IAAiB;AAAA,EACjB,eAAAC,IAAgB;AAAA,EAChB,cAAAC,IAAe;AAAA,EACf,cAAAC,IAAe;AAAA,EACf,gBAAAC,IAAiB;AAAA,EACjB,eAAAC,IAAgB;AAAA,EAChB,oBAAAC,IAAqB;AAAA,EACrB,qBAAAC,IAAsB;AAAA,EACtB,iBAAAC,IAAkB;AAAA,EAClB,gBAAAC,IAAiB;AAAA,EACjB,kBAAAC,IAAmB;AAAA;AAAA,EAEnB,UAAAC,IAAW,CAAC;AAAA,EACZ,gBAAAC,IAAiB,CAAC;AAAA,EAClB,iBAAAC,IAAkB;AAAA;AAAA;AAAA;AAAA,EAIlB,gBAAAC,IAAiB;AAAA,EACjB,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA;AAAA;AAAA;AAAA,EAIA,eAAAC,IAAgB;AAAA,EAChB,cAAAC,KAAe;AAAA,EACf,kBAAAC,KAAmB;AAAA,EACnB,sBAAAC;AAAA,EACA,0BAAAC;AAAA;AAAA;AAAA,EAGA,UAAAC;AAAA;AAAA,EAEA,gBAAAC;AAAA;AAAA;AAAA,EAGA,gCAAAC;AACF,GAAG;AACD,QAAMC,KAAoB,CAAC,EAAEV,KAAA,QAAAA,EAAW,SAAQA,KAAA,QAAAA,EAAW,MAMrDW,IAAe,CAACC,MACpB,CAAC,EAAEA,MAAMA,EAAE,SAASA,EAAE,SAAU,MAAM,QAAQA,EAAE,MAAM,KAAKA,EAAE,OAAO,SAAS,KACzEC,KACJF,EAAapC,CAAa,KAAKoC,EAAanC,CAAc,KAAKmC,EAAalC,CAAU,GAClFqC,KAAWH,EAAajC,CAAS,KAAKiC,EAAahC,CAAW;AAGlE,SAAA,gBAAA1F;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAAkF;AAAA,MACA,OAAO;AAAA,QACL,YAAY1H,EAAE;AAAA,QACd,YAAYE;AAAAA,QACZ,OAAOF,EAAE;AAAA,QACT,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS;AAAA,QACT,eAAe;AAAA,MACjB;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAwC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,SAAS;AAAA,cACT,WAAW;AAAA,cACX,WAAW;AAAA,YACb;AAAA,YAEA,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,cAAW;AAAA,kBACX,SAASgF;AAAA,kBACT,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,QAAQ;AAAA,oBACR,OAAOzH,EAAE;AAAA,oBACT,SAAS;AAAA,oBACT,YAAY;AAAA,kBACd;AAAA,kBAEA,UAAC,gBAAAyC,EAAA6H,IAAA,EAAU,MAAM,IAAI,aAAa,MAAM;AAAA,gBAAA;AAAA,cAC1C;AAAA,cACA,gBAAA7H;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,aAAa;AAAA,oBACb,YAAY,aAAazC,EAAE,MAAM;AAAA,oBACjC,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV,WAAW;AAAA,oBACX,SAAS;AAAA,oBACT,YAAY;AAAA,kBACd;AAAA,kBAEA,UAAA,gBAAAyC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,YAAYxC;AAAAA,wBACZ,UAAU;AAAA,wBACV,YAAY;AAAA,wBACZ,OAAOD,EAAE;AAAA,wBACT,QAAQ;AAAA,wBACR,YAAY;AAAA,wBACZ,YAAY;AAAA,sBACd;AAAA,sBAEC,UAAAqH;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cACF;AAAA,cACA,gBAAA7E;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,MAAMsH,KAAA,gBAAAA;AAAA,kBACf,UAAU,CAACA;AAAA,kBACX,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,QAAQ,aAAa9J,EAAE,aAAa;AAAA,oBACpC,YAAYA,EAAE;AAAA,oBACd,QAAQ8J,IAAW,YAAY;AAAA,oBAC/B,SAASA,IAAW,IAAI;AAAA,oBACxB,YAAY5J;AAAAA,oBACZ,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,OAAOF,EAAE;AAAA,oBACT,YAAY;AAAA,kBACd;AAAA,kBAEA,UAAA;AAAA,oBAAA,gBAAAyC,EAAC8H,IAAS,EAAA,MAAM,IAAI,aAAa,MAAM;AAAA,oBAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAE3C;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QAEA,gBAAA/H;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,eAAe;AAAA,cACf,KAAK;AAAA,YACP;AAAA,YAEA,UAAA;AAAA,cAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,aAAa;AAAA,kBACf;AAAA,kBAEA,UAAA;AAAA,oBAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,YAAY,SAAA,GAClD,UAAA;AAAA,sBAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,EAAA,GAC/D,UAAA;AAAA,wBAAA,gBAAAC,EAAC+H,IAAa,EAAA,MAAM,IAAI,OAAOxK,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,EAAK,EAAA,CAAA;AAAA,wBACnF,gBAAAyC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAO;AAAA,8BACL,YAAYvC;AAAAA,8BACZ,UAAU;AAAA,8BACV,OAAOF,EAAE;AAAA,8BACT,YAAY;AAAA,4BACd;AAAA,4BAEC,aAAkBsH,CAAS;AAAA,0BAAA;AAAA,wBAC9B;AAAA,wBACC,gBAAA7E,EAAAgI,IAAA,EAAW,MAAM,IAAI,OAAOzK,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,EAAK,EAAA,CAAA;AAAA,wBACjF,gBAAAyC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAO;AAAA,8BACL,YAAYvC;AAAAA,8BACZ,UAAU;AAAA,8BACV,OAAOF,EAAE;AAAA,8BACT,YAAY;AAAA,4BACd;AAAA,4BAEC,aAAkBuH,CAAO;AAAA,0BAAA;AAAA,wBAC5B;AAAA,sBAAA,GACF;AAAA,sBACA,gBAAA/E,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,EAAA,GAC/D,UAAA;AAAA,wBAAA,gBAAAC,EAACgE,IAAM,EAAA,MAAM,IAAI,OAAOzG,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,EAAK,EAAA,CAAA;AAAA,wBAC5E,gBAAAyC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAO;AAAA,8BACL,YAAYvC;AAAAA,8BACZ,UAAU;AAAA,8BACV,OAAOF,EAAE;AAAA,8BACT,YAAY;AAAA,4BACd;AAAA,4BAEC,UAAAwH;AAAA,0BAAA;AAAA,wBACH;AAAA,sBAAA,GACF;AAAA,oBAAA,GACF;AAAA,oBACA,gBAAAhF,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAA,GACvD,UAAA;AAAA,sBAAA;AAAA,wBACC,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,wBACxB,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,wBACxB,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,wBACxB,EAAE,IAAI,OAAO,OAAO,MAAM;AAAA,sBAAA,EAC1B,IAAI,CAACkI,MACL,gBAAAjI;AAAA,wBAACK;AAAAA,wBAAA;AAAA,0BAEC,OAAO4H,EAAI;AAAA,0BACX,QAAQ,CAACT,MAAqBS,EAAI,OAAOrB;AAAA,0BACzC,SAAS,MAAMC,KAAA,gBAAAA,EAAiBoB,EAAI;AAAA,wBAAE;AAAA,wBAHjCA,EAAI;AAAA,sBAAA,CAKZ;AAAA,sBACA,gBAAAjI,EAAAkI,IAAA,EAAgB,OAAOpB,GAAW,UAAUC,IAAmB;AAAA,oBAAA,GAClE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,cAEA,gBAAAhH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,YAAYxC,EAAE;AAAA,oBACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,oBAC7B,cAAc;AAAA,oBACd,SAAS;AAAA,oBACT,SAAS;AAAA,oBACT,KAAK;AAAA,oBACL,YAAY;AAAA,kBACd;AAAA,kBAEA,UAAA;AAAA,oBAAA,gBAAAyC;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,OAAOiF,EAAY;AAAA,wBACnB,OAAOA,EAAY;AAAA,wBACnB,KAAKA,EAAY;AAAA,wBACjB,OAAOA,EAAY;AAAA,wBACnB,QAAQA,EAAY;AAAA,sBAAA;AAAA,oBACtB;AAAA,oBACC,gBAAAlF,EAAAgI,IAAA,EAAW,MAAM,IAAI,OAAOzK,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,EAAK,EAAA,CAAA;AAAA,oBACjF,gBAAAyC;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,OAAOkF,EAAa;AAAA,wBACpB,OAAOA,EAAa;AAAA,wBACpB,KAAKA,EAAa;AAAA,wBAClB,OAAOA,EAAa;AAAA,wBACpB,QAAQA,EAAa;AAAA,sBAAA;AAAA,oBACvB;AAAA,oBACC,gBAAAnF,EAAAgI,IAAA,EAAW,MAAM,IAAI,OAAOzK,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,EAAK,EAAA,CAAA;AAAA,oBACjF,gBAAAyC;AAAA,sBAACC;AAAA,sBAAA;AAAA,wBACC,OAAOmF,EAAS;AAAA,wBAChB,OAAOA,EAAS;AAAA,wBAChB,KAAKA,EAAS;AAAA,wBACd,OAAOA,EAAS;AAAA,wBAChB,QAAQA,EAAS;AAAA,sBAAA;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,cAECuC,wBACE,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,GACjC,GAAA,UAAA;AAAA,gBAAaF,EAAApC,CAAa,KACzB,gBAAArF,EAACwC,IAAU,EAAA,OAAO4D,GAAoB,OAAOf,EAAc,OAAO,OAAOA,EAAc,OACrF,UAAA,gBAAArF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAAS6E,EAAc;AAAA,oBACvB,SAASA,EAAc;AAAA,oBACvB,QAAQA,EAAc;AAAA,kBAAA;AAAA,gBAAA,GAE1B;AAAA,gBAEDoC,EAAanC,CAAc,KAC1B,gBAAAtF,EAACwC,IAAU,EAAA,OAAO6D,GAAqB,OAAOf,EAAe,OAAO,OAAOA,EAAe,OACxF,UAAA,gBAAAtF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAAS8E,EAAe;AAAA,oBACxB,SAASA,EAAe;AAAA,oBACxB,QAAQA,EAAe;AAAA,kBAAA;AAAA,gBAAA,GAE3B;AAAA,gBAEDmC,EAAalC,CAAU,KACtB,gBAAAvF,EAACwC,IAAU,EAAA,OAAO8D,GAAiB,OAAOf,EAAW,OAAO,OAAOA,EAAW,OAC5E,UAAA,gBAAAvF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAAS+E,EAAW;AAAA,oBACpB,SAASA,EAAW;AAAA,oBACpB,QAAQA,EAAW;AAAA,kBAAA;AAAA,gBAAA,GAEvB;AAAA,cAAA,GAEJ;AAAA,cAGDqC,wBACE,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,GACjC,GAAA,UAAA;AAAA,gBAAaH,EAAAjC,CAAS,KACrB,gBAAAxF,EAACwC,IAAU,EAAA,OAAO+D,GAAgB,OAAOf,EAAU,OAAO,OAAOA,EAAU,OACzE,UAAA,gBAAAxF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAASgF,EAAU;AAAA,oBACnB,SAASA,EAAU;AAAA,oBACnB,QAAQA,EAAU;AAAA,kBAAA;AAAA,gBAAA,GAEtB;AAAA,gBAEDiC,EAAahC,CAAW,KACvB,gBAAAzF,EAACwC,IAAU,EAAA,OAAOgE,GAAkB,OAAOf,EAAY,OAAO,OAAOA,EAAY,OAC/E,UAAA,gBAAAzF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,SAASiF,EAAY;AAAA,oBACrB,SAASA,EAAY;AAAA,oBACrB,QAAQA,EAAY;AAAA,kBAAA;AAAA,gBAAA,GAExB;AAAA,cAAA,GAEJ;AAAA,cAGD,gBAAA1F,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,WAAW,GAAG,YAAY,aAAA,GAChE,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,UAAU,EAClF,GAAA,UAAA;AAAA,kBAAA,gBAAAC,EAAC4C,MAAe,MAAMuF,IAAa,OAAOrC,GAAgB,WAAWvI,EAAE,gBAAgB;AAAA,kBACvF,gBAAAyC,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAA,GAChF,UAAc2F,EAAA,IAAI,CAACyC,GAAMrJ,MACxB,gBAAAiB,EAACuD,MAAsB,GAAG6E,EAAA,GAAPrJ,CAAa,CACjC,EACH,CAAA;AAAA,gBAAA,GACF;AAAA,gBACC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,UAAU,EAClF,GAAA,UAAA;AAAA,kBAAA,gBAAAC,EAAC4C,MAAe,MAAMyF,IAAW,OAAOtC,GAAe,WAAWxI,EAAE,cAAc;AAAA,kBAClF,gBAAAyC,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAA,GAChF,UAAc0F,EAAA,IAAI,CAAC0C,GAAMrJ,MACxB,gBAAAiB,EAACuD,MAAsB,GAAG6E,EAAA,GAAPrJ,CAAa,CACjC,EACH,CAAA;AAAA,gBAAA,GACF;AAAA,cAAA,GACF;AAAA,cAEC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,WAAW,EAAA,GAC1E,UAAA;AAAA,gBAAA,gBAAAC,EAAC4C,MAAe,MAAMoB,IAAO,OAAOgC,GAAc,WAAWzI,EAAE,gBAAgB;AAAA,gBAC/E,gBAAAwC,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,YAAY,aAAA,GAClD,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,EACjF,GAAA,UAAA;AAAA,oBAAA,gBAAAC,EAAC0E,IAAkB,EAAA,MAAM4D,IAAc,OAAOrC,GAAc;AAAA,oBAC5D,gBAAAjG,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAA,GAChF,UAAY4F,EAAA,IAAI,CAAC2C,GAAKxJ,MACrB,gBAAAiB,EAACoE,MAAoB,GAAGmE,EAAA,GAAPxJ,CAAY,CAC9B,EACH,CAAA;AAAA,kBAAA,GACF;AAAA,kBACC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,EACjF,GAAA,UAAA;AAAA,oBAAA,gBAAAC,EAAC0E,IAAkB,EAAA,MAAM8D,IAAQ,OAAOtC,GAAgB;AAAA,oBACxD,gBAAAlG,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAA,GAChF,UAAc6F,EAAA,IAAI,CAAC0C,GAAKxJ,MACvB,gBAAAiB,EAACoE,MAAoB,GAAGmE,EAAA,GAAPxJ,CAAY,CAC9B,EACH,CAAA;AAAA,kBAAA,GACF;AAAA,gBAAA,GACF;AAAA,cAAA,GACF;AAAA,cAEC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,WAAW,EAAA,GACzE,UAAA;AAAA,gBACCoG,KAAA,gBAAAnG;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACL,YAAYxC;AAAAA,sBACZ,YAAY;AAAA,sBACZ,UAAU;AAAA,sBACV,OAAOD,EAAE;AAAA,sBACT,YAAY;AAAA,oBACd;AAAA,oBAEC,UAAA4I;AAAA,kBAAA;AAAA,gBACH;AAAA,gBAEF,gBAAAnG;AAAA,kBAACyI;AAAA,kBAAA;AAAA,oBACC,MAAMhC;AAAA,oBACN,SAASC;AAAA,oBACT,iBAAAC;AAAA,oBACA,YAAYK;AAAA,oBACZ,MAAMC;AAAA,oBACN,UAAUC;AAAA,oBACV,cAAcC;AAAA,oBACd,kBAAkBC;AAAA,oBAClB,YAAYE;AAAA,oBACZ,wBAAwBC;AAAA,kBAAA;AAAA,gBAC1B;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACnsCA,MAAMmB,KAAa,EAAE,OAAO,IAAI,OAAO,IAAI,OAAO,QAI5CnL,IAAI;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA;AAAA,EAEP,YAAY;AAAA;AAAA,EACZ,SAAS;AAAA;AAAA,EACT,eAAe;AAAA;AAAA,EACf,aAAa;AAAA;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA;AAClB,GAEMC,IAAe,oEACfC,IAAY;AAElB,SAAS6B,GAAU,EAAE,OAAAC,IAAQ,MAAM,OAAAC,IAAQ,QAAQ,QAAAC,IAAS,MAAM;AAC1D,QAAAC,IAAKC,EAAM,SACXE,IACJ,iNACIC,IACJ;AAEA,SAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAAP;AAAA,MACA,QAAAC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,WAAWF,MAAU,SAAS,eAAe;AAAA,MAC/C;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAS,EAAC,QACC,EAAA,UAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI,SAASL,CAAE;AAAA,YACf,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,eAAc;AAAA,YAEd,UAAA;AAAA,cAAC,gBAAAM,EAAA,QAAA,EAAK,WAAWzC,EAAE,IAAK,CAAA;AAAA,cACxB,gBAAAyC,EAAC,UAAK,QAAO,KAAI,WAAWzC,EAAE,OAAO,aAAY,QAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAE5D;AAAA,QACA,gBAAAyC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAGF;AAAA,YACH,MAAM,cAAcJ,CAAE;AAAA,YACtB,UAAS;AAAA,YACT,UAAS;AAAA,YACT,SAAQ;AAAA,UAAA;AAAA,QACV;AAAA,QACA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACCH;AAAA,YACA,QAAQtC,EAAE;AAAA,YACV,aAAY;AAAA,YACZ,MAAK;AAAA,YACL,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,iBAAiBgC,MAAU,SAAS,QAAQ;AAAA,UAAA;AAAA,QAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASoJ,GAAW,EAAE,WAAAC,IAAY,MAAM,OAAAC,IAAQtL,EAAE,SAAS;AAKzD,SACG,gBAAAyC,EAAA,OAAA,EAAI,OAAO,IAAI,QAAQ,KAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,YAAY,KAChF,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAG4I,MAAc,OANrB,sGAEA;AAAA,MAKI,QAAQC;AAAA,MACR,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAEnB,EAAA,CAAA;AAEJ;AAEA,SAASC,GAAS,EAAE,OAAA5I,GAAO,OAAAC,GAAO,OAAAZ,IAAQ,MAAM,OAAAwJ,IAAQ,IAAO,SAAAC,IAAU,IAAO,OAAAC,IAAQ,MAAM;AAE1F,SAAA,gBAAAlJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAYiJ,IAAUzL,EAAE,QAAQA,EAAE;AAAA,QAClC,QAAQ,aAAaA,EAAE,MAAM;AAAA,QAC7B,cAAc;AAAA,QACd,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,WAAW;AAAA,QACX,GAAG0L;AAAA,MACL;AAAA,MAEA,UAAA;AAAA,QAAC,gBAAAlJ,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,cAAc,gBAAgB,gBAAA,GACvE,UAAA;AAAA,UAAA,gBAAAC,EAACV,MAAU,OAAAC,GAAc;AAAA,UACzB,gBAAAS,EAAC2I,IAAW,EAAA,WAAWpJ,EAAO,CAAA;AAAA,QAAA,GAChC;AAAA,QACC,gBAAAQ,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,WAAW,EAAA,GACzE,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAYxC;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,OAAOuL,IAAQxL,EAAE,QAAQA,EAAE;AAAA,gBAC3B,eAAe;AAAA,cACjB;AAAA,cAEC,UAAA2C;AAAA,YAAA;AAAA,UACH;AAAA,UACC,gBAAAF,EAAA,OAAA,EAAI,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,KAAK,YAAY,MAAA,GAAU,UAAM4C,GAAA;AAAA,QAAA,GAC/F;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS+I,GAAY,EAAE,OAAAhJ,GAAO,OAAAC,GAAO,OAAAZ,IAAQ,MAAM,aAAA4J,IAAc,MAAS;AAEtE,SAAA,gBAAApJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,aAAaoJ,IAAc,KAAK;AAAA,QAChC,YAAYA,IAAc,aAAa5L,EAAE,MAAM,KAAK;AAAA,QACpD,UAAU;AAAA,MACZ;AAAA,MAEA,UAAA;AAAA,QAAC,gBAAAwC,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,cAAc,gBAAgB,gBAAA,GACvE,UAAA;AAAA,UAAA,gBAAAC,EAACV,MAAU,OAAAC,GAAc;AAAA,UACzB,gBAAAS,EAAC2I,IAAW,EAAA,WAAWpJ,EAAO,CAAA;AAAA,QAAA,GAChC;AAAA,QACC,gBAAAQ,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,WAAW,EAAA,GACzE,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAYxC;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,OAAOD,EAAE;AAAA,gBACT,eAAe;AAAA,cACjB;AAAA,cAEC,UAAA2C;AAAA,YAAA;AAAA,UACH;AAAA,UACC,gBAAAF,EAAA,OAAA,EAAI,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,KAAK,YAAY,MAAA,GAAU,UAAM4C,GAAA;AAAA,QAAA,GAC/F;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASiJ,GAAa,EAAE,MAAMvG,GAAM,UAAAF,GAAU,UAAU0G,KAAY;AAEhE,SAAA,gBAAAtJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ,aAAaxC,EAAE,aAAa;AAAA,QACpC,YAAYA,EAAE;AAAA,QACd,QAAQ;AAAA,QACR,YAAYE;AAAA,QACZ,UAAU;AAAA,QACV,OAAOF,EAAE;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEC,UAAA;AAAA,QAAAsF,KAAS,gBAAA7C,EAAA6C,GAAA,EAAK,MAAM,IAAI,aAAa,MAAM;AAAA,QAC3CF;AAAA,QACA0G,KAAa,gBAAArJ,EAAAqJ,GAAA,EAAS,MAAM,IAAI,aAAa,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvD;AAEA,MAAMC,KAAc;AAAA,EAClB;AAAA,EAAW;AAAA,EAAY;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAa;AAAA,EAAW;AAAA,EAAY;AACxD,GACMC,KAAa,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAE5D,SAASC,GAAWC,GAAG;AACf,QAAA3H,IAAI,IAAI,KAAK2H,CAAC;AACpB,SAAA3H,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,GACdA;AACT;AAEA,SAAS4H,GAAkBC,GAAMC,GAAO;AAGhC,QAAAC,IADQ,IAAI,KAAKF,GAAMC,GAAO,CAAC,EACV,UACrBE,IAAY,IAAI,KAAKH,GAAMC,GAAO,IAAIC,CAAY;AACjD,SAAA,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC5I,GAAGlC,MAAM;AACpC,UAAA0K,IAAI,IAAI,KAAKK,CAAS;AAC5B,WAAAL,EAAE,QAAQK,EAAU,QAAQ,IAAI/K,CAAC,GAC1B0K;AAAA,EAAA,CACR;AACH;AAEA,SAASM,GAAiB,EAAE,OAAA7J,GAAO,SAAA8J,GAAS,SAAAC,GAAS,WAAAC,KAAa;AAC1D,QAAAC,IAAaxK,EAAM,OAAO,IAAI,GAC9B,CAACyK,GAAMC,CAAO,IAAI1K,EAAM,SAASO,KAAA,QAAAA,EAAO,OAAOsJ,GAAWtJ,EAAM,IAAI,IAAI,IAAI,GAC5E,CAACoK,GAAIC,CAAK,IAAI5K,EAAM,SAASO,KAAA,QAAAA,EAAO,KAAKsJ,GAAWtJ,EAAM,EAAE,IAAI,IAAI,GACpEsK,IAAeJ,KAAQ,oBAAI,QAC3B,CAACK,GAAUC,CAAW,IAAI/K,EAAM,SAAS6K,EAAa,aAAa,GACnE,CAACG,GAAWC,CAAY,IAAIjL,EAAM,SAAS6K,EAAa,UAAU,GAClE,CAACK,GAAKC,CAAM,IAAInL,EAAM,SAAS,EAAE,KAAK,GAAG,MAAM,EAAG,CAAA;AAKxDA,EAAAA,EAAM,gBAAgB,MAAM;AAC1B,UAAMoL,IAAiB,MAAM;AAC3B,UAAI,EAACb,KAAA,QAAAA,EAAW;AAAS;AACnB,YAAAc,IAAId,EAAU,QAAQ,sBAAsB,GAC5Ce,IAAgB;AACf,MAAAH,EAAA;AAAA,QACL,KAAKE,EAAE,SAAS;AAAA,QAChB,MAAM,KAAK,IAAI,GAAGA,EAAE,QAAQC,CAAa;AAAA,MAAA,CAC1C;AAAA,IAAA;AAEY,WAAAF,KACR,OAAA,iBAAiB,UAAUA,GAAgB,EAAI,GAC/C,OAAA,iBAAiB,UAAUA,CAAc,GACzC,MAAM;AACJ,aAAA,oBAAoB,UAAUA,GAAgB,EAAI,GAClD,OAAA,oBAAoB,UAAUA,CAAc;AAAA,IAAA;AAAA,EACrD,GACC,CAACb,CAAS,CAAC,GAGdvK,EAAM,UAAU,MAAM;AACd,UAAAuL,IAAc,CAACC,MAAM;;AACzB,OAAIC,IAAAjB,EAAW,YAAX,QAAAiB,EAAoB,SAASD,EAAE,YAC/BE,IAAAnB,KAAA,gBAAAA,EAAW,YAAX,QAAAmB,EAAoB,SAASF,EAAE,WAC3BlB;IAAA,GAEJqB,IAAY,CAACH,MAAM;AAAE,MAAIA,EAAE,QAAQ,YAAkBlB;IAAA;AAClD,oBAAA,iBAAiB,aAAaiB,CAAW,GACzC,SAAA,iBAAiB,WAAWI,CAAS,GACvC,MAAM;AACF,eAAA,oBAAoB,aAAaJ,CAAW,GAC5C,SAAA,oBAAoB,WAAWI,CAAS;AAAA,IAAA;AAAA,EACnD,GACC,CAACrB,GAASC,CAAS,CAAC;AAEjB,QAAAqB,IAAO7B,GAAkBe,GAAUE,CAAS,GAC5Ca,IAAQhC,GAAe,oBAAA,KAAM,CAAA,GAE7BiC,IAAiB,CAAChC,MAAM;AACtB,UAAAiC,IAAMlC,GAAWC,CAAC;AAExB,IAAIiC,IAAMF,MACN,CAACpB,KAASA,KAAQE,KACpBD,EAAQqB,CAAG,GACXnB,EAAM,IAAI,KACDmB,IAAMtB,IACfC,EAAQqB,CAAG,IAEXnB,EAAMmB,CAAG;AAAA,EACX,GAGIC,IAAS,MAAM;AACnB,IAAIhB,MAAc,KAAKC,EAAa,EAAE,GAAGF,EAAYD,IAAW,CAAC,KAC5DG,EAAaD,IAAY,CAAC;AAAA,EAAA,GAE3BiB,IAAS,MAAM;AACnB,IAAIjB,MAAc,MAAMC,EAAa,CAAC,GAAGF,EAAYD,IAAW,CAAC,KAC5DG,EAAaD,IAAY,CAAC;AAAA,EAAA,GAG3BkB,IAAY,CAACpC,MAAMW,KAAQE,KAAMb,KAAKW,KAAQX,KAAKa,GACnDwB,IAAS,CAACrC,MAAOW,KAAQX,EAAE,QAAQ,MAAMW,EAAK,aAAeE,KAAMb,EAAE,QAAQ,MAAMa,EAAG;AAErF,SAAAyB;AAAA,IACL,gBAAAhM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKoK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAKU,EAAI;AAAA,UACT,MAAMA,EAAI;AAAA,UACV,OAAO;AAAA,UACP,YAAYtN,EAAE;AAAA,UACd,QAAQ,aAAaA,EAAE,YAAY;AAAA,UACnC,cAAc;AAAA,UACd,WAAWA,EAAE;AAAA,UACb,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAYE;AAAA,QACd;AAAA,QAGA,UAAA;AAAA,UAAC,gBAAAsC,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,cAAc,GAAA,GAClG,UAAA;AAAA,YAAA,gBAAAC,EAAC,UAAO,EAAA,MAAK,UAAS,SAAS2L,GAAQ,OAAOK,IAAa,cAAW,kBACpE,4BAACC,IAAY,EAAA,MAAM,IAAI,aAAa,KAAM,CAAA,GAC5C;AAAA,YACA,gBAAAlM,EAAC,OAAI,EAAA,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAOxC,EAAE,IAAA,GACnD,UAAA;AAAA,cAAA+L,GAAYqB,CAAS;AAAA,cAAE;AAAA,cAAEF;AAAA,YAAA,GAC5B;AAAA,8BACC,UAAO,EAAA,MAAK,UAAS,SAASmB,GAAQ,OAAOI,IAAa,cAAW,cACpE,4BAACE,IAAa,EAAA,MAAM,IAAI,aAAa,KAAM,CAAA,GAC7C;AAAA,UAAA,GACF;AAAA,UAGC,gBAAAlM,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,qBAAqB,kBAAkB,KAAK,GAAG,cAAc,EACzF,GAAA,UAAAuJ,GAAW,IAAI,CAACE,MACd,gBAAAzJ,EAAA,OAAA,EAAY,OAAO,EAAE,WAAW,UAAU,UAAU,IAAI,OAAOzC,EAAE,OAAO,SAAS,WAC/E,UADOkM,KAAAA,CAEV,CACD,GACH;AAAA,UAGC,gBAAAzJ,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,qBAAqB,kBAAkB,KAAK,EAAE,GAC1E,UAAKuL,EAAA,IAAI,CAAC9B,MAAM;AACT,kBAAA0C,IAAU1C,EAAE,SAAA,MAAekB,GAC3ByB,IAAUP,EAAUpC,CAAC,GACrB4C,IAAOP,EAAOrC,CAAC,GACf6C,IAAU7C,EAAE,QAAQ,MAAM+B,EAAM,QAAQ,GACxCe,IAAW9C,IAAI+B;AAEnB,mBAAA,gBAAAxL;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAS,MAAMyL,EAAehC,CAAC;AAAA,gBAC/B,UAAU8C;AAAA,gBACV,iBAAeA;AAAA,gBACf,OAAO;AAAA,kBACL,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,YAAYF,IAAO9O,EAAE,QAAQ6O,IAAU7O,EAAE,cAAc;AAAA,kBACvD,OAAO8O,IAAO9O,EAAE,QAAQgP,IAAWhP,EAAE,gBAAgB4O,IAAU5O,EAAE,MAAMA,EAAE;AAAA,kBACzE,YAAYE;AAAA,kBACZ,UAAU;AAAA,kBACV,YAAY6O,IAAU,MAAM;AAAA,kBAC5B,QAAQC,IAAW,gBAAgB;AAAA,kBACnC,SAASA,IAAW,MAAM;AAAA,gBAC5B;AAAA,gBAEC,YAAE,QAAQ;AAAA,cAAA;AAAA,cAlBN9C,EAAE,YAAY;AAAA,YAAA;AAAA,UAqBxB,CAAA,GACH;AAAA,4BAGC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,YAAY,UAAU,WAAW,IAAI,YAAY,IAAI,WAAW,aAAalM,EAAE,YAAY,GACzJ,GAAA,UAAA;AAAA,YAAA,gBAAAyC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM;AAAE,kBAAAqK,EAAQ,IAAI,GAAGE,EAAM,IAAI;AAAA,gBAAG;AAAA,gBAC7C,OAAO,EAAE,YAAY,eAAe,QAAQ,QAAQ,SAAS,GAAG,QAAQ,WAAW,UAAU,IAAI,YAAY,KAAK,OAAOhN,EAAE,IAAI;AAAA,gBAChI,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,YACA,gBAAAyC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU,CAACoK,KAAQ,CAACE;AAAA,gBACpB,SAAS,MAAM;AAAU,kBAAAN,EAAA,EAAE,MAAAI,GAAM,IAAAE,EAAA,CAAI,GAAWL;gBAAG;AAAA,gBACnD,OAAO;AAAA,kBACL,YAAY,CAACG,KAAQ,CAACE,IAAK/M,EAAE,gBAAgBA,EAAE;AAAA,kBAC/C,OAAOA,EAAE;AAAA,kBACT,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,YAAYE;AAAA,kBACZ,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,QAAQ,CAAC2M,KAAQ,CAACE,IAAK,gBAAgB;AAAA,gBACzC;AAAA,gBACD,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA,GACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAEA,MAAM0B,KAAc;AAAA,EAClB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,OAAOzO,EAAE;AACX;AAEA,SAAS2K,GAAgB,EAAE,OAAAhI,GAAO,UAAAsM,KAAY;AAC5C,QAAM,CAACC,GAAMC,CAAO,IAAI/M,EAAM,SAAS,EAAK,GACtCgN,IAAahN,EAAM,OAAO,IAAI,GAI9BW,IAAS,CAAC,EAAEJ,KAAA,QAAAA,EAAO,SAAQA,KAAA,QAAAA,EAAO;AACxC,SAEI,gBAAAH,EAAA6M,IAAA,EAAA,UAAA;AAAA,IAAA,gBAAA7M;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK4M;AAAA,QACL,MAAK;AAAA,QACL,SAAS,MAAMD,EAAQ,CAACG,MAAM,CAACA,CAAC;AAAA,QAChC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQvM,IAAS,SAAS,aAAa/C,EAAE,aAAa;AAAA,UACtD,YAAY+C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,UACjC,QAAQ;AAAA,UACR,YAAYE;AAAA,UACZ,UAAU;AAAA,UACV,OAAO6C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,UAC5B,YAAY+C,IAAS,MAAM;AAAA,UAC3B,YAAY;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAN,EAAC+H,IAAa,EAAA,MAAM,IAAI,aAAa,MAAM;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAE/C;AAAA,IACC0E,KACC,gBAAAzM;AAAA,MAAC+J;AAAA,MAAA;AAAA,QACC,OAAA7J;AAAA,QACA,WAAWyM;AAAA,QACX,SAAS,MAAMD,EAAQ,EAAK;AAAA,QAC5B,SAAS,CAACI,MAAUN,KAAA,gBAAAA,EAAWM;AAAA,MAAK;AAAA,IACtC;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAIA,SAASzM,GAAU,EAAE,OAAAF,GAAO,QAAAG,IAAS,IAAO,SAAAC,KAAW;AAEnD,SAAA,gBAAAP;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAO;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQD,IAAS,SAAS,aAAa/C,EAAE,YAAY;AAAA,QACrD,YAAY+C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,QACjC,OAAO+C,IAAS/C,EAAE,QAAQA,EAAE;AAAA,QAC5B,YAAYE;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MAEC,UAAA0C;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,MAAM4M,KAAwB;AAAA,EAC5B,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,EACxB,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,EACxB,EAAE,IAAI,MAAM,OAAO,KAAK;AAAA,EACxB,EAAE,IAAI,OAAO,OAAO,MAAM;AAC5B,GAEMC,KAAc;AAAA,EAClB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,KAAK,KAAK,KAAK;AAAA,EACrB,MAAM,IAAI,KAAK,KAAK,KAAK;AAAA,EACzB,OAAO,KAAK,KAAK,KAAK,KAAK;AAC7B;AAEA,SAASC,GAAgB5J,GAAM;AAEtB,SAAAA,EAAK,mBAAmB,SAAS;AAAA,IACtC,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA,CACP;AACH;AAEA,SAAS6J,GAAmBC,GAAU;AAC9B,QAAAC,IAAKJ,GAAYG,CAAQ;AAC/B,MAAI,CAACC;AAAW,WAAA;AACV,QAAA9C,wBAAS,QACTF,IAAO,IAAI,KAAKE,EAAG,QAAA,IAAY8C,CAAE;AACvC,SAAO,GAAGH,GAAgB7C,CAAI,CAAC,MAAM6C,GAAgB3C,CAAE,CAAC;AAC1D;AAkCA,SAAS+C,GAAc,EAAE,OAAAnN,IAAQ,GAAG,KAAAxB,IAAM,KAAK;AAC7C,QAAMO,IAAI,OAAOiB,KAAU,WAAWA,IAAQ,WAAWA,CAAK,KAAK,GAC7DoE,IAAO,KAAK,MAAMrF,CAAC,GACnBsF,IAAatF,IAAI,IAAI,KAAKqF,IAAO5F;AACvC,2BACG,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACnC,gBAAM,KAAK,EAAE,QAAQA,EAAK,CAAA,EAAE,IAAI,CAACuC,GAAGlC,MAC/BA,IAAIuF,IAEJ,gBAAAtE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAYzC,EAAE;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IAAA;AAAA,IAPKwB;AAAA,EAAA,IAWPA,MAAMuF,KAAQC,IAEd,gBAAAvE;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAClB;AAAA,MAEA,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAYzC,EAAE;AAAA,YACd,SAAS;AAAA,UACX;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAlBKwB;AAAA,EAAA,IAuBT,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,YAAYzC,EAAE;AAAA,QACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,QAC7B,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IAAA;AAAA,IATKwB;AAAA,EAAA,CAYV,EACH,CAAA;AAEJ;AAEO,MAAMuO,KAAwB;AAAA,EACnC,EAAE,IAAI,SAAS,OAAO,SAAS,OAAO,KAAK,UAAU,IAAM,YAAY,GAAK;AAAA,EAC5E,EAAE,IAAI,cAAc,OAAO,cAAc,OAAO,KAAK,UAAU,IAAM,YAAY,GAAK;AAAA,EACtF,EAAE,IAAI,SAAS,OAAO,SAAS,OAAO,KAAK,UAAU,GAAK;AAAA,EAC1D,EAAE,IAAI,YAAY,OAAO,YAAY,OAAO,KAAK,UAAU,GAAK;AAAA,EAChE,EAAE,IAAI,QAAQ,OAAO,QAAQ,OAAO,KAAK,UAAU,GAAK;AAAA,EACxD,EAAE,IAAI,SAAS,OAAO,SAAS,OAAO,KAAK,UAAU,IAAM,YAAY,IAAM,YAAY,SAAS;AAAA,EAClG;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,QAAQ,CAACpN,MACP,gBAAAH,EAAC,QAAK,EAAA,OAAO,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,MAChE,UAAA;AAAA,MAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,UAAU,MAAO,UAAME,GAAA;AAAA,wBACrCmN,IAAc,EAAA,OAAO,OAAOnN,KAAU,WAAWA,IAAQ,GAAG;AAAA,IAAA,GAC/D;AAAA,EAEJ;AAAA,EACA,EAAE,IAAI,iBAAiB,OAAO,kBAAkB,OAAO,KAAK,UAAU,IAAM,YAAY,IAAM,YAAY,YAAY,mBAAmB,GAAM;AAAA,EAC/I,EAAE,IAAI,eAAe,OAAO,oBAAoB,OAAO,KAAK,UAAU,IAAM,YAAY,IAAM,YAAY,YAAY,mBAAmB,GAAM;AACjJ;AAGA,SAAS0C,GAAe,EAAE,MAAMC,GAAM,OAAAJ,GAAO,UAAAK,GAAU,WAAAC,IAAYxF,EAAE,KAAK,UAAAyF,IAAW,GAAA,GAAS;AAE1F,SAAA,gBAAAjD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,eAAeiD,IAAW,KAAK;AAAA,QAC/B,cAAcA,IAAW,aAAazF,EAAE,MAAM,KAAK;AAAA,MACrD;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAyC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,YAAY;AAAA,YACd;AAAA,YAEA,UAAA,gBAAAA,EAAC6C,GAAK,EAAA,MAAM,IAAI,aAAa,MAAM,OAAO,EAAE,OAAOE,EAAa,EAAA,CAAA;AAAA,UAAA;AAAA,QAClE;AAAA,QACA,gBAAA/C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,MAAM;AAAA,cACN,YAAYxC;AAAA,cACZ,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,OAAOD,EAAE;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,eAAe;AAAA,YACjB;AAAA,YAEC,UAAAkF;AAAA,UAAA;AAAA,QACH;AAAA,QACCK,KACC,gBAAA9C,EAAC,OAAI,EAAA,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,IAAA,GAAQ,UAASuF,GAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIrF;AAEA,SAAS4B,GAAkB,EAAE,MAAM7B,GAAM,OAAAJ,KAAS;AAChD,SACG,gBAAA1C,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,OAAO,OAAA,GACnE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAYzC,EAAE;AAAA,UACd,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,YAAY;AAAA,QACd;AAAA,QAEA,UAAA,gBAAAyC,EAAC6C,KAAK,MAAM,IAAI,OAAOtF,EAAE,KAAK,aAAa,KAAM,CAAA;AAAA,MAAA;AAAA,IACnD;AAAA,IACA,gBAAAyC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,YAAYxC;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAOD,EAAE;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QAEC,UAAAkF;AAAA,MAAA;AAAA,IACH;AAAA,EACF,EAAA,CAAA;AAEJ;AAEA,SAAS8K,GAAc,EAAE,OAAA9K,GAAO,SAAAe,GAAS,OAAAC,GAAO,SAAAC,GAAS,SAAAC,GAAS,iBAAAC,IAAkB,MAAS;AAC3F,QAAM,CAACC,GAAUC,CAAW,IAAInE,EAAM,SAASiE,CAAe,GACxDG,IAAO,MAAM,QAAQJ,CAAO,IAAIA,IAAU;AAK9C,SAAA,gBAAA5D,EAAC,SAAI,OAAO,EAAE,WAAW,aAAaxC,EAAE,MAAM,GAAA,GAC5C,UAAA;AAAA,IAAA,gBAAAwC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM+D,EAAY,CAAC7E,MAAM,CAACA,CAAC;AAAA,QACpC,iBAAe4E;AAAA,QACf,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,SAAS;AAAA,UACT,KAAK;AAAA,UACL,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,WAAW;AAAA,UACX,YAAYpG;AAAA,QACd;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAsC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,KAAK;AAAA,gBACL,UAAU;AAAA,cACZ;AAAA,cAEA,UAAA;AAAA,gBAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC3D,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,YAAYxC;AAAA,wBACZ,YAAY;AAAA,wBACZ,UAAU;AAAA,wBACV,OAAOD,EAAE;AAAA,wBACT,YAAY;AAAA,sBACd;AAAA,sBAEC,UAAAkF;AAAA,oBAAA;AAAA,kBACH;AAAA,kBACC,gBAAAzC,EAAA,OAAA,EAAI,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,OAAO,YAAY,OAAA,GAC5E,UACHiG,GAAA;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAzD,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAClC,GAAA,UAAA;AAAA,kBAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,oBAAA,gBAAAC,EAACgE,MAAM,MAAM,IAAI,OAAOzG,EAAE,KAAK,aAAa,MAAM;AAAA,oBACjD,gBAAAyC,EAAA,QAAA,EAAK,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,KAAK,YAAY,IAAA,GAC3E,UACHkG,GAAA;AAAA,kBAAA,GACF;AAAA,kBACA,gBAAA1D,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,oBAAA,gBAAAC,EAACiE,MAAW,MAAM,IAAI,OAAO1G,EAAE,KAAK,aAAa,MAAM;AAAA,oBACtD,gBAAAyC,EAAA,QAAA,EAAK,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAOF,EAAE,KAAK,YAAY,IAAA,GAC3E,UACHmG,GAAA;AAAA,kBAAA,GACF;AAAA,gBAAA,GACF;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UACA,gBAAA1D;AAAA,YAACkE;AAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,OAAO3G,EAAE;AAAA,cACT,aAAa;AAAA,cACb,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,WAAWsG,IAAW,mBAAmB;AAAA,gBACzC,YAAY;AAAA,cACd;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACCA,KAAYE,EAAK,SAAS,KACzB,gBAAA/D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,KAAK;AAAA,UACL,SAAS;AAAA,QACX;AAAA,QAEC,UAAK+D,EAAA,IAAI,CAACI,GAAGpF,MACZ,gBAAAgB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,YAAYtC;AAAA,cACZ,UAAU;AAAA,cACV,OAAOF,EAAE;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,YACP;AAAA,YAEC,UAAA;AAAA,cAAA4G,EAAE,OACD,gBAAAnE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAMmE,EAAE;AAAA,kBACR,QAAO;AAAA,kBACP,KAAI;AAAA,kBACJ,OAAO;AAAA,oBACL,OAAO5G,EAAE;AAAA,oBACT,gBAAgB;AAAA,oBAChB,qBAAqB;AAAA,oBACrB,qBAAqBA,EAAE;AAAA,oBACvB,UAAU;AAAA,oBACV,UAAU;AAAA,oBACV,cAAc;AAAA,oBACd,YAAY;AAAA,kBACd;AAAA,kBAEC,UAAE4G,EAAA;AAAA,gBAAA;AAAA,cAAA,IAGL,gBAAAnE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,UAAU;AAAA,oBACV,cAAc;AAAA,oBACd,YAAY;AAAA,kBACd;AAAA,kBAEC,UAAEmE,EAAA;AAAA,gBAAA;AAAA,cACL;AAAA,cAEF,gBAAApE,EAAC,QAAK,EAAA,OAAO,EAAE,SAAS,eAAe,KAAK,GAAG,YAAY,SAAA,GACzD,UAAA;AAAA,gBAAC,gBAAAC,EAAA,QAAA,EAAK,OAAO,EAAE,OAAOzC,EAAE,OAAQ,YAAE,SAAS,CAAA;AAAA,kCAC1C,QAAK,EAAA,OAAO,EAAE,OAAOA,EAAE,MAAS,GAAA,UAAA;AAAA,kBAAA;AAAA,kBAAE4G,EAAE;AAAA,kBAAK;AAAA,gBAAA,GAAC;AAAA,cAAA,GAC7C;AAAA,YAAA;AAAA,UAAA;AAAA,UA7CKpF;AAAA,QAAA,CA+CR;AAAA,MAAA;AAAA,IACH;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,SAASqF,GAAW,EAAE,OAAAjE,GAAO,OAAAD,KAAS;AAElC,SAAA,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,cAAc,aAAaxC,EAAE,MAAM;AAAA,QACnC,YAAYE;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAuC,EAAC,UAAK,OAAO,EAAE,OAAOzC,EAAE,OAAQ,UAAM4C,GAAA;AAAA,QACtC,gBAAAH,EAAC,UAAK,OAAO,EAAE,OAAOzC,EAAE,SAAU,UAAM2C,GAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9C;AAEA,SAASsN,GAAW,EAAE,SAAAC,IAAU,MAAM;AACpC,SAAKA,IAEH,gBAAAzN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAYvC;AAAA,QACZ,UAAU;AAAA,QACV,OAAOF,EAAE;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MAEC,UAAAkQ;AAAA,IAAA;AAAA,EAAA,IAXgB;AAcvB;AAEA,SAAwBC,GAAiB;AAAA,EACvC,WAAAzI,IAAY;AAAA,EACZ,cAAA0I;AAAA;AAAA;AAAA;AAAA,EAIA,OAAAlL,IAAQ;AAAA,EACR,UAAAmL,IAAW;AAAA,EACX,gBAAAC,IAAiB;AAAA;AAAA;AAAA,EAGjB,eAAAC,IAAgB,CAAC;AAAA,EACjB,eAAAC,IAAgB;AAAA,EAChB,gBAAAC;AAAA;AAAA;AAAA,EAGA,mBAAAC,IAAoB;AAAA;AAAA,EAEpB,YAAAC,IAAaxF;AAAA,EACb,aAAAyF,IAAczF;AAAA,EACd,iBAAA0F,IAAkB1F;AAAA,EAClB,kBAAA2F,IAAmB3F;AAAA,EACnB,cAAA4F,IAAe5F;AAAA;AAAA,EAEf,WAAA6F,IAAY,CAAC;AAAA,EACb,cAAAC,IAAe,CAAC;AAAA,EAChB,iBAAA7H,IAAkB;AAAA;AAAA;AAAA,EAGlB,eAAAjB,IAAgB,CAAC;AAAA,EACjB,eAAAC,IAAgB,CAAC;AAAA,EACjB,aAAAC,IAAc,CAAC;AAAA,EACf,eAAAC,IAAgB,CAAC;AAAA,EACjB,gBAAA4I,IAAiB,CAAC;AAAA,EAClB,iBAAAC,IAAkB,CAAC;AAAA,EACnB,oBAAAC,IAAqB;AAAA,EACrB,gBAAA7I,IAAiB;AAAA,EACjB,eAAAC,IAAgB;AAAA,EAChB,cAAAC,IAAe;AAAA,EACf,cAAAC,IAAe;AAAA,EACf,gBAAAC,IAAiB;AAAA,EACjB,iBAAA0I,IAAkB;AAAA,EAClB,uBAAAC,IAAwB;AAAA,EACxB,sBAAAC,IAAuB;AAAA,EACvB,qBAAAC,IAAsB;AAAA,EACtB,uBAAAC,IAAwB;AAAA,EACxB,wBAAAC,IAAyB;AAAA;AAAA;AAAA;AAAA,EAIzB,cAAAC,KAAenC;AAAA,EACf,gBAAAnG,IAAiB;AAAA,EACjB,gBAAAC;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAAsI;AAAA;AAAA;AAAA;AAAA,EAIA,WAAArI;AAAA,EACA,mBAAAC;AAAA;AAAA,EAEA,UAAAM;AAAA;AAAA;AAAA,EAGA,wBAAA+H;AACF,GAAG;;AACD,QAAM,CAACC,GAAeC,EAAgB,IAAI3P,EAAM,SAAS,IAAI,GACvD,CAAC4P,GAAYC,EAAa,IAAI7P,EAAM,SAAS,EAAK,GAClD,CAAC8P,IAAQC,CAAS,IAAI/P,EAAM,SAASoO,CAAa,GAKlD,CAAC4B,GAAmBC,EAAoB,IAAIjQ,EAAM,SAAS,IAAI,GAC/DkQ,IAAqB/I,OAAc,SAAYA,KAAY6I,GAC3DnI,KAAoB,CAAC,EAAEqI,KAAA,QAAAA,EAAoB,SAAQA,KAAA,QAAAA,EAAoB,MACvEC,KAAwB,CAAChD,MAAU;AACvC,IAAA8C,GAAqB9C,CAAK,GAC1B/F,KAAA,QAAAA,EAAoB+F;AAAA,EAAK,GAErBiD,KAAqB,CAACrQ,MAAO;AAGjC,IAAAkQ,GAAqB,IAAI,GACzB7I,KAAA,QAAAA,EAAoB,OACpBF,MAAA,QAAAA,GAAiBnH;AAAA,EAAE,GAEfsQ,KAAmBrQ,EAAM,OAAO,IAAI,GACpCsQ,KAAmBtQ,EAAM,OAAO,IAAI;AAE1CA,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC4P;AAAY;AACX,UAAAW,IAAU,CAAC/E,MAAM;;AAEnB,OAAAC,KAAA6E,GAAiB,YAAjB,QAAA7E,GAA0B,SAASD,EAAE,YACrCE,KAAA2E,GAAiB,YAAjB,QAAA3E,GAA0B,SAASF,EAAE,WAIvCqE,GAAc,EAAK;AAAA,IAAA;AAEZ,oBAAA,iBAAiB,aAAaU,CAAO,GACvC,MAAM,SAAS,oBAAoB,aAAaA,CAAO;AAAA,EAAA,GAC7D,CAACX,CAAU,CAAC;AAEf,QAAMY,OACJ/E,KAAA0C,EAAc,KAAK,CAACjB,MAAMA,EAAE,OAAO4C,EAAM,MAAzC,gBAAArE,GAA4C,aAAUC,KAAAyC,EAAc,CAAC,MAAf,gBAAAzC,GAAkB,UAAS,KAE7E+E,KAAiB,CAAC7H,MAAQ;AAC9B,QAAIoF,GAAc;AAChB,MAAAA,EAAapF,CAAG;AAChB;AAAA,IACF;AACA,IAAA+G,GAAiB/G,CAAG;AAAA,EAAA;AAKtB,SAEK,gBAAAxI,EAAA6M,IAAA,EAAA,UAAA;AAAA,IAAAyC,MAAkB,MAAM;AAIvB,UAAIgB,IAAc,MACdC,IAAY;AAChB,UAAI9I;AACF,QAAA6I,IAAcR,EAAmB,MACjCS,IAAYT,EAAmB;AAAA,WAC1B;AACC,cAAAzC,KAAKJ,GAAYpG,CAAc;AACrC,QAAIwG,OACFkD,wBAAgB,QAChBD,IAAc,IAAI,KAAKC,EAAU,YAAYlD,EAAE;AAAA,MAEnD;AAEE,aAAA,gBAAApN;AAAA,QAAC2E;AAAA,QAAA;AAAA,UACC,WAAAM;AAAA,UACA,WAAWoK,EAAc;AAAA,UACzB,WAAWgB,KAAe;AAAA,UAC1B,SAASC,KAAa;AAAA,UACtB,YAAY,GAAGjB,EAAc,KAAK;AAAA,UAClC,QAAQ,MAAMC,GAAiB,IAAI;AAAA,UACnC,gBAAA1I;AAAA,UACA,WAAWiJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,GAED;AAAA,IACL,gBAAA9P;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAAkF;AAAA,QACA,OAAO;AAAA,UACL,YAAY1H,EAAE;AAAA,UACd,YAAYE;AAAA,UACZ,OAAOF,EAAE;AAAA,UACT,OAAO;AAAA,UACP,UAAU;AAAA,UACV,WAAW;AAAA,UACX,SAAS;AAAA,UACT,eAAe;AAAA,UACf,KAAK;AAAA;AAAA;AAAA,UAGL,SAAS8R,IAAgB,SAAS;AAAA,QACpC;AAAA,QAEA,UAAA;AAAA,UAAC,gBAAAtP,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,cAAc,KAAK,GAAG,YAAY,GAAA,GAC3E,UAAA;AAAA,YAAC,gBAAAA,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GACpE,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,YAAYxC;AAAA,oBACZ,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,OAAOD,EAAE;AAAA,oBACT,QAAQ;AAAA,oBACR,YAAY;AAAA,oBACZ,eAAe;AAAA,kBACjB;AAAA,kBAEC,UAAAkF;AAAA,gBAAA;AAAA,cACH;AAAA,cACC,gBAAAzC,EAAA,KAAA,EAAE,OAAO,EAAE,YAAYvC,GAAW,UAAU,IAAI,OAAO,sBAAsB,QAAQ,GAAG,YAAY,SAClG,UACHmQ,GAAA;AAAA,YAAA,GACF;AAAA,YACA,gBAAA7N;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAMsH,KAAA,gBAAAA;AAAA,gBACf,UAAU,CAACA;AAAA,gBACX,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,KAAK;AAAA,kBACL,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,cAAc;AAAA,kBACd,QAAQ,aAAa9J,EAAE,aAAa;AAAA,kBACpC,YAAYA,EAAE;AAAA,kBACd,QAAQ8J,IAAW,YAAY;AAAA,kBAC/B,SAASA,IAAW,IAAI;AAAA,kBACxB,YAAY5J;AAAA,kBACZ,UAAU;AAAA,kBACV,OAAOF,EAAE;AAAA,gBACX;AAAA,gBAEA,UAAA;AAAA,kBAAA,gBAAAyC,EAAC8H,IAAS,EAAA,MAAM,IAAI,aAAa,MAAM;AAAA,kBAAE;AAAA,gBAAA;AAAA,cAAA;AAAA,YAE3C;AAAA,UAAA,GACF;AAAA,UAEA,gBAAA/H,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,YAAY,SAAA,GAC1E,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,UAAU,WACtB,GAAA,UAAA;AAAA,cAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,KAAKiQ;AAAA,kBACL,SAAS,MAAMR,GAAc,CAACvQ,MAAM,CAACA,CAAC;AAAA,kBACtC,iBAAc;AAAA,kBACd,iBAAesQ;AAAA,kBACf,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,QAAQ,aAAahS,EAAE,aAAa;AAAA,oBACpC,YAAYA,EAAE;AAAA,oBACd,QAAQ;AAAA,oBACR,YAAYE;AAAA,oBACZ,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,OAAOF,EAAE;AAAA,oBACT,YAAY;AAAA,kBACd;AAAA,kBAEC,UAAA;AAAA,oBAAA4S;AAAA,oBACD,gBAAAnQ;AAAA,sBAACkE;AAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,aAAa;AAAA,wBACb,OAAO;AAAA,0BACL,WAAWqL,IAAa,mBAAmB;AAAA,0BAC3C,YAAY;AAAA,wBACd;AAAA,sBAAA;AAAA,oBACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,cACCA,KACC,gBAAAxP;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAKkQ;AAAA,kBACL,MAAK;AAAA,kBACL,OAAO;AAAA,oBACL,UAAU;AAAA,oBACV,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,QAAQ;AAAA,oBACR,YAAY1S,EAAE;AAAA,oBACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,oBAC7B,cAAc;AAAA,oBACd,WAAWA,EAAE;AAAA,oBACb,SAAS;AAAA,oBACT,eAAe;AAAA,oBACf,UAAU;AAAA,oBACV,YAAYE;AAAA,kBACd;AAAA,kBAEC,UAAA;AAAA,oBACCwQ,KAAA,gBAAAjO;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,SAAS;AAAA,0BACT,YAAYxC;AAAA,0BACZ,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,OAAOD,EAAE;AAAA,0BACT,YAAY;AAAA,wBACd;AAAA,wBAEC,UAAA0Q;AAAA,sBAAA;AAAA,oBACH;AAAA,oBAEDH,EAAc,IAAI,CAAC7F,MAAQ;AACpB,4BAAAsI,IAAad,OAAWxH,EAAI;AAEhC,6BAAA,gBAAAlI;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BAEC,MAAK;AAAA,0BACL,MAAK;AAAA,0BACL,iBAAewQ;AAAA,0BACf,SAAS,MAAM;AACT,4BAAAtI,EAAI,OAAOwH,OACbC,EAAUzH,EAAI,EAAE,GAChB+F,KAAA,QAAAA,EAAiB/F,EAAI,MAEvBuH,GAAc,EAAK;AAAA,0BACrB;AAAA,0BACA,OAAO;AAAA,4BACL,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,KAAK;AAAA,4BACL,SAASe,IAAa,KAAK;AAAA,4BAC3B,WAAW,aAAahT,EAAE,MAAM;AAAA,4BAChC,YAAY;AAAA,4BACZ,aAAa;AAAA,4BACb,cAAc;AAAA,4BACd,YAAY;AAAA,4BACZ,QAAQ;AAAA,4BACR,WAAW;AAAA,4BACX,YAAYE;AAAA,4BACZ,UAAU;AAAA,4BACV,YAAY;AAAA,4BACZ,OAAOF,EAAE;AAAA,4BACT,OAAO;AAAA,0BACT;AAAA,0BAEC,UAAA;AAAA,4BAAAgT,KACE,gBAAAvQ,EAAAwQ,IAAA,EAAM,MAAM,IAAI,OAAOjT,EAAE,KAAK,aAAa,MAAM,OAAO,EAAE,YAAY,KAAK;AAAA,4BAE9E,gBAAAyC,EAAC,QAAM,EAAA,UAAAiI,EAAI,MAAM,CAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAjCZA,EAAI;AAAA,sBAAA;AAAA,oBAkCX,CAEH;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACH;AAAA,YAAA,GAEJ;AAAA,YACA,gBAAAlI,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,YAAY,SAAA,GAChD,UAAA;AAAA,eAAM,MAAA;AAMN,sBAAMI,KAHcqH,KAChB,GAAGyF,GAAgB4C,EAAmB,IAAI,CAAC,MAAM5C,GAAgB4C,EAAmB,EAAE,CAAC,KACvF,OACyBhC,KAAkBX,GAAmBtG,CAAc;AAChF,uBAAOzG,IACL,gBAAAJ;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,KAAK;AAAA,sBACL,YAAYtC;AAAA,sBACZ,UAAU;AAAA,sBACV,OAAOF,EAAE;AAAA,oBACX;AAAA,oBAEA,UAAA;AAAA,sBAAA,gBAAAyC,EAAC+H,MAAa,MAAM,IAAI,aAAa,MAAM,OAAOxK,EAAE,OAAO;AAAA,sBAC1D4C;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,IAAA;AAAA,cAAA,GACH;AAAA,cACF+O,GAAa,IAAI,CAACjH,MACjB,gBAAAjI;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBAEC,OAAO4H,EAAI;AAAA,kBACX,QAAQ,CAACT,MAAqBS,EAAI,OAAOrB;AAAA,kBACzC,SAAS,MAAMmJ,GAAmB9H,EAAI,EAAE;AAAA,gBAAA;AAAA,gBAHnCA,EAAI;AAAA,cAAA,CAKZ;AAAA,cACAkH,KACC,gBAAAnP;AAAA,gBAACL,EAAM;AAAA,gBAAN;AAAA,kBACC,UAAU,gBAAAK,EAACoJ,IAAa,EAAA,MAAMrB,IAAc,UAAU,cAAA;AAAA,kBAErD,UAAAoH;AAAA,gBAAA;AAAA,cAAA,IAGF,gBAAAnP,EAAAkI,IAAA,EAAgB,OAAO2H,GAAoB,UAAUC,IAAuB;AAAA,YAAA,GAGjF;AAAA,UAAA,GACF;AAAA,UAEA,gBAAA/P,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAClC,GAAA,UAAA;AAAA,YAAA,gBAAAC,EAAC8I,MAAS,OAAOoF,EAAW,OAAO,OAAOA,EAAW,OAAO,OAAOA,EAAW,OAAO,OAAO,EAAE,OAAO,KAAK,YAAY,KAAK;AAAA,8BAC1HpF,IAAS,EAAA,OAAOqF,EAAY,OAAO,OAAOA,EAAY,OAAO,OAAOA,EAAY,OAAO,OAAO,EAAE,OAAO,KAAK,YAAY,KAAK;AAAA,YAC9H,gBAAApO;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,YAAYxC,EAAE;AAAA,kBACd,QAAQ,aAAaA,EAAE,MAAM;AAAA,kBAC7B,cAAc;AAAA,kBACd,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,KAAK;AAAA,kBACL,YAAY;AAAA,kBACZ,WAAW;AAAA,gBACb;AAAA,gBAEA,UAAA;AAAA,kBAAC,gBAAAyC,EAAAkJ,IAAA,EAAY,OAAOkF,EAAgB,OAAO,OAAOA,EAAgB,OAAO,OAAOA,EAAgB,MAAO,CAAA;AAAA,kBACtG,gBAAApO,EAAAkJ,IAAA,EAAY,OAAOmF,EAAiB,OAAO,OAAOA,EAAiB,OAAO,OAAOA,EAAiB,OAAO,aAAW,GAAC,CAAA;AAAA,kBACrH,gBAAArO,EAAAkJ,IAAA,EAAY,OAAOoF,EAAa,OAAO,OAAOA,EAAa,OAAO,OAAOA,EAAa,OAAO,aAAW,GAAC,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC5G;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAtO;AAAA,YAACyI;AAAA,YAAA;AAAA,cACC,MAAM8F;AAAA,cACN,SAASC;AAAA,cACT,iBAAA7H;AAAA,cACA,YAAYyJ;AAAA,cACZ,wBAAAhB;AAAA,YAAA;AAAA,UACF;AAAA,UAEA,gBAAArP,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,YAAY,aAAA,GAClD,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GACjF,GAAA,UAAA;AAAA,cAAA,gBAAAC,EAAC4C,MAAe,MAAMuF,IAAa,OAAOrC,GAAgB,WAAU,0BAAyB;AAAA,cAC7F,gBAAA9F;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,eAAe;AAAA,oBACf,cAAc,aAAazC,EAAE,MAAM;AAAA,oBACnC,WAAW;AAAA,oBACX,WAAW;AAAA,kBACb;AAAA,kBAEC,YAAc,WAAW,sBACvBiQ,IAAW,EAAA,SAASqB,GAAuB,IAE5ClJ,EAAc,IAAI,CAACyC,GAAMrJ,MAAM,gBAAAiB,EAACuN,MAAuB,GAAGnF,KAAPrJ,CAAa,CAAE;AAAA,gBAAA;AAAA,cAEtE;AAAA,YAAA,GACF;AAAA,YACC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GACjF,GAAA,UAAA;AAAA,cAAA,gBAAAC,EAAC4C,MAAe,MAAMyF,IAAW,OAAOtC,GAAe,WAAU,0BAAyB;AAAA,cAC1F,gBAAA/F;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,eAAe;AAAA,oBACf,cAAc,aAAazC,EAAE,MAAM;AAAA,oBACnC,WAAW;AAAA,oBACX,WAAW;AAAA,kBACb;AAAA,kBAEC,YAAc,WAAW,sBACvBiQ,IAAW,EAAA,SAASsB,GAAsB,IAE3CpJ,EAAc,IAAI,CAAC0C,GAAMrJ,MAAM,gBAAAiB,EAACuN,MAAuB,GAAGnF,KAAPrJ,CAAa,CAAE;AAAA,gBAAA;AAAA,cAEtE;AAAA,YAAA,GACF;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAgB,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC3D,UAAA;AAAA,YAAA,gBAAAC,EAAC4C,MAAe,MAAMoB,IAAO,OAAOgC,GAAc,WAAU,0BAAyB;AAAA,YACrF,gBAAAjG,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,YAAY,aAAA,GAClD,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAI,EAAA,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EACjF,GAAA,UAAA;AAAA,gBAAA,gBAAAC,EAAC0E,IAAkB,EAAA,MAAM4D,IAAc,OAAOrC,GAAc;AAAA,gBAC3D,gBAAAjG,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAO,GACvF,YAAY,WAAW,IACrB,gBAAAA,EAAAwN,IAAA,EAAW,SAASuB,EAAqB,CAAA,IAE1CnJ,EAAY,IAAI,CAAC2C,GAAKxJ,MAAM,gBAAAiB,EAACoE,IAAoB,EAAA,GAAGmE,EAAP,GAAAxJ,CAAY,CAAE,GAE/D;AAAA,cAAA,GACF;AAAA,cACC,gBAAAgB,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EACjF,GAAA,UAAA;AAAA,gBAAA,gBAAAC,EAAC0E,IAAkB,EAAA,MAAM8D,IAAQ,OAAOtC,GAAgB;AAAA,gBACvD,gBAAAlG,EAAA,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,WAAW,KAAK,WAAW,OAAO,GACvF,YAAc,WAAW,IACvB,gBAAAA,EAAAwN,IAAA,EAAW,SAASwB,EAAuB,CAAA,IAE5CnJ,EAAc,IAAI,CAAC0C,GAAKxJ,MAAM,gBAAAiB,EAACoE,IAAoB,EAAA,GAAGmE,EAAP,GAAAxJ,CAAY,CAAE,GAEjE;AAAA,cAAA,GACF;AAAA,YAAA,GACF;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAgB,EAAC,OAAI,EAAA,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC3D,UAAA;AAAA,YAAC,gBAAAC,EAAA4C,IAAA,EAAe,MAAM6N,IAAQ,OAAO7B,GAAiB,WAAU,0BAAyB,UAAUD,GAAoB,UAAQ,GAAC,CAAA;AAAA,YAC/HF,EAAe,WAAW,KAAKC,EAAgB,WAAW,sBACxDlB,IAAW,EAAA,SAASyB,EAAwB,CAAA,IAE7C,gBAAAlP,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAClC,GAAA,UAAA;AAAA,cAAC,gBAAAC,EAAA,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,YACpD,YAAe,IAAI,CAACuI,GAAKxJ,MACxB,gBAAAiB,EAACoE,MAAoB,GAAGmE,EAAA,GAAPxJ,CAAY,CAC9B,EACH,CAAA;AAAA,cACA,gBAAAiB,EAAC,SAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,YACpD,YAAgB,IAAI,CAACuI,GAAKxJ,MACzB,gBAAAiB,EAACoE,MAAoB,GAAGmE,EAAA,GAAPxJ,CAAY,CAC9B,EACH,CAAA;AAAA,YAAA,GACF;AAAA,UAAA,GAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACA,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"PerformancePanel.es.js","sources":["../src/components/performance/performanceRangeFormat.js","../src/components/performance/performanceSparkline.js","../src/components/performance/performanceMetrics.js","../src/components/performance/PerformanceDetailsPage.jsx","../src/components/performance/PerformancePanel.jsx"],"sourcesContent":["// Shared en-US date/time formatting for time-range chips (8h / 1d / 7d / 30d).\n\nexport const 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\nconst LOCALE = \"en-US\";\nconst DATE_OPTS = { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" };\nconst TIME_OPTS = { hour: \"numeric\", minute: \"2-digit\", hour12: true };\n\nexport function coalesceToDate(input) {\n if (!input) return null;\n if (input instanceof Date) {\n return Number.isNaN(input.getTime()) ? null : input;\n }\n const str = String(input).trim();\n const ymd = str.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})/);\n if (ymd) {\n const d = new Date(Number(ymd[1]), Number(ymd[2]) - 1, Number(ymd[3]));\n return Number.isNaN(d.getTime()) ? null : d;\n }\n const parsed = new Date(str);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n}\n\nfunction isSameLocalCalendarDay(a, b) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function formatLocalDate(date) {\n const d = date instanceof Date ? date : coalesceToDate(date);\n if (!d) return \"\";\n return d.toLocaleDateString(LOCALE, DATE_OPTS);\n}\n\nfunction formatLocalTime(date) {\n return date.toLocaleTimeString(LOCALE, TIME_OPTS);\n}\n\nfunction formatLocalDateTime(date) {\n return `${formatLocalDate(date)} ${formatLocalTime(date)}`;\n}\n\n/** Single-line label for the 8h chip (panel header). */\nexport function formatEightHourWindowLabel(from, to) {\n const f = coalesceToDate(from);\n const t = coalesceToDate(to);\n if (!f || !t) return \"\";\n if (isSameLocalCalendarDay(f, t)) {\n return `${formatLocalDateTime(f)} – ${formatLocalTime(t)}`;\n }\n return `${formatLocalDateTime(f)} – ${formatLocalDateTime(t)}`;\n}\n\n/** Start/end strings for the details page (arrow between). */\nexport function formatEightHourRangeEndpoints(from, to) {\n const f = coalesceToDate(from);\n const t = coalesceToDate(to);\n if (!f || !t) return null;\n if (isSameLocalCalendarDay(f, t)) {\n return { from: formatLocalDateTime(f), to: formatLocalTime(t) };\n }\n return { from: formatLocalDateTime(f), to: formatLocalDateTime(t) };\n}\n\n/** Rolling from/to for a preset chip (matches panel + details display). */\nexport function getPresetWindowDates(windowId) {\n const ms = RANGE_TO_MS[windowId];\n if (!ms) return null;\n const to = new Date();\n const from = new Date(to.getTime() - ms);\n return { from, to };\n}\n\n/** Label for preset window chips (8h shows time range; others show dates). */\nexport function computeWindowLabel(windowId) {\n const ms = RANGE_TO_MS[windowId];\n if (!ms) return \"\";\n const range = getPresetWindowDates(windowId);\n if (!range) return \"\";\n if (windowId === \"8h\") {\n return formatEightHourWindowLabel(range.from, range.to);\n }\n return `${formatLocalDate(range.from)} – ${formatLocalDate(range.to)}`;\n}\n","// Sparkline path builders shared by PerformancePanel + PerformanceDetailsPage.\n\nexport const SPARK_DEFAULT_LINE =\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\nexport const SPARK_DEFAULT_AREA =\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\n/** Normalize host points — flat array of numbers or [x, y] pairs (y used). */\nexport function normalizeSparkPoints(points) {\n if (!Array.isArray(points)) return null;\n const numeric = points\n .map((p) => {\n if (Array.isArray(p)) return Number(p[1]);\n if (p == null || p === \"\") return NaN;\n return Number(p);\n })\n .filter((n) => Number.isFinite(n));\n return numeric.length >= 2 ? numeric : null;\n}\n\n/** Project a numeric series onto an SVG viewBox. Returns null when unusable. */\nexport function buildSparkPaths(points, vbW = 52, vbH = 36) {\n const numeric = normalizeSparkPoints(points);\n if (!numeric) return null;\n const min = Math.min(...numeric);\n const max = Math.max(...numeric);\n const padY = 4;\n const span = max - min || 1;\n const usableH = vbH - padY * 2 - 4;\n const sx = (i) => (numeric.length === 1 ? 0 : (i / (numeric.length - 1)) * (vbW - 2)) + 1;\n const sy = (v) => padY + (1 - (v - min) / span) * usableH;\n let line = \"\";\n for (let i = 0; i < numeric.length; i++) {\n line += `${i === 0 ? \"M\" : \"L\"}${sx(i).toFixed(2)},${sy(numeric[i]).toFixed(2)}`;\n }\n const lastX = sx(numeric.length - 1);\n const firstX = sx(0);\n const area = `${line} L${lastX.toFixed(2)},${vbH} L${firstX.toFixed(2)},${vbH} Z`;\n return { line, area };\n}\n\n/** Infer up/down from first vs last point when host omits `trend`. */\nexport function trendFromPoints(points) {\n const numeric = normalizeSparkPoints(points);\n if (!numeric) return null;\n const first = numeric[0];\n const last = numeric[numeric.length - 1];\n if (last > first) return \"up\";\n if (last < first) return \"down\";\n return \"up\";\n}\n","import { trendFromPoints } from \"./performanceSparkline.js\";\n\nexport const METRIC_PLACEHOLDER = \"—\";\n\n/** Hosts often send \"-\", \"—\", or empty strings when API delta/value is null. */\nexport function isNullishMetric(value) {\n if (value == null) return true;\n const str = String(value).trim();\n if (!str) return true;\n if (/^[-−–—]$/.test(str)) return true;\n if (/^(n\\/a|null|undefined)$/i.test(str)) return true;\n return false;\n}\n\nexport function hasMeaningfulMetric(value) {\n return !isNullishMetric(value);\n}\n\nexport function formatMetricDisplay(value, fallback = METRIC_PLACEHOLDER) {\n return isNullishMetric(value) ? fallback : String(value);\n}\n\n/** Non-empty host field — includes placeholder dashes the API uses for missing data. */\nexport function hasHostMetricField(value) {\n return value != null && String(value).trim() !== \"\";\n}\n\n/**\n * Whether a chart card should render. Matches legacy `value || delta || points.length`\n * while treating numeric zero as present data.\n */\nexport function hasChartData(chart) {\n if (!chart) return false;\n if (hasHostMetricField(chart.value) || hasHostMetricField(chart.delta)) return true;\n return Array.isArray(chart.points) && chart.points.length > 0;\n}\n\n/** Derive up/down from signed deltas (+2.0%, -3pp, 95.5% (0.6pp), etc.). */\nexport function trendFromSignedValue(text) {\n if (isNullishMetric(text)) return null;\n const str = String(text).trim();\n const parenMatch = str.match(/\\(\\s*([+-])?\\s*([\\d.]+)/);\n if (parenMatch) {\n if (parenMatch[1] === \"-\") return \"down\";\n if (parenMatch[1] === \"+\") return \"up\";\n return parseFloat(parenMatch[2]) < 0 ? \"down\" : \"up\";\n }\n if (/^[-−]/.test(str)) return \"down\";\n if (/^\\+/.test(str)) return \"up\";\n if (/-\\d/.test(str)) return \"down\";\n return null;\n}\n\nexport function resolveTrend(trend, signedText) {\n return trendFromSignedValue(signedText) ?? (trend === \"down\" ? \"down\" : \"up\");\n}\n\nexport function resolveKpiTrend(trend, value, points) {\n return (\n trendFromPoints(points) ??\n (hasMeaningfulMetric(value) ? resolveTrend(trend, value) : trend === \"down\" ? \"down\" : \"up\")\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport {\n ArrowLeft,\n ArrowRight,\n CalendarDays,\n Download,\n Phone,\n ChevronDown,\n ChevronUp,\n ChevronLeft,\n ChevronRight,\n TrendingUp,\n TrendingDown,\n Lightbulb,\n ShieldCheck,\n FolderKanban,\n Layers,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport { DateRangeButton } from \"./PerformancePanel\";\nimport {\n formatEightHourRangeEndpoints,\n formatLocalDate,\n getPresetWindowDates,\n} from \"./performanceRangeFormat\";\nimport {\n SPARK_DEFAULT_AREA,\n SPARK_DEFAULT_LINE,\n buildSparkPaths,\n normalizeSparkPoints,\n} from \"./performanceSparkline\";\nimport {\n METRIC_PLACEHOLDER,\n formatMetricDisplay,\n hasChartData,\n hasMeaningfulMetric,\n resolveKpiTrend,\n resolveTrend,\n} from \"./performanceMetrics\";\n\n// Color values resolve to CSS variables declared in `src/tokens/colors.css`.\n// Anything new added here MUST first be added to that file as a `--*` token.\nconst C = {\n ink: \"var(--color-text)\",\n muted: \"var(--color-text-secondary)\",\n border: \"var(--grey-absent)\",\n borderSubtle: \"var(--neutral-100)\",\n iconCircle: \"var(--surface-hover)\",\n black: \"var(--neutral-900)\",\n white: \"var(--grey-white)\",\n neutralBorder: \"var(--neutral-250)\",\n neutral800: \"var(--neutral-800)\",\n neutral600: \"var(--neutral-600)\",\n neutral450: \"var(--neutral-450)\",\n neutral400: \"var(--neutral-400)\",\n neutral300: \"var(--neutral-300)\",\n neutral150: \"var(--neutral-150)\",\n neutral100: \"var(--neutral-100)\",\n beige: \"var(--surface-warm-40)\",\n shadowCard: \"var(--shadow-card)\",\n // Section accent colors are passed to SectionHeading via `iconColor`.\n railCompliance: \"var(--rail-compliance)\",\n accentYellow: \"var(--accent-yellow)\",\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\nconst FONT_BODY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\nfunction TrendArrow({ direction = \"up\", color = C.muted }) {\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 width={18} height={9.5} viewBox=\"0 0 19 10\" fill=\"none\" style={{ flexShrink: 0 }}>\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\n// MM/DD/YYYY in the viewer's local timezone — matches PerformancePanel's\n// `formatLocalDate`. Accepts Date instances or strings (e.g. \"2026-03-16\");\n// returns the input untouched if it can't be parsed.\nfunction formatDisplayDate(input) {\n if (!input) return \"\";\n const opts = { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" };\n if (input instanceof Date) {\n return Number.isNaN(input.getTime()) ? \"\" : input.toLocaleDateString(\"en-US\", opts);\n }\n const str = String(input).trim();\n const ymd = str.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})/);\n if (ymd) {\n const d = new Date(Number(ymd[1]), Number(ymd[2]) - 1, Number(ymd[3]));\n return d.toLocaleDateString(\"en-US\", opts);\n }\n const parsed = new Date(str);\n if (!Number.isNaN(parsed.getTime())) return parsed.toLocaleDateString(\"en-US\", opts);\n return str;\n}\n\nfunction Sparkline({ trend = \"up\", points, empty = false, width = 49.618, height = 35 }) {\n const id = React.useId();\n if (empty) {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 52 36\"\n fill=\"none\"\n style={{ flexShrink: 0 }}\n >\n <path\n d=\"M2,18 L50,18\"\n stroke={C.ink}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n }\n const built = buildSparkPaths(points);\n const linePath = built ? built.line : SPARK_DEFAULT_LINE;\n const areaPath = built ? built.area : SPARK_DEFAULT_AREA;\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 // Only mirror the canned curve. When real points are supplied the\n // shape already reflects direction, so no mirror needed.\n transform: !built && 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 // Dashed only when we don't have real points and trend is \"down\"\n // (matches the pre-existing decorative behavior).\n strokeDasharray={!built && trend === \"down\" ? \"2 4\" : undefined}\n />\n </svg>\n );\n}\n\nfunction KpiCell({ value, label, sub, trend = \"up\", points }) {\n const displayValue = formatMetricDisplay(value);\n const hasData = hasMeaningfulMetric(value) || normalizeSparkPoints(points) != null;\n const direction = resolveKpiTrend(trend, value, points);\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 16,\n minWidth: 0,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n flexShrink: 0,\n alignItems: \"flex-end\",\n }}\n >\n <Sparkline trend={direction} points={points} empty={!hasData} />\n {hasData ? <TrendArrow direction={direction} /> : null}\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6, minWidth: 0 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 28,\n fontWeight: 400,\n lineHeight: \"1.2\",\n color: C.muted,\n letterSpacing: \"-0.01em\",\n whiteSpace: \"nowrap\",\n }}\n >\n {displayValue}\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.ink,\n lineHeight: \"1.2\",\n }}\n >\n {label}\n </span>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.neutral600,\n lineHeight: \"1.2\",\n }}\n >\n {sub}\n </span>\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_BODY,\n fontSize: 14,\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n}\n\nfunction FilterButton({ icon: Icon, children, active = false }) {\n return (\n <button\n type=\"button\"\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.neutralBorder}`,\n background: active ? C.black : C.white,\n cursor: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: active ? C.white : C.neutral800,\n fontWeight: active ? 600 : 400,\n whiteSpace: \"nowrap\",\n }}\n >\n {Icon && <Icon size={18} strokeWidth={1.75} />}\n {children}\n </button>\n );\n}\n\nconst DEFAULT_LINE_POINTS = [\n [0, 30],\n [60, 50],\n [120, 95],\n [180, 60],\n [240, 70],\n [300, 80],\n];\n\nfunction CompassLineChart({\n // When omitted, y-axis labels are auto-derived from `points` (5 evenly-spaced\n // ticks from max → min). Pass a custom array to override the formatting.\n yLabels: yLabelsProp,\n xLabels = [],\n // points: array of [x, y] pairs OR array of y-numbers (auto-distributed in x).\n // y is in DATA space — the chart auto-scales it to pixel space using the\n // points' own min/max (with a small padding).\n points,\n // index of the marker to render filled (defaults to the last point)\n highlightIndex,\n}) {\n const [hoveredPoint, setHoveredPoint] = React.useState(null);\n const width = 460;\n const height = 110;\n const hasData = Array.isArray(points) && points.length > 0;\n const gradId = React.useId();\n // Cap the visible x-axis ticks regardless of how many points are passed —\n // long trends (60+ days) would otherwise overflow the card.\n const MAX_X_TICKS = 6;\n const allXLabels = Array.isArray(xLabels) ? xLabels : [];\n const visibleXLabels =\n allXLabels.length <= MAX_X_TICKS\n ? allXLabels\n : Array.from({ length: MAX_X_TICKS }, (_, i) =>\n allXLabels[Math.round((i * (allXLabels.length - 1)) / (MAX_X_TICKS - 1))]\n );\n // Vertical grid lines at evenly-spaced positions matching the visible ticks.\n const gridCount = Math.max(2, visibleXLabels.length || MAX_X_TICKS);\n const gridXs = Array.from({ length: gridCount }, (_, i) => (i / (gridCount - 1)) * width);\n\n if (!hasData) {\n // Empty state: render an empty 133px chart skeleton with just the grid\n // lines — no placeholder copy. Hosts that supply only headline value/\n // delta still get a clean card without \"No data\" text bleeding through.\n return (\n <div style={{ display: \"flex\", gap: 8, height: 133, width: \"100%\" }}>\n <div style={{ width: 24, flexShrink: 0 }} />\n <div style={{ flex: 1, position: \"relative\", minWidth: 0 }}>\n <svg\n width=\"100%\"\n height={height + 14}\n viewBox={`0 0 ${width} ${height + 14}`}\n preserveAspectRatio=\"none\"\n >\n {gridXs.map((gx, i) => (\n <line\n key={`grid-${i}`}\n x1={gx}\n y1=\"0\"\n x2={gx}\n y2={height}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 3\"\n strokeWidth=\"1\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n </div>\n </div>\n );\n }\n\n // Normalize to [x, y] pairs in DATA space.\n const dataPairs = Array.isArray(points[0])\n ? points\n : points.map((y, i) => [i, y]);\n const yValues = dataPairs.map(([, y]) => y);\n const yDataMin = Math.min(...yValues);\n const yDataMax = Math.max(...yValues);\n // Pad the range so the curve isn't pinned to the very top/bottom; if all\n // values are identical, give the axis a 1-unit cushion so it still draws.\n const yPad = yDataMax === yDataMin ? Math.max(Math.abs(yDataMax) * 0.1, 1) : (yDataMax - yDataMin) * 0.1;\n const yMin = yDataMin - yPad;\n const yMax = yDataMax + yPad;\n const ySpan = yMax - yMin || 1;\n const sy = (y) => ((yMax - y) / ySpan) * height;\n const normalized = dataPairs.map(([x, y]) => [x, sy(y)]);\n\n // Auto-derive y-axis labels (5 evenly-spaced ticks from max → min) when the\n // caller didn't pass an override.\n const yLabels =\n yLabelsProp && yLabelsProp.length\n ? yLabelsProp\n : Array.from({ length: 5 }, (_, i) => {\n const v = yMax - (i / 4) * (yMax - yMin);\n const abs = Math.abs(v);\n const decimals = abs >= 100 ? 0 : abs >= 10 ? 1 : 2;\n return v.toFixed(decimals);\n });\n const minX = normalized[0][0];\n const maxX = normalized[normalized.length - 1][0];\n const xSpan = maxX - minX || 1;\n // Keep endpoints away from the SVG edge so first/last point markers don't clip.\n const xPad = 8;\n const innerWidth = Math.max(1, width - xPad * 2);\n const sx = (x) => xPad + ((x - minX) / xSpan) * innerWidth;\n const formatPointValue = (value) => {\n const n = Number(value);\n if (!Number.isFinite(n)) return String(value ?? \"\");\n const abs = Math.abs(n);\n const decimals = abs >= 100 ? 0 : abs >= 10 ? 1 : 2;\n return n.toFixed(decimals);\n };\n const linePath = normalized\n .map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"}${sx(x)},${y}`)\n .join(\" \");\n const areaPath = `${linePath} L${sx(normalized[normalized.length - 1][0])},${height} L${sx(normalized[0][0])},${height} Z`;\n const highlight = highlightIndex == null ? normalized.length - 1 : highlightIndex;\n return (\n <div style={{ display: \"flex\", gap: 8, height: 133, width: \"100%\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n padding: \"14px 0\",\n fontFamily: FONT_BODY,\n fontSize: 10,\n color: C.neutral800,\n flexShrink: 0,\n }}\n >\n {yLabels.map((l) => (\n <span key={l}>{l}</span>\n ))}\n </div>\n <div style={{ flex: 1, position: \"relative\", minWidth: 0 }}>\n {hoveredPoint && (\n <div\n style={{\n position: \"absolute\",\n left: `${hoveredPoint.xPct}%`,\n top: `${hoveredPoint.yPct}%`,\n transform: \"translate(-50%, calc(-100% - 10px))\",\n pointerEvents: \"none\",\n zIndex: 2,\n background: C.black,\n color: C.white,\n borderRadius: 6,\n minWidth: 60,\n padding: \"8px 10px\",\n boxShadow: \"0 6px 16px rgba(0,0,0,0.18)\",\n fontFamily: FONT_BODY,\n fontSize: 11,\n lineHeight: 1.25,\n whiteSpace: \"nowrap\",\n textAlign: \"left\",\n }}\n >\n <div>{hoveredPoint.label}</div>\n <div style={{ fontWeight: 600 }}>{hoveredPoint.value}</div>\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n bottom: -5,\n width: 10,\n height: 10,\n background: C.black,\n transform: \"translateX(-50%) rotate(45deg)\",\n borderRadius: 2,\n }}\n />\n </div>\n )}\n <svg\n width=\"100%\"\n height={height + 14}\n viewBox={`0 0 ${width} ${height + 14}`}\n preserveAspectRatio=\"none\"\n onMouseLeave={() => setHoveredPoint(null)}\n >\n <defs>\n <linearGradient id={`area-${gradId}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" style={{ stopColor: C.black, stopOpacity: 0.08 }} />\n <stop offset=\"100%\" style={{ stopColor: C.black, stopOpacity: 0 }} />\n </linearGradient>\n </defs>\n {gridXs.map((gx, i) => (\n <line\n key={`grid-${i}`}\n x1={gx}\n y1=\"0\"\n x2={gx}\n y2={height}\n stroke={C.borderSubtle}\n strokeDasharray=\"2 3\"\n strokeWidth=\"1\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n <path d={areaPath} fill={`url(#area-${gradId})`} />\n <path\n d={linePath}\n stroke={C.black}\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n {normalized.map(([x, y], i) => {\n const isHighlight = i === highlight;\n return (\n <circle\n key={i}\n cx={sx(x)}\n cy={y}\n r={isHighlight ? 4 : 3}\n fill={isHighlight ? C.black : C.white}\n stroke={C.black}\n strokeWidth=\"1.5\"\n vectorEffect=\"non-scaling-stroke\"\n onMouseEnter={() => {\n setHoveredPoint({\n xPct: (sx(x) / width) * 100,\n yPct: (y / (height + 28)) * 100,\n label: allXLabels[i] || `Point ${i + 1}`,\n value: formatPointValue(dataPairs[i]?.[1]),\n });\n }}\n />\n );\n })}\n </svg>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n paddingRight: 6,\n fontFamily: FONT_BODY,\n fontSize: 10,\n color: C.neutral800,\n marginTop: 8,\n marginBottom: 4,\n overflow: \"hidden\",\n }}\n >\n {visibleXLabels.map((l, i) => (\n <span key={i} style={{ whiteSpace: \"nowrap\" }}>{l}</span>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nfunction ChartCard({ title, value, delta, children }) {\n const displayValue = formatMetricDisplay(value);\n const showDelta = hasMeaningfulMetric(delta);\n // Value line uses em-dash fallback; delta/trend icons stay hidden for placeholders.\n const deltaTrend = showDelta ? resolveTrend(\"up\", delta) : \"up\";\n return (\n <div\n style={{\n flex: 1,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 24,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 24,\n minWidth: 0,\n boxShadow: C.shadowCard,\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-end\" }}>\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 15,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"flex-end\",\n gap: 4,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n }}\n >\n <span style={{ fontSize: 20, color: C.black, lineHeight: 1 }}>{displayValue}</span>\n {showDelta ? (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 3,\n fontSize: 10,\n color: C.neutral300,\n lineHeight: 1,\n }}\n >\n <TrendArrow direction={deltaTrend} color={C.neutral300} />\n {delta}\n </span>\n ) : null}\n </span>\n </div>\n <div style={{ flex: 1 }}>{children}</div>\n </div>\n );\n}\n\nfunction SectionHeading({ icon: Icon, title, trailing, iconColor = C.ink, bordered = false }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n paddingBottom: bordered ? 12 : 0,\n borderBottom: bordered ? `1px solid ${C.border}` : \"none\",\n }}\n >\n <div\n style={{\n width: 24,\n height: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={22} strokeWidth={1.75} style={{ color: iconColor }} />\n </div>\n <div\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n textTransform: \"uppercase\",\n letterSpacing: \"0.02em\",\n }}\n >\n {title}\n </div>\n {trailing && (\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.ink }}>{trailing}</div>\n )}\n </div>\n );\n}\n\n// Hosts emit `text` (matches PerformancePanel's accordion); legacy callers\n// may pass `bullet`. Accept either so existing consumers don't break.\n// When `href` is provided the label renders as an underlined link that\n// opens in a new tab (used by Performance guidance examples → interaction\n// detail page).\nfunction CitationRow({ text, bullet, citation, date, href }) {\n const label = text ?? bullet ?? \"\";\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n lineHeight: \"24px\",\n gap: 16,\n }}\n >\n {href ? (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: C.ink,\n textDecoration: \"underline\",\n textUnderlineOffset: 2,\n textDecorationColor: C.border,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {label}\n </a>\n ) : (\n <span style={{ minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {label}\n </span>\n )}\n <span style={{ display: \"inline-flex\", gap: 4, whiteSpace: \"nowrap\" }}>\n <span style={{ color: C.ink }}>{citation}</span>\n {date ? <span style={{ color: C.muted }}>({date})</span> : null}\n </span>\n </div>\n );\n}\n\nfunction AccordionRow({\n title,\n summary,\n calls,\n // Hosts emit `percent` (matches PerformancePanel's accordion); legacy\n // callers may still send `delta`. Accept either.\n percent,\n delta,\n bullets,\n defaultExpanded = false,\n}) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n const trailingRaw = percent ?? delta;\n const showTrailing = hasMeaningfulMetric(trailingRaw);\n const trailing = showTrailing ? String(trailingRaw) : METRIC_PLACEHOLDER;\n const trailingTrend = showTrailing ? resolveTrend(\"up\", trailing) : \"up\";\n const TrendIcon = trailingTrend === \"down\" ? TrendingDown : TrendingUp;\n const rows = Array.isArray(bullets) ? bullets : [];\n // Outer container is a div so the bullet rows inside (which may hold\n // <a> links to the interaction detail page) aren't nested inside an\n // interactive <button>. Header still toggles via the inner button.\n return (\n <div style={{ borderTop: `1px solid ${C.border}` }}>\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n style={{\n border: \"none\",\n background: \"transparent\",\n padding: 16,\n display: \"flex\",\n gap: 12,\n alignItems: \"flex-start\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n }}\n >\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 12, minWidth: 0 }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <span\n style={{\n fontFamily: FONT_BODY,\n fontWeight: 500,\n fontSize: 14,\n color: C.black,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </span>\n <span style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.muted, lineHeight: \"24px\" }}>\n {summary}\n </span>\n </div>\n <div style={{ display: \"flex\", gap: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <Phone size={12} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink }}>{calls} calls</span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n {showTrailing ? (\n <TrendIcon size={12} color={C.ink} strokeWidth={1.75} />\n ) : null}\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: showTrailing ? C.ink : C.muted,\n }}\n >\n {trailing}\n </span>\n </div>\n </div>\n </div>\n <ChevronDown\n size={20}\n color={C.ink}\n strokeWidth={2}\n style={{\n flexShrink: 0,\n transform: expanded ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n }}\n />\n </button>\n {expanded && rows.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n padding: \"0 16px 16px\",\n }}\n >\n {rows.map((b, i) => (\n <CitationRow key={i} {...b} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"8px 8px 12px\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: \"1.2\",\n }}\n >\n <span style={{ color: C.ink }}>{label}</span>\n <span style={{ color: C.muted }}>{value}</span>\n </div>\n );\n}\n\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: \"flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\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\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\n />\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 display: \"inline-block\",\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_SESSION_COLUMNS = [\n { id: \"title\", label: \"Title\", width: 220, sortable: true, filterable: true },\n { id: \"date\", label: \"Date\", width: 170, sortable: true },\n { id: \"duration\", label: \"Duration\", width: 170, sortable: true },\n { id: \"lift\", label: \"Lift\", width: 120, sortable: true },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 220,\n sortable: true,\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\n\nfunction SubSectionHeading({ icon: Icon, title }) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, width: \"100%\" }}>\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: C.iconCircle,\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 fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {title}\n </span>\n </div>\n );\n}\n\nexport default function PerformanceDetailsPage({\n agentName = \"\",\n startDate = \"\",\n endDate = \"\",\n totalCalls = \"\",\n onBack,\n className = \"\",\n // KPI strip\n kpiBaseline = { value: \"\", label: \"\", sub: \"\", trend: \"up\" },\n kpiAgentLift = { value: \"\", label: \"\", sub: \"\", trend: \"down\" },\n kpiScore = { value: \"\", label: \"\", sub: \"\", trend: \"up\" },\n // Chart cards (Baseline / Agent Lift / Score / CSAT / Volume)\n // Each takes { value, delta, yLabels?, xLabels?, points? }.\n // points is an array of [x, y] pairs OR a flat array of y-numbers.\n baselineChart = { value: \"\", delta: \"\" },\n agentLiftChart = { value: \"\", delta: \"\" },\n scoreChart = { value: \"\", delta: \"\" },\n csatChart = { value: \"\", delta: \"\" },\n volumeChart = { value: \"\", delta: \"\" },\n // Insight sections — titles and chart-card labels stay empty by default\n // so the library doesn't ship demo copy.\n guidanceItems = [],\n strengthItems = [],\n callDrivers = [],\n callParadigms = [],\n strengthsTitle = \"\",\n guidanceTitle = \"\",\n callMixTitle = \"\",\n driversTitle = \"\",\n paradigmsTitle = \"\",\n sessionsTitle = \"\",\n baselineChartTitle = \"\",\n agentLiftChartTitle = \"\",\n scoreChartTitle = \"\",\n csatChartTitle = \"\",\n volumeChartTitle = \"\",\n // Sessions table\n sessions = [],\n sessionColumns = [],\n initialPageSize = 10,\n // Time-range chips state — mirrors PerformancePanel so the active chip /\n // Date Range highlight survives the navigation into the details page.\n // Callbacks are optional; when omitted the controls are display-only.\n selectedWindow = \"30d\",\n onWindowChange,\n dateRange,\n onDateRangeChange,\n // Server-side pagination for the sessions table. When all four are provided\n // the table switches to controlled / server-paginated mode and the host is\n // expected to refetch when the user changes page or page size.\n sessionsTotal = null,\n sessionsPage = null,\n sessionsPageSize = null,\n onSessionsPageChange,\n onSessionsPageSizeChange,\n // Fires when the user clicks the Export CSV button in the header. Disabled\n // if no handler is provided.\n onExport,\n // Fires when the user clicks a row in the sessions table.\n onSessionClick,\n // Fires whenever the user toggles columns in the sessions table's column\n // picker — hosts can scope their CSV export to whatever the user has visible.\n onSessionsVisibleColumnsChange,\n}) {\n const customRangeActive = !!(dateRange?.from && dateRange?.to);\n // 8h label uses a rolling window (now − 8h), same as the list panel. Hosts\n // often pass date-only startDate/endDate (midnight), which would render as\n // \"12:00 AM – 12:00 AM\"; derive the range locally instead.\n const eightHourRange = (() => {\n if (customRangeActive || selectedWindow !== \"8h\") return null;\n const range = getPresetWindowDates(\"8h\");\n return range ? formatEightHourRangeEndpoints(range.from, range.to) : null;\n })();\n const presetDateRange = (() => {\n if (customRangeActive || selectedWindow === \"8h\") return null;\n const range = getPresetWindowDates(selectedWindow);\n if (!range) return null;\n return {\n from: formatLocalDate(range.from),\n to: formatLocalDate(range.to),\n };\n })();\n\n // A chart card is only worth rendering when the host has something concrete\n // for it — either a headline value, a delta, or actual chart points. Without\n // that we'd ship empty frames with \"No data\" inside, which leaks library\n // demo copy. Hosts populate progressively; gallery passes everything.\n const showRow1 =\n hasChartData(baselineChart) || hasChartData(agentLiftChart) || hasChartData(scoreChart);\n const showRow2 = hasChartData(csatChart) || hasChartData(volumeChart);\n\n return (\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_BODY,\n color: C.ink,\n width: \"100%\",\n minWidth: 1192,\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"23px 32px\",\n minHeight: 78,\n boxSizing: \"border-box\",\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 paddingLeft: 16,\n borderLeft: `1px solid ${C.border}`,\n flex: 1,\n minWidth: 0,\n alignSelf: \"stretch\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <h1\n style={{\n fontFamily: FONT_DISPLAY,\n fontSize: 24,\n fontWeight: 400,\n color: C.ink,\n margin: 0,\n lineHeight: 1,\n whiteSpace: \"nowrap\",\n }}\n >\n {agentName}\n </h1>\n </div>\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_BODY,\n fontSize: 14,\n lineHeight: \"24px\",\n color: C.neutral800,\n flexShrink: 0,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n </div>\n\n <div\n style={{\n padding: \"0 32px 32px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 16,\n paddingLeft: 49,\n }}\n >\n <div style={{ display: \"flex\", gap: 16, alignItems: \"center\" }}>\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <CalendarDays size={14} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {eightHourRange?.from ??\n presetDateRange?.from ??\n formatDisplayDate(startDate)}\n </span>\n <ArrowRight size={12} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {eightHourRange?.to ??\n presetDateRange?.to ??\n formatDisplayDate(endDate)}\n </span>\n </div>\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <Phone size={14} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n <span\n style={{\n fontFamily: FONT_BODY,\n fontSize: 12,\n color: C.ink,\n lineHeight: 1.5,\n }}\n >\n {totalCalls}\n </span>\n </div>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n {[\n { id: \"8h\", label: \"8h\" },\n { id: \"1d\", label: \"1d\" },\n { id: \"7d\", label: \"7d\" },\n { id: \"30d\", label: \"30d\" },\n ].map((opt) => (\n <RangeChip\n key={opt.id}\n label={opt.label}\n active={!customRangeActive && opt.id === selectedWindow}\n onClick={() => onWindowChange?.(opt.id)}\n />\n ))}\n <DateRangeButton value={dateRange} onChange={onDateRangeChange} />\n </div>\n </div>\n\n <div\n style={{\n background: C.beige,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {[\n { key: \"baseline\", kpi: kpiBaseline },\n { key: \"agent-lift\", kpi: kpiAgentLift },\n { key: \"score\", kpi: kpiScore },\n ].map((col, i) => (\n <React.Fragment key={col.key}>\n {i > 0 ? (\n <ArrowRight\n size={20}\n color={C.ink}\n strokeWidth={1.75}\n style={{ flexShrink: 0, margin: \"0 24px\" }}\n />\n ) : null}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minWidth: 0,\n }}\n >\n <KpiCell\n value={col.kpi.value}\n label={col.kpi.label}\n sub={col.kpi.sub}\n trend={col.kpi.trend}\n points={col.kpi.points}\n />\n </div>\n </React.Fragment>\n ))}\n </div>\n\n {showRow1 && (\n <div style={{ display: \"flex\", gap: 24 }}>\n {hasChartData(baselineChart) && (\n <ChartCard title={baselineChartTitle} value={baselineChart.value} delta={baselineChart.delta}>\n <CompassLineChart\n yLabels={baselineChart.yLabels}\n xLabels={baselineChart.xLabels}\n points={baselineChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(agentLiftChart) && (\n <ChartCard title={agentLiftChartTitle} value={agentLiftChart.value} delta={agentLiftChart.delta}>\n <CompassLineChart\n yLabels={agentLiftChart.yLabels}\n xLabels={agentLiftChart.xLabels}\n points={agentLiftChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(scoreChart) && (\n <ChartCard title={scoreChartTitle} value={scoreChart.value} delta={scoreChart.delta}>\n <CompassLineChart\n yLabels={scoreChart.yLabels}\n xLabels={scoreChart.xLabels}\n points={scoreChart.points}\n />\n </ChartCard>\n )}\n </div>\n )}\n\n {showRow2 && (\n <div style={{ display: \"flex\", gap: 24 }}>\n {hasChartData(csatChart) && (\n <ChartCard title={csatChartTitle} value={csatChart.value} delta={csatChart.delta}>\n <CompassLineChart\n yLabels={csatChart.yLabels}\n xLabels={csatChart.xLabels}\n points={csatChart.points}\n />\n </ChartCard>\n )}\n {hasChartData(volumeChart) && (\n <ChartCard title={volumeChartTitle} value={volumeChart.value} delta={volumeChart.delta}>\n <CompassLineChart\n yLabels={volumeChart.yLabels}\n xLabels={volumeChart.xLabels}\n points={volumeChart.points}\n />\n </ChartCard>\n )}\n </div>\n )}\n\n <div style={{ display: \"flex\", gap: 24, marginTop: 8, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 16, minWidth: 0 }}>\n <SectionHeading icon={ShieldCheck} title={strengthsTitle} iconColor={C.railCompliance} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {strengthItems.map((item, i) => (\n <AccordionRow key={i} {...item} />\n ))}\n </div>\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 16, minWidth: 0 }}>\n <SectionHeading icon={Lightbulb} title={guidanceTitle} iconColor={C.railCompliance} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {guidanceItems.map((item, i) => (\n <AccordionRow key={i} {...item} />\n ))}\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16, marginTop: 8 }}>\n <SectionHeading icon={Phone} title={callMixTitle} iconColor={C.railCompliance} />\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <SubSectionHeading icon={FolderKanban} title={driversTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callDrivers.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <SubSectionHeading icon={Layers} title={paradigmsTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callParadigms.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16, marginTop: 8 }}>\n {sessionsTitle && (\n <span\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {sessionsTitle}\n </span>\n )}\n <DataTable2\n data={sessions}\n columns={sessionColumns}\n initialPageSize={initialPageSize}\n totalCount={sessionsTotal}\n page={sessionsPage}\n pageSize={sessionsPageSize}\n onPageChange={onSessionsPageChange}\n onPageSizeChange={onSessionsPageSizeChange}\n onRowClick={onSessionClick}\n onVisibleColumnsChange={onSessionsVisibleColumnsChange}\n />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Download,\n ChevronDown,\n CalendarDays,\n Search,\n ChevronLeft,\n ChevronRight,\n TrendingUp,\n Lightbulb,\n ShieldCheck,\n Phone,\n Signal,\n FolderKanban,\n Layers,\n Check,\n} from \"lucide-react\";\nimport DataTable2 from \"../data/DataTable2\";\nimport PerformanceDetailsPage from \"./PerformanceDetailsPage\";\nimport {\n RANGE_TO_MS,\n computeWindowLabel,\n formatLocalDate,\n} from \"./performanceRangeFormat\";\nimport {\n SPARK_DEFAULT_AREA,\n SPARK_DEFAULT_LINE,\n buildSparkPaths,\n trendFromPoints,\n} from \"./performanceSparkline\";\n\nconst EMPTY_STAT = { value: \"\", label: \"\", trend: \"up\" };\n\n// Color values resolve to CSS variables declared in `src/tokens/colors.css`.\n// Anything new added here MUST first be added to that file as a `--*` token.\nconst C = {\n ink: \"var(--color-text)\",\n muted: \"var(--color-text-secondary)\",\n border: \"var(--grey-absent)\",\n borderSubtle: \"var(--neutral-100)\",\n iconCircle: \"var(--surface-hover)\",\n black: \"var(--neutral-900)\",\n white: \"var(--grey-white)\",\n green: \"var(--color-green)\",\n red: \"var(--color-red-strong)\",\n neutralBorder: \"var(--neutral-250)\",\n neutralLight: \"var(--neutral-100)\",\n beige: \"var(--surface-warm-40)\",\n // Extras needed by inline literals in this file:\n neutral800: \"var(--neutral-800)\", // button/text label grey\n textInk: \"var(--text-ink)\", // body subtitle (#1E2125)\n textFaintGrey: \"var(--text-faint-grey)\", // disabled calendar day text\n hoverWarm40: \"var(--hover-warm-40)\", // calendar in-range highlight\n shadowPopover: \"var(--shadow-popover)\",\n shadowDropdown: \"var(--shadow-dropdown)\",\n railCompliance: \"var(--rail-compliance)\", // section icon accent\n};\n\nconst FONT_DISPLAY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\nconst FONT_BODY = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\nfunction Sparkline({ trend = \"up\", points, width = 49.618, height = 35 }) {\n const id = React.useId();\n const built = buildSparkPaths(points);\n const linePath = built ? built.line : SPARK_DEFAULT_LINE;\n const areaPath = built ? built.area : SPARK_DEFAULT_AREA;\n const direction = trendFromPoints(points) ?? trend;\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: !built && direction === \"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={!built && direction === \"down\" ? \"2 4\" : undefined}\n />\n </svg>\n );\n}\n\nfunction resolveStatTrend(trend, points) {\n return trendFromPoints(points) ?? (trend === \"down\" ? \"down\" : \"up\");\n}\n\nfunction TrendArrow({ direction = \"up\", color = C.muted }) {\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 width={18} height={9.5} viewBox=\"0 0 19 10\" fill=\"none\" style={{ flexShrink: 0 }}>\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\", points, muted = false, beigeBg = false, style = {} }) {\n const direction = resolveStatTrend(trend, points);\n return (\n <div\n style={{\n background: beigeBg ? C.beige : 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={direction} points={points} />\n <TrendArrow direction={direction} />\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: muted ? C.muted : C.ink,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>{label}</div>\n </div>\n </div>\n );\n}\n\nfunction StatSubCell({ value, label, trend = \"up\", points, withDivider = false }) {\n const direction = resolveStatTrend(trend, points);\n return (\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n paddingLeft: withDivider ? 24 : 0,\n borderLeft: withDivider ? `1px solid ${C.border}` : \"none\",\n minWidth: 0,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\" }}>\n <Sparkline trend={direction} points={points} />\n <TrendArrow direction={direction} />\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.muted,\n letterSpacing: \"-0.01em\",\n }}\n >\n {value}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 13, color: C.ink, lineHeight: \"1.2\" }}>{label}</div>\n </div>\n </div>\n );\n}\n\nfunction FilterButton({ icon: Icon, children, trailing: Trailing }) {\n return (\n <button\n type=\"button\"\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: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.neutral800,\n whiteSpace: \"nowrap\",\n }}\n >\n {Icon && <Icon size={18} strokeWidth={1.75} />}\n {children}\n {Trailing && <Trailing size={16} strokeWidth={2} />}\n </button>\n );\n}\n\nconst MONTH_NAMES = [\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\",\n];\nconst DOW_LABELS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nfunction startOfDay(d) {\n const x = new Date(d);\n x.setHours(0, 0, 0, 0);\n return x;\n}\n\nfunction buildCalendarGrid(year, month) {\n // Returns 42 dates (6 weeks). Leading/trailing days are from neighbour months.\n const first = new Date(year, month, 1);\n const startWeekday = first.getDay();\n const gridStart = new Date(year, month, 1 - startWeekday);\n return Array.from({ length: 42 }, (_, i) => {\n const d = new Date(gridStart);\n d.setDate(gridStart.getDate() + i);\n return d;\n });\n}\n\nfunction DateRangePopover({ value, onApply, onClose, anchorRef }) {\n const popoverRef = React.useRef(null);\n const [from, setFrom] = React.useState(value?.from ? startOfDay(value.from) : null);\n const [to, setTo] = React.useState(value?.to ? startOfDay(value.to) : null);\n const initialMonth = from || new Date();\n const [viewYear, setViewYear] = React.useState(initialMonth.getFullYear());\n const [viewMonth, setViewMonth] = React.useState(initialMonth.getMonth());\n const [pos, setPos] = React.useState({ top: 0, left: 0 });\n\n // Position under the trigger (right-aligned so it doesn't overflow viewport).\n // Recomputed on scroll/resize so the popover stays attached to the button\n // when the page scrolls — same pattern as the Columns dropdown in DataTable2.\n React.useLayoutEffect(() => {\n const updatePosition = () => {\n if (!anchorRef?.current) return;\n const r = anchorRef.current.getBoundingClientRect();\n const POPOVER_WIDTH = 320;\n setPos({\n top: r.bottom + 6,\n left: Math.max(8, r.right - POPOVER_WIDTH),\n });\n };\n updatePosition();\n window.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n return () => {\n window.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n };\n }, [anchorRef]);\n\n // Close on outside click / Escape.\n React.useEffect(() => {\n const handleClick = (e) => {\n if (popoverRef.current?.contains(e.target)) return;\n if (anchorRef?.current?.contains(e.target)) return;\n onClose();\n };\n const handleKey = (e) => { if (e.key === \"Escape\") onClose(); };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKey);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKey);\n };\n }, [onClose, anchorRef]);\n\n const days = buildCalendarGrid(viewYear, viewMonth);\n const today = startOfDay(new Date());\n\n const handleDayClick = (d) => {\n const day = startOfDay(d);\n // Block future dates — they'd never be valid for \"data up to now\" filters.\n if (day > today) return;\n if (!from || (from && to)) {\n setFrom(day);\n setTo(null);\n } else if (day < from) {\n setFrom(day);\n } else {\n setTo(day);\n }\n };\n\n const goPrev = () => {\n if (viewMonth === 0) { setViewMonth(11); setViewYear(viewYear - 1); }\n else setViewMonth(viewMonth - 1);\n };\n const goNext = () => {\n if (viewMonth === 11) { setViewMonth(0); setViewYear(viewYear + 1); }\n else setViewMonth(viewMonth + 1);\n };\n\n const isInRange = (d) => from && to && d >= from && d <= to;\n const isEdge = (d) => (from && d.getTime() === from.getTime()) || (to && d.getTime() === to.getTime());\n\n return createPortal(\n <div\n ref={popoverRef}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n width: 320,\n background: C.white,\n border: `1px solid ${C.borderSubtle}`,\n borderRadius: 12,\n boxShadow: C.shadowPopover,\n padding: 16,\n zIndex: 9999,\n fontFamily: FONT_BODY,\n }}\n >\n {/* Month header with prev/next */}\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <button type=\"button\" onClick={goPrev} style={navBtnStyle} aria-label=\"Previous month\">\n <ChevronLeft size={18} strokeWidth={1.75} />\n </button>\n <div style={{ fontSize: 14, fontWeight: 600, color: C.ink }}>\n {MONTH_NAMES[viewMonth]} {viewYear}\n </div>\n <button type=\"button\" onClick={goNext} style={navBtnStyle} aria-label=\"Next month\">\n <ChevronRight size={18} strokeWidth={1.75} />\n </button>\n </div>\n\n {/* Day-of-week header */}\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 1fr)\", gap: 2, marginBottom: 4 }}>\n {DOW_LABELS.map((d) => (\n <div key={d} style={{ textAlign: \"center\", fontSize: 12, color: C.muted, padding: \"4px 0\" }}>\n {d}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(7, 1fr)\", gap: 2 }}>\n {days.map((d) => {\n const inMonth = d.getMonth() === viewMonth;\n const inRange = isInRange(d);\n const edge = isEdge(d);\n const isToday = d.getTime() === today.getTime();\n const isFuture = d > today;\n return (\n <button\n key={d.toISOString()}\n type=\"button\"\n onClick={() => handleDayClick(d)}\n disabled={isFuture}\n aria-disabled={isFuture}\n style={{\n height: 36,\n border: \"none\",\n borderRadius: 8,\n background: edge ? C.black : inRange ? C.hoverWarm40 : \"transparent\",\n color: edge ? C.white : isFuture ? C.textFaintGrey : inMonth ? C.ink : C.muted,\n fontFamily: FONT_BODY,\n fontSize: 13,\n fontWeight: isToday ? 500 : 400,\n cursor: isFuture ? \"not-allowed\" : \"pointer\",\n opacity: isFuture ? 0.6 : 1,\n }}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Footer */}\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", marginTop: 12, paddingTop: 12, borderTop: `1px solid ${C.borderSubtle}` }}>\n <button\n type=\"button\"\n onClick={() => { setFrom(null); setTo(null); }}\n style={{ background: \"transparent\", border: \"none\", padding: 0, cursor: \"pointer\", fontSize: 14, fontWeight: 500, color: C.ink }}\n >\n Clear\n </button>\n <button\n type=\"button\"\n disabled={!from || !to}\n onClick={() => { onApply({ from, to }); onClose(); }}\n style={{\n background: !from || !to ? C.neutralBorder : C.black,\n color: C.white,\n border: \"none\",\n borderRadius: 10,\n height: 30,\n padding: \"0 16px\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n fontWeight: 600,\n cursor: !from || !to ? \"not-allowed\" : \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n </div>,\n document.body,\n );\n}\n\nconst navBtnStyle = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 28,\n height: 28,\n border: \"none\",\n background: \"transparent\",\n borderRadius: 6,\n cursor: \"pointer\",\n color: C.ink,\n};\n\nfunction DateRangeButton({ value, onChange }) {\n const [open, setOpen] = React.useState(false);\n const triggerRef = React.useRef(null);\n // Highlighted only after the user clicks Apply in the popover (i.e. once a\n // custom date range is committed). Just opening the popover does not\n // activate the button — same active treatment as the 30d/8h/1d/7d chips.\n const active = !!(value?.from && value?.to);\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n padding: \"0 16px\",\n borderRadius: 10,\n border: active ? \"none\" : `1px solid ${C.neutralBorder}`,\n background: active ? C.black : C.white,\n cursor: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: active ? C.white : C.neutral800,\n fontWeight: active ? 600 : 400,\n whiteSpace: \"nowrap\",\n }}\n >\n <CalendarDays size={18} strokeWidth={1.75} />\n Date Range\n </button>\n {open && (\n <DateRangePopover\n value={value}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n onApply={(range) => onChange?.(range)}\n />\n )}\n </>\n );\n}\n\nexport { DateRangeButton };\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_BODY,\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\nfunction SearchBar() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n height: 32,\n width: 260,\n padding: \"0 12px\",\n borderRadius: 11,\n background: C.white,\n border: `1px solid ${C.neutralLight}`,\n }}\n >\n <Search size={16} strokeWidth={2} style={{ color: \"var(--neutral-400)\" }} />\n <input\n placeholder=\"Search\"\n style={{\n flex: 1,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n }}\n />\n </div>\n );\n}\n\nfunction CompassRating({ 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: \"flex\", gap: 4 }}>\n {Array.from({ length: max }).map((_, i) => {\n if (i < full) {\n return (\n <span\n key={i}\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\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\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: C.black,\n display: \"inline-block\",\n }}\n />\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 display: \"inline-block\",\n boxSizing: \"border-box\",\n }}\n />\n );\n })}\n </div>\n );\n}\n\nexport const DEFAULT_AGENT_COLUMNS = [\n { id: \"agent\", label: \"Agent\", width: 180, sortable: true, filterable: true },\n { id: \"supervisor\", label: \"Supervisor\", width: 170, sortable: true, filterable: true },\n { id: \"calls\", label: \"Calls\", width: 100, sortable: true },\n { id: \"baseline\", label: \"Baseline\", width: 110, sortable: true },\n { id: \"lift\", label: \"Lift\", width: 100, sortable: true },\n { id: \"score\", label: \"Score\", width: 100, sortable: true, filterable: true, filterType: \"number\" },\n {\n id: \"compass\",\n label: \"Compass Score\",\n width: 200,\n sortable: true,\n filterable: true,\n filterType: \"number\",\n render: (value) => (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 12 }}>\n <span style={{ minWidth: 32 }}>{value}</span>\n <CompassRating value={typeof value === \"number\" ? value : 0} />\n </span>\n ),\n },\n { id: \"totalDuration\", label: \"Total Duration\", width: 150, sortable: true, filterable: true, filterType: \"duration\", filterShowPresets: false },\n { id: \"avgDuration\", label: \"Average Duration\", width: 170, sortable: true, filterable: true, filterType: \"duration\", filterShowPresets: false },\n];\n\n\nfunction SectionHeading({ icon: Icon, title, trailing, iconColor = C.ink, bordered = false }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n paddingBottom: bordered ? 12 : 0,\n borderBottom: bordered ? `1px solid ${C.border}` : \"none\",\n }}\n >\n <div\n style={{\n width: 24,\n height: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Icon size={22} strokeWidth={1.75} style={{ color: iconColor }} />\n </div>\n <div\n style={{\n flex: 1,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: \"1.2\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.02em\",\n }}\n >\n {title}\n </div>\n {trailing && (\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.ink }}>{trailing}</div>\n )}\n </div>\n );\n}\n\nfunction SubSectionHeading({ icon: Icon, title }) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, width: \"100%\" }}>\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: C.iconCircle,\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 fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 16,\n color: C.ink,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </span>\n </div>\n );\n}\n\nfunction AccordionItem({ title, summary, calls, percent, bullets, defaultExpanded = false }) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n const rows = Array.isArray(bullets) ? bullets : [];\n // Outer container is a div (not a button) so the bullet rows inside can\n // hold <a> link elements without nesting interactive HTML — clicking\n // the header still toggles via the inner button below.\n return (\n <div style={{ borderTop: `1px solid ${C.border}` }}>\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n style={{\n border: \"none\",\n background: \"transparent\",\n padding: 16,\n display: \"flex\",\n gap: 12,\n alignItems: \"flex-start\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n minWidth: 0,\n }}\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <div\n style={{\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 14,\n color: C.black,\n lineHeight: \"24px\",\n }}\n >\n {title}\n </div>\n <div style={{ fontFamily: FONT_BODY, fontSize: 14, color: C.muted, lineHeight: \"24px\" }}>\n {summary}\n </div>\n </div>\n <div style={{ display: \"flex\", gap: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <Phone size={14} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink, lineHeight: 1.5 }}>\n {calls}\n </span>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <TrendingUp size={14} color={C.ink} strokeWidth={1.75} />\n <span style={{ fontFamily: FONT_BODY, fontSize: 12, color: C.ink, lineHeight: 1.5 }}>\n {percent}\n </span>\n </div>\n </div>\n </div>\n <ChevronDown\n size={20}\n color={C.ink}\n strokeWidth={2}\n style={{\n flexShrink: 0,\n transform: expanded ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n }}\n />\n </button>\n {expanded && rows.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n padding: \"0 16px 16px\",\n }}\n >\n {rows.map((b, i) => (\n <div\n key={i}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n color: C.ink,\n lineHeight: \"24px\",\n gap: 16,\n }}\n >\n {b.href ? (\n <a\n href={b.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: C.ink,\n textDecoration: \"underline\",\n textUnderlineOffset: 2,\n textDecorationColor: C.border,\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {b.text}\n </a>\n ) : (\n <span\n style={{\n minWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {b.text}\n </span>\n )}\n <span style={{ display: \"inline-flex\", gap: 4, whiteSpace: \"nowrap\" }}>\n <span style={{ color: C.ink }}>{b.citation}</span>\n <span style={{ color: C.muted }}>({b.date})</span>\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction PercentRow({ label, value }) {\n return (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"12px 0\",\n borderBottom: `1px solid ${C.border}`,\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: \"24px\",\n }}\n >\n <span style={{ color: C.ink }}>{label}</span>\n <span style={{ color: C.muted }}>{value}</span>\n </div>\n );\n}\n\nfunction EmptyState({ message = \"\" }) {\n if (!message) return null;\n return (\n <div\n style={{\n padding: \"16px 0\",\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.muted,\n lineHeight: 1.5,\n }}\n >\n {message}\n </div>\n );\n}\n\nexport default function PerformancePanel({\n className = \"\",\n onAgentClick,\n // Header text — empty defaults so host apps don't see demo copy. Hosts pass\n // their own page title / subtitle (the gallery in dev/App.jsx demonstrates\n // the intended \"Performance\" / \"Agent performance metrics...\" wording).\n title = \"\",\n subtitle = \"\",\n dateRangeLabel = \"\",\n // View-by dropdown. `initialViewBy` seeds internal state on mount;\n // `onViewByChange(id)` fires when the user selects a different option.\n viewByOptions = [],\n initialViewBy = \"\",\n onViewByChange,\n // Label rendered above the View-by option list inside the popover. Empty by\n // default; the gallery passes \"Aggregated By\" to reproduce the Figma copy.\n aggregatedByLabel = \"\",\n // KPI strip\n volumeStat = EMPTY_STAT,\n compassStat = EMPTY_STAT,\n baselineSubStat = EMPTY_STAT,\n agentLiftSubStat = EMPTY_STAT,\n scoreSubStat = EMPTY_STAT,\n // Agent table\n agentRows = [],\n agentColumns = [],\n initialPageSize = 10,\n // Insight sections — all titles, empty-state copy, and the section icons /\n // colors are host-driven so the library renders nothing concrete by default.\n guidanceItems = [],\n strengthItems = [],\n callDrivers = [],\n callParadigms = [],\n topSignalsLeft = [],\n topSignalsRight = [],\n topSignalsTrailing = \"\",\n strengthsTitle = \"\",\n guidanceTitle = \"\",\n callMixTitle = \"\",\n driversTitle = \"\",\n paradigmsTitle = \"\",\n topSignalsTitle = \"\",\n emptyStrengthsMessage = \"\",\n emptyGuidanceMessage = \"\",\n emptyDriversMessage = \"\",\n emptyParadigmsMessage = \"\",\n emptyTopSignalsMessage = \"\",\n // Time-range chips (8h / 1d / 7d / 30d). Override `rangeOptions` to customize.\n // `selectedWindow` is the currently-active option id; `onWindowChange(id)` fires\n // 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 // (Same slot pattern as DataTableFilters2's `dateRangePicker` prop.)\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 // Fires when the user clicks the Export CSV button in the header.\n onExport,\n // Fires whenever the user toggles columns in the table's column picker —\n // hosts can scope their CSV export to whatever the user has visible.\n onVisibleColumnsChange,\n}) {\n const [selectedAgent, setSelectedAgent] = React.useState(null);\n const [viewByOpen, setViewByOpen] = React.useState(false);\n const [viewBy, setViewBy] = React.useState(initialViewBy);\n // Internal fallback for the custom date range when the host doesn't pass\n // `dateRange` / `onDateRangeChange`. Lifted up to this component (rather\n // than living inside DateRangeButton) so the time-range chips can become\n // mutually exclusive with 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 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 const viewByTriggerRef = React.useRef(null);\n const viewByPopoverRef = React.useRef(null);\n\n React.useEffect(() => {\n if (!viewByOpen) return;\n const handler = (e) => {\n if (\n viewByPopoverRef.current?.contains(e.target) ||\n viewByTriggerRef.current?.contains(e.target)\n ) {\n return;\n }\n setViewByOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [viewByOpen]);\n\n const viewByLabel =\n viewByOptions.find((o) => o.id === viewBy)?.label || (viewByOptions[0]?.label ?? \"\");\n\n const handleRowClick = (row) => {\n if (onAgentClick) {\n onAgentClick(row);\n return;\n }\n setSelectedAgent(row);\n };\n\n // Keep the panel (including DataTable2) mounted while a details page is shown,\n // so filters / sort / pagination are preserved when the user navigates back.\n return (\n <>\n {selectedAgent && (() => {\n // Compute the start/end the details page should show. Custom range\n // wins; otherwise derive from the selected window so the chip view\n // and the date display stay consistent across the two pages.\n let detailsFrom = null;\n let detailsTo = null;\n if (customRangeActive) {\n detailsFrom = effectiveDateRange.from;\n detailsTo = effectiveDateRange.to;\n } else {\n const ms = RANGE_TO_MS[selectedWindow];\n if (ms) {\n detailsTo = new Date();\n detailsFrom = new Date(detailsTo.getTime() - ms);\n }\n }\n return (\n <PerformanceDetailsPage\n className={className}\n agentName={selectedAgent.agent}\n startDate={detailsFrom || \"\"}\n endDate={detailsTo || \"\"}\n totalCalls={`${selectedAgent.calls} Calls`}\n onBack={() => setSelectedAgent(null)}\n selectedWindow={selectedWindow}\n dateRange={effectiveDateRange}\n />\n );\n })()}\n <div\n className={className}\n style={{\n background: C.white,\n fontFamily: FONT_BODY,\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) when drilling into agent details so DataTable2's\n // internal filter / sort / pagination state survives the round trip.\n display: selectedAgent ? \"none\" : \"flex\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8, paddingTop: 12 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 4 }}>\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 }}\n >\n {title}\n </h1>\n <p style={{ fontFamily: FONT_BODY, fontSize: 14, color: \"var(--neutral-950)\", margin: 0, lineHeight: \"1.4\" }}>\n {subtitle}\n </p>\n </div>\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_BODY,\n fontSize: 14,\n color: C.neutral800,\n }}\n >\n <Download size={18} strokeWidth={1.75} />\n Export CSV\n </button>\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <div style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n ref={viewByTriggerRef}\n onClick={() => setViewByOpen((v) => !v)}\n aria-haspopup=\"listbox\"\n aria-expanded={viewByOpen}\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: \"pointer\",\n fontFamily: FONT_BODY,\n fontSize: 14,\n lineHeight: \"24px\",\n color: C.neutral800,\n whiteSpace: \"nowrap\",\n }}\n >\n {viewByLabel}\n <ChevronDown\n size={20}\n strokeWidth={1.75}\n style={{\n transform: viewByOpen ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 120ms ease\",\n }}\n />\n </button>\n {viewByOpen && (\n <div\n ref={viewByPopoverRef}\n role=\"listbox\"\n style={{\n position: \"absolute\",\n top: 36,\n left: 0,\n zIndex: 20,\n background: C.white,\n border: `1px solid ${C.border}`,\n borderRadius: 4,\n boxShadow: C.shadowDropdown,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 144,\n fontFamily: FONT_BODY,\n }}\n >\n {aggregatedByLabel && (\n <div\n style={{\n padding: 12,\n fontFamily: FONT_DISPLAY,\n fontWeight: 600,\n fontSize: 13,\n color: C.ink,\n lineHeight: 1.2,\n }}\n >\n {aggregatedByLabel}\n </div>\n )}\n {viewByOptions.map((opt) => {\n const isSelected = viewBy === opt.id;\n return (\n <button\n key={opt.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n if (opt.id !== viewBy) {\n setViewBy(opt.id);\n onViewByChange?.(opt.id);\n }\n setViewByOpen(false);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: isSelected ? 12 : \"12px 12px 12px 40px\",\n borderTop: `1px solid ${C.border}`,\n borderLeft: \"none\",\n borderRight: \"none\",\n borderBottom: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontFamily: FONT_BODY,\n fontSize: 13,\n lineHeight: 1.2,\n color: C.ink,\n width: \"100%\",\n }}\n >\n {isSelected && (\n <Check size={20} color={C.ink} strokeWidth={1.75} style={{ flexShrink: 0 }} />\n )}\n <span>{opt.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 10, alignItems: \"center\" }}>\n {(() => {\n // Custom range wins if active; otherwise the active chip drives the\n // label. Chip label wins over `dateRangeLabel` so hosts aren't stuck\n // showing date-only strings for 8h when they pass a legacy override.\n const customLabel = customRangeActive\n ? `${formatLocalDate(effectiveDateRange.from)} – ${formatLocalDate(effectiveDateRange.to)}`\n : \"\";\n const label =\n customLabel ||\n computeWindowLabel(selectedWindow) ||\n dateRangeLabel;\n return label ? (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontFamily: FONT_BODY,\n fontSize: 13,\n color: C.ink,\n }}\n >\n <CalendarDays size={16} strokeWidth={1.75} color={C.muted} />\n {label}\n </span>\n ) : null;\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 <React.Suspense\n fallback={<FilterButton icon={CalendarDays}>Date Range</FilterButton>}\n >\n {dateRangePicker}\n </React.Suspense>\n ) : (\n <DateRangeButton value={effectiveDateRange} onChange={handleDateRangeChange} />\n )}\n {/* <SearchBar /> */}\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 24 }}>\n <StatCard value={volumeStat.value} label={volumeStat.label} trend={volumeStat.trend} points={volumeStat.points} style={{ width: 264, flexShrink: 0 }} />\n <StatCard value={compassStat.value} label={compassStat.label} trend={compassStat.trend} points={compassStat.points} style={{ width: 264, flexShrink: 0 }} />\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 gap: 24,\n alignItems: \"stretch\",\n boxSizing: \"border-box\",\n }}\n >\n <StatSubCell value={baselineSubStat.value} label={baselineSubStat.label} trend={baselineSubStat.trend} points={baselineSubStat.points} />\n <StatSubCell value={agentLiftSubStat.value} label={agentLiftSubStat.label} trend={agentLiftSubStat.trend} points={agentLiftSubStat.points} withDivider />\n <StatSubCell value={scoreSubStat.value} label={scoreSubStat.label} trend={scoreSubStat.trend} points={scoreSubStat.points} withDivider />\n </div>\n </div>\n\n <DataTable2\n data={agentRows}\n columns={agentColumns}\n initialPageSize={initialPageSize}\n onRowClick={handleRowClick}\n onVisibleColumnsChange={onVisibleColumnsChange}\n />\n\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={ShieldCheck} title={strengthsTitle} iconColor=\"var(--rail-compliance)\" />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n borderBottom: `1px solid ${C.border}`,\n maxHeight: 480,\n overflowY: \"auto\",\n }}\n >\n {strengthItems.length === 0 ? (\n <EmptyState message={emptyStrengthsMessage} />\n ) : (\n strengthItems.map((item, i) => <AccordionItem key={i} {...item} />)\n )}\n </div>\n </div>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Lightbulb} title={guidanceTitle} iconColor=\"var(--rail-compliance)\" />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n borderBottom: `1px solid ${C.border}`,\n maxHeight: 480,\n overflowY: \"auto\",\n }}\n >\n {guidanceItems.length === 0 ? (\n <EmptyState message={emptyGuidanceMessage} />\n ) : (\n guidanceItems.map((item, i) => <AccordionItem key={i} {...item} />)\n )}\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Phone} title={callMixTitle} iconColor=\"var(--rail-compliance)\" />\n <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <SubSectionHeading icon={FolderKanban} title={driversTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callDrivers.length === 0 ? (\n <EmptyState message={emptyDriversMessage} />\n ) : (\n callDrivers.map((row, i) => <PercentRow key={i} {...row} />)\n )}\n </div>\n </div>\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <SubSectionHeading icon={Layers} title={paradigmsTitle} />\n <div style={{ display: \"flex\", flexDirection: \"column\", maxHeight: 480, overflowY: \"auto\" }}>\n {callParadigms.length === 0 ? (\n <EmptyState message={emptyParadigmsMessage} />\n ) : (\n callParadigms.map((row, i) => <PercentRow key={i} {...row} />)\n )}\n </div>\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <SectionHeading icon={Signal} title={topSignalsTitle} iconColor=\"var(--rail-compliance)\" trailing={topSignalsTrailing} bordered />\n {topSignalsLeft.length === 0 && topSignalsRight.length === 0 ? (\n <EmptyState message={emptyTopSignalsMessage} />\n ) : (\n <div style={{ display: \"flex\", gap: 24 }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {topSignalsLeft.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {topSignalsRight.map((row, i) => (\n <PercentRow key={i} {...row} />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </>\n );\n}\n"],"names":["RANGE_TO_MS","LOCALE","DATE_OPTS","TIME_OPTS","coalesceToDate","input","str","ymd","d","parsed","isSameLocalCalendarDay","a","b","formatLocalDate","date","formatLocalTime","formatLocalDateTime","formatEightHourWindowLabel","from","to","f","t","formatEightHourRangeEndpoints","getPresetWindowDates","windowId","ms","computeWindowLabel","range","SPARK_DEFAULT_LINE","SPARK_DEFAULT_AREA","normalizeSparkPoints","points","numeric","p","n","buildSparkPaths","vbW","vbH","min","max","padY","span","usableH","sx","i","sy","v","line","lastX","firstX","area","trendFromPoints","first","last","METRIC_PLACEHOLDER","isNullishMetric","value","hasMeaningfulMetric","formatMetricDisplay","fallback","hasHostMetricField","hasChartData","chart","trendFromSignedValue","text","parenMatch","resolveTrend","trend","signedText","resolveKpiTrend","C","FONT_DISPLAY","FONT_BODY","TrendArrow","direction","color","jsx","formatDisplayDate","opts","Sparkline","empty","width","height","id","React","built","linePath","areaPath","jsxs","KpiCell","label","sub","displayValue","hasData","RangeChip","active","onClick","CompassLineChart","yLabelsProp","xLabels","highlightIndex","hoveredPoint","setHoveredPoint","gradId","MAX_X_TICKS","allXLabels","visibleXLabels","_","gridCount","gridXs","gx","dataPairs","y","yValues","yDataMin","yDataMax","yPad","yMin","yMax","ySpan","normalized","x","yLabels","abs","decimals","minX","xSpan","xPad","innerWidth","formatPointValue","highlight","l","isHighlight","_a","ChartCard","title","delta","children","showDelta","deltaTrend","SectionHeading","Icon","trailing","iconColor","bordered","CitationRow","bullet","citation","href","AccordionRow","summary","calls","percent","bullets","defaultExpanded","expanded","setExpanded","trailingRaw","showTrailing","TrendIcon","TrendingDown","TrendingUp","rows","Phone","ChevronDown","PercentRow","CompassDots","full","hasPartial","DEFAULT_SESSION_COLUMNS","num","SubSectionHeading","PerformanceDetailsPage","agentName","startDate","endDate","totalCalls","onBack","className","kpiBaseline","kpiAgentLift","kpiScore","baselineChart","agentLiftChart","scoreChart","csatChart","volumeChart","guidanceItems","strengthItems","callDrivers","callParadigms","strengthsTitle","guidanceTitle","callMixTitle","driversTitle","paradigmsTitle","sessionsTitle","baselineChartTitle","agentLiftChartTitle","scoreChartTitle","csatChartTitle","volumeChartTitle","sessions","sessionColumns","initialPageSize","selectedWindow","onWindowChange","dateRange","onDateRangeChange","sessionsTotal","sessionsPage","sessionsPageSize","onSessionsPageChange","onSessionsPageSizeChange","onExport","onSessionClick","onSessionsVisibleColumnsChange","customRangeActive","eightHourRange","presetDateRange","showRow1","showRow2","ArrowLeft","Download","CalendarDays","ArrowRight","opt","DateRangeButton","col","ShieldCheck","item","Lightbulb","FolderKanban","row","Layers","DataTable2","EMPTY_STAT","resolveStatTrend","StatCard","muted","beigeBg","style","StatSubCell","withDivider","FilterButton","Trailing","MONTH_NAMES","DOW_LABELS","startOfDay","buildCalendarGrid","year","month","startWeekday","gridStart","DateRangePopover","onApply","onClose","anchorRef","popoverRef","setFrom","setTo","initialMonth","viewYear","setViewYear","viewMonth","setViewMonth","pos","setPos","updatePosition","r","POPOVER_WIDTH","handleClick","e","_b","handleKey","days","today","handleDayClick","day","goPrev","goNext","isInRange","isEdge","createPortal","navBtnStyle","ChevronLeft","ChevronRight","inMonth","inRange","edge","isToday","isFuture","onChange","open","setOpen","triggerRef","Fragment","o","DEFAULT_RANGE_OPTIONS","CompassRating","DEFAULT_AGENT_COLUMNS","AccordionItem","EmptyState","message","PerformancePanel","onAgentClick","subtitle","dateRangeLabel","viewByOptions","initialViewBy","onViewByChange","aggregatedByLabel","volumeStat","compassStat","baselineSubStat","agentLiftSubStat","scoreSubStat","agentRows","agentColumns","topSignalsLeft","topSignalsRight","topSignalsTrailing","topSignalsTitle","emptyStrengthsMessage","emptyGuidanceMessage","emptyDriversMessage","emptyParadigmsMessage","emptyTopSignalsMessage","rangeOptions","dateRangePicker","onVisibleColumnsChange","selectedAgent","setSelectedAgent","viewByOpen","setViewByOpen","viewBy","setViewBy","internalDateRange","setInternalDateRange","effectiveDateRange","handleDateRangeChange","handleWindowChange","viewByTriggerRef","viewByPopoverRef","handler","viewByLabel","handleRowClick","detailsFrom","detailsTo","isSelected","Check","Signal"],"mappings":"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"}