chordia-ui 3.4.7 → 3.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/UpdatedInteractionDetails.cjs.js +7 -2
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +1282 -541
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/package.json +1 -1
- package/src/components/UpdatedInteractionDetails/UpdatedCoachingSynthesisCard.jsx +41 -30
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionContext.jsx +192 -77
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +180 -125
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionScores.jsx +21 -34
- package/src/components/UpdatedInteractionDetails/UpdatedThreads.jsx +739 -0
- package/src/components/UpdatedInteractionDetails/index.js +1 -0
- package/src/fonts/.DS_Store +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdatedInteractionDetails.cjs.js","sources":["../../src/components/UpdatedInteractionDetails/UpdatedCoachingSynthesisCard.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionContext.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionScores.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionSignals.jsx","../../src/components/UpdatedInteractionDetails/UpdatedCompassScore.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { ShieldCheck, ThumbsUp, TrendingUp, Lightbulb } from \"lucide-react\";\n\n/**\n * UpdatedCoachingSynthesisCard — \"COACHING SUMMARY\" section matching Figma node 113-7216.\n *\n * Props:\n * - data object Coaching synthesis response\n * - loading boolean Show shimmer loading state\n * - error string Error message to display\n *\n * Data shape:\n * - one_liner string\n * - context string\n * - strengths Array<{ text: string, quote?: string }>\n * - improvements Array<{ text: string, quote?: string }>\n * - overall string \"effective\" | \"strong\" | \"needs_improvement\" | \"mixed\"\n */\n\nconst COLORS = {\n strong: \"var(--Grey-Strong, #2E3236)\",\n muted: \"var(--Grey-Muted, #808183)\",\n absent: \"var(--Grey-absent, #D9D9D9)\",\n accent: \"var(--rail-orange, #C98A5A)\",\n itemText: \"var(--text-item, #3F3F3F)\",\n quoteLine: \"var(--border-warm, #B2AEA8)\",\n quoteText: \"var(--text-subtle-warm, #767473)\",\n iconBg: \"var(--surface-hover, #F3F7F7)\",\n};\n\nconst OVERALL_MAP = {\n effective: \"Effective\",\n strong: \"Strong\",\n needs_improvement: \"Needs Improvement\",\n mixed: \"Mixed\",\n};\n\nconst STYLE_ID = \"updated-coaching-synthesis-keyframes\";\n\nfunction ensureKeyframes() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes updated-coaching-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n }\n @keyframes updated-coaching-pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction OverallBadge({ overall }) {\n const label = OVERALL_MAP[overall] || (overall ? overall.replace(/_/g, \" \") : \"\");\n\n return (\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n Overall:\n </span>\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}>\n <ThumbsUp size={14} color={COLORS.strong} strokeWidth={1.5} />\n <span style={{\n fontSize: 13,\n fontWeight:600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n {label}\n </span>\n </div>\n </div>\n );\n}\n\nfunction SectionItem({ item }) {\n const text = typeof item === \"string\" ? item : item?.text || \"\";\n const quote = typeof item === \"object\" ? item?.quote : null;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 14 }}>\n <div style={{\n fontSize: 14,\n fontWeight: 600,\n color: COLORS.itemText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {text}\n </div>\n {quote && (\n <div style={{\n display: \"flex\",\n gap: 10,\n }}>\n <div style={{\n width: 1,\n flexShrink: 0,\n alignSelf: \"stretch\",\n background: COLORS.quoteLine,\n }} />\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.quoteText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n “{quote}”\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CoachingColumn({ icon, label, items }) {\n if (!items || items.length === 0) return null;\n\n return (\n <div style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n borderRadius: 12,\n }}>\n {/* Column header */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n }}>\n {/* Icon with circular bg */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n borderRadius: 9999,\n background: COLORS.iconBg,\n flexShrink: 0,\n }}>\n {icon}\n </div>\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: \"normal\",\n }}>\n {label}\n </span>\n </div>\n\n {/* Items */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 24 }}>\n {items.map((item, i) => (\n <SectionItem key={i} item={item} />\n ))}\n </div>\n </div>\n );\n}\n\nconst UpdatedCoachingSynthesisCard = ({ data, loading, error }) => {\n React.useEffect(() => { ensureKeyframes(); }, []);\n\n // Loading state\n if (loading) {\n return (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n }}>\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}>\n <div style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: COLORS.accent,\n animation: \"updated-coaching-pulse 1.5s ease-in-out infinite\",\n }} />\n <span style={{\n fontSize: 14,\n color: COLORS.muted,\n fontWeight: 500,\n }}>\n Synthesizing coaching summary...\n </span>\n </div>\n {[180, 260, 220].map((w, i) => (\n <div\n key={i}\n style={{\n height: 10,\n width: w,\n maxWidth: \"100%\",\n borderRadius: 4,\n background: `linear-gradient(90deg, ${COLORS.absent} 25%, var(--shimmer-mid, #ECECEC) 50%, ${COLORS.absent} 75%)`,\n backgroundSize: \"200% 100%\",\n animation: \"updated-coaching-shimmer 1.8s ease-in-out infinite\",\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div style={{\n fontSize: 14,\n color: COLORS.muted,\n }}>\n Unable to generate coaching summary.\n </div>\n );\n }\n\n // No data\n if (!data) return null;\n\n const strengths = data.strengths || [];\n const improvements = data.improvements || [];\n const oneLiner = typeof data.one_liner === \"string\" ? data.one_liner : data.one_liner?.text || \"\";\n const context = typeof data.context === \"string\" ? data.context : data.context?.text || \"\";\n\n return (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n background: \"#FFF\",\n }}>\n {/* Section header — Figma: icon + \"Coaching Summary\" 16px / 700 / #2E3236 */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}>\n <ShieldCheck size={20} color={COLORS.accent} strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n textTransform: \"uppercase\",\n }}>\n Coaching Summary\n </span>\n </div>\n\n {/* One-liner — Figma: 14px / 600 / #2E3236 */}\n {oneLiner && (\n <div style={{\n fontSize: 14,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {oneLiner}\n </div>\n )}\n\n {/* Context row + Overall badge — Figma: horizontal, space-between */}\n <div style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 16,\n justifyContent: \"space-between\",\n }}>\n {context && (\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n flex: 1,\n }}>\n {context}\n </div>\n )}\n {data.overall && <OverallBadge overall={data.overall} />}\n </div>\n\n {/* Two-column layout: Key Strengths + Improvements */}\n {/* Figma: border-top 1px #D9D9D9, padding-top 24px, gap 24px */}\n {(strengths.length > 0 || improvements.length > 0) && (\n <div style={{\n display: \"flex\",\n gap: 24,\n paddingTop: 24,\n borderTop: `1px solid ${COLORS.absent}`,\n }}>\n <CoachingColumn\n icon={<TrendingUp size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Key Strengths\"\n items={strengths}\n />\n <CoachingColumn\n icon={<Lightbulb size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Improvements\"\n items={improvements}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedCoachingSynthesisCard;\n","import { ExternalLink } from 'lucide-react';\n\n/*\n * Figma node: 101-2385 (Context grid — right column top, inside Frame 53 > Frame 56)\n *\n * Outer: display: flex; gap: 24px; horizontal\n * Two columns: flex: 1, vertical, gap: 12px\n *\n * Each metadata row:\n * padding: 8px 8px 12px 8px;\n * justify-content: space-between;\n * align-items: center;\n * border-bottom: 1px solid #D9D9D9;\n *\n * Label: 13px / 400 / #2E3236 (Grey/Strong)\n * Value: 13px / 400 / #808183 (Grey/Muted)\n *\n * More Details: ExternalLink icon 16px #808183 + \"More Details\" 13px/400/#2E3236\n */\n\nfunction fmtDur(seconds) {\n const m = Math.floor(seconds / 60);\n const s = Math.round(seconds % 60);\n return `${m}:${s.toString().padStart(2, '0')}`;\n}\n\nconst ROW_STYLE = {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 8px 12px 8px',\n alignItems: 'center',\n gap: 24,\n fontFamily: 'var(--font-sans)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: 'normal',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n};\n\nconst COLUMN_STYLE = {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 0 0',\n gap: 12,\n minWidth: 0,\n};\n\nconst UpdatedInteractionContext = ({\n meta = {},\n callPurpose = {},\n classification = {},\n dimensions = [],\n outcomeQuality = 'Neutral',\n onMoreDetails,\n}) => {\n const duration = meta.duration_seconds != null ? fmtDur(meta.duration_seconds) : null;\n const messages = meta.message_count;\n const driver = callPurpose.interaction_driver;\n const paradigm = classification.interaction_paradigm;\n\n // Left column rows\n const leftRows = [\n duration != null && { label: 'Duration', value: duration },\n driver != null && { label: 'Driver', value: driver },\n ...dimensions.filter((_, i) => i % 2 === 0).map((d) => ({ label: d.label || d.key, value: d.value })),\n { label: 'Outcome Quality', value: outcomeQuality },\n ].filter(Boolean);\n\n // Right column rows\n const rightRows = [\n messages != null && { label: 'Messages', value: messages },\n paradigm != null && { label: 'Paradigm', value: paradigm },\n ...dimensions.filter((_, i) => i % 2 === 1).map((d) => ({ label: d.label || d.key, value: d.value })),\n // { label: 'More Details', isLink: true },\n ].filter(Boolean);\n\n const renderRow = (item) => {\n if (item.isLink) {\n return (\n <div\n key={item.label}\n onClick={onMoreDetails}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '8px 0 8px 0',\n cursor: 'pointer',\n fontFamily: 'var(--font-sans)',\n }}\n >\n <ExternalLink size={16} color=\"#808183\" strokeWidth={1.5} />\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', fontSize: 13, fontWeight: 400 }}>\n {item.label}\n </span>\n </div>\n );\n }\n\n return (\n <div\n key={item.label}\n style={ROW_STYLE}\n >\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', whiteSpace: 'nowrap', flexShrink: 0 }}>\n {item.label}\n </span>\n <span style={{ color: 'var(--Grey-Muted, #808183)', textAlign: 'right' }}>\n {item.value}\n </span>\n </div>\n );\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n {/* Left column */}\n <div style={COLUMN_STYLE}>\n {leftRows.map((row) => renderRow(row))}\n </div>\n\n {/* Right column */}\n <div style={COLUMN_STYLE}>\n {rightRows.map((row) => renderRow(row))}\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionContext;\n","import React from 'react';\nimport { ThumbsUp, Plus } from 'lucide-react';\n\n/*\n * Figma node: 101-2386 (Agent Lift Analysis)\n *\n * Container: fill=#F3F1E5, padding: 24px, gap: 24px, vertical,\n * border-radius: 8px, border: 1px solid #D9D9D9\n *\n * Header (Frame 12): vertical, gap: 32\n * Row (Frame 20): horizontal, space-between, center\n * \"Agent Lift Analysis\" — 15px/700/#2E3236, lh=120%\n * Right (Frame 18): horizontal, gap: 8, center\n * \"vs. Average Agent:\" — 13px/400/#2E3236, lh=120%\n * \"+4.3pp\" — 14px/700/#2E3236, lh=120%\n * Divider: border-left 1px #D9D9D9, padding-left: 8\n * ThumbsUp 14x14 + \"Positive\" 13px/700/#2E3236\n *\n * Metrics (Frame 15): horizontal, gap: 24, align: bottom\n * Col 1 (Frame 8): vertical, gap: 16, center\n * \"94%\" — 28px/400/#808183, lh=120%\n * Labels: vertical, gap: 8\n * \"Expected Outcome\" — 13px/400/#2E3236\n * \"Based on call type & difficulty\" — 13px/400/#808183\n * Plus icon: 16x16, fill=#2E3236, radius: 24, white stroke\n * Col 2 (Frame 9): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"-11.0pp\" — 28px/400/#808183\n * \"Agent Impact\" — 13px/400/#2E3236\n * \"Behavior-driven change\" — 13px/400/#808183\n * Col 3 (Frame 7): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"83%\" — 28px/400/#2E3236 (highlighted)\n * \"Predicted Outcome\" — 13px/700/#2E3236\n * \"With agent behaviors\" — 13px/400/#808183\n *\n * Key Drivers (Frame 13): vertical, gap: 4\n * \"Key Drivers\" — 12px/700/#2E3236, lh=120%\n * Chips (Frame 16): horizontal, gap: 4\n * Each: bg=#FFF, pad=8, radius=4, border 1px #D9D9D9\n * Text: 12px/400/#2E3236, lh=120%\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n cardBg: 'var(--surface-warm-40, rgba(243, 241, 229, 0.40))',\n};\n\nconst LH = 1.2;\nconst MAX_VISIBLE_DRIVERS = 3;\n\nconst fmtPct = (v) => (v != null ? Math.round(v * 100) + '%' : '\\u2014');\n\nconst fmtPp = (v) => {\n if (v == null) return '\\u2014';\n const pp = (v * 100).toFixed(1);\n return v > 0 ? `+${pp}pp` : `${pp}pp`;\n};\n\nconst UpdatedInteractionScores = ({ outcomeLift, driverLabels = [] }) => {\n if (!outcomeLift || outcomeLift.lift == null) return null;\n\n const pExpected = outcomeLift.p_expected;\n const pFull = outcomeLift.p_full;\n const liftRaw =\n outcomeLift.lift_raw ??\n (pFull != null && pExpected != null ? pFull - pExpected : null);\n const liftRecentered = outcomeLift.lift;\n\n const liftBand = outcomeLift.interpretation?.lift_band\n ? outcomeLift.interpretation.lift_band.replace(/_/g, ' ')\n : liftRecentered >= 0\n ? 'Positive'\n : 'Negative';\n\n const liftBandCapitalized =\n liftBand.charAt(0).toUpperCase() + liftBand.slice(1);\n\n const visibleDrivers = driverLabels.slice(0, MAX_VISIBLE_DRIVERS);\n const overflowCount = driverLabels.length - MAX_VISIBLE_DRIVERS;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n gap: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.cardBg,\n alignSelf: 'stretch',\n }}\n >\n {/* Frame 12: Header + Metrics — vertical, gap: 32 */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n\n {/* Frame 20: Title row — horizontal, space-between, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n <span\n style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Agent Lift Analysis\n </span>\n\n {/* Frame 18: right meta — horizontal, gap: 8, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n fontFamily: 'var(--font-sans)',\n }}\n >\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, lineHeight: LH }}>\n vs. Average Agent:\n </span>\n {/* Frame 19: value */}\n <span style={{ fontSize: 14, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {fmtPp(liftRecentered)}\n </span>\n {/* Frame 21: divider + thumbsup + band */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n paddingLeft: 8,\n borderLeft: `1px solid ${COLORS.absent}`,\n }}\n >\n <ThumbsUp size={14} color={COLORS.strong} />\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {liftBandCapitalized}\n </span>\n </div>\n </div>\n </div>\n\n {/* Frame 15: Metrics row — horizontal, gap: 24, align: bottom */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n gap: 24,\n }}\n >\n {/* Frame 8: Expected Outcome — vertical, gap: 16, center */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center' }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pExpected)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Expected Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Based on call type & difficulty\n </span>\n </div>\n </div>\n\n {/* Plus icon: 16x16, fill=#2E3236, radius: 24 */}\n {/* <div\n style={{\n width: 16,\n height: 16,\n borderRadius: 24,\n background: COLORS.strong,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <Plus size={9.33} color={COLORS.white} strokeWidth={1} />\n </div> */}\n\n {/* Frame 9: Agent Impact — vertical, gap: 16, pad-left: 24, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPp(liftRaw)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Agent Impact\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Behavior-driven change\n </span>\n </div>\n </div>\n\n {/* Frame 7: Predicted Outcome — vertical, gap: 16, pad-left: 24, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pFull)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Predicted Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n With agent behaviors\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Frame 13: Key Drivers — vertical, gap: 4 */}\n {driverLabels.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Key Drivers\n </span>\n {/* Frame 16: chips — horizontal, gap: 4 */}\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {visibleDrivers.map((label, i) => (\n <div\n key={i}\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: 200,\n }}\n >\n {label}\n </span>\n </div>\n ))}\n {overflowCount > 0 && (\n <div\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n }}\n >\n + {overflowCount}\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedInteractionScores;\n","import { useState } from 'react';\nimport { ChevronDown, ChevronUp, PlayCircle, PauseCircle, FileSignal, ScrollText } from 'lucide-react';\n\n/* Hover circle wrapper for icons */\nconst HoverIcon = ({ children, size = 28, onClick, title }) => {\n const [hovered, setHovered] = useState(false);\n return (\n <div\n title={title}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: size,\n height: size,\n borderRadius: 9999,\n background: hovered ? 'var(--surface-hover, #F3F7F7)' : 'transparent',\n cursor: 'pointer',\n flexShrink: 0,\n transition: 'background 0.15s',\n }}\n >\n {children}\n </div>\n );\n};\n\n/*\n * Figma node: 222-672 (Signals accordion)\n *\n * Header: FileSignal icon in #F3F7F7 circle + \"Signals\" 15px/500 + \"N Signals Detected\" 14px/500\n *\n * Accordion Title (collapsed): horizontal, gap: 12, pad: 8 0, border-bottom: 1px #D9D9D9\n * Name: 14px/600/#0B0A0A, lh: 171%\n * Chevron: 20x20, stroke #767473\n *\n * Accordion Body (reason): horizontal, gap: 12, pad: 8 0, space-between\n * Reason: 14px/400/#767473, lh: 150%\n * Right: ScrollText icon 16x16 #808183 + time 13px/400/#808183\n *\n * Evidence (Frame 39): horizontal, gap: 8, pad: 8 0\n * Play circle: ~17px, stroke #808183\n * Quote: 13px/400/#2E3236, lh: 120%\n */\n\nconst UpdatedInteractionSignals = ({\n signals = { signals: [], present_count: 0, total_signals_evaluated: 0 },\n expandedSignals = new Set(),\n toggleSignal = () => {},\n playEvidence = () => {},\n highlightTurns = () => {},\n onShowInTranscript = () => {},\n timelinePlaying = false,\n currentTimeSeconds = 0,\n}) => {\n const signalList = signals?.signals ?? [];\n const presentCount = signals?.present_count ?? signalList.length;\n\n const fmtMs = (ms) => {\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n };\n\n const isEvPlaying = (ev) =>\n timelinePlaying &&\n ev.start_ms != null &&\n currentTimeSeconds * 1000 >= ev.start_ms &&\n currentTimeSeconds * 1000 <= (ev.end_ms ?? ev.start_ms + 5000);\n\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n alignSelf: 'stretch',\n width: '100%',\n gap: 16,\n }}>\n {/* ── Header: icon + \"Signals\" + count ── */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n width: '100%',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: 'var(--surface-hover, #F3F7F7)',\n flexShrink: 0,\n }}>\n <FileSignal size={20} color=\"#2E3236\" strokeWidth={1.5} />\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flex: 1,\n }}>\n <span style={{\n fontSize: 15,\n fontWeight: 500,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n Signals\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 500,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n {presentCount} Signals Detected\n </span>\n </div>\n </div>\n\n {/* ── Signal list (accordion) ── */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n background: 'var(--Grey-White, #FFF)',\n gap: 8,\n }}>\n {signalList.length === 0 && (\n <div style={{\n padding: '8px 0',\n fontSize: 14,\n color: 'var(--Grey-Muted, #808183)',\n }}>\n No signals detected.\n </div>\n )}\n\n {signalList.map((signal, idx) => {\n const key = signal.key ?? signal.id ?? idx;\n const isExpanded = expandedSignals.has(key);\n const obsCount = signal.observations?.length ?? 0;\n\n return (\n <div\n key={key}\n id={`signal-${key}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n gap: 8,\n }}\n >\n {/* ── Accordion Title — signal row ── */}\n <button\n onClick={() => toggleSignal(key)}\n style={{\n display: 'flex',\n padding: '8px 0',\n alignItems: 'center',\n gap: 12,\n alignSelf: 'stretch',\n width: '100%',\n background: 'none',\n border: 'none',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n }}\n >\n <span style={{\n flex: 1,\n textAlign: 'left',\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--text-dark, #0B0A0A)',\n lineHeight: 1.71,\n }}>\n {signal.display_name || signal.key?.replace(/_/g, ' ')}\n {obsCount > 0 && (\n <span style={{\n fontWeight: 600,\n color: 'var(--text-dark, #0B0A0A)',\n marginLeft: 6,\n }}>\n ({obsCount})\n </span>\n )}\n </span>\n {isExpanded ? (\n <ChevronUp size={20} color=\"#767473\" />\n ) : (\n <ChevronDown size={20} color=\"#767473\" />\n )}\n </button>\n\n {/* ── Expanded: Observations ── */}\n {isExpanded && signal.observations?.length > 0 && (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n gap: 0,\n }}>\n {signal.observations.map((obs, obsIdx) => (\n <div\n key={obs.key ?? obsIdx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n gap: 8,\n }}\n >\n {/* Accordion Body — reason + timestamp */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '8px 0',\n justifyContent: 'space-between',\n }}>\n <span style={{\n flex: 1,\n fontSize: 14,\n fontWeight: 400,\n color: 'var(--text-subtle-warm, #767473)',\n lineHeight: 1.5,\n }}>\n {obs.reason || obs.explanation}\n </span>\n {obs.evidence?.[0]?.start_ms != null && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flexShrink: 0,\n }}\n >\n <HoverIcon\n size={28}\n title=\"Show in transcript\"\n onClick={(e) => {\n e.stopPropagation();\n onShowInTranscript(obs.evidence[0].start_ms);\n }}\n >\n <ScrollText size={16} color=\"#808183\" strokeWidth={1.5} />\n </HoverIcon>\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n }}>\n {fmtMs(obs.evidence[0].start_ms)}\n </span>\n </div>\n )}\n </div>\n\n {/* Evidence quotes — Frame 39 */}\n {obs.evidence?.map((ev, evIdx) => {\n const hasTimestamps = ev.start_ms != null && ev.end_ms != null;\n return ev.text && (\n <div\n key={evIdx}\n onClick={(e) => {\n e.stopPropagation();\n if (hasTimestamps) playEvidence(ev);\n }}\n onMouseEnter={() => highlightTurns(ev.turn_ids ?? [])}\n onMouseLeave={() => highlightTurns([])}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 0',\n cursor: hasTimestamps ? 'pointer' : 'default',\n }}\n >\n {hasTimestamps && (\n <HoverIcon size={28}>\n {isEvPlaying(ev) ? (\n <PauseCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1.5}\n />\n ) : (\n <PlayCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1}\n />\n )}\n </HoverIcon>\n )}\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n “{ev.text}”\n </span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionSignals;\n","import React, { useState } from 'react';\nimport { Info } from 'lucide-react';\n\n/*\n * Figma node: 270-6494 (Compass Score card)\n *\n * Container: padding: 24px, border-radius: 8px, border: 1px solid #D9D9D9,\n * background: #FFF, gap: 24px, vertical\n *\n * Title: \"Compass Score\" 15px/700/#2E3236\n * Description: 14px/400/#808183\n *\n * Content: horizontal, gap: 48, center both axes\n * Left: Meter 243x200 (SVG from Figma export)\n * Right: Legends vertical, gap: 8, centered\n * Each: label 12px/400/#2E3236 + Info 14px stroke=#ACACAD\n * Score bar: 5 segments 22x6, gap: 2, filled=#2E3236, empty=#E3E1D7\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n accent: 'var(--rail-orange, #C98A5A)',\n track: 'var(--rail-surface-2, #E3E1D7)',\n infoIcon: 'var(--color-input-border, #ACACAD)',\n};\n\n// Gauge using stroke-based semi-circle arcs — matching Figma node 270-6499\nconst GaugeMeter = ({ score = 4, maxScore = 10 }) => {\n const svgW = 243;\n const svgH = 130;\n const cx = svgW / 2;\n const cy = svgH - 7;\n const r = 85; // mid-radius of the arc\n const sw = 30; // stroke-width (thickness of the arc band)\n const totalSeg = 5;\n const filledSeg = Math.min(Math.round((score / maxScore) * totalSeg), totalSeg);\n const segDeg = 180 / totalSeg; // 36° per segment\n\n // Convert polar (degrees, 0°=right, CCW) to SVG x,y (Y-down)\n const toXY = (angleDeg) => {\n const rad = (angleDeg * Math.PI) / 180;\n return {\n x: cx + r * Math.cos(rad),\n y: cy - r * Math.sin(rad),\n };\n };\n\n // SVG arc from startDeg to endDeg (both in math convention: 0=right, 180=left)\n // We draw clockwise in SVG (sweep-flag=1) from higher angle to lower angle\n const strokeArc = (fromDeg, toDeg) => {\n const s = toXY(fromDeg);\n const e = toXY(toDeg);\n const large = (fromDeg - toDeg) > 180 ? 1 : 0;\n return `M ${s.x} ${s.y} A ${r} ${r} 0 ${large} 1 ${e.x} ${e.y}`;\n };\n\n const gap = 2; // degrees gap between segments\n\n return (\n <svg width=\"100%\" viewBox={`0 0 ${svgW} ${svgH}`} fill=\"none\" style={{ maxWidth: svgW }}>\n {/* Segments from left (180°) to right (0°) */}\n {Array.from({ length: totalSeg }, (_, i) => {\n const fromA = 180 - i * segDeg - (i > 0 ? gap / 2 : 0);\n const toA = 180 - (i + 1) * segDeg + (i < totalSeg - 1 ? gap / 2 : 0);\n const isFilled = i < filledSeg;\n return (\n <path\n key={i}\n d={strokeArc(fromA, toA)}\n stroke={isFilled ? COLORS.strong : COLORS.track}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n />\n );\n })}\n </svg>\n );\n};\n\nconst ScoreBar = ({ value = 0, maxValue = 5 }) => (\n <div style={{ display: 'flex', gap: 2 }}>\n {Array.from({ length: maxValue }, (_, i) => (\n <div\n key={i}\n style={{\n width: 22,\n height: 6,\n borderRadius: 1,\n background: i < value ? COLORS.strong : COLORS.track,\n }}\n />\n ))}\n </div>\n);\n\nconst LEGEND_TOOLTIPS = {\n 'CSAT': 'Predicted Customer Satisfaction',\n 'Resolution': 'Predicted Resolution: was the issue fully resolved?',\n 'Process Adherence': 'Process Adherence: Did the agent follow procedures?',\n 'Communication': 'Predicted Communication Quality: Clarity, Empathy, Professionalism',\n};\n\nconst InfoTooltip = ({ text, children }) => {\n const [show, setShow] = useState(false);\n return (\n <div\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={() => setShow(true)}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: 6,\n display: 'flex',\n width: 160,\n padding: 10,\n alignItems: 'center',\n gap: 10,\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 20,\n pointerEvents: 'none',\n }}>\n <span style={{\n width: 140,\n flexShrink: 0,\n color: '#FFF',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: 'normal',\n }}>\n {text}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nconst LegendItem = ({ label, value = 0, maxValue = 5 }) => (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n padding: 8,\n alignItems: 'center',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}>\n <span style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {label}\n </span>\n <InfoTooltip text={LEGEND_TOOLTIPS[label] || label}>\n <Info size={14} color={COLORS.infoIcon} strokeWidth={1} style={{ cursor: 'pointer' }} />\n </InfoTooltip>\n </div>\n <ScoreBar value={value} maxValue={maxValue} />\n </div>\n);\n\nconst UpdatedCompassScore = ({\n score = 83,\n maxScore = 100,\n predictedScore = 4,\n predictedLabel = 'Predicted Objective',\n description = '',\n legends = [\n { label: 'CSAT', value: 3 },\n { label: 'Resolution', value: 4 },\n { label: 'Process Adherence', value: 5 },\n { label: 'Communication', value: 3 },\n ],\n}) => {\n const formattedPredicted = String(predictedScore).padStart(2, '0');\n\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n alignSelf: 'stretch',\n flex: 1,\n gap: 24,\n }}>\n {/* Section Title — left-aligned, vertical, gap: 8 */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n }}>\n <span style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n }}>\n Compass Score\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {description}\n </span>\n </div>\n\n {/* Content: Meter (left) + Legends (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 24,\n flex: 1,\n overflow: 'hidden',\n }}>\n {/* Left: Gauge + Pin + Score number */}\n <div style={{\n position: 'relative',\n maxWidth: 243,\n minWidth: 160,\n flex: '0 1 243px',\n flexDirection: 'column',\n alignItems: 'center',\n display: 'flex',\n }}>\n <GaugeMeter score={score} maxScore={maxScore} />\n\n {/* Compass pin — centered below gauge, needle rotates to point at score */}\n {(() => {\n // Pin sits at gauge center; needle rotates from 180° (score=0) to 0° (score=max)\n const pct = maxScore > 0 ? Math.min(score / maxScore, 1) : 0;\n // SVG pin's default needle points to top-right (~45°)\n // We need: score=0 → needle points left (180°), score=max → needle points right (0°)\n // Target angle on gauge: 180 - pct*180\n // Pin default orientation: needle at ~45° from top → offset is 45\n // Rotation needed: -(targetAngle - 45) to align needle with gauge position\n const targetAngle = 180 - pct * 180;\n const rotateDeg = -(targetAngle - 45);\n return (\n <svg\n width=\"34\" height=\"35\" viewBox=\"0 0 34 35\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n marginTop: -24,\n transform: `rotate(${rotateDeg}deg)`,\n transformOrigin: 'center center',\n }}\n >\n <path d=\"M16 25.2169C19.958 25.2169 23.1667 22.0083 23.1667 18.0503C23.1667 14.0922 19.958 10.8836 16 10.8836C12.042 10.8836 8.83334 14.0922 8.83334 18.0503C8.83334 22.0083 12.042 25.2169 16 25.2169Z\" fill=\"var(--rail-orange, #C98A5A)\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M30.4791 11.2328L33.4351 0L21.6888 3.09113C19.9212 2.41855 18.0036 2.05025 16 2.05025C7.16344 2.05025 0 9.2137 0 18.0503C0 26.8868 7.16344 34.0503 16 34.0503C24.8366 34.0503 32 26.8868 32 18.0503C32 15.6119 31.4546 13.301 30.4791 11.2328ZM16 30.5503C22.9036 30.5503 28.5 24.9538 28.5 18.0503C28.5 11.1467 22.9036 5.55025 16 5.55025C9.09644 5.55025 3.5 11.1467 3.5 18.0503C3.5 24.9538 9.09644 30.5503 16 30.5503Z\" fill=\"var(--rail-orange, #C98A5A)\" />\n </svg>\n );\n })()}\n\n {/* Score number below gauge */}\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n marginTop: 8,\n }}>\n {score}\n </div>\n </div>\n\n {/* Right: Predicted Score + Legends */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n }}>\n {/* Predicted Score + Label */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}>\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n }}>\n {formattedPredicted}\n </div>\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.43,\n textAlign: 'center',\n }}>\n {predictedLabel}\n </div>\n </div>\n\n {/* Divider */}\n <div style={{\n width: '100%',\n height: 1,\n background: COLORS.absent,\n }} />\n\n {/* Legend items */}\n {legends.map((legend, i) => (\n <LegendItem\n key={i}\n label={legend.label}\n value={legend.value}\n />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UpdatedCompassScore;\n","import { useState, useRef } from 'react';\nimport { ArrowLeft, ArrowRight, CalendarDays, PhoneIncoming, ClipboardList, FileSignal, Repeat, ChevronDown, ChevronUp, Headset, CircleUser, History, ExternalLink } from 'lucide-react';\nimport UpdatedInteractionContext from './UpdatedInteractionContext';\nimport UpdatedInteractionRecording from './UpdatedInteractionRecording';\nimport UpdatedInteractionScores from './UpdatedInteractionScores';\nimport UpdatedCoachingSynthesisCard from './UpdatedCoachingSynthesisCard';\nimport UpdatedInteractionSignals from './UpdatedInteractionSignals';\nimport UpdatedCompassScore from './UpdatedCompassScore';\n\nconst TABS = [\n { key: 'overview', label: 'Overview' },\n { key: 'coaching', label: 'Coaching Summary' },\n { key: 'signals', label: 'Signals & Recording' },\n { key: 'comments', label: 'Comments' },\n];\n\nconst UpdatedInteractionDetails = ({\n title = 'Wheel Stud Replacement Enquiry',\n onBack,\n // Data props — all optional with defaults for demo\n data,\n coachingData,\n audioUrl,\n // Audio/playback props — pass these when the host app manages audio externally\n // (like InteractionDetailPanel does). If omitted, UpdatedInteractionRecording\n // manages its own audio element internally.\n audioRef: externalAudioRef,\n currentTimeSeconds,\n timelinePlaying,\n playbackRate,\n timelineSegments,\n onSeek,\n onTogglePlay,\n onSeekBack,\n onSeekForward,\n onSetPlaybackRate,\n // Speaker names\n agentName: externalAgentName,\n customerName: externalCustomerName,\n // Transcript props — pass real transcript data from the host app\n transcript,\n activeTurnIndex,\n turnObservations,\n highlightedTurns,\n onTurnPlayPause,\n // Signal evidence playback — host app can provide to play audio segments from signals\n onPlayEvidence,\n onHighlightTurns,\n // Context props — pass from host app to override block-derived defaults\n callPurpose: externalCallPurpose,\n classification: externalClassification,\n outcomeQuality: externalOutcomeQuality,\n // Compass score props\n compassScore, // gauge meter value (e.g. outcomeLift.p_full) — drives meter fill, range 1-10\n compassMaxScore = 10,\n predictedCsat, // predicted objective number (e.g. compass_score) — shown as \"03\" top-right\n predictedLabel = 'Predicted Objective',\n compassLegends,\n // Customer session dropdown\n customerSessions: customerSessionsList,\n customerSessionCount,\n onSessionClick,\n onViewAllSessions,\n // Footer navigation\n prevSessionTitle,\n prevSessionDesc,\n prevSessionDisabled = false,\n nextSessionTitle,\n nextSessionDesc,\n nextSessionDisabled = false,\n onPreviousSession,\n onNextSession,\n}) => {\n const [activeTab, setActiveTab] = useState('overview');\n const [expandedSignals, setExpandedSignals] = useState(new Set());\n const [showSessionDropdown, setShowSessionDropdown] = useState(false);\n const [hoveredSessionIdx, setHoveredSessionIdx] = useState(null);\n const [internalPlaying, setInternalPlaying] = useState(false);\n const [internalCurrentTime, setInternalCurrentTime] = useState(0);\n const recordingRef = useRef(null);\n\n // Section refs for scroll-to-section tab behavior\n const overviewRef = useRef(null);\n const coachingRef = useRef(null);\n const signalsRef = useRef(null);\n const commentsRef = useRef(null);\n const sectionRefs = { overview: overviewRef, coaching: coachingRef, signals: signalsRef, comments: commentsRef };\n\n const handleTabClick = (key) => {\n setActiveTab(key);\n const ref = sectionRefs[key];\n if (ref?.current) {\n ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n };\n\n const sessionHistory = customerSessionsList || [];\n\n /* Called from Signals \"Show in transcript\" icon — seeks recording to that time */\n const handleShowInTranscript = (startMs) => {\n const timeSec = startMs / 1000;\n if (recordingRef.current?.seekTo) {\n recordingRef.current.seekTo(timeSec);\n }\n };\n\n /* Called from Signals evidence play button — seeks + plays audio segment */\n const handlePlayEvidence = (ev) => {\n if (onPlayEvidence) {\n onPlayEvidence(ev);\n } else {\n // Default: seek to evidence start time via recording ref\n const startMs = ev.start_ms ?? ev.startMs;\n if (startMs != null && recordingRef.current?.seekTo) {\n recordingRef.current.seekTo(startMs / 1000);\n setInternalPlaying(true);\n setInternalCurrentTime(startMs / 1000);\n // Stop playing after evidence duration\n const endMs = ev.end_ms ?? ev.endMs ?? (startMs + 5000);\n const durationMs = endMs - startMs;\n setTimeout(() => setInternalPlaying(false), durationMs);\n }\n }\n };\n\n /* Called to highlight transcript turns related to evidence */\n const handleHighlightTurns = (turnIds) => {\n if (onHighlightTurns) {\n onHighlightTurns(turnIds);\n }\n };\n\n const toggleSignal = (key) => {\n setExpandedSignals((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n // Extract data from blocks if provided\n const blocks = data?.blocks || [];\n const findBlock = (id) => blocks.find((b) => b.block_id === id)?.payload || {};\n\n const meta = findBlock('interaction-metadata');\n const ctx = findBlock('interaction-context');\n const signals = findBlock('interaction-signals');\n const outcomeLift = findBlock('interaction-outcome-lift');\n const callPurpose = ctx.call_purpose || {};\n const classification = ctx.classification || {};\n\n // Demo defaults\n const demoMeta = { duration_seconds: 156, message_count: 25, ...meta };\n const demoCallPurpose = { interaction_driver: 'General Information', interaction_direction: 'inbound', ...callPurpose };\n const demoClassification = { interaction_paradigm: 'Informational', ...classification };\n const demoOutcomeLift = { p_expected: 0.94, p_full: 0.83, lift_raw: -0.11, lift: 0.043, interpretation: { lift_band: 'positive' }, ...outcomeLift };\n const demoDriverLabels = outcomeLift.driver_signal_keys?.map((k) => k.replace(/^sig\\./, '').replace(/_/g, ' ')) || [\n 'customer needs fully addressed',\n 'call flow expectations set',\n 'Opening expectations set',\n 'Active listening demonstrated',\n 'Resolution confirmed',\n ];\n const demoCoaching = coachingData || {\n one_liner: 'David provided the customer with information on wheel stud replacement and pricing, but did not secure an appointment.',\n context: 'The customer was seeking information on wheel stud replacement for a 2013 Chevy Bolt and was unsure about doing the repair themselves.',\n strengths: [\n { text: 'Anthony effectively scheduled the appointment and confirmed the details clearly.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Handled customer objections well by explaining the need for a separate appointment for alignment.', quote: \"I don't have the alignment changeover the weekend. So I would have to set up a separate appointment for the alignment.\" },\n { text: 'Demonstrated courtesy and professionalism throughout the call.', quote: 'Have a great day.' },\n ],\n improvements: [\n { text: 'Close the loop by restating the plan and confirming next steps to ensure customer certainty.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Frame solutions positively by leading with what can be done rather than limitations.', quote: \"I don't have the alignment changeover the weekend.\" },\n ],\n overall: 'effective',\n };\n const demoSignals = signals?.signals?.length ? signals : {\n present_count: 9,\n total_signals_evaluated: 146,\n signals: [\n {\n key: 'price_estimate_provided', display_name: 'Price Estimate Provided',\n observations: [\n {\n key: 'obs1', reason: 'Evidence shows a price estimate or quote was provided.', evidence: [\n { start_ms: 92000, end_ms: 97000, text: 'From Casper, you\\'re probably looking at, like, a half hour labor plus a stud, so you\\'d probably be somewhere around $90 or something.', turn_ids: [8] },\n ]\n },\n ],\n },\n { key: 'fee_or_cost_discussed', display_name: 'Fee or Cost Discussed', observations: [{ key: 'obs2', reason: 'Agent discussed pricing details with the customer.' }] },\n { key: 'engagement_budget', display_name: 'Engagement Budget Discussed', observations: [{ key: 'obs3a', reason: 'Budget expectations were set.' }, { key: 'obs3b', reason: 'Customer confirmed budget range.' }] },\n { key: 'projected_revenue', display_name: 'Projected Revenue Discussed', observations: [{ key: 'obs4a', reason: 'Revenue projection shared.' }, { key: 'obs4b', reason: 'Timeline for revenue discussed.' }, { key: 'obs4c', reason: 'Quarterly targets mentioned.' }] },\n { key: 'market_analysis', display_name: 'Market Analysis Completed', observations: [{ key: 'obs5a', reason: 'Market analysis referenced.' }, { key: 'obs5b', reason: 'Competitive landscape discussed.' }, { key: 'obs5c', reason: 'Market trends mentioned.' }, { key: 'obs5d', reason: 'Regional analysis provided.' }] },\n { key: 'target_audience', display_name: 'Target Audience Defined', observations: [{ key: 'obs6a', reason: 'Target audience identified.' }, { key: 'obs6b', reason: 'Demographics discussed.' }, { key: 'obs6c', reason: 'Audience segmentation reviewed.' }, { key: 'obs6d', reason: 'Persona mapping completed.' }, { key: 'obs6e', reason: 'Channel preferences noted.' }] },\n { key: 'concept_approval', display_name: 'Concept Approval Received', observations: [{ key: 'obs7a', reason: 'Concept approved by stakeholder.' }, { key: 'obs7b', reason: 'Feedback incorporated.' }, { key: 'obs7c', reason: 'Sign-off confirmed.' }, { key: 'obs7d', reason: 'Revisions requested.' }, { key: 'obs7e', reason: 'Final version accepted.' }, { key: 'obs7f', reason: 'Timeline approved.' }] },\n { key: 'prototype_developed', display_name: 'Prototype Developed', observations: [{ key: 'obs8a', reason: 'Prototype shared.' }, { key: 'obs8b', reason: 'Testing initiated.' }, { key: 'obs8c', reason: 'Feedback collected.' }, { key: 'obs8d', reason: 'Iterations completed.' }, { key: 'obs8e', reason: 'Usability tested.' }, { key: 'obs8f', reason: 'Design finalized.' }, { key: 'obs8g', reason: 'Stakeholder demo done.' }] },\n { key: 'user_testing', display_name: 'User Testing Scheduled', observations: [{ key: 'obs9a', reason: 'Testing sessions planned.' }, { key: 'obs9b', reason: 'Participants recruited.' }, { key: 'obs9c', reason: 'Test scripts prepared.' }, { key: 'obs9d', reason: 'Environment set up.' }, { key: 'obs9e', reason: 'Accessibility testing included.' }, { key: 'obs9f', reason: 'Results framework defined.' }, { key: 'obs9g', reason: 'Timeline confirmed.' }, { key: 'obs9h', reason: 'Backup plan discussed.' }] },\n ],\n };\n\n const agentName = externalAgentName || 'Agent';\n const customerName = externalCustomerName || 'Customer';\n const sessionCount = customerSessionCount ?? sessionHistory.length;\n const dateStr = meta.evaluated_dt ? new Date(meta.evaluated_dt).toLocaleString() : '3/29/2026, 8:30:00 AM';\n const direction = demoCallPurpose.interaction_direction === 'inbound' ? 'Inbound' : 'Outbound';\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%', height: '100%', background: 'var(--Grey-White, #FFF)' }}>\n {/* Sticky Header + Tabs */}\n <div style={{ position: 'sticky', top: 0, zIndex: 20, background: 'var(--Grey-White, #FFF)' }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '24px 24px 0' }}>\n <button\n onClick={onBack}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Strong, #2E3236)\" />\n </button>\n <div style={{ width: 1, height: 28, background: 'var(--Base-absent, #D9D9D9)' }} />\n <h1 style={{\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 24,\n fontStyle: 'normal',\n fontWeight: 400,\n lineHeight: 'normal',\n margin: 0,\n }}>\n {title}\n </h1>\n </div>\n\n {/* Tabs */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n background: 'var(--Grey-White, #FFF)',\n borderBottom: '1px solid var(--Grey-Faint, #ACADAD)',\n padding: '0 24px',\n marginTop: 8,\n }}>\n {TABS.map((tab) => (\n <button\n key={tab.key}\n onClick={() => handleTabClick(tab.key)}\n style={{\n display: 'flex',\n padding: 16,\n alignItems: 'center',\n gap: 10,\n background: 'none',\n border: 'none',\n borderBottom: activeTab === tab.key\n ? '3px solid var(--Grey-Strong, #2E3236)'\n : '3px solid transparent',\n cursor: 'pointer',\n fontSize: 15,\n fontWeight: activeTab === tab.key ? 500 : 400,\n color: activeTab === tab.key\n ? 'var(--Grey-Strong, #2E3236)'\n : 'var(--Grey-Muted, #808183)',\n whiteSpace: 'nowrap',\n transition: 'border-color 0.2s ease, color 0.2s ease',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n </div>{/* end sticky header + tabs */}\n\n {/* All sections rendered — tabs scroll to them */}\n <div style={{ padding: 24, flex: 1, overflowY: 'auto' }}>\n {/* ═══ OVERVIEW SECTION ═══ */}\n <div ref={overviewRef} style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Figma node 106-3508: Section Header — horizontal, gap: 16, height: 40, center */}\n <div style={{\n display: 'flex',\n height: 40,\n alignItems: 'center',\n gap: 16,\n alignSelf: 'stretch',\n }}>\n {/* Left: Icon + Title — fills remaining space */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, flex: 1 }}>\n <ClipboardList size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n textTransform: 'uppercase',\n }}>\n Overview\n </span>\n </div>\n\n {/* Right: Metadata — horizontal, gap: 16, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 16, flexShrink: 0 }}>\n {/* Date */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <CalendarDays size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {dateStr}\n </span>\n </div>\n\n {/* Direction */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <PhoneIncoming size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {direction}\n </span>\n </div>\n\n {/* Agent + Customer — border-left separator */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 16,\n paddingLeft: 16,\n borderLeft: '1px solid var(--Grey-absent, #D9D9D9)',\n }}>\n {/* Agent — Headset icon */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <Headset size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {agentName}\n </span>\n </div>\n\n {/* Repeat icon */}\n <Repeat size={16} color=\"var(--color-input-border, #ACACAD)\" strokeWidth={1.5} />\n\n {/* Customer — CircleUser icon + dropdown */}\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => setShowSessionDropdown((prev) => !prev)}\n style={{\n display: 'flex', alignItems: 'center', gap: 4, padding: '8px 0',\n background: 'none', border: 'none', cursor: 'pointer',\n }}\n >\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2 }}>\n {customerName} ({sessionCount} Sessions)\n </span>\n {showSessionDropdown\n ? <ChevronUp size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n : <ChevronDown size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n }\n </button>\n\n {/* Figma node 311-1302: Session history dropdown */}\n {showSessionDropdown && (\n <div style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n width: 264,\n background: 'var(--Grey-White, #FFF)',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n boxShadow: '0 4px 16px rgba(0,0,0,0.12)',\n zIndex: 50,\n overflow: 'hidden',\n }}>\n {/* Header: customer name + session count */}\n {/* Header — Figma node 312-1321: horizontal, gap: 8 */}\n <div style={{\n display: 'flex', alignItems: 'flex-start', gap: 8,\n padding: 16,\n }}>\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} style={{ marginTop: 2, flexShrink: 0 }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n <span style={{\n fontSize: 16, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {customerName}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {sessionCount} Sessions in past\n </span>\n </div>\n </div>\n\n {/* Session list — Figma: 264px, pad 12 16, space-between, center */}\n {sessionHistory.slice(0, 5).map((session, i) => (\n <div\n key={session.id || i}\n onClick={() => { if (onSessionClick) onSessionClick(session); setShowSessionDropdown(false); }}\n onMouseEnter={() => setHoveredSessionIdx(i)}\n onMouseLeave={() => setHoveredSessionIdx(null)}\n style={{\n display: 'flex',\n width: 264,\n padding: '12px 16px',\n justifyContent: 'space-between',\n alignItems: 'center',\n background: hoveredSessionIdx === i\n ? 'var(--surface-hover, #F3F7F7)'\n : 'var(--Grey-White, #FFF)',\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n boxSizing: 'border-box',\n transition: 'background 0.15s',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {session.title}\n </span>\n <span style={{\n fontSize: 12, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {session.date}\n </span>\n </div>\n {hoveredSessionIdx === i && (\n <ExternalLink size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1} style={{ flexShrink: 0 }} />\n )}\n </div>\n ))}\n\n {/* View All Sessions button — Figma node 312-1347 */}\n <div style={{\n padding: 16,\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n display: 'flex',\n justifyContent: 'center',\n }}>\n <button\n onClick={() => { if (onViewAllSessions) onViewAllSessions(); setShowSessionDropdown(false); }}\n style={{\n display: 'flex',\n height: 32,\n padding: '16px 16px 16px 12px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 6,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 10,\n cursor: 'pointer',\n }}>\n <History size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{\n fontSize: 14, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n View All Sessions\n </span>\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/*\n Figma node 101-2385\n Row: Compass Score (left) | Context + Agent Lift Analysis stacked (right)\n */}\n <div style={{\n display: 'flex',\n alignItems: 'stretch',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Left — Compass Score */}\n <div style={{ flex: 1, minWidth: 0, display: 'flex' }}>\n <UpdatedCompassScore\n score={compassScore != null ? Math.round(compassScore * 100) : 0}\n maxScore={100}\n predictedScore={predictedCsat ?? 0}\n predictedLabel={predictedLabel}\n legends={compassLegends}\n />\n </div>\n\n {/* Right — Context grid + Agent Lift Analysis stacked */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-end',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}>\n <UpdatedInteractionContext\n meta={demoMeta}\n callPurpose={externalCallPurpose || demoCallPurpose}\n classification={externalClassification || demoClassification}\n outcomeQuality={externalOutcomeQuality || 'Neutral'}\n />\n <UpdatedInteractionScores\n outcomeLift={demoOutcomeLift}\n driverLabels={demoDriverLabels}\n />\n </div>\n </div>\n\n </div>\n\n {/* ═══ COACHING SUMMARY SECTION ═══ */}\n <div ref={coachingRef} style={{ paddingTop: 24 }}>\n <UpdatedCoachingSynthesisCard data={demoCoaching} />\n </div>\n\n {/* ═══ SIGNALS & RECORDING SECTION ═══ */}\n <div ref={signalsRef} style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n alignSelf: 'stretch',\n paddingTop: 24,\n }}>\n {/* Section header */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}>\n <FileSignal size={24} color=\"#C98A5A\" strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n textTransform: 'uppercase',\n }}>\n Signals & Recording\n </span>\n </div>\n\n {/* Content: Signals (left) | Recording+Transcript (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n paddingTop: 16,\n borderTop: '1px solid #D9D9D9',\n }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionSignals\n signals={demoSignals}\n expandedSignals={expandedSignals}\n toggleSignal={toggleSignal}\n playEvidence={handlePlayEvidence}\n highlightTurns={handleHighlightTurns}\n onShowInTranscript={handleShowInTranscript}\n timelinePlaying={timelinePlaying || internalPlaying}\n currentTimeSeconds={currentTimeSeconds ?? internalCurrentTime}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionRecording\n ref={recordingRef}\n audioUrl={audioUrl}\n durationSeconds={demoMeta.duration_seconds}\n audioRef={externalAudioRef}\n agentName={agentName}\n customerName={customerName.split(' ')[0]}\n currentTimeSeconds={currentTimeSeconds}\n timelinePlaying={timelinePlaying}\n playbackRate={playbackRate}\n timelineSegments={timelineSegments}\n onSeek={onSeek}\n onTogglePlay={onTogglePlay}\n onSeekBack={onSeekBack}\n onSeekForward={onSeekForward}\n onSetPlaybackRate={onSetPlaybackRate}\n transcript={transcript}\n activeTurnIndex={activeTurnIndex}\n turnObservations={turnObservations}\n highlightedTurns={highlightedTurns}\n onTurnPlayPause={onTurnPlayPause}\n setExpandedSignals={setExpandedSignals}\n />\n </div>\n </div>\n </div>\n\n {/* ═══ COMMENTS SECTION ═══ */}\n <div ref={commentsRef} style={{ paddingTop: 24 }}>\n <div style={{ fontSize: 14, color: 'var(--Grey-Muted, #808183)', fontFamily: 'var(--font-sans)' }}>\n No comments yet.\n </div>\n </div>\n </div>\n\n {/* Figma node 113-8262: Sticky Footer — Previous / Next Session */}\n <div style={{\n display: 'flex',\n position: 'sticky',\n bottom: 0,\n zIndex: 10,\n }}>\n {/* Previous Session */}\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n pointerEvents: prevSessionDisabled ? 'none' : 'auto',\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} style={{ opacity: prevSessionDisabled ? 0.4 : 1 }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10, opacity: prevSessionDisabled ? 0.4 : 1 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {prevSessionTitle || 'Previous Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {prevSessionDesc || 'Short description of the session'}\n </span>\n </div>\n </button>\n\n {/* Next Session */}\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n pointerEvents: nextSessionDisabled ? 'none' : 'auto',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10, opacity: nextSessionDisabled ? 0.4 : 1 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {nextSessionTitle || 'Next Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {nextSessionDesc || 'Short description of the session'}\n </span>\n </div>\n <ArrowRight size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} style={{ opacity: nextSessionDisabled ? 0.4 : 1 }} />\n </button>\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionDetails;\n"],"names":["COLORS","OVERALL_MAP","STYLE_ID","ensureKeyframes","style","OverallBadge","overall","label","jsxs","jsx","ThumbsUp","SectionItem","item","text","quote","CoachingColumn","icon","items","i","UpdatedCoachingSynthesisCard","data","loading","error","React","w","strengths","improvements","oneLiner","_a","context","_b","ShieldCheck","TrendingUp","Lightbulb","fmtDur","seconds","m","s","ROW_STYLE","COLUMN_STYLE","UpdatedInteractionContext","meta","callPurpose","classification","dimensions","outcomeQuality","onMoreDetails","duration","messages","driver","paradigm","leftRows","_","d","rightRows","renderRow","ExternalLink","row","LH","MAX_VISIBLE_DRIVERS","fmtPct","v","fmtPp","pp","UpdatedInteractionScores","outcomeLift","driverLabels","pExpected","pFull","liftRaw","liftRecentered","liftBand","liftBandCapitalized","visibleDrivers","overflowCount","HoverIcon","children","size","onClick","title","hovered","setHovered","useState","UpdatedInteractionSignals","signals","expandedSignals","toggleSignal","playEvidence","highlightTurns","onShowInTranscript","timelinePlaying","currentTimeSeconds","signalList","presentCount","fmtMs","ms","minutes","isEvPlaying","ev","FileSignal","signal","idx","key","isExpanded","obsCount","ChevronUp","ChevronDown","_c","obs","obsIdx","e","ScrollText","evIdx","hasTimestamps","PauseCircle","PlayCircle","GaugeMeter","score","maxScore","filledSeg","segDeg","toXY","angleDeg","rad","strokeArc","fromDeg","toDeg","large","gap","fromA","toA","isFilled","ScoreBar","value","maxValue","LEGEND_TOOLTIPS","InfoTooltip","show","setShow","LegendItem","Info","UpdatedCompassScore","predictedScore","predictedLabel","description","legends","formattedPredicted","rotateDeg","legend","TABS","UpdatedInteractionDetails","onBack","coachingData","audioUrl","externalAudioRef","playbackRate","timelineSegments","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","externalAgentName","externalCustomerName","transcript","activeTurnIndex","turnObservations","highlightedTurns","onTurnPlayPause","onPlayEvidence","onHighlightTurns","externalCallPurpose","externalClassification","externalOutcomeQuality","compassScore","compassMaxScore","predictedCsat","compassLegends","customerSessionsList","customerSessionCount","onSessionClick","onViewAllSessions","prevSessionTitle","prevSessionDesc","prevSessionDisabled","nextSessionTitle","nextSessionDesc","nextSessionDisabled","onPreviousSession","onNextSession","activeTab","setActiveTab","setExpandedSignals","showSessionDropdown","setShowSessionDropdown","hoveredSessionIdx","setHoveredSessionIdx","internalPlaying","setInternalPlaying","internalCurrentTime","setInternalCurrentTime","recordingRef","useRef","overviewRef","coachingRef","signalsRef","commentsRef","sectionRefs","handleTabClick","ref","sessionHistory","handleShowInTranscript","startMs","timeSec","handlePlayEvidence","durationMs","handleHighlightTurns","turnIds","prev","next","blocks","findBlock","id","ctx","demoMeta","demoCallPurpose","demoClassification","demoOutcomeLift","demoDriverLabels","k","demoCoaching","demoSignals","agentName","customerName","sessionCount","dateStr","direction","ArrowLeft","tab","ClipboardList","CalendarDays","PhoneIncoming","Headset","Repeat","CircleUser","session","History","UpdatedInteractionRecording","ArrowRight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdatedInteractionDetails.cjs.js","sources":["../../src/components/UpdatedInteractionDetails/UpdatedCoachingSynthesisCard.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionContext.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionScores.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionSignals.jsx","../../src/components/UpdatedInteractionDetails/UpdatedCompassScore.jsx","../../src/components/UpdatedInteractionDetails/UpdatedThreads.jsx","../../src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { ShieldCheck, ThumbsUp, TrendingUp, Lightbulb } from \"lucide-react\";\n\n/**\n * UpdatedCoachingSynthesisCard — \"COACHING SUMMARY\" section matching Figma node 113-7216.\n *\n * Props:\n * - data object Coaching synthesis response\n * - loading boolean Show shimmer loading state\n * - error string Error message to display\n *\n * Data shape:\n * - one_liner string\n * - context string\n * - strengths Array<{ text: string, quote?: string }>\n * - improvements Array<{ text: string, quote?: string }>\n * - overall string \"effective\" | \"strong\" | \"needs_improvement\" | \"mixed\"\n */\n\nconst COLORS = {\n strong: \"var(--Grey-Strong, #2E3236)\",\n muted: \"var(--Grey-Muted, #808183)\",\n absent: \"var(--Grey-absent, #D9D9D9)\",\n accent: \"var(--rail-orange, #C98A5A)\",\n itemText: \"var(--text-item, #3F3F3F)\",\n quoteLine: \"var(--border-warm, #B2AEA8)\",\n quoteText: \"var(--text-subtle-warm, #767473)\",\n iconBg: \"var(--surface-hover, #F3F7F7)\",\n};\n\nconst OVERALL_MAP = {\n effective: \"Effective\",\n strong: \"Strong\",\n needs_improvement: \"Needs Improvement\",\n mixed: \"Mixed\",\n};\n\nconst STYLE_ID = \"updated-coaching-synthesis-keyframes\";\n\nfunction ensureKeyframes() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes updated-coaching-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n }\n @keyframes updated-coaching-pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction OverallBadge({ overall }) {\n const label = OVERALL_MAP[overall] || (overall ? overall.replace(/_/g, \" \") : \"\");\n\n return (\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n Overall:\n </span>\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}>\n <ThumbsUp size={14} color={COLORS.strong} strokeWidth={1.5} />\n <span style={{\n fontSize: 13,\n fontWeight:600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n {label}\n </span>\n </div>\n </div>\n );\n}\n\nfunction SectionItem({ item }) {\n const text = typeof item === \"string\" ? item : item?.text || \"\";\n const quote = typeof item === \"object\" ? item?.quote : null;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 14 }}>\n <div style={{\n fontSize: 14,\n fontWeight: 600,\n color: COLORS.itemText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {text}\n </div>\n {quote && (\n <div style={{\n display: \"flex\",\n gap: 10,\n }}>\n <div style={{\n width: 1,\n flexShrink: 0,\n alignSelf: \"stretch\",\n background: COLORS.quoteLine,\n }} />\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.quoteText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n “{quote}”\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CoachingColumn({ icon, label, items }) {\n if (!items || items.length === 0) return null;\n\n return (\n <div style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n borderRadius: 12,\n }}>\n {/* Column header */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n }}>\n {/* Icon with circular bg */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n borderRadius: 9999,\n background: COLORS.iconBg,\n flexShrink: 0,\n }}>\n {icon}\n </div>\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: \"normal\",\n }}>\n {label}\n </span>\n </div>\n\n {/* Items */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 24 }}>\n {items.map((item, i) => (\n <SectionItem key={i} item={item} />\n ))}\n </div>\n </div>\n );\n}\n\nconst UpdatedCoachingSynthesisCard = ({ data, loading, error }) => {\n React.useEffect(() => { ensureKeyframes(); }, []);\n\n // Loading state — ThreeCirclesSpinner\n if (loading) {\n return (\n <>\n <style>{`\n @keyframes coaching-spinner-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n padding: \"48px 24px\",\n }}>\n <svg\n width={48}\n height={48}\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ animation: \"coaching-spinner-spin 1.2s linear infinite\" }}\n >\n <path\n d=\"M43 24C43 26.4951 42.5086 28.9658 41.5537 31.271C40.5989 33.5762 39.1993 35.6707 37.435 37.435C35.6707 39.1993 33.5762 40.5989 31.271 41.5537C28.9658 42.5086 26.4951 43 24 43C21.5049 43 19.0342 42.5086 16.729 41.5537C14.4238 40.5989 12.3293 39.1993 10.565 37.435C8.80066 35.6707 7.40113 33.5762 6.44629 31.271C5.49145 28.9658 5 26.4951 5 24\"\n stroke=\"#F3E7C7\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12 24C12 22.4241 12.3104 20.8637 12.9134 19.4078C13.5165 17.9519 14.4004 16.629 15.5147 15.5147C16.629 14.4004 17.9519 13.5165 19.4078 12.9134C20.8637 12.3104 22.4241 12 24 12C25.5759 12 27.1363 12.3104 28.5922 12.9134C30.0481 13.5165 31.371 14.4004 32.4853 15.5147C33.5996 16.629 34.4835 17.9519 35.0866 19.4078C35.6896 20.8637 36 22.4241 36 24\"\n stroke=\"#00A66E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M20 24C20 24.5253 20.1035 25.0454 20.3045 25.5307C20.5055 26.016 20.8001 26.457 21.1716 26.8284C21.543 27.1999 21.984 27.4945 22.4693 27.6955C22.9546 27.8965 23.4747 28 24 28C24.5253 28 25.0454 27.8965 25.5307 27.6955C26.016 27.4945 26.457 27.1999 26.8284 26.8284C27.1999 26.457 27.4945 26.016 27.6955 25.5307C27.8965 25.0454 28 24.5253 28 24\"\n stroke=\"#F3E7C7\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n <span style={{\n fontSize: 14,\n color: COLORS.muted,\n fontWeight: 500,\n textAlign: \"center\",\n }}>\n Synthesizing coaching summary...\n </span>\n </div>\n </>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div style={{\n fontSize: 14,\n color: COLORS.muted,\n }}>\n Unable to generate coaching summary.\n </div>\n );\n }\n\n // No data\n if (!data) return null;\n\n const strengths = data.strengths || [];\n const improvements = data.improvements || [];\n const oneLiner = typeof data.one_liner === \"string\" ? data.one_liner : data.one_liner?.text || \"\";\n const context = typeof data.context === \"string\" ? data.context : data.context?.text || \"\";\n\n return (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n background: \"#FFF\",\n }}>\n {/* Section header — Figma: icon + \"Coaching Summary\" 16px / 700 / #2E3236 */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}>\n <ShieldCheck size={20} color={COLORS.accent} strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n textTransform: \"uppercase\",\n }}>\n Coaching Summary\n </span>\n </div>\n\n {/* One-liner — Figma: 14px / 600 / #2E3236 */}\n {oneLiner && (\n <div style={{\n fontSize: 14,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {oneLiner}\n </div>\n )}\n\n {/* Context row + Overall badge — Figma: horizontal, space-between */}\n <div style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 16,\n justifyContent: \"space-between\",\n }}>\n {context && (\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n flex: 1,\n }}>\n {context}\n </div>\n )}\n {data.overall && <OverallBadge overall={data.overall} />}\n </div>\n\n {/* Two-column layout: Key Strengths + Improvements */}\n {/* Figma: border-top 1px #D9D9D9, padding-top 24px, gap 24px */}\n {(strengths.length > 0 || improvements.length > 0) && (\n <div style={{\n display: \"flex\",\n gap: 24,\n paddingTop: 24,\n borderTop: `1px solid ${COLORS.absent}`,\n }}>\n <CoachingColumn\n icon={<TrendingUp size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Key Strengths\"\n items={strengths}\n />\n <CoachingColumn\n icon={<Lightbulb size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Improvements\"\n items={improvements}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedCoachingSynthesisCard;\n","import { useState } from 'react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\n\n/*\n * Figma node: 101-2385 / 495-803 (Context grid + More Details expandable)\n */\n\nfunction fmtDur(seconds) {\n const m = Math.floor(seconds / 60);\n const s = Math.round(seconds % 60);\n return `${m}:${s.toString().padStart(2, '0')}`;\n}\n\nconst ROW_STYLE = {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 8px 12px 8px',\n alignItems: 'center',\n gap: 24,\n fontFamily: 'var(--font-sans)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: 'normal',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n};\n\nconst COLUMN_STYLE = {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 0 0',\n gap: 0,\n minWidth: 0,\n};\n\nconst UpdatedInteractionContext = ({\n meta = {},\n callPurpose = {},\n classification = {},\n dimensions = [],\n outcomeQuality = 'Neutral',\n onMoreDetails,\n moreDetails = [],\n resolutionOutcome,\n customerIntent,\n interactionId,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const duration = meta.duration_seconds != null ? fmtDur(meta.duration_seconds) : null;\n const messages = meta.message_count;\n const driver = callPurpose.interaction_driver;\n const paradigm = classification.interaction_paradigm;\n\n // Build paired rows: [left, right] per line\n const pairedRows = [];\n const rawPairs = [\n [\n duration != null ? { label: 'Duration', value: duration } : null,\n messages != null ? { label: 'Messages', value: messages } : null,\n ],\n [\n driver != null ? { label: 'Driver', value: driver } : null,\n paradigm != null ? { label: 'Paradigm', value: paradigm } : null,\n ],\n ];\n\n // Add dimension pairs\n for (let i = 0; i < dimensions.length; i += 2) {\n const left = dimensions[i] ? { label: dimensions[i].label || dimensions[i].key, value: dimensions[i].value } : null;\n const right = dimensions[i + 1] ? { label: dimensions[i + 1].label || dimensions[i + 1].key, value: dimensions[i + 1].value } : null;\n rawPairs.push([left, right]);\n }\n\n // Last row: Outcome Quality (left) + More details toggle (right)\n rawPairs.push([\n { label: 'Outcome Quality', value: outcomeQuality },\n { isMoreDetails: true },\n ]);\n\n rawPairs.forEach((pair) => pairedRows.push(pair));\n\n // Build \"More Details\" expanded rows\n const detailRows = [\n resolutionOutcome != null && { label: 'Resolution Outcome', value: resolutionOutcome },\n customerIntent != null && { label: 'Customer Intent', value: customerIntent },\n interactionId != null && { label: 'Number', value: interactionId },\n ...(moreDetails || []),\n ].filter(Boolean);\n\n const renderRow = (item) => (\n <div\n key={item.label}\n style={ROW_STYLE}\n >\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', whiteSpace: 'nowrap', flexShrink: 0 }}>\n {item.label}\n </span>\n <span style={{\n color: 'var(--Grey-Muted, #808183)',\n textAlign: 'right',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n }}>\n {item.value}\n </span>\n </div>\n );\n\n const renderMoreDetailsToggle = () => (\n <div\n key=\"more-details\"\n onClick={() => {\n setExpanded((p) => !p);\n if (onMoreDetails && !expanded) onMoreDetails();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '8px 8px 12px 8px',\n cursor: 'pointer',\n fontFamily: 'var(--font-sans)',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n }}\n >\n <span style={{\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 'normal',\n }}>\n More Details\n </span>\n {expanded\n ? <ChevronUp size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n : <ChevronDown size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n }\n </div>\n );\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n gap: 0,\n position: 'relative',\n overflow: 'visible',\n }}\n >\n {/* Paired rows — two columns side by side */}\n {pairedRows.map((pair, idx) => (\n <div\n key={idx}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n {/* Left cell */}\n <div style={COLUMN_STYLE}>\n {pair[0] && !pair[0].isMoreDetails ? renderRow(pair[0]) : <div style={{ flex: 1 }} />}\n </div>\n\n {/* Right cell */}\n <div style={COLUMN_STYLE}>\n {pair[1] && !pair[1].isMoreDetails\n ? renderRow(pair[1])\n : pair[1]?.isMoreDetails\n ? renderMoreDetailsToggle()\n : <div style={{ flex: 1 }} />}\n </div>\n </div>\n ))}\n\n {/* More Details dropdown — absolute, full width, left-aligned */}\n {expanded && detailRows.length > 0 && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n display: 'flex',\n width: 340,\n flexDirection: 'column',\n alignItems: 'flex-start',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-White, #FFF)',\n boxShadow: '-2px 2px 2px 0 rgba(0, 0, 0, 0.25)',\n overflow: 'hidden',\n fontFamily: 'var(--font-sans)',\n zIndex: 50,\n }}\n >\n {/* Dropdown header */}\n <div style={{\n padding: '12px 16px',\n fontSize: 13,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n alignSelf: 'stretch',\n }}>\n More details\n </div>\n\n {/* Detail rows */}\n {detailRows.map((row) => (\n <div\n key={row.label}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '12px 16px',\n gap: 24,\n fontSize: 13,\n fontWeight: 400,\n lineHeight: 'normal',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n alignSelf: 'stretch',\n }}\n >\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', whiteSpace: 'nowrap', flexShrink: 0 }}>\n {row.label}\n </span>\n <span style={{\n color: 'var(--Grey-Muted, #808183)',\n fontSize: 13,\n fontStyle: 'normal',\n fontWeight: 400,\n lineHeight: '120%',\n textAlign: 'right',\n }}>\n {row.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedInteractionContext;\n","import React from 'react';\nimport { ThumbsUp, ThumbsDown, Plus } from 'lucide-react';\n\n/*\n * Figma node: 101-2386 (Agent Lift Analysis)\n *\n * Container: fill=#F3F1E5, padding: 24px, gap: 24px, vertical,\n * border-radius: 8px, border: 1px solid #D9D9D9\n *\n * Header (Frame 12): vertical, gap: 32\n * Row (Frame 20): horizontal, space-between, center\n * \"Agent Lift Analysis\" — 15px/700/#2E3236, lh=120%\n * Right (Frame 18): horizontal, gap: 8, center\n * \"vs. Average Agent:\" — 13px/400/#2E3236, lh=120%\n * \"+4.3pp\" — 14px/700/#2E3236, lh=120%\n * Divider: border-left 1px #D9D9D9, padding-left: 8\n * ThumbsUp 14x14 + \"Positive\" 13px/700/#2E3236\n *\n * Metrics (Frame 15): horizontal, gap: 24, align: bottom\n * Col 1 (Frame 8): vertical, gap: 16, center\n * \"94%\" — 28px/400/#808183, lh=120%\n * Labels: vertical, gap: 8\n * \"Expected Outcome\" — 13px/400/#2E3236\n * \"Based on call type & difficulty\" — 13px/400/#808183\n * Plus icon: 16x16, fill=#2E3236, radius: 24, white stroke\n * Col 2 (Frame 9): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"-11.0pp\" — 28px/400/#808183\n * \"Agent Impact\" — 13px/400/#2E3236\n * \"Behavior-driven change\" — 13px/400/#808183\n * Col 3 (Frame 7): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"83%\" — 28px/400/#2E3236 (highlighted)\n * \"Predicted Outcome\" — 13px/700/#2E3236\n * \"With agent behaviors\" — 13px/400/#808183\n *\n * Key Drivers (Frame 13): vertical, gap: 4\n * \"Key Drivers\" — 12px/700/#2E3236, lh=120%\n * Chips (Frame 16): horizontal, gap: 4\n * Each: bg=#FFF, pad=8, radius=4, border 1px #D9D9D9\n * Text: 12px/400/#2E3236, lh=120%\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n cardBg: 'var(--surface-warm-40, rgba(243, 241, 229, 0.40))',\n};\n\nconst LH = 1.2;\nconst MAX_VISIBLE_DRIVERS = 3;\n\nconst fmtPct = (v) => (v != null ? Math.round(v * 100) + '%' : '\\u2014');\n\nconst fmtPp = (v) => {\n if (v == null) return '\\u2014';\n const pp = (v * 100).toFixed(1);\n return v > 0 ? `+${pp}pp` : `${pp}pp`;\n};\n\nconst UpdatedInteractionScores = ({ outcomeLift, driverLabels = [] }) => {\n if (!outcomeLift || outcomeLift.lift == null) return null;\n\n const pExpected = outcomeLift.p_expected;\n const pFull = outcomeLift.p_full;\n const liftRaw =\n outcomeLift.lift_raw ??\n (pFull != null && pExpected != null ? pFull - pExpected : null);\n const liftRecentered = outcomeLift.lift;\n\n const liftBand = outcomeLift.interpretation?.lift_band\n ? outcomeLift.interpretation.lift_band.replace(/_/g, ' ')\n : liftRecentered >= 0\n ? 'Positive'\n : 'Negative';\n\n const liftBandCapitalized =\n liftBand.charAt(0).toUpperCase() + liftBand.slice(1);\n\n const isNegativeBand = /negative/i.test(liftBand);\n const LiftIcon = isNegativeBand ? ThumbsDown : ThumbsUp;\n\n const visibleDrivers = driverLabels.slice(0, MAX_VISIBLE_DRIVERS);\n const overflowCount = driverLabels.length - MAX_VISIBLE_DRIVERS;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n gap: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.cardBg,\n alignSelf: 'stretch',\n }}\n >\n {/* Frame 12: Header + Metrics — vertical, gap: 32 */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n\n {/* Frame 20: Title row — horizontal, space-between, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n <span\n style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Agent Lift Analysis\n </span>\n\n {/* Frame 18: right meta — horizontal, gap: 8, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n fontFamily: 'var(--font-sans)',\n }}\n >\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, lineHeight: LH }}>\n vs. Average Agent:\n </span>\n {/* Frame 19: value */}\n <span style={{ fontSize: 14, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {fmtPp(liftRecentered)}\n </span>\n {/* Frame 21: divider + thumbsup + band */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n paddingLeft: 8,\n borderLeft: `1px solid ${COLORS.absent}`,\n }}\n >\n <LiftIcon size={14} color={COLORS.strong} />\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {liftBandCapitalized}\n </span>\n </div>\n </div>\n </div>\n\n {/* Frame 15: Metrics row — horizontal, gap: 24, align: bottom */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n gap: 24,\n }}\n >\n {/* Frame 8: Expected Outcome — flex: 1, equal width */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center', flex: 1, minWidth: 0 }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pExpected)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8, alignItems: 'center' }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH, whiteSpace: 'nowrap' }}>\n Expected Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH, textAlign: 'center' }}>\n Based on call type & difficulty\n </span>\n </div>\n </div>\n\n {/* Frame 9: Agent Impact — flex: 1, equal width, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`, flex: 1, minWidth: 0,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPp(liftRaw)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8, alignItems: 'center' }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH, whiteSpace: 'nowrap' }}>\n Agent Impact\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH, textAlign: 'center' }}>\n Behavior-driven change\n </span>\n </div>\n </div>\n\n {/* Frame 7: Predicted Outcome — flex: 1, equal width, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`, flex: 1, minWidth: 0,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pFull)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8, alignItems: 'center' }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH, whiteSpace: 'nowrap' }}>\n Predicted Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH, textAlign: 'center' }}>\n With agent behaviors\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Frame 13: Key Drivers — vertical, gap: 4 */}\n {driverLabels.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Key Drivers\n </span>\n {/* Frame 16: chips — horizontal, gap: 4 */}\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {visibleDrivers.map((label, i) => (\n <div\n key={i}\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: 200,\n }}\n >\n {label}\n </span>\n </div>\n ))}\n {overflowCount > 0 && (\n <div\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n }}\n >\n + {overflowCount}\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedInteractionScores;\n","import { useState } from 'react';\nimport { ChevronDown, ChevronUp, PlayCircle, PauseCircle, FileSignal, ScrollText } from 'lucide-react';\n\n/* Hover circle wrapper for icons */\nconst HoverIcon = ({ children, size = 28, onClick, title }) => {\n const [hovered, setHovered] = useState(false);\n return (\n <div\n title={title}\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: size,\n height: size,\n borderRadius: 9999,\n background: hovered ? 'var(--surface-hover, #F3F7F7)' : 'transparent',\n cursor: 'pointer',\n flexShrink: 0,\n transition: 'background 0.15s',\n }}\n >\n {children}\n </div>\n );\n};\n\n/*\n * Figma node: 222-672 (Signals accordion)\n *\n * Header: FileSignal icon in #F3F7F7 circle + \"Signals\" 15px/500 + \"N Signals Detected\" 14px/500\n *\n * Accordion Title (collapsed): horizontal, gap: 12, pad: 8 0, border-bottom: 1px #D9D9D9\n * Name: 14px/600/#0B0A0A, lh: 171%\n * Chevron: 20x20, stroke #767473\n *\n * Accordion Body (reason): horizontal, gap: 12, pad: 8 0, space-between\n * Reason: 14px/400/#767473, lh: 150%\n * Right: ScrollText icon 16x16 #808183 + time 13px/400/#808183\n *\n * Evidence (Frame 39): horizontal, gap: 8, pad: 8 0\n * Play circle: ~17px, stroke #808183\n * Quote: 13px/400/#2E3236, lh: 120%\n */\n\nconst UpdatedInteractionSignals = ({\n signals = { signals: [], present_count: 0, total_signals_evaluated: 0 },\n expandedSignals = new Set(),\n toggleSignal = () => {},\n playEvidence = () => {},\n highlightTurns = () => {},\n onShowInTranscript = () => {},\n timelinePlaying = false,\n currentTimeSeconds = 0,\n}) => {\n const signalList = signals?.signals ?? [];\n const presentCount = signals?.present_count ?? signalList.length;\n\n const fmtMs = (ms) => {\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n };\n\n const isEvPlaying = (ev) =>\n timelinePlaying &&\n ev.start_ms != null &&\n currentTimeSeconds * 1000 >= ev.start_ms &&\n currentTimeSeconds * 1000 <= (ev.end_ms ?? ev.start_ms + 5000);\n\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n alignSelf: 'stretch',\n width: '100%',\n gap: 16,\n }}>\n {/* ── Header: icon + \"Signals\" + count ── */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n width: '100%',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: 'var(--surface-hover, #F3F7F7)',\n flexShrink: 0,\n }}>\n <FileSignal size={20} color=\"#2E3236\" strokeWidth={1.5} />\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flex: 1,\n }}>\n <span style={{\n fontSize: 15,\n fontWeight: 500,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n Signals\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 500,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n {presentCount} Signals Detected\n </span>\n </div>\n </div>\n\n {/* ── Signal list (accordion) ── */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n background: 'var(--Grey-White, #FFF)',\n gap: 8,\n }}>\n {signalList.length === 0 && (\n <div style={{\n padding: '8px 0',\n fontSize: 14,\n color: 'var(--Grey-Muted, #808183)',\n }}>\n No signals detected.\n </div>\n )}\n\n {signalList.map((signal, idx) => {\n const key = signal.key ?? signal.id ?? idx;\n const isExpanded = expandedSignals.has(key);\n const obsCount = signal.observations?.length ?? 0;\n\n return (\n <div\n key={key}\n id={`signal-${key}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n gap: 8,\n }}\n >\n {/* ── Accordion Title — signal row ── */}\n <button\n onClick={() => toggleSignal(key)}\n style={{\n display: 'flex',\n padding: '8px 0',\n alignItems: 'center',\n gap: 12,\n alignSelf: 'stretch',\n width: '100%',\n background: 'none',\n border: 'none',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n }}\n >\n <span style={{\n flex: 1,\n textAlign: 'left',\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--text-dark, #0B0A0A)',\n lineHeight: 1.71,\n }}>\n {signal.display_name || signal.key?.replace(/_/g, ' ')}\n {obsCount > 0 && (\n <span style={{\n fontWeight: 600,\n color: 'var(--text-dark, #0B0A0A)',\n marginLeft: 6,\n }}>\n ({obsCount})\n </span>\n )}\n </span>\n {isExpanded ? (\n <ChevronUp size={20} color=\"#767473\" />\n ) : (\n <ChevronDown size={20} color=\"#767473\" />\n )}\n </button>\n\n {/* ── Expanded: Observations ── */}\n {isExpanded && signal.observations?.length > 0 && (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n gap: 0,\n }}>\n {signal.observations.map((obs, obsIdx) => (\n <div\n key={obs.key ?? obsIdx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n gap: 8,\n }}\n >\n {/* Accordion Body — reason + timestamp */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '8px 0',\n justifyContent: 'space-between',\n }}>\n <span style={{\n flex: 1,\n fontSize: 14,\n fontWeight: 400,\n color: 'var(--text-subtle-warm, #767473)',\n lineHeight: 1.5,\n }}>\n {obs.reason || obs.explanation}\n </span>\n {obs.evidence?.[0]?.start_ms != null && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n flexShrink: 0,\n }}\n >\n <HoverIcon\n size={28}\n title=\"Show in transcript\"\n onClick={(e) => {\n e.stopPropagation();\n onShowInTranscript(obs.evidence[0].start_ms);\n }}\n >\n <ScrollText size={16} color=\"#808183\" strokeWidth={1.5} />\n </HoverIcon>\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n }}>\n {fmtMs(obs.evidence[0].start_ms)}\n </span>\n </div>\n )}\n </div>\n\n {/* Evidence quotes — Frame 39 */}\n {obs.evidence?.map((ev, evIdx) => {\n const hasTimestamps = ev.start_ms != null && ev.end_ms != null;\n return ev.text && (\n <div\n key={evIdx}\n onClick={(e) => {\n e.stopPropagation();\n if (hasTimestamps) playEvidence(ev);\n }}\n onMouseEnter={() => highlightTurns(ev.turn_ids ?? [])}\n onMouseLeave={() => highlightTurns([])}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 0',\n cursor: hasTimestamps ? 'pointer' : 'default',\n }}\n >\n {hasTimestamps && (\n <HoverIcon size={28}>\n {isEvPlaying(ev) ? (\n <PauseCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1.5}\n />\n ) : (\n <PlayCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1}\n />\n )}\n </HoverIcon>\n )}\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n “{ev.text}”\n </span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionSignals;\n","import React, { useState } from 'react';\nimport { Info } from 'lucide-react';\n\n/*\n * Figma node: 270-6494 (Compass Score card)\n *\n * Container: padding: 24px, border-radius: 8px, border: 1px solid #D9D9D9,\n * background: #FFF, gap: 24px, vertical\n *\n * Title: \"Compass Score\" 15px/700/#2E3236\n * Description: 14px/400/#808183\n *\n * Content: horizontal, gap: 48, center both axes\n * Left: Meter 243x200 (SVG from Figma export)\n * Right: Legends vertical, gap: 8, centered\n * Each: label 12px/400/#2E3236 + Info 14px stroke=#ACACAD\n * Score bar: 5 segments 22x6, gap: 2, filled=#2E3236, empty=#E3E1D7\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n accent: 'var(--rail-orange, #C98A5A)',\n track: 'var(--rail-surface-2, #E3E1D7)',\n infoIcon: 'var(--color-input-border, #ACACAD)',\n};\n\n// Gauge using stroke-based semi-circle arcs — matching Figma node 270-6499\nconst GaugeMeter = ({ score = 4, maxScore = 10 }) => {\n const svgW = 243;\n const svgH = 130;\n const cx = svgW / 2;\n const cy = svgH - 7;\n const r = 85; // mid-radius of the arc\n const sw = 30; // stroke-width (thickness of the arc band)\n const totalSeg = 5;\n const filledSeg = Math.min(Math.round((score / maxScore) * totalSeg), totalSeg);\n const segDeg = 180 / totalSeg; // 36° per segment\n\n // Convert polar (degrees, 0°=right, CCW) to SVG x,y (Y-down)\n const toXY = (angleDeg) => {\n const rad = (angleDeg * Math.PI) / 180;\n return {\n x: cx + r * Math.cos(rad),\n y: cy - r * Math.sin(rad),\n };\n };\n\n // SVG arc from startDeg to endDeg (both in math convention: 0=right, 180=left)\n // We draw clockwise in SVG (sweep-flag=1) from higher angle to lower angle\n const strokeArc = (fromDeg, toDeg) => {\n const s = toXY(fromDeg);\n const e = toXY(toDeg);\n const large = (fromDeg - toDeg) > 180 ? 1 : 0;\n return `M ${s.x} ${s.y} A ${r} ${r} 0 ${large} 1 ${e.x} ${e.y}`;\n };\n\n const gap = 2; // degrees gap between segments\n\n return (\n <svg width=\"100%\" viewBox={`0 0 ${svgW} ${svgH}`} fill=\"none\" style={{ maxWidth: svgW }}>\n {/* Segments from left (180°) to right (0°) */}\n {Array.from({ length: totalSeg }, (_, i) => {\n const fromA = 180 - i * segDeg - (i > 0 ? gap / 2 : 0);\n const toA = 180 - (i + 1) * segDeg + (i < totalSeg - 1 ? gap / 2 : 0);\n const isFilled = i < filledSeg;\n return (\n <path\n key={i}\n d={strokeArc(fromA, toA)}\n stroke={isFilled ? COLORS.strong : COLORS.track}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n />\n );\n })}\n </svg>\n );\n};\n\nconst ScoreBar = ({ value = 0, maxValue = 5 }) => (\n <div style={{ display: 'flex', gap: 2 }}>\n {Array.from({ length: maxValue }, (_, i) => (\n <div\n key={i}\n style={{\n width: 22,\n height: 6,\n borderRadius: 1,\n background: i < value ? COLORS.strong : COLORS.track,\n }}\n />\n ))}\n </div>\n);\n\nconst LEGEND_TOOLTIPS = {\n 'CSAT': 'Predicted Customer Satisfaction',\n 'Resolution': 'Predicted Resolution: was the issue fully resolved?',\n 'Process Adherence': 'Process Adherence: Did the agent follow procedures?',\n 'Communication': 'Predicted Communication Quality: Clarity, Empathy, Professionalism',\n};\n\nconst InfoTooltip = ({ text, children }) => {\n const [show, setShow] = useState(false);\n return (\n <div\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={() => setShow(true)}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: 6,\n display: 'flex',\n width: 160,\n padding: 10,\n alignItems: 'center',\n gap: 10,\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 20,\n pointerEvents: 'none',\n }}>\n <span style={{\n width: 140,\n flexShrink: 0,\n color: '#FFF',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: 'normal',\n }}>\n {text}\n </span>\n </div>\n )}\n </div>\n );\n};\n\nconst LegendItem = ({ label, value = 0, maxValue = 5 }) => (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n padding: 8,\n alignItems: 'center',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}>\n <span style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {label}\n </span>\n <InfoTooltip text={LEGEND_TOOLTIPS[label] || label}>\n <Info size={14} color={COLORS.infoIcon} strokeWidth={1} style={{ cursor: 'pointer' }} />\n </InfoTooltip>\n </div>\n <ScoreBar value={value} maxValue={maxValue} />\n </div>\n);\n\nconst UpdatedCompassScore = ({\n score = 83,\n maxScore = 100,\n predictedScore = 4,\n predictedLabel = 'Predicted Objective',\n description = '',\n legends = [\n { label: 'CSAT', value: 3 },\n { label: 'Resolution', value: 4 },\n { label: 'Process Adherence', value: 5 },\n { label: 'Communication', value: 3 },\n ],\n}) => {\n const formattedPredicted = String(predictedScore).padStart(2, '0');\n\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n alignSelf: 'stretch',\n flex: 1,\n gap: 24,\n }}>\n {/* Section Title — left-aligned, vertical, gap: 8 */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n }}>\n <span style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n }}>\n Compass Score\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {description}\n </span>\n </div>\n\n {/* Content: Meter (left) + Legends (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 24,\n flex: 1,\n overflow: 'hidden',\n }}>\n {/* Left: Gauge + Pin + Score number */}\n <div style={{\n position: 'relative',\n maxWidth: 243,\n minWidth: 160,\n flex: '0 1 243px',\n flexDirection: 'column',\n alignItems: 'center',\n display: 'flex',\n }}>\n <GaugeMeter score={score} maxScore={maxScore} />\n\n {/* Compass pin — centered below gauge, needle rotates to point at score */}\n {(() => {\n // Pin sits at gauge center; needle rotates from 180° (score=0) to 0° (score=max)\n const pct = maxScore > 0 ? Math.min(score / maxScore, 1) : 0;\n // SVG pin's default needle points to top-right (~45°)\n // We need: score=0 → needle points left (180°), score=max → needle points right (0°)\n // Target angle on gauge: 180 - pct*180\n // Pin default orientation: needle at ~45° from top → offset is 45\n // Rotation needed: -(targetAngle - 45) to align needle with gauge position\n const targetAngle = 180 - pct * 180;\n const rotateDeg = -(targetAngle - 45);\n return (\n <svg\n width=\"34\" height=\"35\" viewBox=\"0 0 34 35\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n marginTop: -24,\n transform: `rotate(${rotateDeg}deg)`,\n transformOrigin: 'center center',\n }}\n >\n <path d=\"M16 25.2169C19.958 25.2169 23.1667 22.0083 23.1667 18.0503C23.1667 14.0922 19.958 10.8836 16 10.8836C12.042 10.8836 8.83334 14.0922 8.83334 18.0503C8.83334 22.0083 12.042 25.2169 16 25.2169Z\" fill=\"var(--rail-orange, #C98A5A)\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M30.4791 11.2328L33.4351 0L21.6888 3.09113C19.9212 2.41855 18.0036 2.05025 16 2.05025C7.16344 2.05025 0 9.2137 0 18.0503C0 26.8868 7.16344 34.0503 16 34.0503C24.8366 34.0503 32 26.8868 32 18.0503C32 15.6119 31.4546 13.301 30.4791 11.2328ZM16 30.5503C22.9036 30.5503 28.5 24.9538 28.5 18.0503C28.5 11.1467 22.9036 5.55025 16 5.55025C9.09644 5.55025 3.5 11.1467 3.5 18.0503C3.5 24.9538 9.09644 30.5503 16 30.5503Z\" fill=\"var(--rail-orange, #C98A5A)\" />\n </svg>\n );\n })()}\n\n {/* Score number below gauge */}\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n marginTop: 8,\n }}>\n {score}\n </div>\n </div>\n\n {/* Right: Predicted Score + Legends */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n }}>\n {/* Predicted Score + Label */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}>\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n }}>\n {formattedPredicted}\n </div>\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.43,\n textAlign: 'center',\n }}>\n {predictedLabel}\n </div>\n </div>\n\n {/* Divider */}\n <div style={{\n width: '100%',\n height: 1,\n background: COLORS.absent,\n }} />\n\n {/* Legend items */}\n {legends.map((legend, i) => (\n <LegendItem\n key={i}\n label={legend.label}\n value={legend.value}\n />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UpdatedCompassScore;\n","\"use client\";\n\nimport React, { useState, useRef, useMemo, useEffect } from \"react\";\nimport {\n MessageSquareMore,\n MessagesSquare,\n ChevronDown,\n Ellipsis,\n CircleCheck,\n CornerDownRight,\n Plus,\n} from \"lucide-react\";\n\n/* ============================================\n Figma node: 237-5557 — Comments / Thread section\n Parent layout (237-5555):\n display: flex\n flex-direction: column\n align-items: flex-start\n gap: 24px\n background: var(--Grey-White, #FFF)\n ============================================ */\n\n/* ─── helpers ─── */\n\nconst roleColorMap = (role) => {\n if (!role) return null;\n const n = String(role).toLowerCase();\n if (n === \"supervisor\") return \"var(--rail-compliance, #C98A5A)\";\n if (n === \"admin\" || n === \"administrator\") return \"var(--rail-discovery, #5E88B0)\";\n if (n === \"agent\") return \"var(--rail-outcome, #6B7C93)\";\n return null;\n};\n\nconst getInitials = (name) =>\n (name || \"\")\n .split(\" \")\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase() || \"U\";\n\nconst formatTimestamp = (value) => {\n if (!value) return \"\";\n if (!/^\\d{4}-\\d{2}-\\d{2}T/.test(value)) return value;\n try {\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return value;\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMin = Math.floor(diffMs / 60000);\n const diffHr = Math.floor(diffMs / 3600000);\n if (diffMin < 1) return \"Just now\";\n if (diffMin < 60) return `${diffMin} min`;\n if (diffHr < 24) return `${diffHr} h`;\n return `${Math.floor(diffHr / 24)} d`;\n } catch {\n return value;\n }\n};\n\n/* ─── Avatar (36 × 36, circular, initials) ─── */\nconst Avatar = ({ name, initials, color, size = 36 }) => (\n <div\n style={{\n width: size,\n height: size,\n borderRadius: \"50%\",\n background: color || \"#6B7C93\",\n color: \"#FFF\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: size <= 32 ? \"10px\" : \"11px\",\n fontWeight: 650,\n flexShrink: 0,\n fontFamily: \"var(--default-font-family)\",\n letterSpacing: \"0.02em\",\n }}\n title={name}\n >\n {initials || getInitials(name)}\n </div>\n);\n\n/* ============================================\n THREAD CARD — Figma node 426-1904\n Horizontal scroll card\n\n Container row (each card):\n display: flex; align-items: center; gap: 12px;\n align-self: stretch;\n border-bottom: 1px solid var(--Grey-absent, #D9D9D9)\n\n Icons: circle-check 16×16 | Divider 0×48 | message-square-more 16×16\n ============================================ */\nconst ThreadCard = ({ thread, isActive, onClick }) => {\n const [hovered, setHovered] = useState(false);\n const isResolved = thread.status === \"resolved\";\n const commentCount = thread.comments?.length || thread.commentCount || 0;\n\n return (\n <div\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n width: 264,\n padding: \"12px 12px\",\n flexDirection: isActive ? \"column\" : \"row\",\n justifyContent: isActive ? \"center\" : \"flex-start\",\n alignItems: isActive ? \"flex-start\" : \"center\",\n gap: isActive ? 6 : 8,\n borderBottom: isActive\n ? \"3px solid var(--Grey-Strong, #2E3236)\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: isActive\n ? \"var(--Grey-Hover, #F3F7F7)\"\n : hovered\n ? \"var(--surface-hover, #F3F7F7)\"\n : \"var(--Grey-White, #FFF)\",\n cursor: \"pointer\",\n flexShrink: 0,\n transition: \"all 0.15s ease\",\n boxSizing: \"border-box\",\n }}\n >\n {/* Left: title + count stacked */}\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n {/* Title — 13px / 500 / #2E3236, truncated */}\n <span\n style={{\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n lineHeight: \"150%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {thread.title || \"Untitled Thread\"}\n </span>\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n lineHeight: \"150%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {commentCount} Comment{commentCount !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n\n {/* Divider — Figma: 0 × 48 (scaled down to match card height) */}\n <div\n style={{\n width: 0,\n height: 32,\n borderLeft: \"1px solid var(--Grey-absent, #D9D9D9)\",\n flexShrink: 0,\n }}\n />\n\n {/* Right: status icon 16×16 + label */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4, flexShrink: 0 }}>\n {isResolved ? (\n <>\n <CircleCheck size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n Resolved\n </span>\n </>\n ) : (\n <>\n <MessageSquareMore size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n Open\n </span>\n </>\n )}\n </div>\n </div>\n );\n};\n\n/* ============================================\n COMMENT BUBBLE — single message\n Figma: flex row, gap: 12\n Avatar 36×36 + content column\n ============================================ */\nconst CommentBubble = ({\n comment,\n isReply = false,\n onReply,\n onMenuClick,\n showReply = true,\n}) => {\n const [hovered, setHovered] = useState(false);\n const author = comment.author || {};\n const authorName = author.name || comment.author_name || \"Unknown\";\n const initials = author.initials || getInitials(authorName);\n const role = author.role || comment.author_role;\n const avatarColor = author.color || roleColorMap(role) || \"#6B7C93\";\n const timestamp = formatTimestamp(comment.timestamp || comment.created_at);\n\n const paragraphs = Array.isArray(comment.content)\n ? comment.content\n : [comment.content || comment.text || \"\"];\n\n return (\n <div\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n gap: 12,\n alignItems: \"flex-start\",\n marginLeft: isReply ? 48 : 0,\n position: \"relative\",\n }}\n >\n {/* Avatar — 36 × 36 */}\n <Avatar name={authorName} initials={initials} color={avatarColor} />\n\n {/* Content column */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header: name + time + ••• */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: 6,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n {/* Name — 13px / 650 */}\n <span\n style={{\n fontSize: 13,\n fontWeight: 650,\n color: \"var(--text-ink, #1E2125)\",\n lineHeight: \"150%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {authorName}\n </span>\n {/* Timestamp — 12px / 400 */}\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n lineHeight: \"150%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {timestamp}\n </span>\n </div>\n\n {/* Three-dot menu — Ellipsis 24 × 24 */}\n <button\n type=\"button\"\n onClick={() => onMenuClick?.(comment)}\n style={{\n padding: 2,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n borderRadius: 4,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: hovered ? 1 : 0,\n transition: \"opacity 0.15s\",\n flexShrink: 0,\n }}\n >\n <Ellipsis size={24} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n </div>\n\n {/* Message bubbles — stacked, gap: 4px */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n {paragraphs.map((paragraph, idx) => (\n <div\n key={idx}\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n lineHeight: \"160%\",\n fontFamily: \"var(--default-font-family)\",\n padding: \"8px 12px\",\n background: isReply\n ? \"var(--surface-hover, #F3F7F7)\"\n : \"var(--surface-warm-40, rgba(243, 241, 229, 0.40))\",\n borderRadius: 8,\n wordBreak: \"break-word\",\n }}\n >\n {paragraph}\n </div>\n ))}\n </div>\n\n {/* Reply action — CornerDownRight 20×20 + \"Reply\" */}\n {showReply && onReply && (\n <button\n type=\"button\"\n onClick={() => onReply(comment)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n marginTop: 8,\n padding: 0,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n transition: \"color 0.15s\",\n }}\n >\n <CornerDownRight size={20} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n Reply\n </button>\n )}\n </div>\n </div>\n );\n};\n\n\n/* ============================================\n COMMENT INPUT\n Figma: Avatar + bordered box\n ┌── toolbar (B I S Link | ⊕) ──┐\n │ \"Add a comment\" [Post] │\n └──────────────────────────────┘\n ============================================ */\nconst CommentInput = ({ currentUser, onSubmit }) => {\n const [value, setValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef(null);\n\n const handleSubmit = () => {\n const trimmed = value.trim();\n if (!trimmed) return;\n onSubmit?.(trimmed);\n setValue(\"\");\n };\n\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const initials = currentUser?.initials || getInitials(currentUser?.name);\n const color =\n currentUser?.color || roleColorMap(currentUser?.role) || \"#6B7C93\";\n\n return (\n <div style={{ display: \"flex\", gap: 12, alignItems: \"flex-start\", width: \"100%\" }}>\n {/* Current user avatar */}\n <Avatar name={currentUser?.name} initials={initials} color={color} />\n\n {/* Input container */}\n <div\n style={{\n flex: 1,\n border: isFocused\n ? \"1px solid var(--Grey-Strong, #2E3236)\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n borderRadius: 8,\n background: \"var(--Grey-White, #FFF)\",\n transition: \"border-color 0.15s\",\n overflow: \"hidden\",\n }}\n >\n {/* Textarea row + Post button */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n padding: \"10px 12px\",\n gap: 8,\n }}\n >\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n placeholder=\"Add a comment\"\n rows={1}\n style={{\n flex: 1,\n border: \"none\",\n outline: \"none\",\n resize: \"none\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"160%\",\n background: \"transparent\",\n padding: 0,\n minHeight: 24,\n }}\n />\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!value.trim()}\n style={{\n display: \"flex\",\n padding: \"6px 16px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: 13,\n fontWeight: 600,\n color: value.trim()\n ? \"var(--Grey-White, #FFF)\"\n : \"var(--Grey-Muted, #808183)\",\n background: value.trim()\n ? \"var(--Grey-Strong, #2E3236)\"\n : \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n borderRadius: 6,\n cursor: value.trim() ? \"pointer\" : \"not-allowed\",\n fontFamily: \"var(--default-font-family)\",\n transition: \"all 0.15s\",\n flexShrink: 0,\n lineHeight: \"150%\",\n }}\n >\n Post\n </button>\n </div>\n </div>\n </div>\n );\n};\n\n/* CommentsIcon — lucide/messages-square 24×24 orange */\n\n/* ============================================\n MAIN COMPONENT: UpdatedThreads\n Figma node 237-5557 — Thread conversation area\n\n Layout:\n display: flex\n flex-direction: column\n align-items: flex-start\n gap: 24px\n background: var(--Grey-White, #FFF)\n ============================================ */\nconst UpdatedThreads = ({\n threads = [],\n activeThreadId,\n onThreadSelect,\n onNewThread,\n onSendComment,\n onReply,\n onMenuClick,\n onMarkResolved,\n onViewPreviousComments,\n currentUser,\n filterValue = \"all\",\n onFilterChange,\n}) => {\n const [internalActiveId, setInternalActiveId] = useState(\n activeThreadId || threads[0]?.id || null\n );\n const [filterOpen, setFilterOpen] = useState(false);\n const filterRef = useRef(null);\n\n const currentActiveId = activeThreadId ?? internalActiveId;\n\n const activeThread = useMemo(\n () => threads.find((t) => t.id === currentActiveId) || threads[0],\n [threads, currentActiveId]\n );\n\n const comments = activeThread?.comments || [];\n\n // Group comments: top-level + their replies\n const groupedComments = useMemo(() => {\n const topLevel = comments.filter((c) => !c.parentId);\n const repliesByParent = {};\n comments.forEach((c) => {\n if (c.parentId) {\n if (!repliesByParent[c.parentId]) repliesByParent[c.parentId] = [];\n repliesByParent[c.parentId].push(c);\n }\n });\n return topLevel.map((c) => ({\n ...c,\n replies: repliesByParent[c.id] || [],\n }));\n }, [comments]);\n\n useEffect(() => {\n if (activeThreadId) setInternalActiveId(activeThreadId);\n }, [activeThreadId]);\n\n // Close filter dropdown on outside click\n useEffect(() => {\n if (!filterOpen) return;\n const handler = (e) => {\n if (filterRef.current && !filterRef.current.contains(e.target)) {\n setFilterOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [filterOpen]);\n\n const handleThreadClick = (threadId) => {\n setInternalActiveId(threadId);\n onThreadSelect?.(threadId);\n };\n\n const displayCurrentUser = useMemo(() => {\n if (!currentUser) return { name: \"You\", initials: \"YO\", color: \"#6B7C93\" };\n const name = currentUser.name || \"You\";\n const initials = currentUser.initials || getInitials(name);\n const role = currentUser.role && String(currentUser.role).toLowerCase();\n const color = currentUser.color || roleColorMap(role) || \"#6B7C93\";\n return { ...currentUser, name, initials, color };\n }, [currentUser]);\n\n const filterOptions = [\n { label: \"All\", value: \"all\" },\n { label: \"Open\", value: \"open\" },\n { label: \"Resolved\", value: \"resolved\" },\n ];\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 24,\n background: \"var(--Grey-White, #FFF)\",\n width: \"100%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {/* ═══════════════════════════════════════════\n HEADER — icon + \"COMMENTS\" | All ▾ | + New Thread\n Figma: flex row, space-between, center\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n {/* Left: Icon (24×24 orange) + COMMENTS title */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <MessagesSquare size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={1.5} />\n <span\n style={{\n fontSize: 14,\n fontWeight: 650,\n color: \"var(--Grey-Strong, #2E3236)\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n lineHeight: \"150%\",\n }}\n >\n COMMENTS\n </span>\n </div>\n\n </div>\n\n {/* ═══════════════════════════════════════════\n THREAD CARDS — horizontal scroll row\n ═══════════════════════════════════════════ */}\n {threads.length > 0 && (\n <div\n style={{\n display: \"flex\",\n gap: 0,\n width: \"100%\",\n overflowX: \"auto\",\n }}\n className=\"custom-thin-scrollbar-library\"\n >\n {threads.map((thread) => (\n <ThreadCard\n key={thread.id}\n thread={thread}\n isActive={thread.id === currentActiveId}\n onClick={() => handleThreadClick(thread.id)}\n />\n ))}\n </div>\n )}\n\n {/* ═══════════════════════════════════════════\n VIEW PREVIOUS COMMENTS — bordered button\n Figma: padding 8px 16px, border-radius 8px\n ═══════════════════════════════════════════ */}\n {onViewPreviousComments && (\n <button\n type=\"button\"\n onClick={onViewPreviousComments}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"8px 16px\",\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n background: \"var(--Grey-White, #FFF)\",\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n borderRadius: 8,\n cursor: \"pointer\",\n fontFamily: \"var(--default-font-family)\",\n transition: \"background 0.15s\",\n lineHeight: \"150%\",\n }}\n >\n View Previous Comments\n </button>\n )}\n\n {/* ═══════════════════════════════════════════\n COMMENTS LIST — grouped by parent/reply\n Figma: flex column, gap: 20px\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 20,\n width: \"100%\",\n }}\n >\n {groupedComments.map((comment) => (\n <div key={comment.id} style={{ display: \"flex\", flexDirection: \"column\", gap: 20 }}>\n {/* Top-level comment — no Reply button when it has replies below */}\n <CommentBubble\n comment={comment}\n isReply={false}\n onReply={onReply}\n onMenuClick={onMenuClick}\n showReply={comment.replies.length === 0}\n />\n\n {/* Replies — indented, last reply shows Reply button */}\n {comment.replies.map((reply, idx) => (\n <CommentBubble\n key={reply.id}\n comment={reply}\n isReply\n onReply={onReply}\n onMenuClick={onMenuClick}\n showReply={idx === comment.replies.length - 1}\n />\n ))}\n </div>\n ))}\n </div>\n\n {/* ═══════════════════════════════════════════\n COMMENT INPUT — avatar + rich text box\n ═══════════════════════════════════════════ */}\n <CommentInput currentUser={displayCurrentUser} onSubmit={onSendComment} />\n\n {/* ═══════════════════════════════════════════\n MARK AS RESOLVED — pill button\n Figma: CircleCheck 16×16 + text, border-radius 20px\n ═══════════════════════════════════════════ */}\n {onMarkResolved && activeThread && activeThread.status !== \"resolved\" && (\n <button\n type=\"button\"\n onClick={onMarkResolved}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"8px 16px\",\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n background: \"var(--Grey-White, #FFF)\",\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n borderRadius: 20,\n cursor: \"pointer\",\n fontFamily: \"var(--default-font-family)\",\n transition: \"background 0.15s\",\n lineHeight: \"150%\",\n }}\n >\n <CircleCheck size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n Mark as Resolved\n </button>\n )}\n </div>\n );\n};\n\nexport default UpdatedThreads;\n","import { useState, useRef, useEffect } from 'react';\nimport { ArrowLeft, ArrowRight, CalendarDays, PhoneIncoming, ClipboardList, FileSignal, Repeat, ChevronDown, ChevronUp, Headset, CircleUser, History, ExternalLink } from 'lucide-react';\nimport UpdatedInteractionContext from './UpdatedInteractionContext';\nimport UpdatedInteractionRecording from './UpdatedInteractionRecording';\nimport UpdatedInteractionScores from './UpdatedInteractionScores';\nimport UpdatedCoachingSynthesisCard from './UpdatedCoachingSynthesisCard';\nimport UpdatedInteractionSignals from './UpdatedInteractionSignals';\nimport UpdatedCompassScore from './UpdatedCompassScore';\nimport UpdatedThreads from './UpdatedThreads';\n\nconst TABS = [\n { key: 'overview', label: 'Overview' },\n { key: 'coaching', label: 'Coaching Summary' },\n { key: 'signals', label: 'Signals & Recording' },\n { key: 'comments', label: 'Comments' },\n];\n\nconst UpdatedInteractionDetails = ({\n title = 'Wheel Stud Replacement Enquiry',\n onBack,\n // Data props — all optional with defaults for demo\n data,\n coachingData,\n coachingLoading = false,\n audioUrl,\n // Audio/playback props — pass these when the host app manages audio externally\n // (like InteractionDetailPanel does). If omitted, UpdatedInteractionRecording\n // manages its own audio element internally.\n audioRef: externalAudioRef,\n currentTimeSeconds,\n timelinePlaying,\n playbackRate,\n timelineSegments,\n onSeek,\n onTogglePlay,\n onSeekBack,\n onSeekForward,\n onSetPlaybackRate,\n // Speaker names\n agentName: externalAgentName,\n customerName: externalCustomerName,\n // Transcript props — pass real transcript data from the host app\n transcript,\n activeTurnIndex,\n turnObservations,\n highlightedTurns,\n onTurnPlayPause,\n // Signal evidence playback — host app can provide to play audio segments from signals\n onPlayEvidence,\n onHighlightTurns,\n // Context props — pass from host app to override block-derived defaults\n callPurpose: externalCallPurpose,\n classification: externalClassification,\n outcomeQuality: externalOutcomeQuality,\n // Context \"More Details\" expandable section\n resolutionOutcome,\n customerIntent,\n interactionId,\n moreDetails,\n // Compass score props\n compassScore, // gauge meter value — compass_score, range 1-5\n compassMaxScore = 10,\n predictedCsat, // predicted objective number (e.g. compass_score) — shown as \"03\" top-right\n predictedLabel = 'Predicted Objective',\n compassLegends,\n // Customer session dropdown\n customerSessions: customerSessionsList,\n customerSessionCount,\n onSessionClick,\n onViewAllSessions,\n // Footer navigation\n prevSessionTitle,\n prevSessionDesc,\n prevSessionDisabled = false,\n nextSessionTitle,\n nextSessionDesc,\n nextSessionDisabled = false,\n onPreviousSession,\n onNextSession,\n}) => {\n const [activeTab, setActiveTab] = useState('overview');\n const [expandedSignals, setExpandedSignals] = useState(new Set());\n const [showSessionDropdown, setShowSessionDropdown] = useState(false);\n const [hoveredSessionIdx, setHoveredSessionIdx] = useState(null);\n const [internalPlaying, setInternalPlaying] = useState(false);\n const [internalCurrentTime, setInternalCurrentTime] = useState(0);\n const recordingRef = useRef(null);\n\n // Section refs for scroll-to-section tab behavior\n const overviewRef = useRef(null);\n const coachingRef = useRef(null);\n const signalsRef = useRef(null);\n const commentsRef = useRef(null);\n const sectionRefs = { overview: overviewRef, coaching: coachingRef, signals: signalsRef, comments: commentsRef };\n const scrollContainerRef = useRef(null);\n const isClickScrolling = useRef(false);\n\n // Scroll-spy: update active tab based on which section is most visible\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const tabKeys = ['overview', 'coaching', 'signals', 'comments'];\n const refs = [overviewRef, coachingRef, signalsRef, commentsRef];\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (isClickScrolling.current) return;\n let bestKey = null;\n let bestRatio = 0;\n for (const entry of entries) {\n if (entry.isIntersecting && entry.intersectionRatio > bestRatio) {\n const idx = refs.findIndex((r) => r.current === entry.target);\n if (idx !== -1) {\n bestKey = tabKeys[idx];\n bestRatio = entry.intersectionRatio;\n }\n }\n }\n if (bestKey) setActiveTab(bestKey);\n },\n { root: container, threshold: [0, 0.1, 0.25, 0.5, 0.75, 1] }\n );\n\n refs.forEach((ref) => {\n if (ref.current) observer.observe(ref.current);\n });\n\n return () => observer.disconnect();\n }, []);\n\n const handleTabClick = (key) => {\n setActiveTab(key);\n isClickScrolling.current = true;\n const ref = sectionRefs[key];\n if (ref?.current) {\n ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n setTimeout(() => { isClickScrolling.current = false; }, 800);\n };\n\n const sessionHistory = customerSessionsList || [];\n\n /* Called from Signals \"Show in transcript\" icon — seeks recording to that time */\n const handleShowInTranscript = (startMs) => {\n const timeSec = startMs / 1000;\n if (recordingRef.current?.seekTo) {\n recordingRef.current.seekTo(timeSec);\n }\n };\n\n /* Called from Signals evidence play button — seeks + plays audio segment */\n const handlePlayEvidence = (ev) => {\n if (onPlayEvidence) {\n onPlayEvidence(ev);\n } else {\n // Default: seek to evidence start time via recording ref\n const startMs = ev.start_ms ?? ev.startMs;\n if (startMs != null && recordingRef.current?.seekTo) {\n recordingRef.current.seekTo(startMs / 1000);\n setInternalPlaying(true);\n setInternalCurrentTime(startMs / 1000);\n // Stop playing after evidence duration\n const endMs = ev.end_ms ?? ev.endMs ?? (startMs + 5000);\n const durationMs = endMs - startMs;\n setTimeout(() => setInternalPlaying(false), durationMs);\n }\n }\n };\n\n /* Called to highlight transcript turns related to evidence */\n const handleHighlightTurns = (turnIds) => {\n if (onHighlightTurns) {\n onHighlightTurns(turnIds);\n }\n };\n\n const toggleSignal = (key) => {\n setExpandedSignals((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n // Extract data from blocks if provided\n const blocks = data?.blocks || [];\n const findBlock = (id) => blocks.find((b) => b.block_id === id)?.payload || {};\n\n const meta = findBlock('interaction-metadata');\n const ctx = findBlock('interaction-context');\n const signals = findBlock('interaction-signals');\n const outcomeLift = findBlock('interaction-outcome-lift');\n const callPurpose = ctx.call_purpose || {};\n const classification = ctx.classification || {};\n\n // Demo defaults\n const demoMeta = { duration_seconds: 156, message_count: 25, ...meta };\n const demoCallPurpose = { interaction_driver: 'General Information', interaction_direction: 'inbound', ...callPurpose };\n const demoClassification = { interaction_paradigm: 'Informational', ...classification };\n const demoOutcomeLift = { p_expected: 0.94, p_full: 0.83, lift_raw: -0.11, lift: 0.043, interpretation: { lift_band: 'positive' }, ...outcomeLift };\n const demoDriverLabels = outcomeLift.driver_signal_keys?.map((k) => k.replace(/^sig\\./, '').replace(/_/g, ' ')) || [\n 'customer needs fully addressed',\n 'call flow expectations set',\n 'Opening expectations set',\n 'Active listening demonstrated',\n 'Resolution confirmed',\n ];\n const demoCoaching = coachingData || {\n one_liner: 'David provided the customer with information on wheel stud replacement and pricing, but did not secure an appointment.',\n context: 'The customer was seeking information on wheel stud replacement for a 2013 Chevy Bolt and was unsure about doing the repair themselves.',\n strengths: [\n { text: 'Anthony effectively scheduled the appointment and confirmed the details clearly.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Handled customer objections well by explaining the need for a separate appointment for alignment.', quote: \"I don't have the alignment changeover the weekend. So I would have to set up a separate appointment for the alignment.\" },\n { text: 'Demonstrated courtesy and professionalism throughout the call.', quote: 'Have a great day.' },\n ],\n improvements: [\n { text: 'Close the loop by restating the plan and confirming next steps to ensure customer certainty.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Frame solutions positively by leading with what can be done rather than limitations.', quote: \"I don't have the alignment changeover the weekend.\" },\n ],\n overall: 'effective',\n };\n const demoSignals = signals?.signals?.length ? signals : {\n present_count: 9,\n total_signals_evaluated: 146,\n signals: [\n {\n key: 'price_estimate_provided', display_name: 'Price Estimate Provided',\n observations: [\n {\n key: 'obs1', reason: 'Evidence shows a price estimate or quote was provided.', evidence: [\n { start_ms: 92000, end_ms: 97000, text: 'From Casper, you\\'re probably looking at, like, a half hour labor plus a stud, so you\\'d probably be somewhere around $90 or something.', turn_ids: [8] },\n ]\n },\n ],\n },\n { key: 'fee_or_cost_discussed', display_name: 'Fee or Cost Discussed', observations: [{ key: 'obs2', reason: 'Agent discussed pricing details with the customer.' }] },\n { key: 'engagement_budget', display_name: 'Engagement Budget Discussed', observations: [{ key: 'obs3a', reason: 'Budget expectations were set.' }, { key: 'obs3b', reason: 'Customer confirmed budget range.' }] },\n { key: 'projected_revenue', display_name: 'Projected Revenue Discussed', observations: [{ key: 'obs4a', reason: 'Revenue projection shared.' }, { key: 'obs4b', reason: 'Timeline for revenue discussed.' }, { key: 'obs4c', reason: 'Quarterly targets mentioned.' }] },\n { key: 'market_analysis', display_name: 'Market Analysis Completed', observations: [{ key: 'obs5a', reason: 'Market analysis referenced.' }, { key: 'obs5b', reason: 'Competitive landscape discussed.' }, { key: 'obs5c', reason: 'Market trends mentioned.' }, { key: 'obs5d', reason: 'Regional analysis provided.' }] },\n { key: 'target_audience', display_name: 'Target Audience Defined', observations: [{ key: 'obs6a', reason: 'Target audience identified.' }, { key: 'obs6b', reason: 'Demographics discussed.' }, { key: 'obs6c', reason: 'Audience segmentation reviewed.' }, { key: 'obs6d', reason: 'Persona mapping completed.' }, { key: 'obs6e', reason: 'Channel preferences noted.' }] },\n { key: 'concept_approval', display_name: 'Concept Approval Received', observations: [{ key: 'obs7a', reason: 'Concept approved by stakeholder.' }, { key: 'obs7b', reason: 'Feedback incorporated.' }, { key: 'obs7c', reason: 'Sign-off confirmed.' }, { key: 'obs7d', reason: 'Revisions requested.' }, { key: 'obs7e', reason: 'Final version accepted.' }, { key: 'obs7f', reason: 'Timeline approved.' }] },\n { key: 'prototype_developed', display_name: 'Prototype Developed', observations: [{ key: 'obs8a', reason: 'Prototype shared.' }, { key: 'obs8b', reason: 'Testing initiated.' }, { key: 'obs8c', reason: 'Feedback collected.' }, { key: 'obs8d', reason: 'Iterations completed.' }, { key: 'obs8e', reason: 'Usability tested.' }, { key: 'obs8f', reason: 'Design finalized.' }, { key: 'obs8g', reason: 'Stakeholder demo done.' }] },\n { key: 'user_testing', display_name: 'User Testing Scheduled', observations: [{ key: 'obs9a', reason: 'Testing sessions planned.' }, { key: 'obs9b', reason: 'Participants recruited.' }, { key: 'obs9c', reason: 'Test scripts prepared.' }, { key: 'obs9d', reason: 'Environment set up.' }, { key: 'obs9e', reason: 'Accessibility testing included.' }, { key: 'obs9f', reason: 'Results framework defined.' }, { key: 'obs9g', reason: 'Timeline confirmed.' }, { key: 'obs9h', reason: 'Backup plan discussed.' }] },\n ],\n };\n\n const agentName = externalAgentName || 'Agent';\n const customerName = externalCustomerName || 'Customer';\n const sessionCount = customerSessionCount ?? sessionHistory.length;\n const dateStr = meta.evaluated_dt ? new Date(meta.evaluated_dt).toLocaleString() : '3/29/2026, 8:30:00 AM';\n const direction = demoCallPurpose.interaction_direction === 'inbound' ? 'Inbound' : 'Outbound';\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%', height: '100%', background: 'var(--Grey-White, #FFF)' }}>\n {/* Sticky Header + Tabs */}\n <div style={{ position: 'sticky', top: 0, zIndex: 20, background: 'var(--Grey-White, #FFF)' }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '24px 24px 0' }}>\n <button\n onClick={onBack}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Strong, #2E3236)\" />\n </button>\n <div style={{ width: 1, height: 28, background: 'var(--Base-absent, #D9D9D9)' }} />\n <h1 style={{\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 24,\n fontStyle: 'normal',\n fontWeight: 400,\n lineHeight: 'normal',\n margin: 0,\n }}>\n {title}\n </h1>\n </div>\n\n {/* Tabs */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n background: 'var(--Grey-White, #FFF)',\n borderBottom: '1px solid var(--Grey-Faint, #ACADAD)',\n padding: '0 24px',\n marginTop: 8,\n }}>\n {TABS.map((tab) => (\n <button\n key={tab.key}\n onClick={() => handleTabClick(tab.key)}\n style={{\n display: 'flex',\n padding: 16,\n alignItems: 'center',\n gap: 10,\n background: 'none',\n border: 'none',\n borderBottom: activeTab === tab.key\n ? '3px solid var(--Grey-Strong, #2E3236)'\n : '3px solid transparent',\n cursor: 'pointer',\n fontSize: 15,\n fontWeight: activeTab === tab.key ? 500 : 400,\n color: activeTab === tab.key\n ? 'var(--Grey-Strong, #2E3236)'\n : 'var(--Grey-Muted, #808183)',\n whiteSpace: 'nowrap',\n transition: 'border-color 0.2s ease, color 0.2s ease',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n </div>{/* end sticky header + tabs */}\n\n {/* All sections rendered — tabs scroll to them */}\n <div ref={scrollContainerRef} style={{ padding: 24, flex: 1, overflowY: 'auto' }}>\n {/* ═══ OVERVIEW SECTION ═══ */}\n <div ref={overviewRef} style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Figma node 106-3508: Section Header — horizontal, gap: 16, height: 40, center */}\n <div style={{\n display: 'flex',\n height: 40,\n alignItems: 'center',\n gap: 16,\n alignSelf: 'stretch',\n }}>\n {/* Left: Icon + Title — fills remaining space */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, flex: 1 }}>\n <ClipboardList size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n textTransform: 'uppercase',\n }}>\n Overview\n </span>\n </div>\n\n {/* Right: Metadata — horizontal, gap: 16, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 16, flexShrink: 0 }}>\n {/* Date */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <CalendarDays size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {dateStr}\n </span>\n </div>\n\n {/* Direction */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <PhoneIncoming size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {direction}\n </span>\n </div>\n\n {/* Agent + Customer — border-left separator */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 16,\n paddingLeft: 16,\n borderLeft: '1px solid var(--Grey-absent, #D9D9D9)',\n }}>\n {/* Agent — Headset icon */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <Headset size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {agentName}\n </span>\n </div>\n\n {/* Repeat icon */}\n <Repeat size={16} color=\"var(--color-input-border, #ACACAD)\" strokeWidth={1.5} />\n\n {/* Customer — CircleUser icon + dropdown (only if > 1 session) */}\n {sessionCount > 1 ? (\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => setShowSessionDropdown((prev) => !prev)}\n style={{\n display: 'flex', alignItems: 'center', gap: 4, padding: '8px 0',\n background: 'none', border: 'none', cursor: 'pointer',\n }}\n >\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2 }}>\n {customerName} ({sessionCount} Sessions)\n </span>\n {showSessionDropdown\n ? <ChevronUp size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n : <ChevronDown size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n }\n </button>\n\n {/* Figma node 311-1302: Session history dropdown */}\n {showSessionDropdown && (\n <div style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n width: 264,\n background: 'var(--Grey-White, #FFF)',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n boxShadow: '0 4px 16px rgba(0,0,0,0.12)',\n zIndex: 50,\n overflow: 'hidden',\n }}>\n {/* Header — Figma node 312-1321: horizontal, gap: 8 */}\n <div style={{\n display: 'flex', alignItems: 'flex-start', gap: 8,\n padding: 16,\n }}>\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} style={{ marginTop: 2, flexShrink: 0 }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n <span style={{\n fontSize: 16, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {customerName}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {sessionCount} Sessions in past\n </span>\n </div>\n </div>\n\n {/* Session list */}\n {sessionHistory.slice(0, 5).map((session, i) => (\n <div\n key={session.id || i}\n onClick={() => { if (onSessionClick) onSessionClick(session); setShowSessionDropdown(false); }}\n onMouseEnter={() => setHoveredSessionIdx(i)}\n onMouseLeave={() => setHoveredSessionIdx(null)}\n style={{\n display: 'flex',\n width: 264,\n padding: '12px 16px',\n justifyContent: 'space-between',\n alignItems: 'center',\n background: hoveredSessionIdx === i\n ? 'var(--surface-hover, #F3F7F7)'\n : 'var(--Grey-White, #FFF)',\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n boxSizing: 'border-box',\n transition: 'background 0.15s',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {session.title}\n </span>\n <span style={{\n fontSize: 12, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {session.date}\n </span>\n </div>\n {hoveredSessionIdx === i && (\n <ExternalLink size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1} style={{ flexShrink: 0 }} />\n )}\n </div>\n ))}\n\n {/* View All Sessions button */}\n <div style={{\n padding: 16,\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n display: 'flex',\n justifyContent: 'center',\n }}>\n <button\n onClick={() => { if (onViewAllSessions) onViewAllSessions(); setShowSessionDropdown(false); }}\n style={{\n display: 'flex',\n height: 32,\n padding: '16px 16px 16px 12px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 6,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 10,\n cursor: 'pointer',\n }}>\n <History size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{\n fontSize: 14, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n View All Sessions\n </span>\n </button>\n </div>\n </div>\n )}\n </div>\n ) : (\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, padding: '8px 0' }}>\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2 }}>\n {customerName}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/*\n Figma node 101-2385\n Row: Compass Score (left) | Context + Agent Lift Analysis stacked (right)\n */}\n <div style={{\n display: 'flex',\n alignItems: 'stretch',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Left — Compass Score */}\n <div style={{ flex: 1, minWidth: 0, display: 'flex' }}>\n <UpdatedCompassScore\n score={compassScore ?? 0}\n maxScore={5}\n predictedScore={predictedCsat ?? 0}\n predictedLabel={predictedLabel}\n legends={compassLegends}\n />\n </div>\n\n {/* Right — Context grid + Agent Lift Analysis stacked */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-end',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}>\n <UpdatedInteractionContext\n meta={demoMeta}\n callPurpose={externalCallPurpose || demoCallPurpose}\n classification={externalClassification || demoClassification}\n outcomeQuality={externalOutcomeQuality || 'Neutral'}\n resolutionOutcome={resolutionOutcome ?? 'Unknown'}\n customerIntent={customerIntent ?? 'Get Information'}\n interactionId={interactionId ?? meta.interaction_id ?? '1a369e01-5924-4d10-bfc7-d1321be71b2b'}\n moreDetails={moreDetails}\n />\n <UpdatedInteractionScores\n outcomeLift={demoOutcomeLift}\n driverLabels={demoDriverLabels}\n />\n </div>\n </div>\n\n </div>\n\n {/* ═══ COACHING SUMMARY SECTION ═══ */}\n <div ref={coachingRef} style={{ paddingTop: 24 }}>\n <UpdatedCoachingSynthesisCard data={coachingLoading ? null : demoCoaching} loading={coachingLoading} />\n </div>\n\n {/* ═══ SIGNALS & RECORDING SECTION ═══ */}\n <div ref={signalsRef} style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n alignSelf: 'stretch',\n paddingTop: 24,\n }}>\n {/* Section header */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}>\n <FileSignal size={24} color=\"#C98A5A\" strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n textTransform: 'uppercase',\n }}>\n Signals & Recording\n </span>\n </div>\n\n {/* Content: Signals (left) | Recording+Transcript (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n paddingTop: 16,\n borderTop: '1px solid #D9D9D9',\n }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionSignals\n signals={demoSignals}\n expandedSignals={expandedSignals}\n toggleSignal={toggleSignal}\n playEvidence={handlePlayEvidence}\n highlightTurns={handleHighlightTurns}\n onShowInTranscript={handleShowInTranscript}\n timelinePlaying={timelinePlaying || internalPlaying}\n currentTimeSeconds={currentTimeSeconds ?? internalCurrentTime}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionRecording\n ref={recordingRef}\n audioUrl={audioUrl}\n durationSeconds={demoMeta.duration_seconds}\n audioRef={externalAudioRef}\n agentName={agentName}\n customerName={customerName.split(' ')[0]}\n currentTimeSeconds={currentTimeSeconds}\n timelinePlaying={timelinePlaying}\n playbackRate={playbackRate}\n timelineSegments={timelineSegments}\n onSeek={onSeek}\n onTogglePlay={onTogglePlay}\n onSeekBack={onSeekBack}\n onSeekForward={onSeekForward}\n onSetPlaybackRate={onSetPlaybackRate}\n transcript={transcript}\n activeTurnIndex={activeTurnIndex}\n turnObservations={turnObservations}\n highlightedTurns={highlightedTurns}\n onTurnPlayPause={onTurnPlayPause}\n setExpandedSignals={setExpandedSignals}\n />\n </div>\n </div>\n </div>\n\n {/* ═══ COMMENTS SECTION ═══ */}\n <div ref={commentsRef} style={{ paddingTop: 24 }}>\n <UpdatedThreads />\n </div>\n </div>\n\n {/* Figma node 113-8262: Sticky Footer — Previous / Next Session */}\n <div style={{\n display: 'flex',\n position: 'sticky',\n bottom: 0,\n zIndex: 10,\n }}>\n {/* Previous Session */}\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n pointerEvents: prevSessionDisabled ? 'none' : 'auto',\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} style={{ opacity: prevSessionDisabled ? 0.4 : 1 }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10, opacity: prevSessionDisabled ? 0.4 : 1 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {prevSessionTitle || 'Previous Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {prevSessionDesc || 'Short description of the session'}\n </span>\n </div>\n </button>\n\n {/* Next Session */}\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n pointerEvents: nextSessionDisabled ? 'none' : 'auto',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10, opacity: nextSessionDisabled ? 0.4 : 1 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {nextSessionTitle || 'Next Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {nextSessionDesc || 'Short description of the session'}\n </span>\n </div>\n <ArrowRight size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} style={{ opacity: nextSessionDisabled ? 0.4 : 1 }} />\n </button>\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionDetails;\n"],"names":["COLORS","OVERALL_MAP","STYLE_ID","ensureKeyframes","style","OverallBadge","overall","label","jsxs","jsx","ThumbsUp","SectionItem","item","text","quote","CoachingColumn","icon","items","i","UpdatedCoachingSynthesisCard","data","loading","error","React","Fragment","strengths","improvements","oneLiner","_a","context","_b","ShieldCheck","TrendingUp","Lightbulb","fmtDur","seconds","m","ROW_STYLE","COLUMN_STYLE","UpdatedInteractionContext","meta","callPurpose","classification","dimensions","outcomeQuality","onMoreDetails","moreDetails","resolutionOutcome","customerIntent","interactionId","expanded","setExpanded","useState","duration","messages","driver","paradigm","pairedRows","rawPairs","left","right","pair","detailRows","renderRow","renderMoreDetailsToggle","p","ChevronUp","ChevronDown","idx","row","LH","MAX_VISIBLE_DRIVERS","fmtPct","v","fmtPp","pp","UpdatedInteractionScores","outcomeLift","driverLabels","pExpected","pFull","liftRaw","liftRecentered","liftBand","liftBandCapitalized","LiftIcon","ThumbsDown","visibleDrivers","overflowCount","HoverIcon","children","size","onClick","title","hovered","setHovered","UpdatedInteractionSignals","signals","expandedSignals","toggleSignal","playEvidence","highlightTurns","onShowInTranscript","timelinePlaying","currentTimeSeconds","signalList","presentCount","fmtMs","ms","minutes","isEvPlaying","ev","FileSignal","signal","key","isExpanded","obsCount","_c","obs","obsIdx","e","ScrollText","evIdx","hasTimestamps","PauseCircle","PlayCircle","GaugeMeter","score","maxScore","filledSeg","segDeg","toXY","angleDeg","rad","strokeArc","fromDeg","toDeg","s","large","gap","_","fromA","toA","isFilled","ScoreBar","value","maxValue","LEGEND_TOOLTIPS","InfoTooltip","show","setShow","LegendItem","Info","UpdatedCompassScore","predictedScore","predictedLabel","description","legends","formattedPredicted","rotateDeg","legend","roleColorMap","role","getInitials","name","w","formatTimestamp","d","diffMs","diffMin","diffHr","Avatar","initials","color","ThreadCard","thread","isActive","isResolved","commentCount","CircleCheck","MessageSquareMore","CommentBubble","comment","isReply","onReply","onMenuClick","showReply","author","authorName","avatarColor","timestamp","paragraphs","Ellipsis","paragraph","CornerDownRight","CommentInput","currentUser","onSubmit","setValue","isFocused","setIsFocused","textareaRef","useRef","handleSubmit","trimmed","handleKeyDown","UpdatedThreads","threads","activeThreadId","onThreadSelect","onNewThread","onSendComment","onMarkResolved","onViewPreviousComments","filterValue","onFilterChange","internalActiveId","setInternalActiveId","filterOpen","setFilterOpen","filterRef","currentActiveId","activeThread","useMemo","t","comments","groupedComments","topLevel","c","repliesByParent","useEffect","handler","handleThreadClick","threadId","displayCurrentUser","MessagesSquare","reply","TABS","UpdatedInteractionDetails","onBack","coachingData","coachingLoading","audioUrl","externalAudioRef","playbackRate","timelineSegments","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","externalAgentName","externalCustomerName","transcript","activeTurnIndex","turnObservations","highlightedTurns","onTurnPlayPause","onPlayEvidence","onHighlightTurns","externalCallPurpose","externalClassification","externalOutcomeQuality","compassScore","compassMaxScore","predictedCsat","compassLegends","customerSessionsList","customerSessionCount","onSessionClick","onViewAllSessions","prevSessionTitle","prevSessionDesc","prevSessionDisabled","nextSessionTitle","nextSessionDesc","nextSessionDisabled","onPreviousSession","onNextSession","activeTab","setActiveTab","setExpandedSignals","showSessionDropdown","setShowSessionDropdown","hoveredSessionIdx","setHoveredSessionIdx","internalPlaying","setInternalPlaying","internalCurrentTime","setInternalCurrentTime","recordingRef","overviewRef","coachingRef","signalsRef","commentsRef","sectionRefs","scrollContainerRef","isClickScrolling","container","tabKeys","refs","observer","entries","bestKey","bestRatio","entry","r","ref","handleTabClick","sessionHistory","handleShowInTranscript","startMs","timeSec","handlePlayEvidence","durationMs","handleHighlightTurns","turnIds","prev","next","blocks","findBlock","id","b","ctx","demoMeta","demoCallPurpose","demoClassification","demoOutcomeLift","demoDriverLabels","k","demoCoaching","demoSignals","agentName","customerName","sessionCount","dateStr","direction","ArrowLeft","tab","ClipboardList","CalendarDays","PhoneIncoming","Headset","Repeat","CircleUser","session","ExternalLink","History","UpdatedInteractionRecording","ArrowRight"],"mappings":"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"}
|