chordia-ui 3.7.2 → 3.7.3
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/CustomFilterChips.cjs.js +1 -1
- package/dist/CustomFilterChips.cjs.js.map +1 -1
- package/dist/CustomFilterChips.es.js +2 -2
- package/dist/CustomFilterChips.es.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.cjs.js +2 -2
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +14 -13
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/package.json +1 -1
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +13 -13
- package/src/components/UpdatedInteractionDetails/UpdatedThreads.jsx +1 -0
- package/src/components/common/CustomFilterChips.jsx +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdatedInteractionDetails.es.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/UpdatedGuidance.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 { useEffect, useRef, useState } from 'react';\nimport { ChevronDown, ChevronUp, Pencil } 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 canShowEditButton = false,\n onEditInteraction,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const moreDetailsRef = useRef(null);\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 // Helper to find a dimension by key pattern\n const findDim = (keyPattern) => dimensions.find((d) => (d.key || '').toLowerCase().includes(keyPattern));\n\n // Auto-extract known dimensions — use explicit props first, then fall back to dimensions data\n const dimResolution = findDim('resolution_outcome');\n const dimIntent = findDim('customer_intent');\n const dimOutcomeQuality = findDim('outcome_quality');\n\n const fmtValue = (v) => v ? v.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase()) : null;\n\n const resolvedOutcomeQuality = outcomeQuality !== 'Neutral' ? outcomeQuality\n : dimOutcomeQuality ? fmtValue(dimOutcomeQuality.value)\n : outcomeQuality;\n\n const resolvedResolutionOutcome = resolutionOutcome ?? (dimResolution ? fmtValue(dimResolution.value) : null);\n const resolvedCustomerIntent = customerIntent ?? (dimIntent ? fmtValue(dimIntent.value) : null);\n\n // Keys to exclude from the generic dimensions grid (they go in dedicated spots)\n const excludedKeys = new Set(['resolution_outcome', 'customer_intent', 'outcome_quality'].map((k) => `dim.${k}`));\n const filteredDimensions = dimensions.filter((d) => !excludedKeys.has(d.key));\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 remaining dimension pairs (excluding the ones we extracted)\n for (let i = 0; i < filteredDimensions.length; i += 2) {\n const left = filteredDimensions[i] ? { label: filteredDimensions[i].display_name || filteredDimensions[i].label || filteredDimensions[i].key, value: fmtValue(filteredDimensions[i].value) } : null;\n const right = filteredDimensions[i + 1] ? { label: filteredDimensions[i + 1].display_name || filteredDimensions[i + 1].label || filteredDimensions[i + 1].key, value: fmtValue(filteredDimensions[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: resolvedOutcomeQuality },\n { isMoreDetails: true },\n ]);\n\n rawPairs.forEach((pair) => pairedRows.push(pair));\n\n // Build \"More Details\" expanded rows — auto-extracted from dimensions\n const detailRows = [\n resolvedResolutionOutcome != null && { label: 'Resolution Outcome', value: resolvedResolutionOutcome },\n resolvedCustomerIntent != null && { label: 'Customer Intent', value: resolvedCustomerIntent },\n ...(moreDetails || []),\n ].filter(Boolean);\n\n // Close \"More Details\" dropdown on outside click\n useEffect(() => {\n if (!expanded) return;\n\n const handleOutsideClick = (event) => {\n if (moreDetailsRef.current && !moreDetailsRef.current.contains(event.target)) {\n setExpanded(false);\n }\n };\n\n document.addEventListener('mousedown', handleOutsideClick);\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n }, [expanded]);\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 style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n padding: '8px 8px 12px 8px',\n fontFamily: 'var(--font-sans)',\n borderBottom: 'none',\n minHeight: 33,\n }}\n >\n <button\n onClick={() => {\n setExpanded((p) => !p);\n if (onMoreDetails && !expanded) onMoreDetails();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 'normal',\n fontFamily: 'var(--font-sans)',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n <span>More Details</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 </button>\n\n {canShowEditButton && (\n <button\n onClick={onEditInteraction || (() => {})}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '5px 12px',\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 12,\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 'normal',\n fontFamily: 'var(--font-sans)',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <Pencil size={15} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, lineHeight: 'normal' }}>Edit</span>\n </button>\n )}\n </div>\n );\n\n return (\n <div\n ref={moreDetailsRef}\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: 'center',\n gap: 24,\n alignSelf: 'stretch',\n flexWrap: 'nowrap',\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 */}\n <div\n style={{\n display: 'flex',\n gap: 24,\n }}\n >\n {/* Frame 8: Expected Outcome — flex: 1, equal width */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'flex-start', 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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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: 'flex-start',\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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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: 'flex-start',\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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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, useRef } 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\n// Compass score scale: 0.5 to 5.0 (supports 0.5 increments)\n// Visual scale is always 5 segments, where each segment represents 1 point.\nconst GaugeMeter = ({ score = 4, minScore = 0, maxScore = 5 }) => {\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; // always render 5 visual steps\n const numericScore = Number(score);\n const clampedScore = Number.isFinite(numericScore)\n ? Math.min(Math.max(numericScore, minScore), maxScore)\n : minScore;\n const filledUnits = maxScore > minScore\n ? ((clampedScore - minScore) / (maxScore - minScore)) * totalSeg\n : 0;\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 segmentFill = Math.max(0, Math.min(1, filledUnits - i));\n const pathD = strokeArc(fromA, toA);\n return (\n <g key={i}>\n {/* Base track segment */}\n <path\n d={pathD}\n stroke={COLORS.track}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n />\n {/* Filled overlay can be full or half (or any partial) */}\n {segmentFill > 0 && (\n <path\n d={pathD}\n stroke={COLORS.strong}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n pathLength={1}\n strokeDasharray={`${segmentFill} 1`}\n />\n )}\n </g>\n );\n })}\n </svg>\n );\n};\n\nconst ScoreBar = ({ value = 0, maxValue = 5 }) => {\n const numericValue = Number(value);\n const clampedValue = Number.isFinite(numericValue)\n ? Math.min(Math.max(numericValue, 0), maxValue)\n : 0;\n\n return (\n <div style={{ display: 'flex', gap: 2 }}>\n {Array.from({ length: maxValue }, (_, i) => {\n const segmentFill = Math.max(0, Math.min(1, clampedValue - i));\n return (\n <div\n key={i}\n style={{\n width: 22,\n height: 6,\n borderRadius: 1,\n background: COLORS.track,\n overflow: 'hidden',\n }}\n >\n {segmentFill > 0 && (\n <div\n style={{\n width: `${segmentFill * 100}%`,\n height: '100%',\n background: COLORS.strong,\n }}\n />\n )}\n </div>\n );\n })}\n </div>\n );\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 const ref = useRef(null);\n const [pos, setPos] = useState({ top: 0, left: 0 });\n\n const handleEnter = () => {\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n setPos({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n }\n setShow(true);\n };\n\n return (\n <div\n ref={ref}\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n transform: 'translate(-50%, -100%)',\n display: 'flex',\n width: 'max-content',\n maxWidth: 300,\n padding: 10,\n alignItems: 'center',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 9999,\n pointerEvents: 'none',\n }}>\n <span style={{\n color: '#FFF',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: '140%',\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: 'flex-start',\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 = 4,\n minScore = 0,\n maxScore = 5,\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 numericScore = Number(score);\n const clampedScore = Number.isFinite(numericScore)\n ? Math.min(Math.max(numericScore, minScore), maxScore)\n : minScore;\n const displayScore = clampedScore.toFixed(1);\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 Interaction Quality\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} minScore={minScore} 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 > minScore ? (clampedScore - minScore) / (maxScore - minScore) : 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 {displayScore}\n </div>\n <div style={{\n fontSize: 15,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n textAlign: 'center',\n marginTop: 8,\n }}>\n Compass 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: 'flex-start',\n justifyContent: 'center',\n flex: 1,\n }}>\n {/* Overall Score title */}\n <div style={{\n fontSize: 15,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n Interaction Quality Index\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 MessagesSquare,\n Ellipsis,\n CircleCheck,\n Check,\n CornerDownRight,\n Info,\n X,\n} from \"lucide-react\";\n\n/* ─── helpers ─── */\n\nconst roleColorMap = (role) => {\n if (!role) return null;\n const normalized = String(role).trim().toLowerCase();\n const roleTokens = normalized.split(/[^a-z]+/).filter(Boolean);\n if (roleTokens.includes(\"supervisor\")) return \"var(--rail-compliance, #C98A5A)\";\n if (\n roleTokens.includes(\"admin\") ||\n roleTokens.includes(\"administrator\") ||\n roleTokens.includes(\"superadmin\")\n ) {\n return \"var(--rail-discovery, #5E88B0)\";\n }\n if (roleTokens.includes(\"agent\")) return \"var(--rail-outcome, #6B7C93)\";\n return null;\n};\n\nconst extractRoleValue = (user) => {\n if (!user) return null;\n const directRole =\n user.role ??\n user.userRole ??\n user.user_role ??\n user.author_role ??\n user.roleName ??\n user.role_name ??\n user.userType ??\n user.user_type ??\n user.type;\n\n if (typeof directRole === \"string\") return directRole;\n if (Array.isArray(directRole)) return directRole.join(\" \");\n if (directRole && typeof directRole === \"object\") {\n return directRole.name || directRole.value || directRole.label || null;\n }\n\n const nestedRole =\n user.user?.role ??\n user.user?.userRole ??\n user.user?.user_role ??\n user.profile?.role ??\n user.profile?.userRole ??\n user.profile?.user_role;\n\n if (typeof nestedRole === \"string\") return nestedRole;\n if (Array.isArray(nestedRole)) return nestedRole.join(\" \");\n if (nestedRole && typeof nestedRole === \"object\") {\n return nestedRole.name || nestedRole.value || nestedRole.label || null;\n }\n\n return null;\n};\n\n/** Role-mapped color first so stale `color` from auth/session does not override role (matches thread intent). */\nconst resolveCurrentUserAvatarColor = (user) => {\n if (!user) return \"#6B7C93\";\n const role = extractRoleValue(user);\n return roleColorMap(role) || user.color || \"#6B7C93\";\n};\n\nconst getInitials = (name) =>\n (name || \"\")\n .split(\" \")\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase() || \"U\";\n\nconst isWithinEditWindow = (value) => {\n if (!value) return true; // optimistic/new comments are editable\n if (value === \"Just now\") return true;\n if (/^\\d{4}-\\d{2}-\\d{2}T/.test(value)) {\n try {\n const utcValue = /Z$|[+-]\\d{2}:\\d{2}$/.test(value) ? value : value + \"Z\";\n const d = new Date(utcValue);\n if (Number.isNaN(d.getTime())) return false;\n return (Date.now() - d.getTime()) < 15 * 60 * 1000;\n } catch { return false; }\n }\n // Parse relative timestamps like \"5 min\", \"1 h\", \"2 days\"\n const minMatch = value.match(/^(\\d+)\\s*min/);\n if (minMatch) return parseInt(minMatch[1], 10) < 15;\n // Anything in hours or days is beyond 15 min\n if (/\\d+\\s*h/.test(value) || /\\d+\\s*day/.test(value)) return false;\n return true;\n};\n\nconst formatTimestamp = (value) => {\n if (!value) return \"\";\n if (!/^\\d{4}-\\d{2}-\\d{2}T/.test(value)) return value;\n try {\n // Append Z if missing so timestamp is parsed as UTC\n const utcValue = /Z$|[+-]\\d{2}:\\d{2}$/.test(value) ? value : value + \"Z\";\n const d = new Date(utcValue);\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 const diffDays = Math.floor(diffHr / 24);\n if (diffDays === 1) return \"1 day\";\n return `${diffDays} days`;\n } catch {\n return value;\n }\n};\n\n/* ─── Avatar (36 × 36) ─── */\nconst Avatar = ({ name, initials, color, avatar, size = 36 }) => {\n if (avatar) {\n return (\n <img\n src={avatar}\n alt={name}\n style={{\n width: size,\n height: size,\n borderRadius: \"50%\",\n objectFit: \"cover\",\n flexShrink: 0,\n }}\n />\n );\n }\n return (\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/* ============================================\n COMMENT ROW — Figma node 593-1135 (top-level)\n display: flex\n width: 552px\n align-items: flex-start\n gap: 16px\n\n Reply row — Figma node 593-2042\n display: flex\n padding-left: 48px\n align-items: flex-start\n gap: 16px\n ============================================ */\nconst CommentBubble = ({\n comment,\n isReply = false,\n isConsecutive = false,\n onReply,\n onSendReply,\n onEdit,\n onDelete,\n onMenuClick,\n showReply = true,\n}) => {\n const [hovered, setHovered] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const [replyOpen, setReplyOpen] = useState(false);\n const [replyValue, setReplyValue] = useState(\"\");\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(\"\");\n const [confirmDelete, setConfirmDelete] = useState(false);\n const menuRef = useRef(null);\n const replyRef = useRef(null);\n const editRef = useRef(null);\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 avatarImg = author.avatar || comment.avatar;\n const rawTimestamp = comment.timestamp || comment.created_at;\n const timestamp = formatTimestamp(rawTimestamp);\n const canEdit = isWithinEditWindow(rawTimestamp);\n const isEdited = Boolean(comment.isEdited || comment.is_edited || comment.edited);\n\n const paragraphs = Array.isArray(comment.content)\n ? comment.content\n : [comment.content || comment.text || \"\"];\n\n // Close menu on outside click\n React.useEffect(() => {\n if (!menuOpen) return;\n const handler = (e) => {\n if (menuRef.current && !menuRef.current.contains(e.target)) setMenuOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [menuOpen]);\n\n // Auto-resize reply textarea\n React.useEffect(() => {\n const ta = replyRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [replyValue, replyOpen]);\n\n // Auto-resize edit textarea\n React.useEffect(() => {\n const ta = editRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [editValue, editOpen]);\n\n return (\n <div\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n paddingLeft: isReply ? 48 : 0,\n alignItems: \"flex-start\",\n gap: 16,\n paddingTop: isConsecutive ? 0 : 8,\n paddingBottom: 8,\n }}\n >\n {/* Avatar — 36 × 36 (hidden for consecutive messages, keep space) */}\n {isConsecutive ? (\n <div style={{ width: 36, flexShrink: 0 }} />\n ) : (\n <Avatar\n name={authorName}\n initials={initials}\n color={avatarColor}\n avatar={avatarImg}\n />\n )}\n\n {/* Content column */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row — always shows menu, name/time hidden for consecutive */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: isConsecutive ? \"flex-end\" : \"space-between\",\n marginBottom: isConsecutive ? 0 : 6,\n }}\n >\n {!isConsecutive && (\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n {/* Name — 13px / 650 / #1E2125 */}\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 / #808183 */}\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 {isEdited && (\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 (Edited)\n </span>\n )}\n </div>\n )}\n\n {/* Three-dot menu — Ellipsis 24×24, hover only + dropdown */}\n <div style={{ position: \"relative\" }} ref={menuRef}>\n <button\n type=\"button\"\n onClick={() => setMenuOpen((p) => !p)}\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 || menuOpen ? 1 : 0,\n transition: \"opacity 0.15s\",\n flexShrink: 0,\n }}\n >\n <Ellipsis size={24} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n\n {/* Dropdown — Figma node 486-4493 */}\n {menuOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n marginTop: 4,\n display: \"flex\",\n width: 99,\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 zIndex: 50,\n overflow: \"hidden\",\n }}\n >\n {onReply && (\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); setEditOpen(false); setReplyOpen(true); }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Reply\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n disabled={!canEdit}\n onClick={() => {\n if (!canEdit) return;\n setMenuOpen(false);\n const text = Array.isArray(comment.content)\n ? comment.content.join(\"\\n\")\n : (comment.content || comment.text || \"\");\n setEditValue(text);\n setEditOpen(true);\n setReplyOpen(false);\n }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: canEdit ? \"pointer\" : \"not-allowed\",\n fontSize: 13,\n fontWeight: 400,\n color: canEdit ? \"var(--Grey-Strong, #2E3236)\" : \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n opacity: canEdit ? 1 : 0.5,\n }}\n onMouseEnter={(e) => { if (canEdit) e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); setConfirmDelete(true); }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Edit mode — card with editable input */}\n {editOpen ? (\n <div\n style={{\n display: \"flex\",\n width: 662,\n maxWidth: \"100%\",\n padding: \"8px 12px 12px 12px\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n boxSizing: \"border-box\",\n marginTop: 4,\n }}\n >\n {/* Header with author name + close */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n }}\n >\n {\"\\u201C\"} {comment.author?.name || \"Unknown\"}\n </span>\n <button\n type=\"button\"\n onClick={() => setEditOpen(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n <X size={20} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n </div>\n {/* Editable input + Save */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\n }}\n >\n <textarea\n ref={editRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n if (editValue.trim()) {\n onEdit?.({ ...comment, content: editValue.trim(), isEdited: true });\n setEditOpen(false);\n }\n }\n if (e.key === \"Escape\") { setEditOpen(false); }\n }}\n autoFocus\n rows={1}\n style={{\n flex: 1,\n padding: \"10px 12px\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"160%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n boxSizing: \"border-box\",\n resize: \"none\",\n minHeight: 24,\n maxHeight: 140,\n overflowY: \"hidden\",\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (editValue.trim()) {\n onEdit?.({ ...comment, content: editValue.trim(), isEdited: true });\n setEditOpen(false);\n }\n }}\n disabled={!editValue.trim()}\n style={{\n display: \"flex\",\n padding: \"6px 16px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: 13,\n fontWeight: 600,\n color: editValue.trim()\n ? \"var(--Grey-White, #FFF)\"\n : \"var(--Grey-Muted, #808183)\",\n background: editValue.trim()\n ? \"var(--Grey-Strong, #2E3236)\"\n : \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n borderRadius: 6,\n cursor: editValue.trim() ? \"pointer\" : \"not-allowed\",\n fontFamily: \"var(--default-font-family)\",\n flexShrink: 0,\n transition: \"all 0.15s\",\n lineHeight: \"150%\",\n }}\n >\n Save\n </button>\n </div>\n </div>\n ) : (\n /* Message bubbles — stacked, gap: 4px, fit content */\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4, alignItems: \"flex-start\" }}>\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\n {/* Inline delete confirmation */}\n {confirmDelete && (\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n marginTop: 8,\n fontSize: 13,\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n <span style={{ color: \"var(--Grey-Muted, #808183)\", fontWeight: 400 }}>\n Confirm: delete this comment?\n </span>\n <button\n type=\"button\"\n onClick={() => { setConfirmDelete(false); onDelete?.(comment); }}\n style={{\n background: \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n padding: \"4px 10px\",\n borderRadius: 6,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--Grey-absent, #D9D9D9)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"var(--grey-light, #e9e8e8a1)\"; }}\n >\n Delete\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmDelete(false)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n padding: \"4px 10px\",\n borderRadius: 6,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--grey-light, #e9e8e8a1)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"none\"; }}\n >\n Cancel\n </button>\n </div>\n )}\n\n {/* Reply action — CornerDownRight 20×20 + \"Reply\" */}\n {showReply && onReply && !replyOpen && !confirmDelete && (\n <button\n type=\"button\"\n onClick={() => { setEditOpen(false); setReplyOpen(true); }}\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\n {/* Inline reply input */}\n {replyOpen && (\n <div\n style={{\n display: \"flex\",\n width: 662,\n maxWidth: \"100%\",\n padding: \"8px 12px 12px 12px\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n boxSizing: \"border-box\",\n marginTop: 12,\n }}\n >\n {/* Tagged comment quote */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, width: \"100%\" }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n }}\n >\n {\"\\u201C\"} {comment.author?.name || \"Unknown\"}\n </span>\n <button\n type=\"button\"\n onClick={() => { setReplyValue(\"\"); setReplyOpen(false); }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n <X size={20} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n </div>\n <div\n style={{\n display: \"flex\",\n height: 36,\n padding: 16,\n alignItems: \"center\",\n gap: 5,\n borderRadius: \"0 8px 8px 8px\",\n background: \"var(--Grey-Strong, #2E3236)\",\n boxSizing: \"border-box\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n color: \"var(--Grey-White, #FFF)\",\n fontSize: 13,\n fontWeight: 400,\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {Array.isArray(comment.content) ? comment.content[0] : comment.content}\n </span>\n </div>\n </div>\n {/* Reply input + Post button */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\n }}\n >\n <textarea\n ref={replyRef}\n value={replyValue}\n onChange={(e) => setReplyValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n if (replyValue.trim()) {\n onSendReply?.({ content: replyValue.trim(), parentId: comment.id });\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }\n if (e.key === \"Escape\") {\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }}\n autoFocus\n placeholder=\"Add a reply\"\n rows={1}\n style={{\n flex: 1,\n padding: \"10px 12px\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"160%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n boxSizing: \"border-box\",\n resize: \"none\",\n minHeight: 24,\n maxHeight: 140,\n overflowY: \"hidden\",\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (replyValue.trim()) {\n onSendReply?.({ content: replyValue.trim(), parentId: comment.id });\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }}\n disabled={!replyValue.trim()}\n style={{\n display: \"flex\",\n height: 28,\n padding: \"8px 12px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 8,\n fontSize: 13,\n fontWeight: 600,\n color: replyValue.trim()\n ? \"var(--Grey-White, #FFF)\"\n : \"var(--Grey-Muted, #808183)\",\n background: replyValue.trim()\n ? \"var(--Neutral-850, #272727)\"\n : \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n borderRadius: 10,\n cursor: replyValue.trim() ? \"pointer\" : \"not-allowed\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n }}\n >\n Post\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ============================================\n COMMENT INPUT — Figma node 237-5570\n display: flex\n width: 552px\n padding: 12px\n flex-direction: column\n justify-content: center\n align-items: flex-start\n gap: 24px\n\n border-radius: 8px\n border: 1px solid var(--Grey-absent, #D9D9D9)\n background: var(--Grey-White, #FFF)\n ============================================ */\nconst CommentInput = ({ currentUser, onSubmit }) => {\n const [value, setValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef(null);\n\n useEffect(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [value]);\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\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const initials = currentUser?.initials || getInitials(currentUser?.name);\n const color = resolveCurrentUserAvatarColor(currentUser);\n const avatarImg = currentUser?.avatar;\n\n return (\n <div style={{ display: \"flex\", gap: 16, alignItems: \"flex-start\" }}>\n {/* Current user avatar */}\n <Avatar\n name={currentUser?.name}\n initials={initials}\n color={color}\n avatar={avatarImg}\n />\n\n {/* Input container — Figma: 552px, padding 12, border-radius 8 */}\n <div\n style={{\n flex: 1,\n padding: 12,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: isFocused\n ? \"1px solid var(--Grey-Strong, #2E3236)\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n transition: \"border-color 0.15s\",\n }}\n >\n {/* Textarea + Post row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\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 feedback\"\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 maxHeight: 140,\n overflowY: \"hidden\",\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/* ============================================\n MAIN COMPONENT: UpdatedThreads\n\n Outer container — full width\n Header (237-5556):\n display: flex\n height: 40px\n padding-bottom: 8px\n align-items: center\n gap: 16px\n align-self: stretch\n border-bottom: 1px solid var(--Grey-absent, #D9D9D9)\n\n Comments + Input wrapper (596-2060):\n display: flex\n padding-top: 24px\n flex-direction: column\n align-items: flex-start\n gap: 10px\n align-self: stretch\n border-top: 1px solid var(--Grey-absent, #D9D9D9)\n width: 552px (content area)\n ============================================ */\n\nconst CommentThread = ({ comment, depth = 0, isConsecutive = false, onReply, onSendReply, onEdit, onDelete, onMenuClick }) => {\n const hasReplies = comment.replies && comment.replies.length > 0;\n const isLastAtDepth = !hasReplies;\n return (\n <React.Fragment>\n <div style={{ paddingLeft: depth > 0 ? Math.min(depth * 32, 128) : 0 }}>\n <CommentBubble\n comment={comment}\n isReply={depth > 0}\n isConsecutive={isConsecutive}\n onReply={onReply}\n onSendReply={onSendReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onMenuClick={onMenuClick}\n showReply={isLastAtDepth}\n />\n </div>\n {hasReplies && comment.replies.map((reply) => (\n <CommentThread\n key={reply.id}\n comment={reply}\n depth={depth + 1}\n onReply={onReply}\n onSendReply={onSendReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onMenuClick={onMenuClick}\n />\n ))}\n </React.Fragment>\n );\n};\n\nconst UpdatedThreads = ({\n comments: externalComments = [],\n totalComments,\n children,\n onSendComment,\n onReply,\n onSendReply,\n onEdit,\n onDelete,\n onMenuClick,\n onMarkResolved,\n currentUser,\n isResolved = false,\n}) => {\n // Local state for optimistic updates (replies, new comments, edits, deletes)\n const [localComments, setLocalComments] = useState([]);\n const [isSending, setIsSending] = useState(false);\n\n // Merge external + local comments\n const allComments = useMemo(() => {\n const externalIds = new Set(externalComments.map((c) => c.id));\n // Filter out local comments that now exist in external (API caught up)\n const newLocal = localComments.filter((c) => !externalIds.has(c.id));\n return [...externalComments, ...newLocal];\n }, [externalComments, localComments]);\n\n // Sync: remove local comments when external updates\n React.useEffect(() => {\n const externalIds = new Set(externalComments.map((c) => c.id));\n setLocalComments((prev) => prev.filter((c) => !externalIds.has(c.id)));\n }, [externalComments]);\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 color = resolveCurrentUserAvatarColor(currentUser);\n return { ...currentUser, name, initials, color };\n }, [currentUser]);\n\n const handleSendReply = async ({ content, parentId }) => {\n if (onSendReply) {\n // Host app mode — let API handle it, show loading\n setIsSending(true);\n try {\n await onSendReply({ content, parentId });\n } finally {\n setIsSending(false);\n }\n } else {\n // Library demo mode — optimistic local comment\n const optimisticReply = {\n id: `temp-${Date.now()}`,\n author: displayCurrentUser,\n content,\n timestamp: \"Just now\",\n parentId,\n isOptimistic: true,\n };\n setLocalComments((prev) => [...prev, optimisticReply]);\n }\n };\n\n const handleSendComment = async (text) => {\n if (onSendComment) {\n // Host app mode — let API handle it, show loading\n setIsSending(true);\n try {\n await onSendComment(text);\n } finally {\n setIsSending(false);\n }\n } else {\n // Library demo mode — optimistic local comment\n const optimisticComment = {\n id: `temp-${Date.now()}`,\n author: displayCurrentUser,\n content: text,\n timestamp: \"Just now\",\n isOptimistic: true,\n };\n setLocalComments((prev) => [...prev, optimisticComment]);\n }\n };\n\n const handleEdit = (comment) => {\n // If it's a local optimistic comment, update locally\n setLocalComments((prev) =>\n prev.map((c) => (c.id === comment.id ? { ...c, content: comment.content, isEdited: true } : c))\n );\n onEdit?.(comment);\n };\n\n const handleDelete = (comment) => {\n // Remove from local state immediately\n setLocalComments((prev) => prev.filter((c) => c.id !== comment.id));\n onDelete?.(comment);\n };\n\n const groupedComments = useMemo(() => {\n const repliesByParent = {};\n allComments.forEach((c) => {\n if (c.parentId) {\n if (!repliesByParent[c.parentId]) repliesByParent[c.parentId] = [];\n repliesByParent[c.parentId].push(c);\n }\n });\n const buildTree = (comment) => ({\n ...comment,\n replies: (repliesByParent[comment.id] || []).map(buildTree),\n });\n return allComments.filter((c) => !c.parentId).map(buildTree);\n }, [allComments]);\n\n const commentCount = totalComments ?? allComments.length;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n background: \"var(--Grey-White, #FFF)\",\n width: \"100%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {/* ═══════════════════════════════════════════\n HEADER — FEEDBACK & GUIDANCE\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n height: 40,\n paddingBottom: 8,\n alignItems: \"center\",\n gap: 8,\n alignSelf: \"stretch\",\n }}\n >\n <MessagesSquare size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={1.5} />\n <span\n style={{\n fontSize: 16,\n fontWeight: 600,\n color: \"var(--Grey-Strong, #2E3236)\",\n textTransform: \"uppercase\",\n lineHeight: 1.2,\n }}\n >\n Feedback & Guidance\n </span>\n </div>\n\n {/* Divider */}\n <div style={{ width: \"100%\", height: 1, background: \"var(--Grey-absent, #D9D9D9)\" }} />\n\n {/* ═══════════════════════════════════════════\n CONTENT AREA — Two equal columns\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n gap: 24,\n alignSelf: \"stretch\",\n }}\n >\n {/* Left column — Feedback / Comments */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Feedback sub-header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 16,\n paddingBottom: 8,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"var(--surface-hover, #F3F7F7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <MessagesSquare style={{ width: 20, height: 20, flexShrink: 0 }} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n }}\n >\n Feedback\n </span>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n marginLeft: \"auto\",\n }}\n >\n {commentCount} Comment{commentCount !== 1 ? \"s\" : \"\"}\n </span>\n {isResolved ? (\n <div\n style={{\n display: \"inline-flex\",\n height: 32,\n padding: \"12px 16px 12px 12px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 8,\n borderRadius: 10,\n background: \"var(--Rail-Surface-2, #E3E1D7)\",\n flexShrink: 0,\n }}\n >\n <Check size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={2} />\n <span\n style={{\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n }}\n >\n Resolved\n </span>\n </div>\n ) : onMarkResolved ? (\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 flexShrink: 0,\n }}\n >\n <CircleCheck size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n Mark as Resolved\n </button>\n ) : null}\n </div>\n {/* Comments list */}\n {allComments.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0,\n marginBottom: 24,\n maxHeight: 600,\n overflowY: allComments.length > 6 ? \"auto\" : \"visible\",\n }}\n >\n {groupedComments.map((comment, idx) => {\n const prev = idx > 0 ? groupedComments[idx - 1] : null;\n const prevAuthor = prev?.author?.name || prev?.author_name;\n const currAuthor = comment.author?.name || comment.author_name;\n const isConsecutive = prev && prevAuthor === currAuthor && (!prev.replies || prev.replies.length === 0);\n return (\n <CommentThread\n key={comment.id}\n comment={comment}\n depth={0}\n isConsecutive={!!isConsecutive}\n onReply={onReply}\n onSendReply={handleSendReply}\n onEdit={handleEdit}\n onDelete={handleDelete}\n onMenuClick={onMenuClick}\n />\n );\n })}\n </div>\n )}\n\n {/* Edit info hint */}\n {allComments.length > 0 && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n marginBottom: 16,\n marginLeft: 48,\n }}\n >\n <Info size={16} color=\"var(--Grey-Muted, #808183)\" />\n <span\n style={{\n color: \"var(--Grey-Muted, #808183)\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: 400,\n lineHeight: \"normal\",\n }}\n >\n Comments can be edited within 15 minutes.\n </span>\n </div>\n )}\n\n {/* Loading indicator */}\n {isSending && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"8px 0\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n border: \"2px solid var(--Grey-absent, #D9D9D9)\",\n borderTopColor: \"var(--Grey-Strong, #2E3236)\",\n borderRadius: \"50%\",\n animation: \"spin 0.8s linear infinite\",\n }}\n />\n <span\n style={{\n fontSize: 13,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n Sending...\n </span>\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n )}\n\n {/* Comment input */}\n <CommentInput currentUser={displayCurrentUser} onSubmit={handleSendComment} />\n </div>\n\n {/* Right column — Guidance (rendered via children) */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UpdatedThreads;\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Lightbulb, PlayCircle, PauseCircle, ScrollText } from \"lucide-react\";\n\n/**\n * UpdatedGuidance — Guidance list for interaction details.\n *\n * Figma node: 822-15273\n *\n * Props:\n * - items Array Guidance items\n * - loading boolean Show loading state\n * - onPlayEvidence fn Called with { start_ms, end_ms } to play audio segment\n * - onShowInTranscript fn Called with start_ms to scroll transcript\n *\n * Item shape:\n * - title string Guidance text\n * - signal_refs Array<{ display_name, confidence }>\n * - start_ms number Evidence start time in ms\n * - end_ms number Evidence end time in ms\n */\n\n/* ── Hover icon wrapper (same as UpdatedInteractionSignals) ── */\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\nconst 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/* ── Single guidance item ── */\nconst GuidanceItem = ({ item, isLast, onPlayEvidence, onShowInTranscript, timelinePlaying, currentTimeSeconds }) => {\n const signalText = item.signal_refs\n ?.map((sr) => {\n const name = sr.display_name || sr.signal_key || \"\";\n const pct =\n sr.confidence != null ? ` (${Math.round(sr.confidence * 100)}%)` : \"\";\n return name + pct;\n })\n .join(\", \");\n\n const startMs = item.start_ms ?? item.startMs;\n const endMs = item.end_ms ?? item.endMs;\n const hasTimestamp = startMs != null;\n\n // Check if audio is currently playing within this item's time range\n const currentMs = (currentTimeSeconds ?? 0) * 1000;\n const isPlayingThisItem =\n timelinePlaying &&\n hasTimestamp &&\n currentMs >= startMs &&\n currentMs <= (endMs ?? startMs + 5000);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"12px 0\",\n borderBottom: isLast\n ? \"none\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n }}\n >\n {/* Guidance title */}\n <span\n style={{\n alignSelf: \"stretch\",\n fontSize: 14,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n lineHeight: \"150%\",\n }}\n >\n {item.title || item.detail || \"\"}\n </span>\n\n {/* Signal ref + action icons row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n {signalText && (\n <span\n style={{\n fontSize: 14,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {signalText}\n </span>\n )}\n {hasTimestamp && (\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={isPlayingThisItem ? \"Pause\" : \"Play evidence\"}\n onClick={() =>\n onPlayEvidence?.({\n start_ms: startMs,\n end_ms: endMs,\n })\n }\n >\n {isPlayingThisItem ? (\n <PauseCircle\n size={17}\n color=\"var(--Grey-Strong, #2E3236)\"\n strokeWidth={1}\n />\n ) : (\n <PlayCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1}\n />\n )}\n </HoverIcon>\n <HoverIcon\n size={28}\n title=\"Show in transcript\"\n onClick={() => onShowInTranscript?.(startMs)}\n >\n <ScrollText size={16} color=\"#808183\" strokeWidth={1.5} />\n </HoverIcon>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n lineHeight: 1.2,\n whiteSpace: \"nowrap\",\n }}\n >\n {fmtMs(startMs)}\n </span>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ── Main Component ── */\nconst UpdatedGuidance = ({\n items = [],\n guidanceCount,\n loading = false,\n onPlayEvidence,\n onShowInTranscript,\n timelinePlaying = false,\n currentTimeSeconds = 0,\n}) => {\n const count = guidanceCount ?? items.length;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n width: \"100%\",\n }}\n >\n {/* Sub-header — icon + Guidance + count */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 16,\n paddingBottom: 8,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"var(--surface-hover, #F3F7F7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Lightbulb\n style={{ width: 20, height: 20, flexShrink: 0 }}\n color=\"var(--Grey-Strong, #2E3236)\"\n strokeWidth={1.5}\n />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n }}\n >\n Guidance\n </span>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n marginLeft: \"auto\",\n }}\n >\n {count} Item{count !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n\n {items.map((item, i) => (\n <GuidanceItem\n key={i}\n item={item}\n isLast={i === items.length - 1}\n onPlayEvidence={onPlayEvidence}\n onShowInTranscript={onShowInTranscript}\n timelinePlaying={timelinePlaying}\n currentTimeSeconds={currentTimeSeconds}\n />\n ))}\n </div>\n );\n};\n\nexport default UpdatedGuidance;\n","import { useState, useRef, useEffect } from 'react';\nimport { ArrowLeft, ArrowRight, CalendarDays, PhoneIncoming, ClipboardList, FileSignal, Repeat, ChevronDown, ChevronRight, Headset, CircleUser, History, ExternalLink, Mail } 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';\nimport UpdatedGuidance from './UpdatedGuidance';\nimport SideDrawer from '../common/SideDrawer';\n\n/* Hover tooltip — fixed position to escape overflow containers.\n Anchored below the trigger. */\nconst NameTooltip = ({ text, children }) => {\n const [show, setShow] = useState(false);\n const triggerRef = useRef(null);\n const [pos, setPos] = useState({ top: 0, left: 0 });\n\n if (!text) return children;\n\n const handleEnter = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setPos({\n top: rect.bottom + 6,\n left: rect.left + rect.width / 2,\n });\n }\n setShow(true);\n };\n\n return (\n <div\n ref={triggerRef}\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n transform: 'translate(-50%, 0)',\n display: 'flex',\n padding: 10,\n alignItems: 'center',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 9999,\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n }}>\n <span style={{\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 TABS = [\n { key: 'overview', label: 'Overview' },\n { key: 'coaching', label: 'Coaching Summary' },\n { key: 'signals', label: 'Signals & Recording' },\n { key: 'comments', label: 'Feedback' },\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 agentFullName: externalAgentFullName,\n customerName: externalCustomerName,\n customerFullName: externalCustomerFullName,\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 0.5-5\n compassMaxScore = 5,\n predictedCsat, // predicted objective number (e.g. compass_score) — shown as \"03\" top-right\n predictedLabel = 'Predicted Objective',\n compassLegends,\n // Customer session history drawer\n customerSessions: customerSessionsList,\n customerSessionCount,\n onSessionClick,\n onViewAllSessions,\n // Footer navigation\n prevSessionDesc,\n prevSessionDisabled = false,\n nextSessionDesc,\n nextSessionDisabled = false,\n onPreviousSession,\n onNextSession,\n // Comments\n comments = [],\n guidance = [],\n currentUser,\n onSendComment,\n onSendReply,\n onReply,\n onEdit,\n onEditInteraction,\n onDelete,\n onMenuClick,\n onMarkResolved,\n commentsResolved,\n}) => {\n const [activeTab, setActiveTab] = useState('overview');\n const [expandedSignals, setExpandedSignals] = useState(new Set());\n const [showSessionDrawer, setShowSessionDrawer] = useState(false);\n const [hoveredSessionIdx, setHoveredSessionIdx] = useState(null);\n const [internalPlaying, setInternalPlaying] = useState(false);\n const [internalCurrentTime, setInternalCurrentTime] = useState(0);\n const [isScrolledPastHeader, setIsScrolledPastHeader] = useState(false);\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's top is nearest the viewport\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 // Find the closest scrollable ancestor (the element that actually scrolls)\n const getScrollParent = (el) => {\n let node = el.parentElement;\n while (node) {\n const { overflow, overflowY } = window.getComputedStyle(node);\n if (/(auto|scroll)/.test(overflow + overflowY)) return node;\n node = node.parentElement;\n }\n return null;\n };\n\n const scrollParent = getScrollParent(container);\n\n const handleScroll = () => {\n if (isClickScrolling.current) return;\n\n let activeKey = tabKeys[0];\n\n // Use viewport-relative positions — works regardless of which element scrolls\n for (let i = refs.length - 1; i >= 0; i--) {\n const el = refs[i].current;\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n // Section is \"active\" when its top has scrolled above 150px from viewport top\n if (rect.top <= 150) {\n activeKey = tabKeys[i];\n break;\n }\n }\n\n setActiveTab(activeKey);\n\n // Move session nav from title row to sticky tabs once content starts scrolling.\n const overviewTop = overviewRef.current?.getBoundingClientRect().top ?? Number.POSITIVE_INFINITY;\n setIsScrolledPastHeader(overviewTop <= 150);\n };\n\n // Attach to all possible scroll targets\n container.addEventListener('scroll', handleScroll, { passive: true });\n if (scrollParent && scrollParent !== container) {\n scrollParent.addEventListener('scroll', handleScroll, { passive: true });\n }\n window.addEventListener('scroll', handleScroll, { passive: true, capture: true });\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n if (scrollParent && scrollParent !== container) {\n scrollParent.removeEventListener('scroll', handleScroll);\n }\n window.removeEventListener('scroll', handleScroll, { capture: true });\n };\n }, []);\n\n const clickedTabRef = useRef(null);\n\n const handleTabClick = (key) => {\n setActiveTab(key);\n isClickScrolling.current = true;\n clickedTabRef.current = key;\n const el = sectionRefs[key]?.current;\n if (el) {\n // Offset scroll to account for the sticky header + tabs (~120px)\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n // Container itself scrolls\n const containerTop = container.getBoundingClientRect().top;\n const elTop = el.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n // Page/parent scrolls — use window with offset\n const elTop = el.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n setTimeout(() => {\n isClickScrolling.current = false;\n clickedTabRef.current = null;\n }, 1200);\n };\n\n const sessionHistory = customerSessionsList || [];\n const hasPastSessions = sessionHistory.length > 1;\n\n /* Called from Signals/Guidance \"Show in transcript\" icon —\n switches to Signals section, then scrolls/highlights transcript card without playing audio. */\n const handleShowInTranscript = (startMs) => {\n setActiveTab('signals');\n const signalsEl = signalsRef.current;\n if (signalsEl) {\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n const containerTop = container.getBoundingClientRect().top;\n const elTop = signalsEl.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n const elTop = signalsEl.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n\n const timeSec = startMs / 1000;\n // Wait briefly so section scroll starts before transcript container scroll/highlight.\n setTimeout(() => {\n if (recordingRef.current?.scrollToTranscript) {\n recordingRef.current.scrollToTranscript(timeSec);\n }\n }, 220);\n };\n\n /* Called from Signals evidence play button — seeks + plays audio segment */\n const handlePlayEvidence = (ev) => {\n setActiveTab('signals');\n const signalsEl = signalsRef.current;\n if (signalsEl) {\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n const containerTop = container.getBoundingClientRect().top;\n const elTop = signalsEl.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n const elTop = signalsEl.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n\n const startMs = ev?.start_ms ?? ev?.startMs;\n\n // Wait briefly so section scroll starts before playback seek/play begins.\n setTimeout(() => {\n // Keep transcript highlight behavior consistent with \"Show in transcript\".\n if (startMs != null && recordingRef.current?.scrollToTranscript) {\n recordingRef.current.scrollToTranscript(startMs / 1000);\n }\n\n if (onPlayEvidence) {\n onPlayEvidence(ev);\n } else {\n // Default: seek to evidence start time via recording ref\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 }, 220);\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 dimensionsBlock = findBlock('interaction-dimensions');\n const blockDimensions = dimensionsBlock.dimensions || [];\n const callPurpose = ctx.call_purpose || {};\n const classification = ctx.classification || {};\n\n const resolvedMeta = meta || {};\n const resolvedCallPurpose = externalCallPurpose || callPurpose || {};\n const resolvedClassification = externalClassification || classification || {};\n const resolvedOutcomeLift = outcomeLift || {};\n const resolvedDriverLabels = (resolvedOutcomeLift.driver_signal_keys || [])\n .map((k) => k.replace(/^sig\\./, '').replace(/_/g, ' '));\n const resolvedCoaching = coachingData || null;\n const resolvedSignals = signals?.signals?.length\n ? signals\n : { present_count: 0, total_signals_evaluated: 0, signals: [] };\n const guidanceData = guidance || [];\n\n // Resolve names: explicit props → metadata block → context block → fallback\n const agentName = externalAgentName || meta.agent_name || meta.agent || ctx.agent_name || 'Agent';\n const agentFullName = externalAgentFullName || meta.agent_full_name || meta.agent_name || agentName;\n const customerName = externalCustomerName || meta.customer_name || meta.customer || ctx.customer_name || 'Customer';\n const customerFullName = externalCustomerFullName || meta.customer_full_name || meta.customer_name || customerName;\n const resolvedUserRole = String(\n currentUser?.role ??\n currentUser?.userRole ??\n currentUser?.user_role ??\n currentUser?.roleName ??\n currentUser?.role_name ??\n ''\n ).toLowerCase();\n const canEditInteraction = /(admin|superadmin|administrator)/.test(resolvedUserRole);\n const sessionCount = customerSessionCount ?? sessionHistory.length;\n const rawDate = meta.created_dt || data?.created_dt || ctx.created_dt || '';\n const dateStr = rawDate\n ? new Date(/Z$|[+-]\\d{2}:\\d{2}$/.test(rawDate) ? rawDate : rawDate + 'Z').toLocaleString()\n : '';\n const direction = resolvedCallPurpose.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 {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '18px 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 flex: 1,\n }}>\n {title}\n </h1>\n\n {/* Figma node 605-1186: Previous / Next Session — inline in header */}\n {(onPreviousSession || onNextSession) && !isScrolledPastHeader && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {/* Previous Session */}\n <NameTooltip text={prevSessionDesc}>\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n opacity: prevSessionDisabled ? 0.4 : 1,\n }}\n >\n <ArrowLeft size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Previous Session\n </span>\n </button>\n </NameTooltip>\n\n {/* Divider */}\n <div style={{\n width: 1,\n height: 20,\n background: 'var(--Grey-absent, #D9D9D9)',\n flexShrink: 0,\n }} />\n\n {/* Next Session */}\n <NameTooltip text={nextSessionDesc}>\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n opacity: nextSessionDisabled ? 0.4 : 1,\n }}\n >\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Next Session\n </span>\n <ArrowRight size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n </button>\n </NameTooltip>\n </div>\n )}\n </div>\n\n <div style={{ position: 'sticky', top: 68, zIndex: 20, background: 'var(--Grey-White, #FFF)' }}>\n {/* Tabs + sticky session nav at far right */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 16,\n background: 'var(--Grey-White, #FFF)',\n borderBottom: '1px solid var(--Grey-Faint, #ACADAD)',\n padding: '0 24px',\n marginTop: 8,\n }}>\n <div style={{ display: 'flex', alignItems: 'flex-start', minWidth: 0 }}>\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\n {(onPreviousSession || onNextSession) && isScrolledPastHeader && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n <NameTooltip text={prevSessionDesc}>\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n opacity: prevSessionDisabled ? 0.4 : 1,\n }}\n >\n <ArrowLeft size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Previous Session\n </span>\n </button>\n </NameTooltip>\n\n <div style={{\n width: 1,\n height: 20,\n background: 'var(--Grey-absent, #D9D9D9)',\n flexShrink: 0,\n }} />\n\n <NameTooltip text={nextSessionDesc}>\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n opacity: nextSessionDisabled ? 0.4 : 1,\n }}\n >\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Next Session\n </span>\n <ArrowRight size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n </button>\n </NameTooltip>\n </div>\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 + tooltip */}\n <NameTooltip text={agentFullName}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0', cursor: 'pointer' }}>\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 </NameTooltip>\n\n {/* Repeat icon */}\n {/* <Repeat size={16} color=\"var(--color-input-border, #ACACAD)\" strokeWidth={1.5} /> */}\n\n {/* Customer — CircleUser icon + side drawer trigger (only if > 1 session) */}\n {sessionCount > 1 ? (\n <div>\n <NameTooltip text={customerFullName}>\n <button\n onClick={() => setShowSessionDrawer(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '0 16px',\n height: 34,\n borderRadius: 8,\n background: 'var(--Rail-Surface-2, #E3E1D7)',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>\n <CircleUser size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, whiteSpace: 'nowrap' }}>\n <span style={{ fontWeight: 600 }}>{customerName}</span>{' '}\n <span>({sessionCount} Sessions)</span>\n </span>\n </div>\n <ChevronRight size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </button>\n </NameTooltip>\n </div>\n ) : (\n <NameTooltip text={customerFullName}>\n <button\n onClick={() => setShowSessionDrawer(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '0 16px',\n height: 34,\n borderRadius: 8,\n background: 'var(--Rail-Surface-2, #E3E1D7)',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>\n <CircleUser size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 600, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, whiteSpace: 'nowrap' }}>\n {customerName}\n </span>\n </div>\n <ChevronRight size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </button>\n </NameTooltip>\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.5}\n minScore={0}\n maxScore={compassMaxScore}\n predictedScore={predictedCsat ?? 0.5}\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={resolvedMeta}\n callPurpose={resolvedCallPurpose}\n classification={resolvedClassification}\n outcomeQuality={externalOutcomeQuality || 'Neutral'}\n dimensions={blockDimensions}\n resolutionOutcome={resolutionOutcome}\n customerIntent={customerIntent}\n interactionId={interactionId ?? meta.interaction_id}\n moreDetails={moreDetails}\n canShowEditButton={canEditInteraction}\n onEditInteraction={onEditInteraction}\n />\n <UpdatedInteractionScores\n outcomeLift={resolvedOutcomeLift}\n driverLabels={resolvedDriverLabels}\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 : resolvedCoaching} 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={resolvedSignals}\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={resolvedMeta.duration_seconds}\n audioRef={externalAudioRef}\n agentName={agentName}\n customerName={customerName}\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 {/* ═══ FEEDBACK SECTION ═══ */}\n <div ref={commentsRef} style={{ paddingTop: 24 }}>\n <UpdatedThreads\n comments={comments}\n totalComments={comments.length}\n currentUser={currentUser}\n onSendComment={onSendComment || (() => {})}\n onSendReply={onSendReply || (() => {})}\n onReply={onReply || (() => {})}\n onEdit={onEdit || (() => {})}\n onDelete={onDelete || (() => {})}\n onMenuClick={onMenuClick || (() => {})}\n onMarkResolved={onMarkResolved || (() => {})}\n isResolved={commentsResolved}\n >\n <UpdatedGuidance\n items={guidanceData}\n guidanceCount={guidanceData.length}\n onPlayEvidence={handlePlayEvidence}\n onShowInTranscript={handleShowInTranscript}\n timelinePlaying={timelinePlaying || internalPlaying}\n currentTimeSeconds={currentTimeSeconds ?? internalCurrentTime}\n />\n </UpdatedThreads>\n </div>\n </div>\n\n <SideDrawer\n open={showSessionDrawer}\n onClose={() => setShowSessionDrawer(false)}\n title={(\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, minWidth: 0 }}>\n <div style={{\n width: 34,\n height: 34,\n borderRadius: '50%',\n background: 'var(--surface-hover, #F3F7F7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <CircleUser size={20} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </div>\n <div style={{ minWidth: 0 }}>\n <div style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {customerName}\n </div>\n </div>\n </div>\n )}\n subtitle={hasPastSessions ? (\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1.5,\n }}>\n {sessionCount} Sessions in Past\n </span>\n ) : null}\n width={470}\n height=\"100vh\"\n topOffset={70}\n footer={hasPastSessions ? (\n <div style={{ width: '100%', display: 'flex', justifyContent: 'center' }}>\n <button\n onClick={() => { if (onViewAllSessions) onViewAllSessions(); setShowSessionDrawer(false); }}\n style={{\n display: 'flex',\n height: 32,\n padding: '0 16px 0 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 >\n <History size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 14, fontWeight: 600, color: 'var(--Grey-Strong, #2E3236)' }}>\n View All Sessions\n </span>\n </button>\n </div>\n ) : null}\n >\n <div\n style={{\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n maxHeight: '100%',\n overflowY: 'auto',\n }}\n >\n {hasPastSessions ? sessionHistory.map((session, i) => (\n <div\n key={session.id || i}\n onClick={() => { if (onSessionClick) onSessionClick(session); setShowSessionDrawer(false); }}\n onMouseEnter={() => setHoveredSessionIdx(i)}\n onMouseLeave={() => setHoveredSessionIdx(null)}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 12,\n padding: '16px 12px',\n borderTop: i === 0 ? 'none' : '1px solid var(--Grey-absent, #D9D9D9)',\n background: hoveredSessionIdx === i ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n cursor: 'pointer',\n transition: 'background 0.15s',\n }}\n >\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 14, display: 'flex', alignItems: 'center', gap: 6, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, marginBottom: 8, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {session.title}\n </div>\n {session.status && (\n <div style={{ fontSize: 13, color: 'var(--Grey-Strong, #2E3236)', marginBottom: 12, lineHeight: 1.2 }}>\n <span style={{ fontWeight: 400 }}>Status: </span>\n <span style={{ fontWeight: 400, color: 'var(--Grey-Muted, #808183)' }}>{session.status}</span>\n </div>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 14, flexWrap: 'wrap' }}>\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6, fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.1 }}>\n <CalendarDays size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.8} />\n {session.date}\n </span>\n {(session.agent || session.agent_name) && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6, fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.1 }}>\n <Headset size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.8} />\n {session.agent || session.agent_name}\n </span>\n )}\n </div>\n </div>\n {hoveredSessionIdx === i && (\n <ExternalLink size={20} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.7} style={{ flexShrink: 0 }} />\n )}\n </div>\n )) : (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: 140,\n padding: '24px 12px',\n color: 'var(--Grey-Muted, #808183)',\n fontSize: 14,\n fontStyle: 'italic',\n textAlign: 'center',\n }}\n >\n No previous sessions available\n </div>\n )}\n </div>\n </SideDrawer>\n\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","s","ROW_STYLE","COLUMN_STYLE","UpdatedInteractionContext","meta","callPurpose","classification","dimensions","outcomeQuality","onMoreDetails","moreDetails","resolutionOutcome","customerIntent","canShowEditButton","onEditInteraction","expanded","setExpanded","useState","moreDetailsRef","useRef","duration","messages","driver","paradigm","findDim","keyPattern","d","dimResolution","dimIntent","dimOutcomeQuality","fmtValue","v","c","resolvedOutcomeQuality","resolvedResolutionOutcome","resolvedCustomerIntent","excludedKeys","k","filteredDimensions","pairedRows","rawPairs","left","right","pair","detailRows","useEffect","handleOutsideClick","event","renderRow","renderMoreDetailsToggle","p","ChevronUp","ChevronDown","Pencil","idx","row","LH","MAX_VISIBLE_DRIVERS","fmtPct","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","minScore","maxScore","numericScore","clampedScore","filledUnits","segDeg","toXY","angleDeg","rad","strokeArc","fromDeg","toDeg","large","gap","_","fromA","toA","segmentFill","pathD","ScoreBar","value","maxValue","numericValue","clampedValue","LEGEND_TOOLTIPS","InfoTooltip","show","setShow","ref","pos","setPos","rect","LegendItem","Info","UpdatedCompassScore","predictedScore","predictedLabel","description","legends","displayScore","rotateDeg","legend","roleColorMap","role","roleTokens","extractRoleValue","user","directRole","nestedRole","_d","_e","_f","resolveCurrentUserAvatarColor","getInitials","name","w","isWithinEditWindow","utcValue","minMatch","formatTimestamp","diffMs","diffMin","diffHr","diffDays","Avatar","initials","color","avatar","CommentBubble","comment","isReply","isConsecutive","onReply","onSendReply","onEdit","onDelete","onMenuClick","showReply","menuOpen","setMenuOpen","replyOpen","setReplyOpen","replyValue","setReplyValue","editOpen","setEditOpen","editValue","setEditValue","confirmDelete","setConfirmDelete","menuRef","replyRef","editRef","author","authorName","avatarColor","avatarImg","rawTimestamp","timestamp","canEdit","isEdited","paragraphs","handler","ta","max","Ellipsis","X","paragraph","CornerDownRight","CommentInput","currentUser","onSubmit","setValue","isFocused","setIsFocused","textareaRef","handleSubmit","trimmed","handleKeyDown","CommentThread","depth","hasReplies","isLastAtDepth","reply","UpdatedThreads","externalComments","totalComments","onSendComment","onMarkResolved","isResolved","localComments","setLocalComments","isSending","setIsSending","allComments","useMemo","externalIds","newLocal","prev","displayCurrentUser","handleSendReply","content","parentId","optimisticReply","handleSendComment","optimisticComment","handleEdit","handleDelete","groupedComments","repliesByParent","buildTree","commentCount","MessagesSquare","Check","CircleCheck","prevAuthor","currAuthor","GuidanceItem","isLast","onPlayEvidence","signalText","sr","pct","startMs","endMs","hasTimestamp","currentMs","isPlayingThisItem","UpdatedGuidance","guidanceCount","count","NameTooltip","triggerRef","TABS","UpdatedInteractionDetails","onBack","coachingData","coachingLoading","audioUrl","externalAudioRef","playbackRate","timelineSegments","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","externalAgentName","externalAgentFullName","externalCustomerName","externalCustomerFullName","transcript","activeTurnIndex","turnObservations","highlightedTurns","onTurnPlayPause","onHighlightTurns","externalCallPurpose","externalClassification","externalOutcomeQuality","interactionId","compassScore","compassMaxScore","predictedCsat","compassLegends","customerSessionsList","customerSessionCount","onSessionClick","onViewAllSessions","prevSessionDesc","prevSessionDisabled","nextSessionDesc","nextSessionDisabled","onPreviousSession","onNextSession","comments","guidance","commentsResolved","activeTab","setActiveTab","setExpandedSignals","showSessionDrawer","setShowSessionDrawer","hoveredSessionIdx","setHoveredSessionIdx","internalPlaying","setInternalPlaying","internalCurrentTime","setInternalCurrentTime","isScrolledPastHeader","setIsScrolledPastHeader","recordingRef","overviewRef","coachingRef","signalsRef","commentsRef","sectionRefs","scrollContainerRef","isClickScrolling","container","tabKeys","refs","scrollParent","el","node","overflow","overflowY","handleScroll","activeKey","overviewTop","clickedTabRef","handleTabClick","containerTop","offset","elTop","sessionHistory","hasPastSessions","handleShowInTranscript","signalsEl","timeSec","handlePlayEvidence","durationMs","handleHighlightTurns","turnIds","next","blocks","findBlock","id","b","ctx","blockDimensions","resolvedMeta","resolvedCallPurpose","resolvedClassification","resolvedOutcomeLift","resolvedDriverLabels","resolvedCoaching","resolvedSignals","guidanceData","agentName","agentFullName","customerName","customerFullName","resolvedUserRole","canEditInteraction","sessionCount","rawDate","dateStr","direction","ArrowLeft","ArrowRight","tab","ClipboardList","CalendarDays","PhoneIncoming","Headset","CircleUser","ChevronRight","UpdatedInteractionRecording","SideDrawer","History","session","ExternalLink"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdatedInteractionDetails.es.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/UpdatedGuidance.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 { useEffect, useRef, useState } from 'react';\nimport { ChevronDown, ChevronUp, Pencil } 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 canShowEditButton = false,\n onEditInteraction,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const moreDetailsRef = useRef(null);\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 // Helper to find a dimension by key pattern\n const findDim = (keyPattern) => dimensions.find((d) => (d.key || '').toLowerCase().includes(keyPattern));\n\n // Auto-extract known dimensions — use explicit props first, then fall back to dimensions data\n const dimResolution = findDim('resolution_outcome');\n const dimIntent = findDim('customer_intent');\n const dimOutcomeQuality = findDim('outcome_quality');\n\n const fmtValue = (v) => v ? v.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase()) : null;\n\n const resolvedOutcomeQuality = outcomeQuality !== 'Neutral' ? outcomeQuality\n : dimOutcomeQuality ? fmtValue(dimOutcomeQuality.value)\n : outcomeQuality;\n\n const resolvedResolutionOutcome = resolutionOutcome ?? (dimResolution ? fmtValue(dimResolution.value) : null);\n const resolvedCustomerIntent = customerIntent ?? (dimIntent ? fmtValue(dimIntent.value) : null);\n\n // Keys to exclude from the generic dimensions grid (they go in dedicated spots)\n const excludedKeys = new Set(['resolution_outcome', 'customer_intent', 'outcome_quality'].map((k) => `dim.${k}`));\n const filteredDimensions = dimensions.filter((d) => !excludedKeys.has(d.key));\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 remaining dimension pairs (excluding the ones we extracted)\n for (let i = 0; i < filteredDimensions.length; i += 2) {\n const left = filteredDimensions[i] ? { label: filteredDimensions[i].display_name || filteredDimensions[i].label || filteredDimensions[i].key, value: fmtValue(filteredDimensions[i].value) } : null;\n const right = filteredDimensions[i + 1] ? { label: filteredDimensions[i + 1].display_name || filteredDimensions[i + 1].label || filteredDimensions[i + 1].key, value: fmtValue(filteredDimensions[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: resolvedOutcomeQuality },\n { isMoreDetails: true },\n ]);\n\n rawPairs.forEach((pair) => pairedRows.push(pair));\n\n // Build \"More Details\" expanded rows — auto-extracted from dimensions\n const detailRows = [\n resolvedResolutionOutcome != null && { label: 'Resolution Outcome', value: resolvedResolutionOutcome },\n resolvedCustomerIntent != null && { label: 'Customer Intent', value: resolvedCustomerIntent },\n ...(moreDetails || []),\n ].filter(Boolean);\n\n // Close \"More Details\" dropdown on outside click\n useEffect(() => {\n if (!expanded) return;\n\n const handleOutsideClick = (event) => {\n if (moreDetailsRef.current && !moreDetailsRef.current.contains(event.target)) {\n setExpanded(false);\n }\n };\n\n document.addEventListener('mousedown', handleOutsideClick);\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n }, [expanded]);\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 style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n padding: '8px 8px 12px 8px',\n fontFamily: 'var(--font-sans)',\n borderBottom: 'none',\n minHeight: 33,\n }}\n >\n <button\n onClick={() => {\n setExpanded((p) => !p);\n if (onMoreDetails && !expanded) onMoreDetails();\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 'normal',\n fontFamily: 'var(--font-sans)',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n <span>More Details</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 </button>\n\n {canShowEditButton && (\n <button\n onClick={onEditInteraction || (() => {})}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '5px 12px',\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 12,\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 'normal',\n fontFamily: 'var(--font-sans)',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <Pencil size={15} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, lineHeight: 'normal' }}>Edit</span>\n </button>\n )}\n </div>\n );\n\n return (\n <div\n ref={moreDetailsRef}\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: 'center',\n gap: 24,\n alignSelf: 'stretch',\n flexWrap: 'nowrap',\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 */}\n <div\n style={{\n display: 'flex',\n gap: 24,\n }}\n >\n {/* Frame 8: Expected Outcome — flex: 1, equal width */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'flex-start', 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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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: 'flex-start',\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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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: 'flex-start',\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: 'flex-start', minHeight: 48 }}>\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: 'left' }}>\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, useRef } 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\n// Compass score scale: 0.5 to 5.0 (supports 0.5 increments)\n// Visual scale is always 5 segments, where each segment represents 1 point.\nconst GaugeMeter = ({ score = 4, minScore = 0, maxScore = 5 }) => {\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; // always render 5 visual steps\n const numericScore = Number(score);\n const clampedScore = Number.isFinite(numericScore)\n ? Math.min(Math.max(numericScore, minScore), maxScore)\n : minScore;\n const filledUnits = maxScore > minScore\n ? ((clampedScore - minScore) / (maxScore - minScore)) * totalSeg\n : 0;\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 segmentFill = Math.max(0, Math.min(1, filledUnits - i));\n const pathD = strokeArc(fromA, toA);\n return (\n <g key={i}>\n {/* Base track segment */}\n <path\n d={pathD}\n stroke={COLORS.track}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n />\n {/* Filled overlay can be full or half (or any partial) */}\n {segmentFill > 0 && (\n <path\n d={pathD}\n stroke={COLORS.strong}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n pathLength={1}\n strokeDasharray={`${segmentFill} 1`}\n />\n )}\n </g>\n );\n })}\n </svg>\n );\n};\n\nconst ScoreBar = ({ value = 0, maxValue = 5 }) => {\n const numericValue = Number(value);\n const clampedValue = Number.isFinite(numericValue)\n ? Math.min(Math.max(numericValue, 0), maxValue)\n : 0;\n\n return (\n <div style={{ display: 'flex', gap: 2 }}>\n {Array.from({ length: maxValue }, (_, i) => {\n const segmentFill = Math.max(0, Math.min(1, clampedValue - i));\n return (\n <div\n key={i}\n style={{\n width: 22,\n height: 6,\n borderRadius: 1,\n background: COLORS.track,\n overflow: 'hidden',\n }}\n >\n {segmentFill > 0 && (\n <div\n style={{\n width: `${segmentFill * 100}%`,\n height: '100%',\n background: COLORS.strong,\n }}\n />\n )}\n </div>\n );\n })}\n </div>\n );\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 const ref = useRef(null);\n const [pos, setPos] = useState({ top: 0, left: 0 });\n\n const handleEnter = () => {\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n setPos({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n }\n setShow(true);\n };\n\n return (\n <div\n ref={ref}\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n transform: 'translate(-50%, -100%)',\n display: 'flex',\n width: 'max-content',\n maxWidth: 300,\n padding: 10,\n alignItems: 'center',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 9999,\n pointerEvents: 'none',\n }}>\n <span style={{\n color: '#FFF',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: '140%',\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: 'flex-start',\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 = 4,\n minScore = 0,\n maxScore = 5,\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 numericScore = Number(score);\n const clampedScore = Number.isFinite(numericScore)\n ? Math.min(Math.max(numericScore, minScore), maxScore)\n : minScore;\n const displayScore = clampedScore.toFixed(1);\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 Interaction Quality\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} minScore={minScore} 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 > minScore ? (clampedScore - minScore) / (maxScore - minScore) : 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 {displayScore}\n </div>\n <div style={{\n fontSize: 15,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n textAlign: 'center',\n marginTop: 8,\n }}>\n Compass 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: 'flex-start',\n justifyContent: 'center',\n flex: 1,\n }}>\n {/* Overall Score title */}\n <div style={{\n fontSize: 15,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n Interaction Quality Index\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 MessagesSquare,\n Ellipsis,\n CircleCheck,\n Check,\n CornerDownRight,\n Info,\n X,\n} from \"lucide-react\";\n\n/* ─── helpers ─── */\n\nconst roleColorMap = (role) => {\n if (!role) return null;\n const normalized = String(role).trim().toLowerCase();\n const roleTokens = normalized.split(/[^a-z]+/).filter(Boolean);\n if (roleTokens.includes(\"supervisor\")) return \"var(--rail-compliance, #C98A5A)\";\n if (\n roleTokens.includes(\"admin\") ||\n roleTokens.includes(\"administrator\") ||\n roleTokens.includes(\"superadmin\")\n ) {\n return \"var(--rail-discovery, #5E88B0)\";\n }\n if (roleTokens.includes(\"agent\")) return \"var(--rail-outcome, #6B7C93)\";\n return null;\n};\n\nconst extractRoleValue = (user) => {\n if (!user) return null;\n const directRole =\n user.role ??\n user.userRole ??\n user.user_role ??\n user.author_role ??\n user.roleName ??\n user.role_name ??\n user.userType ??\n user.user_type ??\n user.type;\n\n if (typeof directRole === \"string\") return directRole;\n if (Array.isArray(directRole)) return directRole.join(\" \");\n if (directRole && typeof directRole === \"object\") {\n return directRole.name || directRole.value || directRole.label || null;\n }\n\n const nestedRole =\n user.user?.role ??\n user.user?.userRole ??\n user.user?.user_role ??\n user.profile?.role ??\n user.profile?.userRole ??\n user.profile?.user_role;\n\n if (typeof nestedRole === \"string\") return nestedRole;\n if (Array.isArray(nestedRole)) return nestedRole.join(\" \");\n if (nestedRole && typeof nestedRole === \"object\") {\n return nestedRole.name || nestedRole.value || nestedRole.label || null;\n }\n\n return null;\n};\n\n/** Role-mapped color first so stale `color` from auth/session does not override role (matches thread intent). */\nconst resolveCurrentUserAvatarColor = (user) => {\n if (!user) return \"#6B7C93\";\n const role = extractRoleValue(user);\n return roleColorMap(role) || user.color || \"#6B7C93\";\n};\n\nconst getInitials = (name) =>\n (name || \"\")\n .split(\" \")\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase() || \"U\";\n\nconst isWithinEditWindow = (value) => {\n if (!value) return true; // optimistic/new comments are editable\n if (value === \"Just now\") return true;\n if (/^\\d{4}-\\d{2}-\\d{2}T/.test(value)) {\n try {\n const utcValue = /Z$|[+-]\\d{2}:\\d{2}$/.test(value) ? value : value + \"Z\";\n const d = new Date(utcValue);\n if (Number.isNaN(d.getTime())) return false;\n return (Date.now() - d.getTime()) < 15 * 60 * 1000;\n } catch { return false; }\n }\n // Parse relative timestamps like \"5 min\", \"1 h\", \"2 days\"\n const minMatch = value.match(/^(\\d+)\\s*min/);\n if (minMatch) return parseInt(minMatch[1], 10) < 15;\n // Anything in hours or days is beyond 15 min\n if (/\\d+\\s*h/.test(value) || /\\d+\\s*day/.test(value)) return false;\n return true;\n};\n\nconst formatTimestamp = (value) => {\n if (!value) return \"\";\n if (!/^\\d{4}-\\d{2}-\\d{2}T/.test(value)) return value;\n try {\n // Append Z if missing so timestamp is parsed as UTC\n const utcValue = /Z$|[+-]\\d{2}:\\d{2}$/.test(value) ? value : value + \"Z\";\n const d = new Date(utcValue);\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 const diffDays = Math.floor(diffHr / 24);\n if (diffDays === 1) return \"1 day\";\n return `${diffDays} days`;\n } catch {\n return value;\n }\n};\n\n/* ─── Avatar (36 × 36) ─── */\nconst Avatar = ({ name, initials, color, avatar, size = 36 }) => {\n if (avatar) {\n return (\n <img\n src={avatar}\n alt={name}\n style={{\n width: size,\n height: size,\n borderRadius: \"50%\",\n objectFit: \"cover\",\n flexShrink: 0,\n }}\n />\n );\n }\n return (\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/* ============================================\n COMMENT ROW — Figma node 593-1135 (top-level)\n display: flex\n width: 552px\n align-items: flex-start\n gap: 16px\n\n Reply row — Figma node 593-2042\n display: flex\n padding-left: 48px\n align-items: flex-start\n gap: 16px\n ============================================ */\nconst CommentBubble = ({\n comment,\n isReply = false,\n isConsecutive = false,\n onReply,\n onSendReply,\n onEdit,\n onDelete,\n onMenuClick,\n showReply = true,\n}) => {\n const [hovered, setHovered] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const [replyOpen, setReplyOpen] = useState(false);\n const [replyValue, setReplyValue] = useState(\"\");\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(\"\");\n const [confirmDelete, setConfirmDelete] = useState(false);\n const menuRef = useRef(null);\n const replyRef = useRef(null);\n const editRef = useRef(null);\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 avatarImg = author.avatar || comment.avatar;\n const rawTimestamp = comment.timestamp || comment.created_at;\n const timestamp = formatTimestamp(rawTimestamp);\n const canEdit = isWithinEditWindow(rawTimestamp);\n const isEdited = Boolean(comment.isEdited || comment.is_edited || comment.edited);\n\n const paragraphs = Array.isArray(comment.content)\n ? comment.content\n : [comment.content || comment.text || \"\"];\n\n // Close menu on outside click\n React.useEffect(() => {\n if (!menuOpen) return;\n const handler = (e) => {\n if (menuRef.current && !menuRef.current.contains(e.target)) setMenuOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [menuOpen]);\n\n // Auto-resize reply textarea\n React.useEffect(() => {\n const ta = replyRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [replyValue, replyOpen]);\n\n // Auto-resize edit textarea\n React.useEffect(() => {\n const ta = editRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [editValue, editOpen]);\n\n return (\n <div\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n paddingLeft: isReply ? 48 : 0,\n alignItems: \"flex-start\",\n gap: 16,\n paddingTop: isConsecutive ? 0 : 8,\n paddingBottom: 8,\n }}\n >\n {/* Avatar — 36 × 36 (hidden for consecutive messages, keep space) */}\n {isConsecutive ? (\n <div style={{ width: 36, flexShrink: 0 }} />\n ) : (\n <Avatar\n name={authorName}\n initials={initials}\n color={avatarColor}\n avatar={avatarImg}\n />\n )}\n\n {/* Content column */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row — always shows menu, name/time hidden for consecutive */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: isConsecutive ? \"flex-end\" : \"space-between\",\n marginBottom: isConsecutive ? 0 : 6,\n }}\n >\n {!isConsecutive && (\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n {/* Name — 13px / 650 / #1E2125 */}\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 / #808183 */}\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 {isEdited && (\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 (Edited)\n </span>\n )}\n </div>\n )}\n\n {/* Three-dot menu — Ellipsis 24×24, hover only + dropdown */}\n <div style={{ position: \"relative\" }} ref={menuRef}>\n <button\n type=\"button\"\n onClick={() => setMenuOpen((p) => !p)}\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 || menuOpen ? 1 : 0,\n transition: \"opacity 0.15s\",\n flexShrink: 0,\n }}\n >\n <Ellipsis size={24} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n\n {/* Dropdown — Figma node 486-4493 */}\n {menuOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n marginTop: 4,\n display: \"flex\",\n width: 99,\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 zIndex: 50,\n overflow: \"hidden\",\n }}\n >\n {onReply && (\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); setEditOpen(false); setReplyOpen(true); }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Reply\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n disabled={!canEdit}\n onClick={() => {\n if (!canEdit) return;\n setMenuOpen(false);\n const text = Array.isArray(comment.content)\n ? comment.content.join(\"\\n\")\n : (comment.content || comment.text || \"\");\n setEditValue(text);\n setEditOpen(true);\n setReplyOpen(false);\n }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: canEdit ? \"pointer\" : \"not-allowed\",\n fontSize: 13,\n fontWeight: 400,\n color: canEdit ? \"var(--Grey-Strong, #2E3236)\" : \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n opacity: canEdit ? 1 : 0.5,\n }}\n onMouseEnter={(e) => { if (canEdit) e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => { setMenuOpen(false); setConfirmDelete(true); }}\n style={{\n display: \"flex\",\n width: \"100%\",\n padding: \"10px 16px\",\n alignItems: \"center\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n textAlign: \"left\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--surface-hover, #F3F7F7)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"transparent\"; }}\n >\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Edit mode — card with editable input */}\n {editOpen ? (\n <div\n style={{\n display: \"flex\",\n width: 662,\n maxWidth: \"100%\",\n padding: \"8px 12px 12px 12px\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n boxSizing: \"border-box\",\n marginTop: 4,\n }}\n >\n {/* Header with author name + close */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n }}\n >\n {\"\\u201C\"} {comment.author?.name || \"Unknown\"}\n </span>\n <button\n type=\"button\"\n onClick={() => setEditOpen(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n <X size={20} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n </div>\n {/* Editable input + Save */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\n }}\n >\n <textarea\n ref={editRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n if (editValue.trim()) {\n onEdit?.({ ...comment, content: editValue.trim(), isEdited: true });\n setEditOpen(false);\n }\n }\n if (e.key === \"Escape\") { setEditOpen(false); }\n }}\n autoFocus\n rows={1}\n style={{\n flex: 1,\n padding: \"10px 12px\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"160%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n boxSizing: \"border-box\",\n resize: \"none\",\n minHeight: 24,\n maxHeight: 140,\n overflowY: \"hidden\",\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (editValue.trim()) {\n onEdit?.({ ...comment, content: editValue.trim(), isEdited: true });\n setEditOpen(false);\n }\n }}\n disabled={!editValue.trim()}\n style={{\n display: \"flex\",\n padding: \"6px 16px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: 13,\n fontWeight: 600,\n color: editValue.trim()\n ? \"var(--Grey-White, #FFF)\"\n : \"var(--Grey-Muted, #808183)\",\n background: editValue.trim()\n ? \"var(--Grey-Strong, #2E3236)\"\n : \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n borderRadius: 6,\n cursor: editValue.trim() ? \"pointer\" : \"not-allowed\",\n fontFamily: \"var(--default-font-family)\",\n flexShrink: 0,\n transition: \"all 0.15s\",\n lineHeight: \"150%\",\n }}\n >\n Save\n </button>\n </div>\n </div>\n ) : (\n /* Message bubbles — stacked, gap: 4px, fit content */\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4, alignItems: \"flex-start\" }}>\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 whiteSpace: \"pre-wrap\",\n }}\n >\n {paragraph}\n </div>\n ))}\n </div>\n )}\n\n {/* Inline delete confirmation */}\n {confirmDelete && (\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n marginTop: 8,\n fontSize: 13,\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n <span style={{ color: \"var(--Grey-Muted, #808183)\", fontWeight: 400 }}>\n Confirm: delete this comment?\n </span>\n <button\n type=\"button\"\n onClick={() => { setConfirmDelete(false); onDelete?.(comment); }}\n style={{\n background: \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n padding: \"4px 10px\",\n borderRadius: 6,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--Grey-absent, #D9D9D9)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"var(--grey-light, #e9e8e8a1)\"; }}\n >\n Delete\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirmDelete(false)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n padding: \"4px 10px\",\n borderRadius: 6,\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => { e.currentTarget.style.background = \"var(--grey-light, #e9e8e8a1)\"; }}\n onMouseLeave={(e) => { e.currentTarget.style.background = \"none\"; }}\n >\n Cancel\n </button>\n </div>\n )}\n\n {/* Reply action — CornerDownRight 20×20 + \"Reply\" */}\n {showReply && onReply && !replyOpen && !confirmDelete && (\n <button\n type=\"button\"\n onClick={() => { setEditOpen(false); setReplyOpen(true); }}\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\n {/* Inline reply input */}\n {replyOpen && (\n <div\n style={{\n display: \"flex\",\n width: 662,\n maxWidth: \"100%\",\n padding: \"8px 12px 12px 12px\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n boxSizing: \"border-box\",\n marginTop: 12,\n }}\n >\n {/* Tagged comment quote */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, width: \"100%\" }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n }}\n >\n {\"\\u201C\"} {comment.author?.name || \"Unknown\"}\n </span>\n <button\n type=\"button\"\n onClick={() => { setReplyValue(\"\"); setReplyOpen(false); }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n <X size={20} color=\"var(--Grey-Muted, #808183)\" />\n </button>\n </div>\n <div\n style={{\n display: \"flex\",\n height: 36,\n padding: 16,\n alignItems: \"center\",\n gap: 5,\n borderRadius: \"0 8px 8px 8px\",\n background: \"var(--Grey-Strong, #2E3236)\",\n boxSizing: \"border-box\",\n width: \"100%\",\n }}\n >\n <span\n style={{\n color: \"var(--Grey-White, #FFF)\",\n fontSize: 13,\n fontWeight: 400,\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"normal\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {Array.isArray(comment.content) ? comment.content[0] : comment.content}\n </span>\n </div>\n </div>\n {/* Reply input + Post button */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\n }}\n >\n <textarea\n ref={replyRef}\n value={replyValue}\n onChange={(e) => setReplyValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n if (replyValue.trim()) {\n onSendReply?.({ content: replyValue.trim(), parentId: comment.id });\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }\n if (e.key === \"Escape\") {\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }}\n autoFocus\n placeholder=\"Add a reply\"\n rows={1}\n style={{\n flex: 1,\n padding: \"10px 12px\",\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--text-ink, #1E2125)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"160%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n boxSizing: \"border-box\",\n resize: \"none\",\n minHeight: 24,\n maxHeight: 140,\n overflowY: \"hidden\",\n }}\n />\n <button\n type=\"button\"\n onClick={() => {\n if (replyValue.trim()) {\n onSendReply?.({ content: replyValue.trim(), parentId: comment.id });\n setReplyValue(\"\");\n setReplyOpen(false);\n }\n }}\n disabled={!replyValue.trim()}\n style={{\n display: \"flex\",\n height: 28,\n padding: \"8px 12px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 8,\n fontSize: 13,\n fontWeight: 600,\n color: replyValue.trim()\n ? \"var(--Grey-White, #FFF)\"\n : \"var(--Grey-Muted, #808183)\",\n background: replyValue.trim()\n ? \"var(--Neutral-850, #272727)\"\n : \"var(--grey-light, #e9e8e8a1)\",\n border: \"none\",\n borderRadius: 10,\n cursor: replyValue.trim() ? \"pointer\" : \"not-allowed\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n }}\n >\n Post\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ============================================\n COMMENT INPUT — Figma node 237-5570\n display: flex\n width: 552px\n padding: 12px\n flex-direction: column\n justify-content: center\n align-items: flex-start\n gap: 24px\n\n border-radius: 8px\n border: 1px solid var(--Grey-absent, #D9D9D9)\n background: var(--Grey-White, #FFF)\n ============================================ */\nconst CommentInput = ({ currentUser, onSubmit }) => {\n const [value, setValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef(null);\n\n useEffect(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n ta.style.height = \"auto\";\n const max = 140;\n ta.style.height = Math.min(ta.scrollHeight, max) + \"px\";\n ta.style.overflowY = ta.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [value]);\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\") {\n if (e.metaKey || e.ctrlKey || e.shiftKey) {\n // Allow newline insertion\n return;\n }\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const initials = currentUser?.initials || getInitials(currentUser?.name);\n const color = resolveCurrentUserAvatarColor(currentUser);\n const avatarImg = currentUser?.avatar;\n\n return (\n <div style={{ display: \"flex\", gap: 16, alignItems: \"flex-start\" }}>\n {/* Current user avatar */}\n <Avatar\n name={currentUser?.name}\n initials={initials}\n color={color}\n avatar={avatarImg}\n />\n\n {/* Input container — Figma: 552px, padding 12, border-radius 8 */}\n <div\n style={{\n flex: 1,\n padding: 12,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n gap: 24,\n borderRadius: 8,\n border: isFocused\n ? \"1px solid var(--Grey-Strong, #2E3236)\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n background: \"var(--Grey-White, #FFF)\",\n transition: \"border-color 0.15s\",\n }}\n >\n {/* Textarea + Post row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 8,\n width: \"100%\",\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 feedback\"\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 maxHeight: 140,\n overflowY: \"hidden\",\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/* ============================================\n MAIN COMPONENT: UpdatedThreads\n\n Outer container — full width\n Header (237-5556):\n display: flex\n height: 40px\n padding-bottom: 8px\n align-items: center\n gap: 16px\n align-self: stretch\n border-bottom: 1px solid var(--Grey-absent, #D9D9D9)\n\n Comments + Input wrapper (596-2060):\n display: flex\n padding-top: 24px\n flex-direction: column\n align-items: flex-start\n gap: 10px\n align-self: stretch\n border-top: 1px solid var(--Grey-absent, #D9D9D9)\n width: 552px (content area)\n ============================================ */\n\nconst CommentThread = ({ comment, depth = 0, isConsecutive = false, onReply, onSendReply, onEdit, onDelete, onMenuClick }) => {\n const hasReplies = comment.replies && comment.replies.length > 0;\n const isLastAtDepth = !hasReplies;\n return (\n <React.Fragment>\n <div style={{ paddingLeft: depth > 0 ? Math.min(depth * 32, 128) : 0 }}>\n <CommentBubble\n comment={comment}\n isReply={depth > 0}\n isConsecutive={isConsecutive}\n onReply={onReply}\n onSendReply={onSendReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onMenuClick={onMenuClick}\n showReply={isLastAtDepth}\n />\n </div>\n {hasReplies && comment.replies.map((reply) => (\n <CommentThread\n key={reply.id}\n comment={reply}\n depth={depth + 1}\n onReply={onReply}\n onSendReply={onSendReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onMenuClick={onMenuClick}\n />\n ))}\n </React.Fragment>\n );\n};\n\nconst UpdatedThreads = ({\n comments: externalComments = [],\n totalComments,\n children,\n onSendComment,\n onReply,\n onSendReply,\n onEdit,\n onDelete,\n onMenuClick,\n onMarkResolved,\n currentUser,\n isResolved = false,\n}) => {\n // Local state for optimistic updates (replies, new comments, edits, deletes)\n const [localComments, setLocalComments] = useState([]);\n const [isSending, setIsSending] = useState(false);\n\n // Merge external + local comments\n const allComments = useMemo(() => {\n const externalIds = new Set(externalComments.map((c) => c.id));\n // Filter out local comments that now exist in external (API caught up)\n const newLocal = localComments.filter((c) => !externalIds.has(c.id));\n return [...externalComments, ...newLocal];\n }, [externalComments, localComments]);\n\n // Sync: remove local comments when external updates\n React.useEffect(() => {\n const externalIds = new Set(externalComments.map((c) => c.id));\n setLocalComments((prev) => prev.filter((c) => !externalIds.has(c.id)));\n }, [externalComments]);\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 color = resolveCurrentUserAvatarColor(currentUser);\n return { ...currentUser, name, initials, color };\n }, [currentUser]);\n\n const handleSendReply = async ({ content, parentId }) => {\n if (onSendReply) {\n // Host app mode — let API handle it, show loading\n setIsSending(true);\n try {\n await onSendReply({ content, parentId });\n } finally {\n setIsSending(false);\n }\n } else {\n // Library demo mode — optimistic local comment\n const optimisticReply = {\n id: `temp-${Date.now()}`,\n author: displayCurrentUser,\n content,\n timestamp: \"Just now\",\n parentId,\n isOptimistic: true,\n };\n setLocalComments((prev) => [...prev, optimisticReply]);\n }\n };\n\n const handleSendComment = async (text) => {\n if (onSendComment) {\n // Host app mode — let API handle it, show loading\n setIsSending(true);\n try {\n await onSendComment(text);\n } finally {\n setIsSending(false);\n }\n } else {\n // Library demo mode — optimistic local comment\n const optimisticComment = {\n id: `temp-${Date.now()}`,\n author: displayCurrentUser,\n content: text,\n timestamp: \"Just now\",\n isOptimistic: true,\n };\n setLocalComments((prev) => [...prev, optimisticComment]);\n }\n };\n\n const handleEdit = (comment) => {\n // If it's a local optimistic comment, update locally\n setLocalComments((prev) =>\n prev.map((c) => (c.id === comment.id ? { ...c, content: comment.content, isEdited: true } : c))\n );\n onEdit?.(comment);\n };\n\n const handleDelete = (comment) => {\n // Remove from local state immediately\n setLocalComments((prev) => prev.filter((c) => c.id !== comment.id));\n onDelete?.(comment);\n };\n\n const groupedComments = useMemo(() => {\n const repliesByParent = {};\n allComments.forEach((c) => {\n if (c.parentId) {\n if (!repliesByParent[c.parentId]) repliesByParent[c.parentId] = [];\n repliesByParent[c.parentId].push(c);\n }\n });\n const buildTree = (comment) => ({\n ...comment,\n replies: (repliesByParent[comment.id] || []).map(buildTree),\n });\n return allComments.filter((c) => !c.parentId).map(buildTree);\n }, [allComments]);\n\n const commentCount = totalComments ?? allComments.length;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n background: \"var(--Grey-White, #FFF)\",\n width: \"100%\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n {/* ═══════════════════════════════════════════\n HEADER — FEEDBACK & GUIDANCE\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n height: 40,\n paddingBottom: 8,\n alignItems: \"center\",\n gap: 8,\n alignSelf: \"stretch\",\n }}\n >\n <MessagesSquare size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={1.5} />\n <span\n style={{\n fontSize: 16,\n fontWeight: 600,\n color: \"var(--Grey-Strong, #2E3236)\",\n textTransform: \"uppercase\",\n lineHeight: 1.2,\n }}\n >\n Feedback & Guidance\n </span>\n </div>\n\n {/* Divider */}\n <div style={{ width: \"100%\", height: 1, background: \"var(--Grey-absent, #D9D9D9)\" }} />\n\n {/* ═══════════════════════════════════════════\n CONTENT AREA — Two equal columns\n ═══════════════════════════════════════════ */}\n <div\n style={{\n display: \"flex\",\n gap: 24,\n alignSelf: \"stretch\",\n }}\n >\n {/* Left column — Feedback / Comments */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Feedback sub-header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 16,\n paddingBottom: 8,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"var(--surface-hover, #F3F7F7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <MessagesSquare style={{ width: 20, height: 20, flexShrink: 0 }} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n }}\n >\n Feedback\n </span>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n marginLeft: \"auto\",\n }}\n >\n {commentCount} Comment{commentCount !== 1 ? \"s\" : \"\"}\n </span>\n {isResolved ? (\n <div\n style={{\n display: \"inline-flex\",\n height: 32,\n padding: \"12px 16px 12px 12px\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 8,\n borderRadius: 10,\n background: \"var(--Rail-Surface-2, #E3E1D7)\",\n flexShrink: 0,\n }}\n >\n <Check size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={2} />\n <span\n style={{\n fontSize: 13,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n }}\n >\n Resolved\n </span>\n </div>\n ) : onMarkResolved ? (\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 flexShrink: 0,\n }}\n >\n <CircleCheck size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n Mark as Resolved\n </button>\n ) : null}\n </div>\n {/* Comments list */}\n {allComments.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 0,\n marginBottom: 24,\n maxHeight: 600,\n overflowY: allComments.length > 6 ? \"auto\" : \"visible\",\n }}\n >\n {groupedComments.map((comment, idx) => {\n const prev = idx > 0 ? groupedComments[idx - 1] : null;\n const prevAuthor = prev?.author?.name || prev?.author_name;\n const currAuthor = comment.author?.name || comment.author_name;\n const isConsecutive = prev && prevAuthor === currAuthor && (!prev.replies || prev.replies.length === 0);\n return (\n <CommentThread\n key={comment.id}\n comment={comment}\n depth={0}\n isConsecutive={!!isConsecutive}\n onReply={onReply}\n onSendReply={handleSendReply}\n onEdit={handleEdit}\n onDelete={handleDelete}\n onMenuClick={onMenuClick}\n />\n );\n })}\n </div>\n )}\n\n {/* Edit info hint */}\n {allComments.length > 0 && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n marginBottom: 16,\n marginLeft: 48,\n }}\n >\n <Info size={16} color=\"var(--Grey-Muted, #808183)\" />\n <span\n style={{\n color: \"var(--Grey-Muted, #808183)\",\n fontSize: 13,\n fontStyle: \"normal\",\n fontWeight: 400,\n lineHeight: \"normal\",\n }}\n >\n Comments can be edited within 15 minutes.\n </span>\n </div>\n )}\n\n {/* Loading indicator */}\n {isSending && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"8px 0\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n border: \"2px solid var(--Grey-absent, #D9D9D9)\",\n borderTopColor: \"var(--Grey-Strong, #2E3236)\",\n borderRadius: \"50%\",\n animation: \"spin 0.8s linear infinite\",\n }}\n />\n <span\n style={{\n fontSize: 13,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n }}\n >\n Sending...\n </span>\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n )}\n\n {/* Comment input */}\n <CommentInput currentUser={displayCurrentUser} onSubmit={handleSendComment} />\n </div>\n\n {/* Right column — Guidance (rendered via children) */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UpdatedThreads;\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Lightbulb, PlayCircle, PauseCircle, ScrollText } from \"lucide-react\";\n\n/**\n * UpdatedGuidance — Guidance list for interaction details.\n *\n * Figma node: 822-15273\n *\n * Props:\n * - items Array Guidance items\n * - loading boolean Show loading state\n * - onPlayEvidence fn Called with { start_ms, end_ms } to play audio segment\n * - onShowInTranscript fn Called with start_ms to scroll transcript\n *\n * Item shape:\n * - title string Guidance text\n * - signal_refs Array<{ display_name, confidence }>\n * - start_ms number Evidence start time in ms\n * - end_ms number Evidence end time in ms\n */\n\n/* ── Hover icon wrapper (same as UpdatedInteractionSignals) ── */\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\nconst 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/* ── Single guidance item ── */\nconst GuidanceItem = ({ item, isLast, onPlayEvidence, onShowInTranscript, timelinePlaying, currentTimeSeconds }) => {\n const signalText = item.signal_refs\n ?.map((sr) => {\n const name = sr.display_name || sr.signal_key || \"\";\n const pct =\n sr.confidence != null ? ` (${Math.round(sr.confidence * 100)}%)` : \"\";\n return name + pct;\n })\n .join(\", \");\n\n const startMs = item.start_ms ?? item.startMs;\n const endMs = item.end_ms ?? item.endMs;\n const hasTimestamp = startMs != null;\n\n // Check if audio is currently playing within this item's time range\n const currentMs = (currentTimeSeconds ?? 0) * 1000;\n const isPlayingThisItem =\n timelinePlaying &&\n hasTimestamp &&\n currentMs >= startMs &&\n currentMs <= (endMs ?? startMs + 5000);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n padding: \"12px 0\",\n borderBottom: isLast\n ? \"none\"\n : \"1px solid var(--Grey-absent, #D9D9D9)\",\n }}\n >\n {/* Guidance title */}\n <span\n style={{\n alignSelf: \"stretch\",\n fontSize: 14,\n fontWeight: 400,\n color: \"var(--Grey-Strong, #2E3236)\",\n lineHeight: \"150%\",\n }}\n >\n {item.title || item.detail || \"\"}\n </span>\n\n {/* Signal ref + action icons row */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n {signalText && (\n <span\n style={{\n fontSize: 14,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n flex: 1,\n minWidth: 0,\n }}\n >\n {signalText}\n </span>\n )}\n {hasTimestamp && (\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={isPlayingThisItem ? \"Pause\" : \"Play evidence\"}\n onClick={() =>\n onPlayEvidence?.({\n start_ms: startMs,\n end_ms: endMs,\n })\n }\n >\n {isPlayingThisItem ? (\n <PauseCircle\n size={17}\n color=\"var(--Grey-Strong, #2E3236)\"\n strokeWidth={1}\n />\n ) : (\n <PlayCircle\n size={17}\n color=\"var(--Grey-Muted, #808183)\"\n strokeWidth={1}\n />\n )}\n </HoverIcon>\n <HoverIcon\n size={28}\n title=\"Show in transcript\"\n onClick={() => onShowInTranscript?.(startMs)}\n >\n <ScrollText size={16} color=\"#808183\" strokeWidth={1.5} />\n </HoverIcon>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n lineHeight: 1.2,\n whiteSpace: \"nowrap\",\n }}\n >\n {fmtMs(startMs)}\n </span>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/* ── Main Component ── */\nconst UpdatedGuidance = ({\n items = [],\n guidanceCount,\n loading = false,\n onPlayEvidence,\n onShowInTranscript,\n timelinePlaying = false,\n currentTimeSeconds = 0,\n}) => {\n const count = guidanceCount ?? items.length;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n width: \"100%\",\n }}\n >\n {/* Sub-header — icon + Guidance + count */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n paddingTop: 16,\n paddingBottom: 8,\n }}\n >\n <div\n style={{\n width: 34,\n height: 34,\n borderRadius: 9999,\n background: \"var(--surface-hover, #F3F7F7)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Lightbulb\n style={{ width: 20, height: 20, flexShrink: 0 }}\n color=\"var(--Grey-Strong, #2E3236)\"\n strokeWidth={1.5}\n />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 500,\n color: \"var(--Grey-Strong, #2E3236)\",\n }}\n >\n Guidance\n </span>\n <span\n style={{\n fontSize: 13,\n fontWeight: 400,\n color: \"var(--Grey-Muted, #808183)\",\n fontFamily: \"var(--default-font-family)\",\n lineHeight: \"150%\",\n marginLeft: \"auto\",\n }}\n >\n {count} Item{count !== 1 ? \"s\" : \"\"}\n </span>\n </div>\n\n {items.map((item, i) => (\n <GuidanceItem\n key={i}\n item={item}\n isLast={i === items.length - 1}\n onPlayEvidence={onPlayEvidence}\n onShowInTranscript={onShowInTranscript}\n timelinePlaying={timelinePlaying}\n currentTimeSeconds={currentTimeSeconds}\n />\n ))}\n </div>\n );\n};\n\nexport default UpdatedGuidance;\n","import { useState, useRef, useEffect } from 'react';\nimport { ArrowLeft, ArrowRight, CalendarDays, PhoneIncoming, ClipboardList, FileSignal, Repeat, ChevronDown, ChevronRight, Headset, CircleUser, History, ExternalLink, Mail } 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';\nimport UpdatedGuidance from './UpdatedGuidance';\nimport SideDrawer from '../common/SideDrawer';\n\n/* Hover tooltip — fixed position to escape overflow containers.\n Anchored below the trigger. */\nconst NameTooltip = ({ text, children }) => {\n const [show, setShow] = useState(false);\n const triggerRef = useRef(null);\n const [pos, setPos] = useState({ top: 0, left: 0 });\n\n if (!text) return children;\n\n const handleEnter = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setPos({\n top: rect.bottom + 6,\n left: rect.left + rect.width / 2,\n });\n }\n setShow(true);\n };\n\n return (\n <div\n ref={triggerRef}\n style={{ position: 'relative', display: 'inline-flex' }}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setShow(false)}\n >\n {children}\n {show && (\n <div style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n transform: 'translate(-50%, 0)',\n display: 'flex',\n padding: 10,\n alignItems: 'center',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-Strong, #2E3236)',\n zIndex: 9999,\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n }}>\n <span style={{\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 TABS = [\n { key: 'overview', label: 'Overview' },\n { key: 'coaching', label: 'Coaching Summary' },\n { key: 'signals', label: 'Signals & Recording' },\n { key: 'comments', label: 'Feedback' },\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 agentFullName: externalAgentFullName,\n customerName: externalCustomerName,\n customerFullName: externalCustomerFullName,\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 0.5-5\n compassMaxScore = 5,\n predictedCsat, // predicted objective number (e.g. compass_score) — shown as \"03\" top-right\n predictedLabel = 'Predicted Objective',\n compassLegends,\n // Customer session history drawer\n customerSessions: customerSessionsList,\n customerSessionCount,\n onSessionClick,\n onViewAllSessions,\n // Footer navigation\n prevSessionDesc,\n prevSessionDisabled = false,\n nextSessionDesc,\n nextSessionDisabled = false,\n onPreviousSession,\n onNextSession,\n // Comments\n comments = [],\n guidance = [],\n currentUser,\n onSendComment,\n onSendReply,\n onReply,\n onEdit,\n onEditInteraction,\n onDelete,\n onMenuClick,\n onMarkResolved,\n commentsResolved,\n}) => {\n const [activeTab, setActiveTab] = useState('overview');\n const [expandedSignals, setExpandedSignals] = useState(new Set());\n const [showSessionDrawer, setShowSessionDrawer] = useState(false);\n const [hoveredSessionIdx, setHoveredSessionIdx] = useState(null);\n const [internalPlaying, setInternalPlaying] = useState(false);\n const [internalCurrentTime, setInternalCurrentTime] = useState(0);\n const [isScrolledPastHeader, setIsScrolledPastHeader] = useState(false);\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's top is nearest the viewport\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 // Find the closest scrollable ancestor (the element that actually scrolls)\n const getScrollParent = (el) => {\n let node = el.parentElement;\n while (node) {\n const { overflow, overflowY } = window.getComputedStyle(node);\n if (/(auto|scroll)/.test(overflow + overflowY)) return node;\n node = node.parentElement;\n }\n return null;\n };\n\n const scrollParent = getScrollParent(container);\n\n const handleScroll = () => {\n if (isClickScrolling.current) return;\n\n let activeKey = tabKeys[0];\n\n // Use viewport-relative positions — works regardless of which element scrolls\n for (let i = refs.length - 1; i >= 0; i--) {\n const el = refs[i].current;\n if (!el) continue;\n const rect = el.getBoundingClientRect();\n // Section is \"active\" when its top has scrolled above 150px from viewport top\n if (rect.top <= 150) {\n activeKey = tabKeys[i];\n break;\n }\n }\n\n setActiveTab(activeKey);\n\n // Move session nav from title row to sticky tabs once content starts scrolling.\n const overviewTop = overviewRef.current?.getBoundingClientRect().top ?? Number.POSITIVE_INFINITY;\n setIsScrolledPastHeader(overviewTop <= 150);\n };\n\n // Attach to all possible scroll targets\n container.addEventListener('scroll', handleScroll, { passive: true });\n if (scrollParent && scrollParent !== container) {\n scrollParent.addEventListener('scroll', handleScroll, { passive: true });\n }\n window.addEventListener('scroll', handleScroll, { passive: true, capture: true });\n handleScroll();\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n if (scrollParent && scrollParent !== container) {\n scrollParent.removeEventListener('scroll', handleScroll);\n }\n window.removeEventListener('scroll', handleScroll, { capture: true });\n };\n }, []);\n\n const clickedTabRef = useRef(null);\n\n const handleTabClick = (key) => {\n setActiveTab(key);\n isClickScrolling.current = true;\n clickedTabRef.current = key;\n const el = sectionRefs[key]?.current;\n if (el) {\n // Offset scroll to account for the sticky header + tabs (~120px)\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n // Container itself scrolls\n const containerTop = container.getBoundingClientRect().top;\n const elTop = el.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n // Page/parent scrolls — use window with offset\n const elTop = el.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n setTimeout(() => {\n isClickScrolling.current = false;\n clickedTabRef.current = null;\n }, 1200);\n };\n\n const sessionHistory = customerSessionsList || [];\n const hasPastSessions = sessionHistory.length > 1;\n\n /* Called from Signals/Guidance \"Show in transcript\" icon —\n switches to Signals section, then scrolls/highlights transcript card without playing audio. */\n const handleShowInTranscript = (startMs) => {\n setActiveTab('signals');\n const signalsEl = signalsRef.current;\n if (signalsEl) {\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n const containerTop = container.getBoundingClientRect().top;\n const elTop = signalsEl.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n const elTop = signalsEl.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n\n const timeSec = startMs / 1000;\n // Wait briefly so section scroll starts before transcript container scroll/highlight.\n setTimeout(() => {\n if (recordingRef.current?.scrollToTranscript) {\n recordingRef.current.scrollToTranscript(timeSec);\n }\n }, 220);\n };\n\n /* Called from Signals evidence play button — seeks + plays audio segment */\n const handlePlayEvidence = (ev) => {\n setActiveTab('signals');\n const signalsEl = signalsRef.current;\n if (signalsEl) {\n const container = scrollContainerRef.current;\n if (container && container.scrollHeight > container.clientHeight) {\n const containerTop = container.getBoundingClientRect().top;\n const elTop = signalsEl.getBoundingClientRect().top;\n const offset = elTop - containerTop + container.scrollTop - 16;\n container.scrollTo({ top: offset, behavior: 'smooth' });\n } else {\n const elTop = signalsEl.getBoundingClientRect().top + window.scrollY - 120;\n window.scrollTo({ top: elTop, behavior: 'smooth' });\n }\n }\n\n const startMs = ev?.start_ms ?? ev?.startMs;\n\n // Wait briefly so section scroll starts before playback seek/play begins.\n setTimeout(() => {\n // Keep transcript highlight behavior consistent with \"Show in transcript\".\n if (startMs != null && recordingRef.current?.scrollToTranscript) {\n recordingRef.current.scrollToTranscript(startMs / 1000);\n }\n\n if (onPlayEvidence) {\n onPlayEvidence(ev);\n } else {\n // Default: seek to evidence start time via recording ref\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 }, 220);\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 dimensionsBlock = findBlock('interaction-dimensions');\n const blockDimensions = dimensionsBlock.dimensions || [];\n const callPurpose = ctx.call_purpose || {};\n const classification = ctx.classification || {};\n\n const resolvedMeta = meta || {};\n const resolvedCallPurpose = externalCallPurpose || callPurpose || {};\n const resolvedClassification = externalClassification || classification || {};\n const resolvedOutcomeLift = outcomeLift || {};\n const resolvedDriverLabels = (resolvedOutcomeLift.driver_signal_keys || [])\n .map((k) => k.replace(/^sig\\./, '').replace(/_/g, ' '));\n const resolvedCoaching = coachingData || null;\n const resolvedSignals = signals?.signals?.length\n ? signals\n : { present_count: 0, total_signals_evaluated: 0, signals: [] };\n const guidanceData = guidance || [];\n\n // Resolve names: explicit props → metadata block → context block → fallback\n const agentName = externalAgentName || meta.agent_name || meta.agent || ctx.agent_name || 'Agent';\n const agentFullName = externalAgentFullName || meta.agent_full_name || meta.agent_name || agentName;\n const customerName = externalCustomerName || meta.customer_name || meta.customer || ctx.customer_name || 'Customer';\n const customerFullName = externalCustomerFullName || meta.customer_full_name || meta.customer_name || customerName;\n const resolvedUserRole = String(\n currentUser?.role ??\n currentUser?.userRole ??\n currentUser?.user_role ??\n currentUser?.roleName ??\n currentUser?.role_name ??\n ''\n ).toLowerCase();\n const canEditInteraction = /(admin|superadmin|administrator)/.test(resolvedUserRole);\n const sessionCount = customerSessionCount ?? sessionHistory.length;\n const rawDate = meta.created_dt || data?.created_dt || ctx.created_dt || '';\n const dateStr = rawDate\n ? new Date(/Z$|[+-]\\d{2}:\\d{2}$/.test(rawDate) ? rawDate : rawDate + 'Z').toLocaleString()\n : '';\n const direction = resolvedCallPurpose.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 {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '18px 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 flex: 1,\n }}>\n {title}\n </h1>\n\n {/* Figma node 605-1186: Previous / Next Session — inline in header */}\n {(onPreviousSession || onNextSession) && !isScrolledPastHeader && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {/* Previous Session */}\n <NameTooltip text={prevSessionDesc}>\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n opacity: prevSessionDisabled ? 0.4 : 1,\n }}\n >\n <ArrowLeft size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Previous Interaction\n </span>\n </button>\n </NameTooltip>\n\n {/* Divider */}\n <div style={{\n width: 1,\n height: 20,\n background: 'var(--Grey-absent, #D9D9D9)',\n flexShrink: 0,\n }} />\n\n {/* Next Session */}\n <NameTooltip text={nextSessionDesc}>\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n opacity: nextSessionDisabled ? 0.4 : 1,\n }}\n >\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Next Interaction\n </span>\n <ArrowRight size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n </button>\n </NameTooltip>\n </div>\n )}\n </div>\n\n <div style={{ position: 'sticky', top: 68, zIndex: 20, background: 'var(--Grey-White, #FFF)' }}>\n {/* Tabs + sticky session nav at far right */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 16,\n background: 'var(--Grey-White, #FFF)',\n borderBottom: '1px solid var(--Grey-Faint, #ACADAD)',\n padding: '0 24px',\n marginTop: 8,\n }}>\n <div style={{ display: 'flex', alignItems: 'flex-start', minWidth: 0 }}>\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\n {(onPreviousSession || onNextSession) && isScrolledPastHeader && (\n <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n <NameTooltip text={prevSessionDesc}>\n <button\n onClick={prevSessionDisabled ? undefined : onPreviousSession}\n disabled={prevSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: prevSessionDisabled ? 'default' : 'pointer',\n opacity: prevSessionDisabled ? 0.4 : 1,\n }}\n >\n <ArrowLeft size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Previous Interaction\n </span>\n </button>\n </NameTooltip>\n\n <div style={{\n width: 1,\n height: 20,\n background: 'var(--Grey-absent, #D9D9D9)',\n flexShrink: 0,\n }} />\n\n <NameTooltip text={nextSessionDesc}>\n <button\n onClick={nextSessionDisabled ? undefined : onNextSession}\n disabled={nextSessionDisabled}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '4px 12px',\n background: 'none',\n border: 'none',\n cursor: nextSessionDisabled ? 'default' : 'pointer',\n opacity: nextSessionDisabled ? 0.4 : 1,\n }}\n >\n <span style={{\n color: 'var(--Neutral-800, #323232)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: '24px',\n fontFamily: 'var(--default-font-family)',\n whiteSpace: 'nowrap',\n }}>\n Next Interaction\n </span>\n <ArrowRight size={16} color=\"var(--Neutral-800, #323232)\" strokeWidth={1.5} />\n </button>\n </NameTooltip>\n </div>\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 + tooltip */}\n <NameTooltip text={agentFullName}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0', cursor: 'pointer' }}>\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 </NameTooltip>\n\n {/* Repeat icon */}\n {/* <Repeat size={16} color=\"var(--color-input-border, #ACACAD)\" strokeWidth={1.5} /> */}\n\n {/* Customer — CircleUser icon + side drawer trigger (only if > 1 session) */}\n {sessionCount > 1 ? (\n <div>\n <NameTooltip text={customerFullName}>\n <button\n onClick={() => setShowSessionDrawer(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '0 16px',\n height: 34,\n borderRadius: 8,\n background: 'var(--Rail-Surface-2, #E3E1D7)',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>\n <CircleUser size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, whiteSpace: 'nowrap' }}>\n <span style={{ fontWeight: 600 }}>{customerName}</span>{' '}\n <span>({sessionCount} Interactions)</span>\n </span>\n </div>\n <ChevronRight size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </button>\n </NameTooltip>\n </div>\n ) : (\n <NameTooltip text={customerFullName}>\n <button\n onClick={() => setShowSessionDrawer(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '0 16px',\n height: 34,\n borderRadius: 8,\n background: 'var(--Rail-Surface-2, #E3E1D7)',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>\n <CircleUser size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 600, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, whiteSpace: 'nowrap' }}>\n {customerName}\n </span>\n </div>\n <ChevronRight size={16} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </button>\n </NameTooltip>\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.5}\n minScore={0}\n maxScore={compassMaxScore}\n predictedScore={predictedCsat ?? 0.5}\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={resolvedMeta}\n callPurpose={resolvedCallPurpose}\n classification={resolvedClassification}\n outcomeQuality={externalOutcomeQuality || 'Neutral'}\n dimensions={blockDimensions}\n resolutionOutcome={resolutionOutcome}\n customerIntent={customerIntent}\n interactionId={interactionId ?? meta.interaction_id}\n moreDetails={moreDetails}\n canShowEditButton={canEditInteraction}\n onEditInteraction={onEditInteraction}\n />\n <UpdatedInteractionScores\n outcomeLift={resolvedOutcomeLift}\n driverLabels={resolvedDriverLabels}\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 : resolvedCoaching} 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={resolvedSignals}\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={resolvedMeta.duration_seconds}\n audioRef={externalAudioRef}\n agentName={agentName}\n customerName={customerName}\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 {/* ═══ FEEDBACK SECTION ═══ */}\n <div ref={commentsRef} style={{ paddingTop: 24 }}>\n <UpdatedThreads\n comments={comments}\n totalComments={comments.length}\n currentUser={currentUser}\n onSendComment={onSendComment || (() => {})}\n onSendReply={onSendReply || (() => {})}\n onReply={onReply || (() => {})}\n onEdit={onEdit || (() => {})}\n onDelete={onDelete || (() => {})}\n onMenuClick={onMenuClick || (() => {})}\n onMarkResolved={onMarkResolved || (() => {})}\n isResolved={commentsResolved}\n >\n <UpdatedGuidance\n items={guidanceData}\n guidanceCount={guidanceData.length}\n onPlayEvidence={handlePlayEvidence}\n onShowInTranscript={handleShowInTranscript}\n timelinePlaying={timelinePlaying || internalPlaying}\n currentTimeSeconds={currentTimeSeconds ?? internalCurrentTime}\n />\n </UpdatedThreads>\n </div>\n </div>\n\n <SideDrawer\n open={showSessionDrawer}\n onClose={() => setShowSessionDrawer(false)}\n title={(\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, minWidth: 0 }}>\n <div style={{\n width: 34,\n height: 34,\n borderRadius: '50%',\n background: 'var(--surface-hover, #F3F7F7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <CircleUser size={20} color=\"var(--Grey-Strong, #2E3236)\" strokeWidth={1.7} />\n </div>\n <div style={{ minWidth: 0 }}>\n <div style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {customerName}\n </div>\n </div>\n </div>\n )}\n subtitle={hasPastSessions ? (\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1.5,\n }}>\n {sessionCount} Interactions in Past\n </span>\n ) : null}\n width={470}\n height=\"100vh\"\n topOffset={70}\n footer={hasPastSessions ? (\n <div style={{ width: '100%', display: 'flex', justifyContent: 'center' }}>\n <button\n onClick={() => { if (onViewAllSessions) onViewAllSessions(); setShowSessionDrawer(false); }}\n style={{\n display: 'flex',\n height: 40,\n padding: '0 20px 0 18px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 7,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 10,\n cursor: 'pointer',\n }}\n >\n <History size={18} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 15, fontWeight: 600, color: 'var(--Grey-Strong, #2E3236)' }}>\n View All Interactions\n </span>\n </button>\n </div>\n ) : null}\n >\n <div\n style={{\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n maxHeight: '100%',\n overflowY: 'auto',\n }}\n >\n {hasPastSessions ? sessionHistory.map((session, i) => (\n <div\n key={session.id || i}\n onClick={() => { if (onSessionClick) onSessionClick(session); setShowSessionDrawer(false); }}\n onMouseEnter={() => setHoveredSessionIdx(i)}\n onMouseLeave={() => setHoveredSessionIdx(null)}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 12,\n padding: '16px 12px',\n borderTop: i === 0 ? 'none' : '1px solid var(--Grey-absent, #D9D9D9)',\n background: hoveredSessionIdx === i ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n cursor: 'pointer',\n transition: 'background 0.15s',\n }}\n >\n <div style={{ minWidth: 0 }}>\n <div style={{ fontSize: 14, display: 'flex', alignItems: 'center', gap: 6, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2, marginBottom: 8, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {session.title}\n </div>\n {session.status && (\n <div style={{ fontSize: 13, color: 'var(--Grey-Strong, #2E3236)', marginBottom: 12, lineHeight: 1.2 }}>\n <span style={{ fontWeight: 400 }}>Status: </span>\n <span style={{ fontWeight: 400, color: 'var(--Grey-Muted, #808183)' }}>{session.status}</span>\n </div>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 14, flexWrap: 'wrap' }}>\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6, fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.1 }}>\n <CalendarDays size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.8} />\n {session.date}\n </span>\n {(session.agent || session.agent_name) && (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6, fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.1 }}>\n <Headset size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.8} />\n {session.agent || session.agent_name}\n </span>\n )}\n </div>\n </div>\n {hoveredSessionIdx === i && (\n <ExternalLink size={20} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.7} style={{ flexShrink: 0 }} />\n )}\n </div>\n )) : (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: 140,\n padding: '24px 12px',\n color: 'var(--Grey-Muted, #808183)',\n fontSize: 14,\n fontStyle: 'italic',\n textAlign: 'center',\n }}\n >\n No other interactions available\n </div>\n )}\n </div>\n </SideDrawer>\n\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","s","ROW_STYLE","COLUMN_STYLE","UpdatedInteractionContext","meta","callPurpose","classification","dimensions","outcomeQuality","onMoreDetails","moreDetails","resolutionOutcome","customerIntent","canShowEditButton","onEditInteraction","expanded","setExpanded","useState","moreDetailsRef","useRef","duration","messages","driver","paradigm","findDim","keyPattern","d","dimResolution","dimIntent","dimOutcomeQuality","fmtValue","v","c","resolvedOutcomeQuality","resolvedResolutionOutcome","resolvedCustomerIntent","excludedKeys","k","filteredDimensions","pairedRows","rawPairs","left","right","pair","detailRows","useEffect","handleOutsideClick","event","renderRow","renderMoreDetailsToggle","p","ChevronUp","ChevronDown","Pencil","idx","row","LH","MAX_VISIBLE_DRIVERS","fmtPct","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","minScore","maxScore","numericScore","clampedScore","filledUnits","segDeg","toXY","angleDeg","rad","strokeArc","fromDeg","toDeg","large","gap","_","fromA","toA","segmentFill","pathD","ScoreBar","value","maxValue","numericValue","clampedValue","LEGEND_TOOLTIPS","InfoTooltip","show","setShow","ref","pos","setPos","rect","LegendItem","Info","UpdatedCompassScore","predictedScore","predictedLabel","description","legends","displayScore","rotateDeg","legend","roleColorMap","role","roleTokens","extractRoleValue","user","directRole","nestedRole","_d","_e","_f","resolveCurrentUserAvatarColor","getInitials","name","w","isWithinEditWindow","utcValue","minMatch","formatTimestamp","diffMs","diffMin","diffHr","diffDays","Avatar","initials","color","avatar","CommentBubble","comment","isReply","isConsecutive","onReply","onSendReply","onEdit","onDelete","onMenuClick","showReply","menuOpen","setMenuOpen","replyOpen","setReplyOpen","replyValue","setReplyValue","editOpen","setEditOpen","editValue","setEditValue","confirmDelete","setConfirmDelete","menuRef","replyRef","editRef","author","authorName","avatarColor","avatarImg","rawTimestamp","timestamp","canEdit","isEdited","paragraphs","handler","ta","max","Ellipsis","X","paragraph","CornerDownRight","CommentInput","currentUser","onSubmit","setValue","isFocused","setIsFocused","textareaRef","handleSubmit","trimmed","handleKeyDown","CommentThread","depth","hasReplies","isLastAtDepth","reply","UpdatedThreads","externalComments","totalComments","onSendComment","onMarkResolved","isResolved","localComments","setLocalComments","isSending","setIsSending","allComments","useMemo","externalIds","newLocal","prev","displayCurrentUser","handleSendReply","content","parentId","optimisticReply","handleSendComment","optimisticComment","handleEdit","handleDelete","groupedComments","repliesByParent","buildTree","commentCount","MessagesSquare","Check","CircleCheck","prevAuthor","currAuthor","GuidanceItem","isLast","onPlayEvidence","signalText","sr","pct","startMs","endMs","hasTimestamp","currentMs","isPlayingThisItem","UpdatedGuidance","guidanceCount","count","NameTooltip","triggerRef","TABS","UpdatedInteractionDetails","onBack","coachingData","coachingLoading","audioUrl","externalAudioRef","playbackRate","timelineSegments","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","externalAgentName","externalAgentFullName","externalCustomerName","externalCustomerFullName","transcript","activeTurnIndex","turnObservations","highlightedTurns","onTurnPlayPause","onHighlightTurns","externalCallPurpose","externalClassification","externalOutcomeQuality","interactionId","compassScore","compassMaxScore","predictedCsat","compassLegends","customerSessionsList","customerSessionCount","onSessionClick","onViewAllSessions","prevSessionDesc","prevSessionDisabled","nextSessionDesc","nextSessionDisabled","onPreviousSession","onNextSession","comments","guidance","commentsResolved","activeTab","setActiveTab","setExpandedSignals","showSessionDrawer","setShowSessionDrawer","hoveredSessionIdx","setHoveredSessionIdx","internalPlaying","setInternalPlaying","internalCurrentTime","setInternalCurrentTime","isScrolledPastHeader","setIsScrolledPastHeader","recordingRef","overviewRef","coachingRef","signalsRef","commentsRef","sectionRefs","scrollContainerRef","isClickScrolling","container","tabKeys","refs","scrollParent","el","node","overflow","overflowY","handleScroll","activeKey","overviewTop","clickedTabRef","handleTabClick","containerTop","offset","elTop","sessionHistory","hasPastSessions","handleShowInTranscript","signalsEl","timeSec","handlePlayEvidence","durationMs","handleHighlightTurns","turnIds","next","blocks","findBlock","id","b","ctx","blockDimensions","resolvedMeta","resolvedCallPurpose","resolvedClassification","resolvedOutcomeLift","resolvedDriverLabels","resolvedCoaching","resolvedSignals","guidanceData","agentName","agentFullName","customerName","customerFullName","resolvedUserRole","canEditInteraction","sessionCount","rawDate","dateStr","direction","ArrowLeft","ArrowRight","tab","ClipboardList","CalendarDays","PhoneIncoming","Headset","CircleUser","ChevronRight","UpdatedInteractionRecording","SideDrawer","History","session","ExternalLink"],"mappings":"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"}
|