chordia-ui 3.3.8 → 3.3.9
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/AgentLiftCard.cjs.js.map +1 -1
- package/dist/AgentLiftCard.es.js +5 -3
- package/dist/AgentLiftCard.es.js.map +1 -1
- package/dist/CustomFilterChips.cjs.js.map +1 -1
- package/dist/CustomFilterChips.es.js +2 -1
- package/dist/CustomFilterChips.es.js.map +1 -1
- package/dist/FileUploadingState.cjs.js.map +1 -1
- package/dist/FileUploadingState.es.js +16 -10
- package/dist/FileUploadingState.es.js.map +1 -1
- package/dist/IntegrationCard.cjs.js.map +1 -1
- package/dist/IntegrationCard.es.js +3 -3
- package/dist/IntegrationCard.es.js.map +1 -1
- package/dist/SectionLabel.cjs.js.map +1 -1
- package/dist/SectionLabel.es.js.map +1 -1
- package/dist/SmallButton.cjs.js.map +1 -1
- package/dist/SmallButton.es.js +16 -16
- package/dist/SmallButton.es.js.map +1 -1
- package/dist/SummarySection.cjs.js.map +1 -1
- package/dist/SummarySection.es.js +11 -9
- package/dist/SummarySection.es.js.map +1 -1
- package/dist/TextInput.cjs.js.map +1 -1
- package/dist/TextInput.es.js.map +1 -1
- package/dist/Timeline.cjs.js.map +1 -1
- package/dist/Timeline.es.js +14 -8
- package/dist/Timeline.es.js.map +1 -1
- package/dist/Tooltip.cjs.js +1 -1
- package/dist/Tooltip.cjs.js.map +1 -1
- package/dist/Tooltip.es.js +31 -20
- package/dist/Tooltip.es.js.map +1 -1
- package/dist/TourGuideTooltip.cjs.js.map +1 -1
- package/dist/TourGuideTooltip.es.js +2 -1
- package/dist/TourGuideTooltip.es.js.map +1 -1
- package/dist/UpdatedInteractionRecording.cjs.js +1 -1
- package/dist/UpdatedInteractionRecording.cjs.js.map +1 -1
- package/dist/UpdatedInteractionRecording.es.js +79 -97
- package/dist/UpdatedInteractionRecording.es.js.map +1 -1
- package/dist/UploadInteraction.cjs.js.map +1 -1
- package/dist/UploadInteraction.es.js.map +1 -1
- package/dist/colors.cjs.js +2 -0
- package/dist/colors.cjs.js.map +1 -0
- package/dist/colors.es.js +2 -0
- package/dist/colors.es.js.map +1 -0
- package/dist/components/UpdatedInteractionDetails.cjs.js +10 -1
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +1531 -9
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/dist/components/chat.cjs.js +30 -1
- package/dist/components/chat.cjs.js.map +1 -1
- package/dist/components/chat.es.js +2222 -7
- package/dist/components/chat.es.js.map +1 -1
- package/dist/components/common.cjs.js +1 -1
- package/dist/components/common.es.js +32 -25
- package/dist/components/common.es.js.map +1 -1
- package/dist/components/data.cjs.js +1 -1
- package/dist/components/data.cjs.js.map +1 -1
- package/dist/components/data.es.js +1033 -4
- package/dist/components/data.es.js.map +1 -1
- package/dist/components/layout.cjs.js +3 -1
- package/dist/components/layout.cjs.js.map +1 -1
- package/dist/components/layout.es.js +1533 -8
- package/dist/components/layout.es.js.map +1 -1
- package/dist/components/login.cjs.js +1 -1
- package/dist/components/login.es.js +6 -2
- package/dist/components/login.es.js.map +1 -1
- package/dist/components/media.cjs.js +1 -1
- package/dist/components/media.cjs.js.map +1 -1
- package/dist/components/media.es.js +220 -6
- package/dist/components/media.es.js.map +1 -1
- package/dist/components/models.cjs.js +1 -1
- package/dist/components/models.cjs.js.map +1 -1
- package/dist/components/models.es.js +91 -2
- package/dist/components/models.es.js.map +1 -1
- package/dist/components/navigation.cjs.js +1 -1
- package/dist/components/navigation.cjs.js.map +1 -1
- package/dist/components/navigation.es.js +766 -7
- package/dist/components/navigation.es.js.map +1 -1
- package/dist/components/notifications.cjs.js +1 -1
- package/dist/components/notifications.cjs.js.map +1 -1
- package/dist/components/notifications.es.js +368 -3
- package/dist/components/notifications.es.js.map +1 -1
- package/dist/components/onboarding.cjs.js +1 -1
- package/dist/components/onboarding.cjs.js.map +1 -1
- package/dist/components/onboarding.es.js +985 -7
- package/dist/components/onboarding.es.js.map +1 -1
- package/dist/components/primitives.cjs.js +1 -1
- package/dist/components/primitives.cjs.js.map +1 -1
- package/dist/components/primitives.es.js +635 -25
- package/dist/components/primitives.es.js.map +1 -1
- package/dist/debugger-wc.cjs.js +4 -4
- package/dist/debugger-wc.cjs.js.map +1 -1
- package/dist/debugger-wc.es.js +15 -11
- package/dist/debugger-wc.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs2.js +2 -49
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.cjs3.js +50 -0
- package/dist/index.cjs3.js.map +1 -0
- package/dist/index.es.js +104 -99
- package/dist/index.es.js.map +1 -1
- package/dist/index.es2.js +2632 -1776
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es3.js +1944 -0
- package/dist/index.es3.js.map +1 -0
- package/dist/pages/interactionDetails.cjs.js +1 -1
- package/dist/pages/interactionDetails.cjs.js.map +1 -1
- package/dist/pages/interactionDetails.es.js +70 -47
- package/dist/pages/interactionDetails.es.js.map +1 -1
- package/dist/sortable.esm.cjs.js +1 -1
- package/dist/sortable.esm.cjs.js.map +1 -1
- package/dist/sortable.esm.es.js +55 -53
- package/dist/sortable.esm.es.js.map +1 -1
- package/dist/{chordia-ui.css → style.css} +1 -1
- package/package.json +1 -1
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +318 -77
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx +7 -17
- package/dist/ChartRenderer.cjs.js +0 -31
- package/dist/ChartRenderer.cjs.js.map +0 -1
- package/dist/ChartRenderer.es.js +0 -2210
- package/dist/ChartRenderer.es.js.map +0 -1
- package/dist/GettingStarted.cjs.js +0 -2
- package/dist/GettingStarted.cjs.js.map +0 -1
- package/dist/GettingStarted.es.js +0 -983
- package/dist/GettingStarted.es.js.map +0 -1
- package/dist/InlineConfirm.cjs.js +0 -2
- package/dist/InlineConfirm.cjs.js.map +0 -1
- package/dist/InlineConfirm.es.js +0 -618
- package/dist/InlineConfirm.es.js.map +0 -1
- package/dist/InteractionSummaryCard.cjs.js +0 -2
- package/dist/InteractionSummaryCard.cjs.js.map +0 -1
- package/dist/InteractionSummaryCard.es.js +0 -216
- package/dist/InteractionSummaryCard.es.js.map +0 -1
- package/dist/LoginPage.cjs.js +0 -3
- package/dist/LoginPage.cjs.js.map +0 -1
- package/dist/LoginPage.es.js +0 -2618
- package/dist/LoginPage.es.js.map +0 -1
- package/dist/NavigationBar.cjs.js +0 -2
- package/dist/NavigationBar.cjs.js.map +0 -1
- package/dist/NavigationBar.es.js +0 -762
- package/dist/NavigationBar.es.js.map +0 -1
- package/dist/NotificationPanel.cjs.js +0 -2
- package/dist/NotificationPanel.cjs.js.map +0 -1
- package/dist/NotificationPanel.es.js +0 -371
- package/dist/NotificationPanel.es.js.map +0 -1
- package/dist/OverlayPanel.cjs.js +0 -2
- package/dist/OverlayPanel.cjs.js.map +0 -1
- package/dist/OverlayPanel.es.js +0 -93
- package/dist/OverlayPanel.es.js.map +0 -1
- package/dist/SplitPane.cjs.js +0 -4
- package/dist/SplitPane.cjs.js.map +0 -1
- package/dist/SplitPane.es.js +0 -1531
- package/dist/SplitPane.es.js.map +0 -1
- package/dist/SummaryStatsPanel.cjs.js +0 -2
- package/dist/SummaryStatsPanel.cjs.js.map +0 -1
- package/dist/SummaryStatsPanel.es.js +0 -1027
- package/dist/SummaryStatsPanel.es.js.map +0 -1
- package/dist/UpdatedInteractionDetails.cjs.js +0 -11
- package/dist/UpdatedInteractionDetails.cjs.js.map +0 -1
- package/dist/UpdatedInteractionDetails.es.js +0 -1310
- package/dist/UpdatedInteractionDetails.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdatedInteractionDetails.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
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/UpdatedInteractionDetails.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { ShieldCheck, ThumbsUp, TrendingUp, Lightbulb } from \"lucide-react\";\n\n/**\n * UpdatedCoachingSynthesisCard — \"COACHING SUMMARY\" section matching Figma node 113-7216.\n *\n * Props:\n * - data object Coaching synthesis response\n * - loading boolean Show shimmer loading state\n * - error string Error message to display\n *\n * Data shape:\n * - one_liner string\n * - context string\n * - strengths Array<{ text: string, quote?: string }>\n * - improvements Array<{ text: string, quote?: string }>\n * - overall string \"effective\" | \"strong\" | \"needs_improvement\" | \"mixed\"\n */\n\nconst COLORS = {\n strong: \"var(--Grey-Strong, #2E3236)\",\n muted: \"var(--Grey-Muted, #808183)\",\n absent: \"var(--Grey-absent, #D9D9D9)\",\n accent: \"var(--rail-orange, #C98A5A)\",\n itemText: \"var(--text-item, #3F3F3F)\",\n quoteLine: \"var(--border-warm, #B2AEA8)\",\n quoteText: \"var(--text-subtle-warm, #767473)\",\n iconBg: \"var(--surface-hover, #F3F7F7)\",\n};\n\nconst OVERALL_MAP = {\n effective: \"Effective\",\n strong: \"Strong\",\n needs_improvement: \"Needs Improvement\",\n mixed: \"Mixed\",\n};\n\nconst STYLE_ID = \"updated-coaching-synthesis-keyframes\";\n\nfunction ensureKeyframes() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes updated-coaching-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n }\n @keyframes updated-coaching-pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction OverallBadge({ overall }) {\n const label = OVERALL_MAP[overall] || (overall ? overall.replace(/_/g, \" \") : \"\");\n\n return (\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 0,\n }}>\n <span style={{\n fontSize: 13,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n Overall:\n </span>\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}>\n <ThumbsUp size={14} color={COLORS.strong} strokeWidth={1.5} />\n <span style={{\n fontSize: 13,\n fontWeight:600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n }}>\n {label}\n </span>\n </div>\n </div>\n );\n}\n\nfunction SectionItem({ item }) {\n const text = typeof item === \"string\" ? item : item?.text || \"\";\n const quote = typeof item === \"object\" ? item?.quote : null;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 14 }}>\n <div style={{\n fontSize: 14,\n fontWeight: 600,\n color: COLORS.itemText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {text}\n </div>\n {quote && (\n <div style={{\n display: \"flex\",\n gap: 10,\n }}>\n <div style={{\n width: 1,\n flexShrink: 0,\n alignSelf: \"stretch\",\n background: COLORS.quoteLine,\n }} />\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.quoteText,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n “{quote}”\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CoachingColumn({ icon, label, items }) {\n if (!items || items.length === 0) return null;\n\n return (\n <div style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n borderRadius: 12,\n }}>\n {/* Column header */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 16,\n }}>\n {/* Icon with circular bg */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n borderRadius: 9999,\n background: COLORS.iconBg,\n flexShrink: 0,\n }}>\n {icon}\n </div>\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: \"normal\",\n }}>\n {label}\n </span>\n </div>\n\n {/* Items */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 24 }}>\n {items.map((item, i) => (\n <SectionItem key={i} item={item} />\n ))}\n </div>\n </div>\n );\n}\n\nconst UpdatedCoachingSynthesisCard = ({ data, loading, error }) => {\n React.useEffect(() => { ensureKeyframes(); }, []);\n\n // Loading state\n if (loading) {\n return (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n }}>\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}>\n <div style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: COLORS.accent,\n animation: \"updated-coaching-pulse 1.5s ease-in-out infinite\",\n }} />\n <span style={{\n fontSize: 14,\n color: COLORS.muted,\n fontWeight: 500,\n }}>\n Synthesizing coaching summary...\n </span>\n </div>\n {[180, 260, 220].map((w, i) => (\n <div\n key={i}\n style={{\n height: 10,\n width: w,\n maxWidth: \"100%\",\n borderRadius: 4,\n background: `linear-gradient(90deg, ${COLORS.absent} 25%, var(--shimmer-mid, #ECECEC) 50%, ${COLORS.absent} 75%)`,\n backgroundSize: \"200% 100%\",\n animation: \"updated-coaching-shimmer 1.8s ease-in-out infinite\",\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div style={{\n fontSize: 14,\n color: COLORS.muted,\n }}>\n Unable to generate coaching summary.\n </div>\n );\n }\n\n // No data\n if (!data) return null;\n\n const strengths = data.strengths || [];\n const improvements = data.improvements || [];\n const oneLiner = typeof data.one_liner === \"string\" ? data.one_liner : data.one_liner?.text || \"\";\n const context = typeof data.context === \"string\" ? data.context : data.context?.text || \"\";\n\n return (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n background: \"#FFF\",\n }}>\n {/* Section header — Figma: icon + \"Coaching Summary\" 16px / 700 / #2E3236 */}\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}>\n <ShieldCheck size={20} color={COLORS.accent} strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.2,\n textTransform: \"uppercase\",\n }}>\n Coaching Summary\n </span>\n </div>\n\n {/* One-liner — Figma: 14px / 600 / #2E3236 */}\n {oneLiner && (\n <div style={{\n fontSize: 14,\n fontWeight: 500,\n color: COLORS.strong,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n }}>\n {oneLiner}\n </div>\n )}\n\n {/* Context row + Overall badge — Figma: horizontal, space-between */}\n <div style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 16,\n justifyContent: \"space-between\",\n }}>\n {context && (\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: \"var(--font-sans)\",\n lineHeight: 1.5,\n flex: 1,\n }}>\n {context}\n </div>\n )}\n {data.overall && <OverallBadge overall={data.overall} />}\n </div>\n\n {/* Two-column layout: Key Strengths + Improvements */}\n {/* Figma: border-top 1px #D9D9D9, padding-top 24px, gap 24px */}\n {(strengths.length > 0 || improvements.length > 0) && (\n <div style={{\n display: \"flex\",\n gap: 24,\n paddingTop: 24,\n borderTop: `1px solid ${COLORS.absent}`,\n }}>\n <CoachingColumn\n icon={<TrendingUp size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Key Strengths\"\n items={strengths}\n />\n <CoachingColumn\n icon={<Lightbulb size={14} color={COLORS.strong} strokeWidth={1.5} />}\n label=\"Improvements\"\n items={improvements}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedCoachingSynthesisCard;\n","import { ExternalLink } from 'lucide-react';\n\n/*\n * Figma node: 101-2385 (Context grid — right column top, inside Frame 53 > Frame 56)\n *\n * Outer: display: flex; gap: 24px; horizontal\n * Two columns: flex: 1, vertical, gap: 12px\n *\n * Each metadata row:\n * padding: 8px 8px 12px 8px;\n * justify-content: space-between;\n * align-items: center;\n * border-bottom: 1px solid #D9D9D9;\n *\n * Label: 13px / 400 / #2E3236 (Grey/Strong)\n * Value: 13px / 400 / #808183 (Grey/Muted)\n *\n * More Details: ExternalLink icon 16px #808183 + \"More Details\" 13px/400/#2E3236\n */\n\nfunction fmtDur(seconds) {\n const m = Math.floor(seconds / 60);\n const s = Math.round(seconds % 60);\n return `${m}:${s.toString().padStart(2, '0')}`;\n}\n\nconst ROW_STYLE = {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 8px 12px 8px',\n alignItems: 'center',\n gap: 24,\n fontFamily: 'var(--font-sans)',\n fontSize: 13,\n fontWeight: 400,\n lineHeight: 'normal',\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n};\n\nconst COLUMN_STYLE = {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 0 0',\n gap: 12,\n minWidth: 0,\n};\n\nconst UpdatedInteractionContext = ({\n meta = {},\n callPurpose = {},\n classification = {},\n dimensions = [],\n outcomeQuality = 'Neutral',\n onMoreDetails,\n}) => {\n const duration = meta.duration_seconds != null ? fmtDur(meta.duration_seconds) : null;\n const messages = meta.message_count;\n const driver = callPurpose.interaction_driver;\n const paradigm = classification.interaction_paradigm;\n\n // Left column rows\n const leftRows = [\n duration != null && { label: 'Duration', value: duration },\n driver != null && { label: 'Driver', value: driver },\n ...dimensions.filter((_, i) => i % 2 === 0).map((d) => ({ label: d.label || d.key, value: d.value })),\n { label: 'Outcome Quality', value: outcomeQuality },\n ].filter(Boolean);\n\n // Right column rows\n const rightRows = [\n messages != null && { label: 'Messages', value: messages },\n paradigm != null && { label: 'Paradigm', value: paradigm },\n ...dimensions.filter((_, i) => i % 2 === 1).map((d) => ({ label: d.label || d.key, value: d.value })),\n { label: 'More Details', isLink: true },\n ].filter(Boolean);\n\n const renderRow = (item) => {\n if (item.isLink) {\n return (\n <div\n key={item.label}\n onClick={onMoreDetails}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '8px 0 8px 0',\n cursor: 'pointer',\n fontFamily: 'var(--font-sans)',\n }}\n >\n <ExternalLink size={16} color=\"#808183\" strokeWidth={1.5} />\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', fontSize: 13, fontWeight: 400 }}>\n {item.label}\n </span>\n </div>\n );\n }\n\n return (\n <div\n key={item.label}\n style={ROW_STYLE}\n >\n <span style={{ color: 'var(--Grey-Strong, #2E3236)', whiteSpace: 'nowrap', flexShrink: 0 }}>\n {item.label}\n </span>\n <span style={{ color: 'var(--Grey-Muted, #808183)', textAlign: 'right' }}>\n {item.value}\n </span>\n </div>\n );\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n {/* Left column */}\n <div style={COLUMN_STYLE}>\n {leftRows.map((row) => renderRow(row))}\n </div>\n\n {/* Right column */}\n <div style={COLUMN_STYLE}>\n {rightRows.map((row) => renderRow(row))}\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionContext;\n","import React from 'react';\nimport { ThumbsUp, Plus } from 'lucide-react';\n\n/*\n * Figma node: 101-2386 (Agent Lift Analysis)\n *\n * Container: fill=#F3F1E5, padding: 24px, gap: 24px, vertical,\n * border-radius: 8px, border: 1px solid #D9D9D9\n *\n * Header (Frame 12): vertical, gap: 32\n * Row (Frame 20): horizontal, space-between, center\n * \"Agent Lift Analysis\" — 15px/700/#2E3236, lh=120%\n * Right (Frame 18): horizontal, gap: 8, center\n * \"vs. Average Agent:\" — 13px/400/#2E3236, lh=120%\n * \"+4.3pp\" — 14px/700/#2E3236, lh=120%\n * Divider: border-left 1px #D9D9D9, padding-left: 8\n * ThumbsUp 14x14 + \"Positive\" 13px/700/#2E3236\n *\n * Metrics (Frame 15): horizontal, gap: 24, align: bottom\n * Col 1 (Frame 8): vertical, gap: 16, center\n * \"94%\" — 28px/400/#808183, lh=120%\n * Labels: vertical, gap: 8\n * \"Expected Outcome\" — 13px/400/#2E3236\n * \"Based on call type & difficulty\" — 13px/400/#808183\n * Plus icon: 16x16, fill=#2E3236, radius: 24, white stroke\n * Col 2 (Frame 9): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"-11.0pp\" — 28px/400/#808183\n * \"Agent Impact\" — 13px/400/#2E3236\n * \"Behavior-driven change\" — 13px/400/#808183\n * Col 3 (Frame 7): vertical, gap: 16, pad-left: 24, border-left: 1px #D9D9D9\n * \"83%\" — 28px/400/#2E3236 (highlighted)\n * \"Predicted Outcome\" — 13px/700/#2E3236\n * \"With agent behaviors\" — 13px/400/#808183\n *\n * Key Drivers (Frame 13): vertical, gap: 4\n * \"Key Drivers\" — 12px/700/#2E3236, lh=120%\n * Chips (Frame 16): horizontal, gap: 4\n * Each: bg=#FFF, pad=8, radius=4, border 1px #D9D9D9\n * Text: 12px/400/#2E3236, lh=120%\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n cardBg: 'var(--surface-warm-40, rgba(243, 241, 229, 0.40))',\n};\n\nconst LH = 1.2;\nconst MAX_VISIBLE_DRIVERS = 3;\n\nconst fmtPct = (v) => (v != null ? Math.round(v * 100) + '%' : '\\u2014');\n\nconst fmtPp = (v) => {\n if (v == null) return '\\u2014';\n const pp = (v * 100).toFixed(1);\n return v > 0 ? `+${pp}pp` : `${pp}pp`;\n};\n\nconst UpdatedInteractionScores = ({ outcomeLift, driverLabels = [] }) => {\n if (!outcomeLift || outcomeLift.lift == null) return null;\n\n const pExpected = outcomeLift.p_expected;\n const pFull = outcomeLift.p_full;\n const liftRaw =\n outcomeLift.lift_raw ??\n (pFull != null && pExpected != null ? pFull - pExpected : null);\n const liftRecentered = outcomeLift.lift;\n\n const liftBand = outcomeLift.interpretation?.lift_band\n ? outcomeLift.interpretation.lift_band.replace(/_/g, ' ')\n : liftRecentered >= 0\n ? 'Positive'\n : 'Negative';\n\n const liftBandCapitalized =\n liftBand.charAt(0).toUpperCase() + liftBand.slice(1);\n\n const visibleDrivers = driverLabels.slice(0, MAX_VISIBLE_DRIVERS);\n const overflowCount = driverLabels.length - MAX_VISIBLE_DRIVERS;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n gap: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.cardBg,\n alignSelf: 'stretch',\n }}\n >\n {/* Frame 12: Header + Metrics — vertical, gap: 32 */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n\n {/* Frame 20: Title row — horizontal, space-between, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 24,\n alignSelf: 'stretch',\n }}\n >\n <span\n style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Agent Lift Analysis\n </span>\n\n {/* Frame 18: right meta — horizontal, gap: 8, center */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n fontFamily: 'var(--font-sans)',\n }}\n >\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, lineHeight: LH }}>\n vs. Average Agent:\n </span>\n {/* Frame 19: value */}\n <span style={{ fontSize: 14, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {fmtPp(liftRecentered)}\n </span>\n {/* Frame 21: divider + thumbsup + band */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n paddingLeft: 8,\n borderLeft: `1px solid ${COLORS.absent}`,\n }}\n >\n <ThumbsUp size={14} color={COLORS.strong} />\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, lineHeight: LH }}>\n {liftBandCapitalized}\n </span>\n </div>\n </div>\n </div>\n\n {/* Frame 15: Metrics row — horizontal, gap: 24, align: bottom */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n gap: 24,\n }}\n >\n {/* Frame 8: Expected Outcome — vertical, gap: 16, center */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center' }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pExpected)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Expected Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Based on call type & difficulty\n </span>\n </div>\n </div>\n\n {/* Plus icon: 16x16, fill=#2E3236, radius: 24 */}\n {/* <div\n style={{\n width: 16,\n height: 16,\n borderRadius: 24,\n background: COLORS.strong,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <Plus size={9.33} color={COLORS.white} strokeWidth={1} />\n </div> */}\n\n {/* Frame 9: Agent Impact — vertical, gap: 16, pad-left: 24, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPp(liftRaw)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Agent Impact\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Behavior-driven change\n </span>\n </div>\n </div>\n\n {/* Frame 7: Predicted Outcome — vertical, gap: 16, pad-left: 24, border-left */}\n <div style={{\n display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'center',\n paddingLeft: 24, borderLeft: `1px solid ${COLORS.absent}`,\n }}>\n <span style={{ fontSize: 28, fontWeight: 400, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n {fmtPct(pFull)}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: COLORS.strong, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n Predicted Outcome\n </span>\n <span style={{ fontSize: 13, fontWeight: 400, color: COLORS.muted, fontFamily: 'var(--font-sans)', lineHeight: LH }}>\n With agent behaviors\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Frame 13: Key Drivers — vertical, gap: 4 */}\n {driverLabels.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4, alignSelf: 'stretch' }}>\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n }}\n >\n Key Drivers\n </span>\n {/* Frame 16: chips — horizontal, gap: 4 */}\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {visibleDrivers.map((label, i) => (\n <div\n key={i}\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: 200,\n }}\n >\n {label}\n </span>\n </div>\n ))}\n {overflowCount > 0 && (\n <div\n style={{\n display: 'flex',\n padding: 8,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: LH,\n whiteSpace: 'nowrap',\n }}\n >\n + {overflowCount}\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default UpdatedInteractionScores;\n","import { useState } from 'react';\nimport { ChevronDown, ChevronUp, PlayCircle, 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 ev.text && (\n <div\n key={evIdx}\n onClick={(e) => {\n e.stopPropagation();\n 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: 'pointer',\n }}\n >\n <HoverIcon size={28}>\n <PlayCircle\n size={17}\n color={isEvPlaying(ev) ? 'var(--rail-orange, #C98A5A)' : 'var(--Grey-Muted, #808183)'}\n strokeWidth={1}\n />\n </HoverIcon>\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 from 'react';\nimport { Info } from 'lucide-react';\n\n/*\n * Figma node: 270-6494 (Compass Score card)\n *\n * Container: padding: 24px, border-radius: 8px, border: 1px solid #D9D9D9,\n * background: #FFF, gap: 24px, vertical\n *\n * Title: \"Compass Score\" 15px/700/#2E3236\n * Description: 14px/400/#808183\n *\n * Content: horizontal, gap: 48, center both axes\n * Left: Meter 243x200 (SVG from Figma export)\n * Right: Legends vertical, gap: 8, centered\n * Each: label 12px/400/#2E3236 + Info 14px stroke=#ACACAD\n * Score bar: 5 segments 22x6, gap: 2, filled=#2E3236, empty=#E3E1D7\n */\n\nconst COLORS = {\n strong: 'var(--Grey-Strong, #2E3236)',\n muted: 'var(--Grey-Muted, #808183)',\n absent: 'var(--Grey-absent, #D9D9D9)',\n white: 'var(--Grey-White, #FFF)',\n accent: 'var(--rail-orange, #C98A5A)',\n track: 'var(--rail-surface-2, #E3E1D7)',\n infoIcon: 'var(--color-input-border, #ACACAD)',\n};\n\n// Gauge using stroke-based semi-circle arcs — matching Figma node 270-6499\nconst GaugeMeter = ({ score = 4, maxScore = 10 }) => {\n const svgW = 243;\n const svgH = 130;\n const cx = svgW / 2;\n const cy = svgH - 7;\n const r = 85; // mid-radius of the arc\n const sw = 30; // stroke-width (thickness of the arc band)\n const totalSeg = 5;\n const filledSeg = Math.min(Math.round((score / maxScore) * totalSeg), totalSeg);\n const segDeg = 180 / totalSeg; // 36° per segment\n\n // Convert polar (degrees, 0°=right, CCW) to SVG x,y (Y-down)\n const toXY = (angleDeg) => {\n const rad = (angleDeg * Math.PI) / 180;\n return {\n x: cx + r * Math.cos(rad),\n y: cy - r * Math.sin(rad),\n };\n };\n\n // SVG arc from startDeg to endDeg (both in math convention: 0=right, 180=left)\n // We draw clockwise in SVG (sweep-flag=1) from higher angle to lower angle\n const strokeArc = (fromDeg, toDeg) => {\n const s = toXY(fromDeg);\n const e = toXY(toDeg);\n const large = (fromDeg - toDeg) > 180 ? 1 : 0;\n return `M ${s.x} ${s.y} A ${r} ${r} 0 ${large} 1 ${e.x} ${e.y}`;\n };\n\n const gap = 2; // degrees gap between segments\n\n return (\n <svg width={svgW} height={svgH} viewBox={`0 0 ${svgW} ${svgH}`} fill=\"none\">\n {/* Segments from left (180°) to right (0°) */}\n {Array.from({ length: totalSeg }, (_, i) => {\n const fromA = 180 - i * segDeg - (i > 0 ? gap / 2 : 0);\n const toA = 180 - (i + 1) * segDeg + (i < totalSeg - 1 ? gap / 2 : 0);\n const isFilled = i < filledSeg;\n return (\n <path\n key={i}\n d={strokeArc(fromA, toA)}\n stroke={isFilled ? COLORS.strong : COLORS.track}\n strokeWidth={sw}\n strokeLinecap=\"butt\"\n fill=\"none\"\n />\n );\n })}\n </svg>\n );\n};\n\nconst ScoreBar = ({ value = 0, maxValue = 5 }) => (\n <div style={{ display: 'flex', gap: 2 }}>\n {Array.from({ length: maxValue }, (_, i) => (\n <div\n key={i}\n style={{\n width: 22,\n height: 6,\n borderRadius: 1,\n background: i < value ? COLORS.strong : COLORS.track,\n }}\n />\n ))}\n </div>\n);\n\nconst LegendItem = ({ label, value = 0, maxValue = 5 }) => (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n padding: 8,\n alignItems: 'center',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}>\n <span style={{\n fontSize: 12,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {label}\n </span>\n <Info size={14} color={COLORS.infoIcon} strokeWidth={1} />\n </div>\n <ScoreBar value={value} maxValue={maxValue} />\n </div>\n);\n\nconst UpdatedCompassScore = ({\n score = 83,\n maxScore = 100,\n predictedScore = 4,\n predictedLabel = 'Predicted Objective',\n description = '',\n legends = [\n { label: 'CSAT', value: 3 },\n { label: 'Resolution', value: 4 },\n { label: 'Process Adherence', value: 5 },\n { label: 'Communication', value: 3 },\n ],\n}) => {\n const formattedPredicted = String(predictedScore).padStart(2, '0');\n\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 24,\n borderRadius: 8,\n border: `1px solid ${COLORS.absent}`,\n background: COLORS.white,\n alignSelf: 'stretch',\n gap: 24,\n }}>\n {/* Section Title — left-aligned, vertical, gap: 8 */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n }}>\n <span style={{\n fontSize: 15,\n fontWeight: 600,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n }}>\n Compass Score\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 'normal',\n }}>\n {description}\n </span>\n </div>\n\n {/* Content: Meter (left) + Legends (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 48,\n flex: 1,\n }}>\n {/* Left: Gauge + Pin + Score number */}\n <div style={{\n display: 'flex',\n width: 243,\n flexDirection: 'column',\n alignItems: 'center',\n flexShrink: 0,\n }}>\n <GaugeMeter score={score} maxScore={maxScore} />\n\n {/* Compass pin icon — exact Figma export */}\n <svg width=\"34\" height=\"35\" viewBox=\"0 0 34 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ marginTop: -24 }}>\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 {/* Score number below gauge */}\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n marginTop: 8,\n }}>\n {score}\n </div>\n </div>\n\n {/* Right: Predicted Score + Legends */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n }}>\n {/* Predicted Score + Label */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}>\n <div style={{\n fontSize: 28,\n fontWeight: 400,\n color: COLORS.strong,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1,\n textAlign: 'center',\n }}>\n {formattedPredicted}\n </div>\n <div style={{\n fontSize: 14,\n fontWeight: 400,\n color: COLORS.muted,\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.43,\n textAlign: 'center',\n }}>\n {predictedLabel}\n </div>\n </div>\n\n {/* Divider */}\n <div style={{\n width: '100%',\n height: 1,\n background: COLORS.absent,\n }} />\n\n {/* Legend items */}\n {legends.map((legend, i) => (\n <LegendItem\n key={i}\n label={legend.label}\n value={legend.value}\n />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UpdatedCompassScore;\n","import { useState, useRef } from 'react';\nimport { ArrowLeft, ArrowRight, CalendarDays, PhoneIncoming, ClipboardList, FileSignal, Repeat, ChevronDown, ChevronUp, Headset, CircleUser, History, ExternalLink } from 'lucide-react';\nimport UpdatedInteractionContext from './UpdatedInteractionContext';\nimport UpdatedInteractionRecording from './UpdatedInteractionRecording';\nimport UpdatedInteractionScores from './UpdatedInteractionScores';\nimport UpdatedCoachingSynthesisCard from './UpdatedCoachingSynthesisCard';\nimport UpdatedInteractionSignals from './UpdatedInteractionSignals';\nimport UpdatedCompassScore from './UpdatedCompassScore';\n\nconst TABS = [\n { key: 'overview', label: 'Overview' },\n { key: 'coaching', label: 'Coaching Summary' },\n { key: 'signals', label: 'Signals & Guidance' },\n { key: 'comments', label: 'Comments' },\n];\n\nconst UpdatedInteractionDetails = ({\n title = 'Wheel Stud Replacement Enquiry',\n onBack,\n // Data props — all optional with defaults for demo\n data,\n coachingData,\n audioUrl,\n // Footer navigation\n prevSessionTitle,\n prevSessionDesc,\n nextSessionTitle,\n nextSessionDesc,\n onPreviousSession,\n onNextSession,\n}) => {\n const [activeTab, setActiveTab] = useState('overview');\n const [expandedSignals, setExpandedSignals] = useState(new Set());\n const [showSessionDropdown, setShowSessionDropdown] = useState(false);\n const [hoveredSessionIdx, setHoveredSessionIdx] = useState(null);\n const recordingRef = useRef(null);\n\n const sessionHistory = [\n { title: 'Tire Repair Appointment', date: '11/12/2025, 2:30:00 PM' },\n { title: 'Quote Confirmation', date: '10/1/2025, 9:00:00 AM' },\n { title: 'Automative Repair Enquiry', date: '09/15/2025, 11:45:00 AM' },\n { title: 'Vehicle Inspection Reminder', date: '07/20/2025, 1:00:00 PM' },\n { title: 'Oil Change Service', date: '05/5/2025, 10:00:00 AM' },\n ];\n\n /* Called from Signals \"Show in transcript\" icon — seeks recording to that time */\n const handleShowInTranscript = (startMs) => {\n const timeSec = startMs / 1000;\n // Call the recording component's seek via ref\n if (recordingRef.current?.seekTo) {\n recordingRef.current.seekTo(timeSec);\n }\n };\n\n const toggleSignal = (key) => {\n setExpandedSignals((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n };\n\n // Extract data from blocks if provided\n const blocks = data?.blocks || [];\n const findBlock = (id) => blocks.find((b) => b.block_id === id)?.payload || {};\n\n const meta = findBlock('interaction-metadata');\n const ctx = findBlock('interaction-context');\n const signals = findBlock('interaction-signals');\n const outcomeLift = findBlock('interaction-outcome-lift');\n const callPurpose = ctx.call_purpose || {};\n const classification = ctx.classification || {};\n\n // Demo defaults\n const demoMeta = { duration_seconds: 156, message_count: 25, ...meta };\n const demoCallPurpose = { interaction_driver: 'General Information', interaction_direction: 'inbound', ...callPurpose };\n const demoClassification = { interaction_paradigm: 'Informational', ...classification };\n const demoOutcomeLift = { p_expected: 0.94, p_full: 0.83, lift_raw: -0.11, lift: 0.043, interpretation: { lift_band: 'positive' }, ...outcomeLift };\n const demoDriverLabels = outcomeLift.driver_signal_keys?.map((k) => k.replace(/^sig\\./, '').replace(/_/g, ' ')) || [\n 'customer needs fully addressed',\n 'call flow expectations set',\n 'Opening expectations set',\n 'Active listening demonstrated',\n 'Resolution confirmed',\n ];\n const demoCoaching = coachingData || {\n one_liner: 'David provided the customer with information on wheel stud replacement and pricing, but did not secure an appointment.',\n context: 'The customer was seeking information on wheel stud replacement for a 2013 Chevy Bolt and was unsure about doing the repair themselves.',\n strengths: [\n { text: 'Anthony effectively scheduled the appointment and confirmed the details clearly.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Handled customer objections well by explaining the need for a separate appointment for alignment.', quote: \"I don't have the alignment changeover the weekend. So I would have to set up a separate appointment for the alignment.\" },\n { text: 'Demonstrated courtesy and professionalism throughout the call.', quote: 'Have a great day.' },\n ],\n improvements: [\n { text: 'Close the loop by restating the plan and confirming next steps to ensure customer certainty.', quote: 'Alright. That is all set up for Saturday, the twenty eighth, at 12:00.' },\n { text: 'Frame solutions positively by leading with what can be done rather than limitations.', quote: \"I don't have the alignment changeover the weekend.\" },\n ],\n overall: 'effective',\n };\n const demoSignals = signals?.signals?.length ? signals : {\n present_count: 9,\n total_signals_evaluated: 146,\n signals: [\n {\n key: 'price_estimate_provided', display_name: 'Price Estimate Provided',\n observations: [\n {\n key: 'obs1', reason: 'Evidence shows a price estimate or quote was provided.', evidence: [\n { start_ms: 92000, end_ms: 97000, text: 'From Casper, you\\'re probably looking at, like, a half hour labor plus a stud, so you\\'d probably be somewhere around $90 or something.', turn_ids: [8] },\n ]\n },\n ],\n },\n { key: 'fee_or_cost_discussed', display_name: 'Fee or Cost Discussed', observations: [{ key: 'obs2', reason: 'Agent discussed pricing details with the customer.' }] },\n { key: 'engagement_budget', display_name: 'Engagement Budget Discussed', observations: [{ key: 'obs3a', reason: 'Budget expectations were set.' }, { key: 'obs3b', reason: 'Customer confirmed budget range.' }] },\n { key: 'projected_revenue', display_name: 'Projected Revenue Discussed', observations: [{ key: 'obs4a', reason: 'Revenue projection shared.' }, { key: 'obs4b', reason: 'Timeline for revenue discussed.' }, { key: 'obs4c', reason: 'Quarterly targets mentioned.' }] },\n { key: 'market_analysis', display_name: 'Market Analysis Completed', observations: [{ key: 'obs5a', reason: 'Market analysis referenced.' }, { key: 'obs5b', reason: 'Competitive landscape discussed.' }, { key: 'obs5c', reason: 'Market trends mentioned.' }, { key: 'obs5d', reason: 'Regional analysis provided.' }] },\n { key: 'target_audience', display_name: 'Target Audience Defined', observations: [{ key: 'obs6a', reason: 'Target audience identified.' }, { key: 'obs6b', reason: 'Demographics discussed.' }, { key: 'obs6c', reason: 'Audience segmentation reviewed.' }, { key: 'obs6d', reason: 'Persona mapping completed.' }, { key: 'obs6e', reason: 'Channel preferences noted.' }] },\n { key: 'concept_approval', display_name: 'Concept Approval Received', observations: [{ key: 'obs7a', reason: 'Concept approved by stakeholder.' }, { key: 'obs7b', reason: 'Feedback incorporated.' }, { key: 'obs7c', reason: 'Sign-off confirmed.' }, { key: 'obs7d', reason: 'Revisions requested.' }, { key: 'obs7e', reason: 'Final version accepted.' }, { key: 'obs7f', reason: 'Timeline approved.' }] },\n { key: 'prototype_developed', display_name: 'Prototype Developed', observations: [{ key: 'obs8a', reason: 'Prototype shared.' }, { key: 'obs8b', reason: 'Testing initiated.' }, { key: 'obs8c', reason: 'Feedback collected.' }, { key: 'obs8d', reason: 'Iterations completed.' }, { key: 'obs8e', reason: 'Usability tested.' }, { key: 'obs8f', reason: 'Design finalized.' }, { key: 'obs8g', reason: 'Stakeholder demo done.' }] },\n { key: 'user_testing', display_name: 'User Testing Scheduled', observations: [{ key: 'obs9a', reason: 'Testing sessions planned.' }, { key: 'obs9b', reason: 'Participants recruited.' }, { key: 'obs9c', reason: 'Test scripts prepared.' }, { key: 'obs9d', reason: 'Environment set up.' }, { key: 'obs9e', reason: 'Accessibility testing included.' }, { key: 'obs9f', reason: 'Results framework defined.' }, { key: 'obs9g', reason: 'Timeline confirmed.' }, { key: 'obs9h', reason: 'Backup plan discussed.' }] },\n ],\n };\n\n const agentName = 'David';\n const customerName = 'Sandra Bullock';\n const customerSessions = 8;\n const dateStr = meta.evaluated_dt ? new Date(meta.evaluated_dt).toLocaleString() : '3/29/2026, 8:30:00 AM';\n const direction = demoCallPurpose.interaction_direction === 'inbound' ? 'Inbound' : 'Outbound';\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', width: '100%', background: 'var(--Grey-White, #FFF)' }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '24px 24px 0' }}>\n <button\n onClick={onBack}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Strong, #2E3236)\" />\n </button>\n <div style={{ width: 1, height: 28, background: 'var(--Base-absent, #D9D9D9)' }} />\n <h1 style={{\n color: 'var(--Grey-Strong, #2E3236)',\n fontSize: 24,\n fontStyle: 'normal',\n fontWeight: 400,\n lineHeight: 'normal',\n margin: 0,\n }}>\n {title}\n </h1>\n </div>\n\n {/* Tabs */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n background: 'var(--Grey-White, #FFF)',\n borderBottom: '1px solid var(--Grey-Faint, #ACADAD)',\n padding: '0 24px',\n marginTop: 8,\n }}>\n {TABS.map((tab) => (\n <button\n key={tab.key}\n onClick={() => setActiveTab(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 {/* Tab Content */}\n <div style={{ padding: 24, flex: 1, overflowY: 'auto' }}>\n {/* ═══ OVERVIEW TAB ═══ */}\n {activeTab === 'overview' && (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Figma node 106-3508: Section Header — horizontal, gap: 16, height: 40, center */}\n <div style={{\n display: 'flex',\n height: 40,\n alignItems: 'center',\n gap: 16,\n alignSelf: 'stretch',\n }}>\n {/* Left: Icon + Title — fills remaining space */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, flex: 1 }}>\n <ClipboardList size={24} color=\"var(--rail-orange, #C98A5A)\" strokeWidth={2} />\n <span style={{\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n textTransform: 'uppercase',\n }}>\n Overview\n </span>\n </div>\n\n {/* Right: Metadata — horizontal, gap: 16, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 16, flexShrink: 0 }}>\n {/* Date */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <CalendarDays size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {dateStr}\n </span>\n </div>\n\n {/* Direction */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <PhoneIncoming size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {direction}\n </span>\n </div>\n\n {/* Agent + Customer — border-left separator */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 16,\n paddingLeft: 16,\n borderLeft: '1px solid var(--Grey-absent, #D9D9D9)',\n }}>\n {/* Agent — Headset icon */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 0' }}>\n <Headset size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', fontFamily: 'var(--font-sans)', lineHeight: 1.2 }}>\n {agentName}\n </span>\n </div>\n\n {/* Repeat icon */}\n <Repeat size={16} color=\"var(--color-input-border, #ACACAD)\" strokeWidth={1.5} />\n\n {/* Customer — CircleUser icon + dropdown */}\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => setShowSessionDropdown((prev) => !prev)}\n style={{\n display: 'flex', alignItems: 'center', gap: 4, padding: '8px 0',\n background: 'none', border: 'none', cursor: 'pointer',\n }}\n >\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Strong, #2E3236)', lineHeight: 1.2 }}>\n {customerName} ({customerSessions} Sessions)\n </span>\n {showSessionDropdown\n ? <ChevronUp size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n : <ChevronDown size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n }\n </button>\n\n {/* Figma node 311-1302: Session history dropdown */}\n {showSessionDropdown && (\n <div style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n width: 264,\n background: 'var(--Grey-White, #FFF)',\n borderRadius: 4,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n boxShadow: '0 4px 16px rgba(0,0,0,0.12)',\n zIndex: 50,\n overflow: 'hidden',\n }}>\n {/* Header: customer name + session count */}\n {/* Header — Figma node 312-1321: horizontal, gap: 8 */}\n <div style={{\n display: 'flex', alignItems: 'flex-start', gap: 8,\n padding: 16,\n }}>\n <CircleUser size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} style={{ marginTop: 2, flexShrink: 0 }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n <span style={{\n fontSize: 16, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {customerName}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {customerSessions} Sessions in past\n </span>\n </div>\n </div>\n\n {/* Session list — Figma: 264px, pad 12 16, space-between, center */}\n {sessionHistory.map((session, i) => (\n <div\n key={i}\n onMouseEnter={() => setHoveredSessionIdx(i)}\n onMouseLeave={() => setHoveredSessionIdx(null)}\n style={{\n display: 'flex',\n width: 264,\n padding: '12px 16px',\n justifyContent: 'space-between',\n alignItems: 'center',\n background: hoveredSessionIdx === i\n ? 'var(--surface-hover, #F3F7F7)'\n : 'var(--Grey-White, #FFF)',\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n boxSizing: 'border-box',\n transition: 'background 0.15s',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1,\n }}>\n {session.title}\n </span>\n <span style={{\n fontSize: 12, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n lineHeight: 1,\n }}>\n {session.date}\n </span>\n </div>\n {hoveredSessionIdx === i && (\n <ExternalLink size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1} style={{ flexShrink: 0 }} />\n )}\n </div>\n ))}\n\n {/* View All Sessions button — Figma node 312-1347 */}\n <div style={{\n padding: 16,\n borderTop: '1px solid var(--Grey-absent, #D9D9D9)',\n display: 'flex',\n justifyContent: 'center',\n }}>\n <button style={{\n display: 'flex',\n height: 32,\n padding: '16px 16px 16px 12px',\n justifyContent: 'center',\n alignItems: 'center',\n gap: 6,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 10,\n cursor: 'pointer',\n }}>\n <History size={16} color=\"var(--Grey-Muted, #808183)\" strokeWidth={1.5} />\n <span style={{\n fontSize: 14, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n }}>\n View All Sessions\n </span>\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/*\n Figma node 101-2385\n Row: Compass Score (left) | Context + Agent Lift Analysis stacked (right)\n */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n alignSelf: 'stretch',\n }}>\n {/* Left — Compass Score */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedCompassScore />\n </div>\n\n {/* Right — Context grid + Agent Lift Analysis stacked */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-end',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}>\n <UpdatedInteractionContext\n meta={demoMeta}\n callPurpose={demoCallPurpose}\n classification={demoClassification}\n outcomeQuality=\"Neutral\"\n />\n <UpdatedInteractionScores\n outcomeLift={demoOutcomeLift}\n driverLabels={demoDriverLabels}\n />\n </div>\n </div>\n\n {/* Coaching Summary — full width */}\n <UpdatedCoachingSynthesisCard data={demoCoaching} />\n\n {/* Figma node 222-660: SIGNALS & RECORDING section */}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n alignSelf: 'stretch',\n }}>\n {/* Section header — Figma: FileSignal icon + \"Signals & Recording\" 16px/700 */}\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 {/* Left — Signals */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionSignals\n signals={demoSignals}\n expandedSignals={expandedSignals}\n toggleSignal={toggleSignal}\n onShowInTranscript={handleShowInTranscript}\n />\n </div>\n\n {/* Right — Recording + Transcript */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionRecording\n ref={recordingRef}\n audioUrl={audioUrl}\n durationSeconds={demoMeta.duration_seconds}\n currentTimeSeconds={0}\n />\n </div>\n </div>\n </div>\n\n </div>\n )}\n\n {/* ═══ COACHING SUMMARY TAB ═══ */}\n {activeTab === 'coaching' && (\n <UpdatedCoachingSynthesisCard data={demoCoaching} />\n )}\n\n {/* ═══ SIGNALS & GUIDANCE TAB ═══ */}\n {activeTab === 'signals' && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n {/* Signals (left) | Recording + Transcript (right) */}\n <div style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 24,\n }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionSignals\n signals={demoSignals}\n expandedSignals={expandedSignals}\n toggleSignal={toggleSignal}\n onShowInTranscript={handleShowInTranscript}\n />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <UpdatedInteractionRecording\n ref={recordingRef}\n audioUrl={audioUrl}\n durationSeconds={demoMeta.duration_seconds}\n currentTimeSeconds={0}\n />\n </div>\n </div>\n </div>\n )}\n\n {/* ═══ COMMENTS TAB ═══ */}\n {activeTab === 'comments' && (\n <div style={{ fontSize: 14, color: 'var(--Grey-Muted, #808183)', fontFamily: 'var(--font-sans)' }}>\n No comments yet.\n </div>\n )}\n </div>\n\n {/* Figma node 113-8262: Sticky Footer — Previous / Next Session */}\n <div style={{\n display: 'flex',\n position: 'sticky',\n bottom: 0,\n zIndex: 10,\n }}>\n {/* Previous Session */}\n <button\n onClick={onPreviousSession}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n }}\n >\n <ArrowLeft size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {prevSessionTitle || 'Previous Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {prevSessionDesc || 'Short description of the session'}\n </span>\n </div>\n </button>\n\n {/* Next Session */}\n <button\n onClick={onNextSession}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 30,\n padding: '12px 28px',\n flex: 1,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n cursor: 'pointer',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n textAlign: 'left',\n }}>\n {nextSessionTitle || 'Next Session Title'}\n </span>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: '#000',\n lineHeight: 1.2,\n opacity: 0.5,\n textAlign: 'left',\n }}>\n {nextSessionDesc || 'Short description of the session'}\n </span>\n </div>\n <ArrowRight size={24} color=\"var(--Grey-Muted, #808183)\" strokeWidth={2} />\n </button>\n </div>\n </div>\n );\n};\n\nexport default UpdatedInteractionDetails;\n"],"names":["COLORS","OVERALL_MAP","STYLE_ID","ensureKeyframes","style","OverallBadge","overall","label","jsxs","jsx","ThumbsUp","SectionItem","item","text","quote","CoachingColumn","icon","items","i","UpdatedCoachingSynthesisCard","data","loading","error","React","w","strengths","improvements","oneLiner","_a","context","_b","ShieldCheck","TrendingUp","Lightbulb","fmtDur","seconds","m","s","ROW_STYLE","COLUMN_STYLE","UpdatedInteractionContext","meta","callPurpose","classification","dimensions","outcomeQuality","onMoreDetails","duration","messages","driver","paradigm","leftRows","_","d","rightRows","renderRow","ExternalLink","row","LH","MAX_VISIBLE_DRIVERS","fmtPct","v","fmtPp","pp","UpdatedInteractionScores","outcomeLift","driverLabels","pExpected","pFull","liftRaw","liftRecentered","liftBand","liftBandCapitalized","visibleDrivers","overflowCount","HoverIcon","children","size","onClick","title","hovered","setHovered","useState","UpdatedInteractionSignals","signals","expandedSignals","toggleSignal","playEvidence","highlightTurns","onShowInTranscript","timelinePlaying","currentTimeSeconds","signalList","presentCount","fmtMs","ms","minutes","isEvPlaying","ev","FileSignal","signal","idx","key","isExpanded","obsCount","ChevronUp","ChevronDown","_c","obs","obsIdx","e","ScrollText","evIdx","PlayCircle","GaugeMeter","score","maxScore","filledSeg","segDeg","toXY","angleDeg","rad","strokeArc","fromDeg","toDeg","large","gap","fromA","toA","isFilled","ScoreBar","value","maxValue","LegendItem","Info","UpdatedCompassScore","predictedScore","predictedLabel","description","legends","formattedPredicted","legend","TABS","UpdatedInteractionDetails","onBack","coachingData","audioUrl","prevSessionTitle","prevSessionDesc","nextSessionTitle","nextSessionDesc","onPreviousSession","onNextSession","activeTab","setActiveTab","setExpandedSignals","showSessionDropdown","setShowSessionDropdown","hoveredSessionIdx","setHoveredSessionIdx","recordingRef","useRef","sessionHistory","handleShowInTranscript","startMs","timeSec","prev","next","blocks","findBlock","id","b","ctx","demoMeta","demoCallPurpose","demoClassification","demoOutcomeLift","demoDriverLabels","k","demoCoaching","demoSignals","agentName","customerName","customerSessions","dateStr","direction","ArrowLeft","tab","ClipboardList","CalendarDays","PhoneIncoming","Headset","Repeat","CircleUser","session","History","UpdatedInteractionRecording","ArrowRight"],"mappings":"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"}
|
|
@@ -1,2 +1,31 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),h=require("react"),D=require("lucide-react"),g=require("recharts"),ae=({content:f,onCodeBlockClick:y,onFilePathClick:b})=>{const[v,a]=h.useState(new Set),j=async(s,n)=>{try{await navigator.clipboard.writeText(s),a(t=>new Set([...t,n])),setTimeout(()=>{a(t=>{const r=new Set(t);return r.delete(n),r})},2e3)}catch(t){console.error("Failed to copy text:",t)}},L=(s,n,t)=>{const r=v.has(t);return e.jsxs("div",{style:{position:"relative",marginBottom:"16px",borderRadius:"8px",background:"var(--ink, #1E2125)",border:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",overflow:"hidden"},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"8px 12px",background:"rgba(255,255,255,0.05)",borderBottom:"1px solid rgba(255,255,255,0.1)"},children:[e.jsx("span",{style:{fontSize:"11px",color:"rgba(255,255,255,0.7)",fontFamily:"var(--font-mono, monospace)",textTransform:"uppercase",letterSpacing:"0.05em"},children:n||"code"}),e.jsxs("button",{onClick:()=>j(s,t),style:{background:"none",border:"none",color:"rgba(255,255,255,0.7)",cursor:"pointer",padding:"4px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"4px",fontSize:"11px",transition:"all 0.15s ease"},onMouseEnter:d=>{d.target.style.background="rgba(255,255,255,0.1)",d.target.style.color="rgba(255,255,255,0.9)"},onMouseLeave:d=>{d.target.style.background="none",d.target.style.color="rgba(255,255,255,0.7)"},children:[r?e.jsx(D.Check,{size:12}):e.jsx(D.Copy,{size:12}),r?"Copied!":"Copy"]}),y&&e.jsxs("button",{onClick:()=>y({code:s,language:n}),style:{background:"none",border:"none",color:"rgba(255,255,255,0.7)",cursor:"pointer",padding:"4px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"4px",fontSize:"11px",transition:"all 0.15s ease"},onMouseEnter:d=>{d.currentTarget.style.background="rgba(255,255,255,0.1)",d.currentTarget.style.color="rgba(255,255,255,0.9)"},onMouseLeave:d=>{d.currentTarget.style.background="none",d.currentTarget.style.color="rgba(255,255,255,0.7)"},children:[e.jsx(D.PanelRightOpen,{size:12}),"Canvas"]})]}),e.jsx("pre",{style:{margin:0,padding:"12px",fontFamily:"var(--font-mono, monospace)",fontSize:"13px",lineHeight:1.4,color:"rgba(255,255,255,0.95)",overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:s})]},t)},w=s=>{const n=[],t=s.split(`
|
|
2
|
+
`);let r=0,d=0;for(;r<t.length;){const p=t[r];if(p.trim().startsWith("```")){const c=p.trim().slice(3);let C=[];for(r++;r<t.length&&!t[r].trim().startsWith("```");)C.push(t[r]),r++;r<t.length&&r++,n.push(L(C.join(`
|
|
3
|
+
`),c,`code-${d++}`));continue}if(p.startsWith("#")){const c=p.match(/^#+/)[0].length,C=p.slice(c).trim(),z=c===1?"h2":c===2?"h3":c===3?"h4":"h5";n.push(h.createElement(z,{key:`header-${r}`,style:{fontSize:c===1?"18px":c===2?"16px":"14px",fontWeight:720,color:"var(--text-strong, rgba(30,33,37,0.92))",marginTop:n.length>0?"20px":"0",marginBottom:"8px",lineHeight:1.3}},C)),r++;continue}if(p.trim()==="---"||p.trim()==="***"){n.push(e.jsx("hr",{style:{border:"none",borderTop:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",margin:"16px 0"}},`hr-${r}`)),r++;continue}if(p.match(/^(\s*)([-*+]|\d+\.)\s/)){const c=[],C=/^\s*\d+\./.test(p);for(;r<t.length&&(t[r].match(/^(\s*)([-*+]|\d+\.)\s/)||t[r].trim()==="");){if(t[r].trim()!==""){const R=t[r].match(/^(\s*)([-*+]|\d+\.)\s(.*)$/);R&&c.push(R[3])}r++}const z=C?"ol":"ul";n.push(h.createElement(z,{key:`list-${r}`,style:{margin:"8px 0",paddingLeft:"20px",color:"var(--text-strong, rgba(30,33,37,0.92))"}},c.map((R,o)=>h.createElement("li",{key:`item-${o}`,style:{marginBottom:"4px"}},l(R)))));continue}if(p.trim().startsWith("|")&&p.trim().endsWith("|")){const c=[];for(;r<t.length&&t[r].trim().startsWith("|")&&t[r].trim().endsWith("|");)c.push(t[r]),r++;if(c.length>=2){const C=i=>i.trim().slice(1,-1).split("|").map(u=>u.trim()),z=C(c[0]),R=i=>C(i).every(u=>/^[-:]+$/.test(u)),o=c.length>=2&&R(c[1]),k=o?2:1,M=o?C(c[1]).map(i=>i.startsWith(":")&&i.endsWith(":")?"center":i.endsWith(":")?"right":"left"):z.map(()=>"left"),T={padding:"6px 12px",borderBottom:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",fontSize:"13px",lineHeight:1.5,color:"var(--text-strong, rgba(30,33,37,0.92))"};n.push(e.jsx("div",{style:{overflowX:"auto",margin:"8px 0"},children:e.jsxs("table",{style:{borderCollapse:"collapse",width:"100%",border:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",borderRadius:"6px",overflow:"hidden"},children:[o&&e.jsx("thead",{children:e.jsx("tr",{style:{background:"var(--hover-warm-subtle, rgba(231,212,162,0.08))"},children:z.map((i,u)=>e.jsx("th",{style:{...T,fontWeight:660,textAlign:M[u]||"left",whiteSpace:"nowrap"},children:l(i)},u))})}),e.jsx("tbody",{children:(o?c.slice(k):c).map((i,u)=>e.jsx("tr",{style:{background:u%2===1?"var(--hover-warm-subtle, rgba(231,212,162,0.04))":"transparent"},children:C(i).map((I,S)=>e.jsx("td",{style:{...T,textAlign:M[S]||"left"},children:l(I)},S))},u))})]})},`table-${r}`))}continue}if(p.trim()){const c=[];for(;r<t.length&&t[r].trim()&&!t[r].match(/^(#|```|---|\*\*\*|(\s*)([-*+]|\d+\.)\s)/)&&!(t[r].trim().startsWith("|")&&t[r].trim().endsWith("|"));)c.push(t[r]),r++;c.length>0&&n.push(e.jsx("p",{style:{margin:"8px 0",lineHeight:1.6,color:"var(--text-strong, rgba(30,33,37,0.92))"},children:l(c.join(" "))},`p-${r}`))}else r++}return n},m=s=>{const n=[];let t=s,r=0;for(;t.length>0;){if(b){const R=t.match(/^([^\s`*\[]+(?:\/src\/|\/components\/|\/packages\/)[^\s`*\[]*|[^\s`*\[]*\.(ts|tsx|js|jsx|py|css|scss|sass|json|md|yaml|yml|html|xml|sh|sql|go|rs|php|java|c|cpp|h|hpp)(?:\b|$))/);if(R){const o=R[1];n.push(e.jsx("span",{onClick:()=>b(o),style:{color:"var(--rail-discovery, #5E88B0)",textDecoration:"underline",textDecorationStyle:"dotted",textUnderlineOffset:"2px",cursor:"pointer",fontFamily:"var(--font-mono, monospace)",fontSize:"13px",transition:"all 0.15s ease",":hover":{background:"var(--hover-warm-subtle, rgba(231,212,162,0.08))",textDecoration:"underline",textDecorationStyle:"solid"}},onMouseEnter:k=>{k.target.style.background="var(--hover-warm-subtle, rgba(231,212,162,0.08))",k.target.style.textDecorationStyle="solid"},onMouseLeave:k=>{k.target.style.background="none",k.target.style.textDecorationStyle="dotted"},children:o},`file-path-${r++}`)),t=t.slice(R[0].length);continue}}const d=t.match(/^`([^`]+)`/);if(d){n.push(e.jsx("code",{style:{background:"var(--hover-warm-subtle, rgba(231,212,162,0.08))",border:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",borderRadius:"3px",padding:"2px 4px",fontFamily:"var(--font-mono, monospace)",fontSize:"12px",color:"var(--text-strong, rgba(30,33,37,0.92))"},children:d[1]},`inline-code-${r++}`)),t=t.slice(d[0].length);continue}const p=t.match(/^\*\*([^*]+)\*\*/);if(p){n.push(e.jsx("strong",{style:{fontWeight:720,color:"var(--text-strong, rgba(30,33,37,0.92))"},children:p[1]},`bold-${r++}`)),t=t.slice(p[0].length);continue}const c=t.match(/^\*([^*]+)\*/);if(c){n.push(e.jsx("em",{style:{fontStyle:"italic",color:"var(--text-strong, rgba(30,33,37,0.92))"},children:c[1]},`italic-${r++}`)),t=t.slice(c[0].length);continue}const C=t.match(/^\[([^\]]+)\]\(([^)]+)\)/);if(C){n.push(e.jsx("a",{href:C[2],target:"_blank",rel:"noopener noreferrer",style:{color:"var(--rail-discovery, #5E88B0)",textDecoration:"underline",textUnderlineOffset:"2px"},children:C[1]},`link-${r++}`)),t=t.slice(C[0].length);continue}const z=t.search(/[`*\[]/);if(z===-1){n.push(t);break}else z===0?(n.push(t[0]),t=t.slice(1)):(n.push(t.slice(0,z)),t=t.slice(z))}return n.length===1&&typeof n[0]=="string"?n[0]:n},l=s=>m(s);return e.jsx("div",{children:w(f)})};function re({role:f,content:y,html:b,timestamp:v,toolBadges:a,isStreaming:j,onCodeBlockClick:L,onFilePathClick:w}){const m=f==="user";return e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:m?"flex-end":"flex-start",marginBottom:"16px",maxWidth:"100%"},children:[e.jsxs("div",{style:{fontSize:"var(--text-sm, 11px)",color:"var(--text-faint, rgba(30,33,37,0.36))",marginBottom:"6px",fontWeight:650,letterSpacing:"0.02em"},children:[m?"You":"Chordia",j&&!m&&e.jsx("span",{style:{marginLeft:"6px",color:"var(--rail-purple, #9B7AA8)"},children:"●"})]}),a&&a.length>0&&e.jsx("div",{style:{marginBottom:"8px",display:"flex",flexWrap:"wrap",gap:"4px",maxWidth:"75%"},children:a.map((l,s)=>e.jsxs("span",{style:{display:"inline-block",fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:"var(--paper-elevated, rgba(255,255,255,0.82))",border:`1px solid ${l.pending?"var(--rail-discovery, #5A8CC0)":l.success!==!1?"var(--state-present, #5CB85C)":"var(--rail-signal-churn, #C98A5A)"}`,color:l.pending?"var(--rail-discovery, #5A8CC0)":l.success!==!1?"var(--state-present, #5CB85C)":"var(--rail-signal-churn, #C98A5A)"},children:[e.jsx(D.Wrench,{size:10,style:{marginRight:3,verticalAlign:"middle"}}),l.name,l.pending?"...":l.success!==!1?" ✓":" ✗"]},l.id||s))}),e.jsx("div",{style:{maxWidth:"75%",padding:"12px 16px",borderRadius:"var(--radius-lg, 12px)",background:m?"var(--card-customer, rgba(94,136,176,0.08))":"var(--paper-elevated, rgba(255,255,255,0.82))",border:m?"1px solid var(--border-subtle, rgba(52,58,64,0.08))":"1px solid var(--border, rgba(52,58,64,0.12))",fontSize:"var(--text-base, 14px)",lineHeight:1.6,color:"var(--text-strong, rgba(30,33,37,0.92))",wordBreak:"break-word"},children:b?e.jsx("div",{dangerouslySetInnerHTML:{__html:b}}):m?e.jsx("div",{style:{whiteSpace:"pre-wrap"},children:y}):e.jsx(ae,{content:y||"",onCodeBlockClick:L,onFilePathClick:w})}),v&&e.jsx("div",{style:{fontSize:"var(--text-xs-plus, 10.5px)",color:"var(--text-faint, rgba(30,33,37,0.36))",marginTop:"4px",fontFamily:"var(--font-mono, monospace)"},children:v})]})}function se({phase:f="thinking",toolSteps:y=[],label:b,elapsedMs:v,compact:a=!1}){const j=t=>{if(!t||t<1e3)return null;const r=Math.floor(t/1e3);if(r<60)return`${r}s`;const d=Math.floor(r/60),p=r%60;return p>0?`${d}m ${p}s`:`${d}m`},L=()=>{if(b)return b;switch(f){case"thinking":return"Thinking...";case"tool":return null;case"responding":return"Responding...";default:return"Thinking..."}},w=(t,r)=>{const d=()=>{const c={width:a?"4px":"6px",height:a?"4px":"6px",borderRadius:"50%",display:"inline-block",marginRight:a?"6px":"8px"};switch(t.status){case"active":return e.jsx("span",{style:{...c,backgroundColor:"var(--rail-purple, #9B7AA8)",animation:"pulse 1.2s ease-in-out infinite"}});case"done":return e.jsx("span",{style:{...c,backgroundColor:"var(--text-xfaint, rgba(30,33,37,0.28))"}});case"error":return e.jsx("span",{style:{...c,backgroundColor:"var(--rail-compliance, #C98A5A)"}});default:return e.jsx("span",{style:{...c,backgroundColor:"var(--text-xfaint, rgba(30,33,37,0.28))"}})}},p=()=>{switch(t.status){case"done":return e.jsx("span",{style:{color:"var(--text-faint, rgba(30,33,37,0.36))",fontSize:a?"9px":"var(--text-xs-plus, 10.5px)"},children:"✓"});case"error":return e.jsx("span",{style:{color:"var(--rail-compliance, #C98A5A)",fontSize:a?"9px":"var(--text-xs-plus, 10.5px)"},children:"failed"});default:return null}};return e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:a?"2px":"4px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[d(),e.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:a?"9px":"var(--text-xs-plus, 10.5px)",color:"var(--text-muted)"},children:t.name})]}),p()]},r)},m=()=>e.jsx("div",{style:{width:"100%",height:a?"2px":"3px",backgroundColor:"var(--border-subtle, rgba(52,58,64,0.08))",borderRadius:a?"2px":"3px",overflow:"hidden",position:"relative"},children:e.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,background:"linear-gradient(90deg, transparent 0%, rgba(155,122,168,0.3) 50%, transparent 100%)",animation:"shimmer 2s linear infinite"}})}),l=()=>e.jsx("span",{style:{width:a?"4px":"6px",height:a?"10px":"14px",backgroundColor:"var(--rail-purple, #9B7AA8)",borderRadius:"1px",display:"inline-block",marginLeft:"2px",animation:"cursorBlink 0.8s ease-in-out infinite"}}),s=L(),n=j(v);return e.jsxs("div",{style:{borderLeft:`${a?"3px":"4px"} solid var(--rail-purple, #9B7AA8)`,backgroundColor:"var(--card-assistant, rgba(155,122,168,0.06))",border:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",borderRadius:a?"8px":"10px",padding:a?"8px 10px 8px 12px":"10px 14px 10px 18px"},children:[e.jsx("style",{children:`
|
|
4
|
+
@keyframes shimmer {
|
|
5
|
+
0% { transform: translateX(-100%); }
|
|
6
|
+
100% { transform: translateX(200%); }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@keyframes pulse {
|
|
10
|
+
0%, 100% { opacity: 0.4; }
|
|
11
|
+
50% { opacity: 1.0; }
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@keyframes cursorBlink {
|
|
15
|
+
0%, 100% { opacity: 0; }
|
|
16
|
+
50% { opacity: 1; }
|
|
17
|
+
}
|
|
18
|
+
`}),!a&&e.jsx("div",{style:{fontSize:"var(--text-xs-plus, 10.5px)",fontWeight:650,textTransform:"uppercase",letterSpacing:"var(--tracking-label, 0.16em)",color:"var(--text-faint, rgba(30,33,37,0.36))",marginBottom:"8px"},children:"AI ASSISTANT"}),f==="thinking"&&e.jsxs("div",{children:[e.jsxs("div",{style:{color:"var(--text-muted)",fontWeight:400,fontSize:a?"11px":"13px",marginBottom:a?"4px":"8px",display:"flex",alignItems:"center",gap:"6px"},children:[s,n&&e.jsx("span",{style:{fontSize:a?"9px":"10px",color:"var(--text-faint, rgba(30,33,37,0.36))",fontFamily:"var(--font-mono, monospace)"},children:n})]}),m()]}),f==="tool"&&e.jsxs("div",{children:[s&&e.jsxs("div",{style:{color:"var(--text-muted)",fontWeight:400,fontSize:a?"11px":"13px",marginBottom:a?"4px":"8px",display:"flex",alignItems:"center",gap:"6px"},children:[s,n&&e.jsx("span",{style:{fontSize:a?"9px":"10px",color:"var(--text-faint, rgba(30,33,37,0.36))",fontFamily:"var(--font-mono, monospace)"},children:n})]}),e.jsx("div",{style:{marginBottom:a?"4px":"8px"},children:y.map((t,r)=>w(t,r))}),m()]}),f==="responding"&&e.jsxs("div",{style:{color:"var(--text-muted)",fontWeight:400,fontSize:a?"11px":"13px",display:"flex",alignItems:"center",gap:"6px"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[s,l()]}),n&&e.jsx("span",{style:{fontSize:a?"9px":"10px",color:"var(--text-faint, rgba(30,33,37,0.36))",fontFamily:"var(--font-mono, monospace)"},children:n})]})]})}const oe={error:(...f)=>console.warn("toast.error:",...f)};function ie({initialMessages:f=[],onSendMessage:y,onStreamMessage:b,onMessagesChange:v,onCodeBlockClick:a,placeholder:j="Ask a question about this interaction...",title:L="Chat with Chordia"}){const[w,m]=h.useState(f||[]),[l,s]=h.useState(""),[n,t]=h.useState(!1),[r,d]=h.useState(!1),[p,c]=h.useState(null),[C,z]=h.useState("thinking"),[R,o]=h.useState(null),[k,M]=h.useState(0),T=h.useRef(null),i=h.useRef(null),u=h.useRef(null),I=h.useRef(null),S=h.useRef(null),[E,_]=h.useState(!1),[O,X]=h.useState(0);h.useEffect(()=>{var x;(x=T.current)==null||x.scrollIntoView({behavior:"smooth"})},[w,n]),h.useEffect(()=>{i.current&&(i.current.style.height="auto",i.current.style.height=`${Math.min(i.current.scrollHeight,120)}px`)},[l]),h.useEffect(()=>{if(v){const x=[...w];p&&x.push(p),v(x)}},[w,p,v]),h.useEffect(()=>{let x;return n&&R&&(x=setInterval(()=>{if(M(Date.now()-R),S.current){const W=(Date.now()-S.current)/1e3;W>=3?(_(!0),X(Math.floor(W))):_(!1)}},500)),()=>x&&clearInterval(x)},[n,R]);const H=()=>{t(!1),d(!1),c(null),I.current=null,z("thinking"),_(!1),X(0),S.current=null,o(null),M(0),u.current&&(u.current.abort(),u.current=null)},K=x=>{if(x.startsWith("data: ")){const W=x.slice(6);if(W==="[DONE]")return{type:"done"};try{return{type:"data",data:JSON.parse(W)}}catch{return null}}return null},q=x=>{var P,B;if(!((B=(P=x.choices)==null?void 0:P[0])!=null&&B.delta))return;S.current=Date.now(),_(!1);const W=x.choices[0].delta;if(W.tool_calls||W.tool_results){z("tool");return}W.content!==void 0&&(z("responding"),c(F=>{const G=F||{id:Date.now().toString(),role:"assistant",content:"",timestamp:new Date().toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}),isStreaming:!0},V={...G,content:(G.content||"")+(W.content||"")};return I.current=V,V}))},U=async x=>{const W=x.getReader(),P=new TextDecoder;let B="";try{for(;;){const{done:F,value:G}=await W.read();if(F)break;B+=P.decode(G,{stream:!0});const V=B.split(`
|
|
19
|
+
`);B=V.pop()||"";for(const ne of V)if(ne.trim()){const Q=K(ne);if(Q){if(Q.type==="done")return;Q.type==="data"&&q(Q.data)}}}}finally{W.releaseLock()}},Y=async()=>{if(!l.trim()||r)return;const x=l.trim(),W={id:Date.now().toString(),role:"user",content:x,timestamp:new Date().toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})},P=[...w,W];m(P),s(""),t(!0),d(!0),z("thinking"),o(Date.now()),S.current=Date.now(),u.current=new AbortController;try{let B;if(b)B=await b(x,P);else if(y)B=await y(x,P);else{setTimeout(()=>{const F={id:(Date.now()+1).toString(),role:"assistant",content:"This is a demonstration response. In a real implementation, this would connect to your LLM backend.",timestamp:new Date().toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})};m(G=>[...G,F]),H()},1e3);return}if(B instanceof ReadableStream)await U(B);else if(B instanceof Response&&B.body)await U(B.body);else if(B&&typeof B.then=="function"){const F=await B;F instanceof ReadableStream?await U(F):F instanceof Response&&F.body&&await U(F.body)}I.current&&m(F=>[...F,{...I.current,isStreaming:!1}])}catch(B){B.name!=="AbortError"&&(oe.error("Failed to send message"),console.error("Stream error:",B))}finally{H()}},$=x=>{x.key==="Enter"&&!x.shiftKey&&(x.preventDefault(),Y())};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",border:"1px solid var(--border, rgba(52,58,64,0.12))",borderRadius:"var(--radius-lg, 12px)",background:"var(--paper-elevated, rgba(255,255,255,0.82))",overflow:"hidden"},children:[L?e.jsxs("div",{style:{padding:"16px 20px",borderBottom:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",background:"var(--paper-elevated, rgba(255,255,255,0.82))"},children:[e.jsx("div",{style:{fontSize:"var(--text-lg, 16px)",fontWeight:720,letterSpacing:"-0.01em",color:"var(--text-strong, rgba(30,33,37,0.92))"},children:L}),e.jsx("div",{style:{fontSize:"var(--text-sm, 11px)",color:"var(--text-muted, rgba(30,33,37,0.56))",marginTop:"2px"},children:"Ask questions, get insights from analyzed interactions"})]}):null,e.jsx("div",{style:{flex:1,minHeight:0,overflowY:"auto",padding:"20px",display:"flex",flexDirection:"column"},children:w.length===0?e.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-faint, rgba(30,33,37,0.36))",fontSize:"var(--text-md, 13px)",textAlign:"center",padding:"40px"},children:"No messages yet. Start a conversation by asking a question below."}):e.jsxs(e.Fragment,{children:[w.map(x=>e.jsx(re,{role:x.role,content:x.content,html:x.html,timestamp:x.timestamp,toolBadges:x.toolBadges,isStreaming:x.isStreaming,onCodeBlockClick:a},x.id)),p&&e.jsx(re,{role:p.role,content:p.content,timestamp:p.timestamp,isStreaming:!0,onCodeBlockClick:a},p.id),n&&(!p||E)&&e.jsx("div",{style:{marginBottom:"16px"},children:e.jsx(se,{phase:E?"tool":C,elapsedMs:k,label:E&&O>=30?"Compacting conversation — trimming context to stay sharp...":E&&O>=10?"Running background tasks...":E?"Still working...":void 0})}),e.jsx("div",{ref:T})]})}),e.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",padding:"16px 20px",background:"var(--paper-elevated, rgba(255,255,255,0.82))"},children:[e.jsxs("div",{style:{display:"flex",gap:"12px",alignItems:"flex-end"},children:[e.jsx("textarea",{ref:i,value:l,onChange:x=>s(x.target.value),onKeyDown:$,placeholder:j,rows:1,disabled:r,style:{flex:1,padding:"10px 14px",fontSize:"var(--text-base, 14px)",lineHeight:1.5,color:"var(--text-strong, rgba(30,33,37,0.92))",background:"rgba(255, 255, 255, 0.95)",border:"1px solid rgba(52, 58, 64, 0.18)",borderRadius:"var(--radius-md, 8px)",resize:"none",outline:"none",transition:"border-color 0.15s ease",fontFamily:"inherit",minHeight:"42px",maxHeight:"120px",opacity:r?.6:1,cursor:r?"not-allowed":"text"},onFocus:x=>{r||(x.target.style.borderColor="rgba(94, 136, 176, 0.35)")},onBlur:x=>{x.target.style.borderColor="rgba(52, 58, 64, 0.18)"}}),e.jsx("button",{onClick:Y,disabled:!l.trim()||r,style:{padding:"10px 16px",background:l.trim()&&!r?"var(--Base-Strong, #0B0B0B)":"#ECEEF2",color:l.trim()&&!r?"white":"var(--text-base)",border:"none",borderRadius:"var(--radius-md, 8px)",cursor:l.trim()&&!r?"pointer":"not-allowed",display:"flex",alignItems:"center",gap:"6px",fontSize:"var(--text-md, 13px)",fontWeight:650,transition:"all 0.15s ease",height:"42px"},children:r?e.jsxs(e.Fragment,{children:[e.jsx("style",{children:`
|
|
20
|
+
@keyframes buttonSpin {
|
|
21
|
+
from { transform: rotate(0deg); }
|
|
22
|
+
to { transform: rotate(360deg); }
|
|
23
|
+
}
|
|
24
|
+
`}),e.jsx("div",{style:{width:"14px",height:"14px",border:"2px solid rgba(255, 255, 255, 0.3)",borderTopColor:"white",borderRadius:"50%",animation:"buttonSpin 0.6s linear infinite"}}),"Sending..."]}):e.jsxs(e.Fragment,{children:[e.jsx(D.Send,{size:16}),"Send"]})})]}),e.jsx("div",{style:{fontSize:"var(--text-sm, 11px)",color:"var(--text-faint, rgba(30,33,37,0.36))",marginTop:"8px"},children:"Press Enter to send, Shift+Enter for new line"})]})]})}function le({threads:f=[],activeThreadId:y,onSelectThread:b,onNewChat:v,loading:a=!1}){const[j,L]=h.useState(""),m=[...f.filter(s=>{if(!j)return!0;const n=j.toLowerCase();return(s.title||"").toLowerCase().includes(n)||(s.last_message_preview||"").toLowerCase().includes(n)})].sort((s,n)=>{if(s.pinned&&!n.pinned)return-1;if(!s.pinned&&n.pinned)return 1;const t=new Date(s.updated_at||s.created_at||0).getTime();return new Date(n.updated_at||n.created_at||0).getTime()-t}),l=s=>{if(!s)return"";const n=new Date(s),r=new Date().getTime()-n.getTime(),d=Math.floor(r/864e5);return d===0?n.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"}):d===1?"Yesterday":d<7?n.toLocaleDateString("en-US",{weekday:"short"}):n.toLocaleDateString("en-US",{month:"short",day:"numeric"})};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"var(--paper, rgba(255,255,255,0.95))",borderRight:"1px solid var(--border, rgba(52,58,64,0.12))",overflow:"hidden"},children:[e.jsxs("div",{style:{padding:"12px 14px",borderBottom:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",flexShrink:0},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"10px"},children:[e.jsx("div",{style:{fontSize:"13px",fontWeight:650,color:"var(--text-ink, rgba(30,33,37,0.92))"},children:"Threads"}),v&&e.jsx("button",{onClick:v,style:{padding:"4px 10px",fontSize:"11px",fontWeight:600,color:"var(--Base-Strong, #0B0B0B)",background:"#ECEEF2",border:"1px solid var(--border-subtle, rgba(52,58,64,0.08))",borderRadius:"6px",cursor:"pointer",transition:"all 0.15s ease"},onMouseEnter:s=>{s.currentTarget.style.background="#ECEEF2"},onMouseLeave:s=>{s.currentTarget.style.background="rgba(94, 136, 176, 0.08)"},children:"+ New"})]}),e.jsxs("div",{style:{position:"relative"},children:[e.jsx(D.Search,{size:13,style:{position:"absolute",left:"10px",top:"50%",transform:"translateY(-50%)",color:"var(--text-faint, rgba(30,33,37,0.36))",pointerEvents:"none"}}),e.jsx("input",{type:"text",value:j,onChange:s=>L(s.target.value),placeholder:"Search threads...",style:{width:"100%",padding:"7px 10px 7px 32px",fontSize:"12px",color:"var(--text-ink, rgba(30,33,37,0.92))",background:"var(--paper-elevated, rgba(255,255,255,0.82))",border:"1px solid var(--border, rgba(52,58,64,0.12))",borderRadius:"6px",outline:"none",transition:"border-color 0.15s ease",boxSizing:"border-box"},onFocus:s=>{s.target.style.borderColor="rgba(94, 136, 176, 0.35)"},onBlur:s=>{s.target.style.borderColor="rgba(52, 58, 64, 0.12)"}})]})]}),e.jsx("div",{style:{flex:1,overflowY:"auto",padding:"4px 6px"},children:a?e.jsx("div",{style:{padding:"30px 16px",textAlign:"center",color:"var(--text-faint, rgba(30,33,37,0.36))",fontSize:"12px"},children:"Loading threads..."}):m.length===0?e.jsx("div",{style:{padding:"30px 16px",textAlign:"center",color:"var(--text-faint, rgba(30,33,37,0.36))",fontSize:"12px"},children:j?"No threads found":"No threads yet"}):m.map(s=>{const n=s.id===y;return e.jsxs("div",{onClick:()=>b==null?void 0:b(s.id),style:{padding:"10px 10px",marginBottom:"2px",borderRadius:"6px",background:n?"rgba(94, 136, 176, 0.10)":"transparent",border:n?"1px solid rgba(94, 136, 176, 0.15)":"1px solid transparent",cursor:"pointer",transition:"all 0.12s ease"},onMouseEnter:t=>{n||(t.currentTarget.style.background="rgba(0,0,0,0.03)")},onMouseLeave:t=>{n||(t.currentTarget.style.background="transparent")},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",marginBottom:"4px"},children:[e.jsx(D.MessageSquare,{size:12,style:{color:n?"var(--rail-discovery, #5E88B0)":"var(--text-faint, rgba(30,33,37,0.36))",flexShrink:0}}),e.jsx("div",{style:{flex:1,fontSize:"12px",fontWeight:n?650:550,color:n?"var(--text-ink, rgba(30,33,37,0.92))":"var(--text-base, rgba(30,33,37,0.78))",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:s.title||"Untitled thread"}),s.pinned&&e.jsx(D.Pin,{size:10,style:{color:"var(--rail-discovery, #5E88B0)",flexShrink:0}})]}),s.last_message_preview&&e.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted, rgba(30,33,37,0.56))",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginLeft:"18px",marginBottom:"4px"},children:s.last_message_preview}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",marginLeft:"18px",fontSize:"10px",color:"var(--text-faint, rgba(30,33,37,0.36))"},children:[e.jsx(D.Clock,{size:9}),e.jsx("span",{children:l(s.updated_at||s.created_at)}),s.message_count!=null&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsxs("span",{children:[s.message_count," msg",s.message_count!==1?"s":""]})]})]})]},s.id)})})]})}const de={error:(...f)=>console.warn("toast.error:",...f)},ce=()=>({userData:{name:"User",email:""}});function pe({sessionTitle:f,messages:y,onSendMessage:b,currentUser:v}){var R;const[a,j]=h.useState(""),[L,w]=h.useState(!1),[m,l]=h.useState(y||[]),[s,n]=h.useState(!1),[t,r]=h.useState(!1),{userData:d}=ce(),p=h.useRef(null),c=v||{name:(d==null?void 0:d.name)||"You",initials:((R=d==null?void 0:d.name)==null?void 0:R.split(" ").map(o=>o[0]).join("").toUpperCase())||"YO",color:"#6B7C93"};h.useEffect(()=>{l(y||[])},[y]),h.useEffect(()=>{p.current&&p.current.scrollIntoView({behavior:"smooth"})},[m]);const C=async()=>{if(!a.trim())return;const o=a.trim();j(""),r(!0);const k={id:`temp-${Date.now()}`,author:{name:c.name,role:(d==null?void 0:d.role)||"",initials:c.initials,color:c.color},content:o,timestamp:"Just now",type:"comment",isOptimistic:!0};if(l(M=>[...M,k]),b){try{await b(o),l(M=>M.map(T=>T.id===k.id?{...T,isOptimistic:!1}:T))}catch{l(T=>T.filter(i=>i.id!==k.id)),de.error("Failed to send message")}finally{r(!1)}return}setTimeout(()=>{l(M=>M.map(T=>T.id===k.id?{...T,isOptimistic:!1}:T)),r(!1)},500)},z=o=>{o.key==="Enter"&&!o.shiftKey&&(o.preventDefault(),C())};return e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",background:"var(--paper-elevated, rgba(255,255,255,0.82))",border:"1px solid var(--border, rgba(52,58,64,0.12))",borderRadius:"var(--radius-lg, 12px)",overflow:"hidden"},children:[f&&e.jsxs("div",{style:{padding:"14px 16px",borderBottom:"1px solid var(--border, rgba(52,58,64,0.12))",background:"var(--paper-elevated, rgba(255,255,255,0.82))"},children:[e.jsx("div",{style:{fontSize:"var(--text-md, 13px)",fontWeight:680,color:"var(--text-strong, rgba(30,33,37,0.92))",marginBottom:"3px"},children:"Session Discussion"}),f&&e.jsx("div",{style:{fontSize:"var(--text-sm, 11px)",color:"var(--text-muted, rgba(30,33,37,0.56))",display:"flex",alignItems:"center",gap:"8px"},children:e.jsx("span",{children:f})})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"16px",display:"flex",flexDirection:"column",gap:"16px"},children:[s?e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"40px",color:"var(--text-faint, rgba(30,33,37,0.36))"},children:"Loading messages..."}):m.length===0?e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"40px",color:"var(--text-faint, rgba(30,33,37,0.36))"},children:"No messages yet. Start the conversation!"}):m.map(o=>e.jsxs("div",{style:{display:"flex",gap:"12px",opacity:o.type==="system"?.75:1},children:[o.type!=="system"&&e.jsx("div",{style:{width:"32px",height:"32px",borderRadius:"8px",background:o.author.color,color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"11px",fontWeight:650,flexShrink:0,opacity:.9},children:o.author.initials}),o.type==="system"&&e.jsx("div",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"rgba(30, 33, 37, 0.08)",color:"rgba(30, 33, 37, 0.52)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"11px",fontWeight:650,flexShrink:0},children:e.jsx(D.Clock,{size:14})}),e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"8px",marginBottom:"4px"},children:[e.jsx("span",{style:{fontSize:"var(--text-sm, 11px)",fontWeight:650,color:"var(--text-base, rgba(30,33,37,0.78))"},children:o.author.name}),e.jsx("span",{style:{fontSize:"var(--text-sm, 11px)",color:"var(--text-faint, rgba(30,33,37,0.36))",fontFamily:"var(--font-mono, monospace)"},children:o.timestamp}),o.author.role&&e.jsx("span",{style:{fontSize:"var(--text-xs, 10px)",color:"var(--text-muted, rgba(30,33,37,0.56))",background:"rgba(30, 33, 37, 0.06)",padding:"2px 6px",borderRadius:"4px",textTransform:"uppercase",letterSpacing:"0.04em",fontWeight:600},children:o.author.role}),o.isEdited&&e.jsx("span",{style:{fontSize:"var(--text-xs, 10px)",color:"var(--text-faint, rgba(30,33,37,0.36))",fontStyle:"italic"},children:"(edited)"})]}),e.jsx("div",{style:{fontSize:"var(--text-md, 13px)",color:"var(--text-base, rgba(30,33,37,0.78))",lineHeight:1.5,marginBottom:o.references?"8px":0},children:o.content}),o.references&&o.references.length>0&&e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px",marginTop:"8px"},children:o.references.map((k,M)=>e.jsxs("button",{type:"button",style:{fontSize:"11px",padding:"4px 8px",borderRadius:"6px",border:"1px solid rgba(52, 58, 64, 0.16)",background:"rgba(255, 255, 255, 0.7)",color:k.type==="condition"?"rgba(94, 136, 176, 0.85)":k.type==="observation"?"rgba(107, 123, 147, 0.85)":k.type==="timestamp"?"rgba(184, 156, 106, 0.85)":"rgba(30, 33, 37, 0.65)",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"4px",transition:"all 0.15s ease",fontWeight:550},onMouseEnter:T=>{T.currentTarget.style.background="rgba(255, 255, 255, 0.95)",T.currentTarget.style.borderColor="rgba(52, 58, 64, 0.24)"},onMouseLeave:T=>{T.currentTarget.style.background="rgba(255, 255, 255, 0.7)",T.currentTarget.style.borderColor="rgba(52, 58, 64, 0.16)"},children:[k.type==="timestamp"&&e.jsx(D.Clock,{size:12}),(k.type==="condition"||k.type==="observation")&&e.jsx(D.Hash,{size:12}),k.label]},M))})]})]},o.id)),e.jsx("div",{ref:p})]}),e.jsxs("div",{style:{padding:"12px",borderTop:"1px solid var(--border, rgba(52,58,64,0.12))",background:"var(--paper-elevated, rgba(255,255,255,0.82))"},children:[e.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"flex-end"},children:[e.jsx("div",{style:{width:"32px",height:"32px",borderRadius:"var(--radius-md, 8px)",background:c.color,color:"white",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"var(--text-sm, 11px)",fontWeight:650,flexShrink:0,opacity:.9},children:c.initials}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:"8px"},children:[e.jsx("textarea",{value:a,onChange:o=>j(o.target.value),onKeyDown:z,onFocus:()=>w(!0),onBlur:()=>w(!1),placeholder:"Add a comment...",style:{width:"100%",minHeight:"38px",maxHeight:"120px",padding:"8px 12px",fontSize:"var(--text-md, 13px)",color:"var(--text-base, rgba(30,33,37,0.78))",background:"white",border:`1px solid ${L?"rgba(94, 136, 176, 0.35)":"rgba(52, 58, 64, 0.16)"}`,borderRadius:"var(--radius-md, 8px)",resize:"vertical",outline:"none",transition:"border-color 0.15s ease",fontFamily:"inherit",lineHeight:1.5}}),e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e.jsxs("div",{style:{display:"flex",gap:"4px"},children:[e.jsx("button",{type:"button",style:{padding:"6px",background:"transparent",border:"none",borderRadius:"6px",color:"rgba(30, 33, 37, 0.52)",cursor:"pointer",display:"flex",alignItems:"center",transition:"all 0.15s ease"},onMouseEnter:o=>{o.currentTarget.style.background="rgba(30, 33, 37, 0.06)",o.currentTarget.style.color="rgba(30, 33, 37, 0.75)"},onMouseLeave:o=>{o.currentTarget.style.background="transparent",o.currentTarget.style.color="rgba(30, 33, 37, 0.52)"},title:"Mention user",children:e.jsx(D.AtSign,{size:16})}),e.jsx("button",{type:"button",style:{padding:"6px",background:"transparent",border:"none",borderRadius:"6px",color:"rgba(30, 33, 37, 0.52)",cursor:"pointer",display:"flex",alignItems:"center",transition:"all 0.15s ease"},onMouseEnter:o=>{o.currentTarget.style.background="rgba(30, 33, 37, 0.06)",o.currentTarget.style.color="rgba(30, 33, 37, 0.75)"},onMouseLeave:o=>{o.currentTarget.style.background="transparent",o.currentTarget.style.color="rgba(30, 33, 37, 0.52)"},title:"Reference condition",children:e.jsx(D.Hash,{size:16})}),e.jsx("button",{type:"button",style:{padding:"6px",background:"transparent",border:"none",borderRadius:"6px",color:"rgba(30, 33, 37, 0.52)",cursor:"pointer",display:"flex",alignItems:"center",transition:"all 0.15s ease"},onMouseEnter:o=>{o.currentTarget.style.background="rgba(30, 33, 37, 0.06)",o.currentTarget.style.color="rgba(30, 33, 37, 0.75)"},onMouseLeave:o=>{o.currentTarget.style.background="transparent",o.currentTarget.style.color="rgba(30, 33, 37, 0.52)"},title:"Attach file",children:e.jsx(D.Paperclip,{size:16})})]}),e.jsx("button",{type:"button",onClick:C,disabled:!a.trim()||t,style:{padding:"6px 12px",background:a.trim()&&!t?"rgba(94, 136, 176, 0.85)":"var(--border-subtle, rgba(52,58,64,0.08))",border:"none",borderRadius:"6px",color:a.trim()&&!t?"white":"var(--text-faint, rgba(30,33,37,0.36))",fontSize:"var(--text-sm, 11px)",fontWeight:600,cursor:a.trim()&&!t?"pointer":"not-allowed",display:"flex",alignItems:"center",gap:"6px",transition:"all 0.15s ease"},onMouseEnter:o=>{a.trim()&&!t&&(o.currentTarget.style.background="rgba(94, 136, 176, 1)")},onMouseLeave:o=>{a.trim()&&!t&&(o.currentTarget.style.background="rgba(94, 136, 176, 0.85)")},children:t?e.jsxs(e.Fragment,{children:[e.jsx("style",{children:`
|
|
25
|
+
@keyframes messageSpin {
|
|
26
|
+
from { transform: rotate(0deg); }
|
|
27
|
+
to { transform: rotate(360deg); }
|
|
28
|
+
}
|
|
29
|
+
`}),e.jsx("div",{style:{width:"14px",height:"14px",border:"2px solid rgba(255, 255, 255, 0.3)",borderTopColor:"white",borderRadius:"50%",animation:"messageSpin 0.6s linear infinite"}}),"Sending..."]}):e.jsxs(e.Fragment,{children:[e.jsx(D.Send,{size:14}),"Send"]})})]})]})]}),e.jsxs("div",{style:{marginTop:"8px",fontSize:"var(--text-sm, 11px)",color:"var(--text-faint, rgba(30,33,37,0.36))",lineHeight:1.4},children:[e.jsx("strong",{children:"Tip:"})," Use"," ",e.jsx("code",{style:{background:"rgba(30, 33, 37, 0.06)",padding:"2px 4px",borderRadius:"3px",fontFamily:"var(--font-mono, monospace)",fontSize:"var(--text-xs, 10px)"},children:"@"})," ","to mention teammates,"," ",e.jsx("code",{style:{background:"rgba(30, 33, 37, 0.06)",padding:"2px 4px",borderRadius:"3px",fontFamily:"var(--font-mono, monospace)",fontSize:"var(--text-xs, 10px)"},children:"#"})," ","to reference conditions"]})]})]})}const A=["#5E88B0","#9B7AA8","#C98A5A","#7BA89D","#D17B6B","#6B7C93","#9B8E6F","#8A9BAF","#B8976A","#A8C76B"],te={fill:"var(--text-muted, #666)",fontSize:12},N={stroke:"var(--border, #e0e0e0)"},Z="var(--border, #e0e0e0)",J={contentStyle:{backgroundColor:"var(--paper-elevated, #fff)",border:"1px solid var(--border, #e0e0e0)",borderRadius:"var(--radius-sm, 4px)",boxShadow:"0 2px 8px rgba(0, 0, 0, 0.1)",color:"var(--text-ink, #1e2125)"},labelStyle:{color:"var(--text-strong, #1e2125)"}},ee={color:"var(--text-ink, #1e2125)",fontSize:"12px"},xe=(f,y)=>{if(!f)return!1;const b=f.toLowerCase();return y.filter(a=>String(a).toLowerCase().includes(b)).length<y.length*.5},ge=async(f,y)=>{const b=f.querySelector("svg");if(!b)return;const v=b.cloneNode(!0),a=b.clientWidth||600,j=b.clientHeight||300;v.setAttribute("width",a),v.setAttribute("height",j),v.setAttribute("xmlns","http://www.w3.org/2000/svg");const L=document.createElement("style");L.textContent='text { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }',v.insertBefore(L,v.firstChild);const w=new XMLSerializer().serializeToString(v),m=new Blob([w],{type:"image/svg+xml;charset=utf-8"}),l=URL.createObjectURL(m),s=new Image;s.onload=()=>{const n=document.createElement("canvas"),t=2;n.width=a*t,n.height=j*t;const r=n.getContext("2d");r.fillStyle="#ffffff",r.fillRect(0,0,n.width,n.height),r.scale(t,t),r.drawImage(s,0,0,a,j),URL.revokeObjectURL(l);const d=document.createElement("a");d.download=`${(y||"chart").replace(/[^a-z0-9]+/gi,"_")}.png`,d.href=n.toDataURL("image/png"),d.click()},s.src=l},ue=(f,y)=>{const b=["",...f.map(j=>j.name)].join(","),v=y.map(j=>{const L=f.map(w=>{const m=w.data.find(l=>l.x===j);return m?m.y:""});return[j,...L].join(",")}),a=[b,...v].join(`
|
|
30
|
+
`);navigator.clipboard.writeText(a)},he=({onDownload:f,onCopy:y,copied:b})=>e.jsxs("div",{style:{display:"flex",gap:6,justifyContent:"flex-end",marginBottom:8,opacity:.7,transition:"opacity 0.15s"},children:[e.jsx("button",{onClick:y,title:"Copy data as CSV",style:{background:"none",border:"1px solid var(--border, #e0e0e0)",borderRadius:"var(--radius-sm, 4px)",padding:"3px 8px",fontSize:11,color:"var(--text-muted, #666)",cursor:"pointer",display:"flex",alignItems:"center",gap:4},children:b?"✓ Copied":"📋 CSV"}),e.jsx("button",{onClick:f,title:"Download as PNG",style:{background:"none",border:"1px solid var(--border, #e0e0e0)",borderRadius:"var(--radius-sm, 4px)",padding:"3px 8px",fontSize:11,color:"var(--text-muted, #666)",cursor:"pointer",display:"flex",alignItems:"center",gap:4},children:"📥 PNG"})]}),fe=({chartType:f,title:y,xLabel:b,yLabel:v,series:a})=>{const j=h.useRef(null),[L,w]=h.useState(!1);if(!a||a.length===0)return null;const m=[...new Set(a.flatMap(i=>i.data.map(u=>u.x)))],l=m.map(i=>{const u={x:i};return a.forEach(I=>{const S=I.data.find(E=>E.x===i);u[I.name]=S?S.y:null}),u}),s=a.map(i=>i.name),n=s.length===1,t=xe(b,m),r=t?20:5,p=Math.max(...m.map(i=>String(i).length))>12||m.length>8,c={background:"var(--paper-elevated, #fff)",border:"1px solid var(--border, #e0e0e0)",borderRadius:"var(--radius-md, 8px)",padding:"16px",marginBottom:"16px"},C={color:"var(--text-strong, #1e2125)",fontSize:"14px",fontWeight:"600",marginBottom:"12px"},z={dataKey:"x",tick:p?{fill:"var(--text-muted, #666)",fontSize:11,angle:-35,textAnchor:"end"}:te,axisLine:N,tickLine:N,...t?{label:{value:b,position:"insideBottom",offset:-10,style:{textAnchor:"middle",fill:"var(--text-muted, #666)"}}}:{}},R={tick:te,axisLine:N,tickLine:N,...v?{label:{value:v,angle:-90,position:"insideLeft",style:{textAnchor:"middle",fill:"var(--text-muted, #666)"}}}:{}},o=()=>{switch(f){case"bar":return e.jsx(g.ResponsiveContainer,{width:"100%",height:300,children:e.jsxs(g.BarChart,{data:l,margin:{top:5,right:30,left:20,bottom:p?40:r},children:[e.jsx(g.CartesianGrid,{strokeDasharray:"3 3",stroke:Z}),e.jsx(g.XAxis,{...z}),e.jsx(g.YAxis,{...R}),e.jsx(g.Tooltip,{...J}),!n&&e.jsx(g.Legend,{wrapperStyle:ee}),s.map((i,u)=>e.jsx(g.Bar,{dataKey:i,fill:A[u%A.length],radius:[2,2,0,0],children:n&&l.map((I,S)=>e.jsx(g.Cell,{fill:A[S%A.length]},S))},i))]})});case"horizontal_bar":return e.jsx(g.ResponsiveContainer,{width:"100%",height:Math.max(300,l.length*40),children:e.jsxs(g.BarChart,{data:l,layout:"vertical",margin:{top:5,right:30,left:100,bottom:5},children:[e.jsx(g.CartesianGrid,{strokeDasharray:"3 3",stroke:Z}),e.jsx(g.XAxis,{type:"number",tick:te,axisLine:N,tickLine:N,...v?{label:{value:v,position:"insideBottom",offset:-5,style:{textAnchor:"middle",fill:"var(--text-muted, #666)"}}}:{}}),e.jsx(g.YAxis,{type:"category",dataKey:"x",tick:{fill:"var(--text-muted, #666)",fontSize:11},width:90,axisLine:N,tickLine:N}),e.jsx(g.Tooltip,{...J}),!n&&e.jsx(g.Legend,{wrapperStyle:ee}),s.map((i,u)=>e.jsx(g.Bar,{dataKey:i,fill:A[u%A.length],radius:[0,2,2,0],children:n&&l.map((I,S)=>e.jsx(g.Cell,{fill:A[S%A.length]},S))},i))]})});case"line":return e.jsx(g.ResponsiveContainer,{width:"100%",height:300,children:e.jsxs(g.LineChart,{data:l,margin:{top:5,right:30,left:20,bottom:p?40:r},children:[e.jsx(g.CartesianGrid,{strokeDasharray:"3 3",stroke:Z}),e.jsx(g.XAxis,{...z}),e.jsx(g.YAxis,{...R}),e.jsx(g.Tooltip,{...J}),e.jsx(g.Legend,{wrapperStyle:ee}),s.map((i,u)=>e.jsx(g.Line,{type:"monotone",dataKey:i,stroke:A[u%A.length],strokeWidth:2,dot:{r:4,fill:A[u%A.length]},activeDot:{r:6,fill:A[u%A.length]}},i))]})});case"area":return e.jsx(g.ResponsiveContainer,{width:"100%",height:300,children:e.jsxs(g.AreaChart,{data:l,margin:{top:5,right:30,left:20,bottom:p?40:r},children:[e.jsx(g.CartesianGrid,{strokeDasharray:"3 3",stroke:Z}),e.jsx(g.XAxis,{...z}),e.jsx(g.YAxis,{...R}),e.jsx(g.Tooltip,{...J}),e.jsx(g.Legend,{wrapperStyle:ee}),s.map((i,u)=>e.jsx(g.Area,{type:"monotone",dataKey:i,stroke:A[u%A.length],strokeWidth:2,fill:A[u%A.length],fillOpacity:.15},i))]})});case"pie":{const i=a[0].data.map((S,E)=>({name:S.x,value:S.y,fill:A[E%A.length]})),u=Math.PI/180,I=({cx:S,cy:E,midAngle:_,innerRadius:O,outerRadius:X,percent:H,name:K})=>{const q=X+20,U=S+q*Math.cos(-_*u),Y=E+q*Math.sin(-_*u);return H<.04?null:e.jsxs("text",{x:U,y:Y,fill:"var(--text-ink, #1e2125)",fontSize:11,textAnchor:U>S?"start":"end",dominantBaseline:"central",children:[K," (",(H*100).toFixed(0),"%)"]})};return e.jsx(g.ResponsiveContainer,{width:"100%",height:320,children:e.jsxs(g.PieChart,{children:[e.jsx(g.Pie,{data:i,cx:"50%",cy:"50%",outerRadius:100,dataKey:"value",label:I,labelLine:{stroke:"var(--text-muted, #666)"},children:i.map((S,E)=>e.jsx(g.Cell,{fill:S.fill},E))}),e.jsx(g.Tooltip,{...J})]})})}case"metric":{const i=a[0],u=i.data[0],I=i.data.length>1?i.data[1]:null,S=u.y,E=u.x||"",_=I!==null,O=_?S-I.y:0,X=_&&I.y!==0?O/Math.abs(I.y)*100:0,H=O>0,K=O<0,q=H?"#7BA89D":K?"#D17B6B":"var(--text-muted, #666)",U=H?"↑":K?"↓":"→",Y=$=>Number.isInteger($)&&Math.abs($)>=1e3?$.toLocaleString():typeof $=="number"?$%1===0?$.toString():$.toFixed($<10?2:1):String($);return e.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:12,padding:"8px 0"},children:[e.jsx("div",{style:{fontSize:"36px",fontWeight:700,lineHeight:1,color:"var(--text-strong, #1e2125)",fontVariantNumeric:"tabular-nums"},children:Y(S)}),E&&e.jsx("div",{style:{fontSize:"14px",color:"var(--text-muted, #666)",fontWeight:500},children:E}),_&&e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,fontSize:"13px",fontWeight:600,color:q,background:H?"rgba(123,168,157,0.12)":K?"rgba(209,123,107,0.12)":"rgba(128,128,128,0.08)",padding:"3px 8px",borderRadius:"var(--radius-sm, 4px)"},children:[e.jsx("span",{children:U}),e.jsxs("span",{children:[Y(Math.abs(O))," (",Math.abs(X).toFixed(1),"%)"]})]}),_&&e.jsxs("div",{style:{fontSize:"11px",color:"var(--text-faint, #999)"},children:["vs ",I.x||"previous"]})]})}default:return e.jsxs("div",{style:{color:"var(--text-muted)",fontSize:12,padding:8},children:["Unsupported chart type: ",f]})}},k=h.useCallback(()=>{j.current&&ge(j.current,y)},[y]),M=h.useCallback(()=>{ue(a,m),w(!0),setTimeout(()=>w(!1),2e3)},[a,m]),T=f!=="metric";return e.jsxs("div",{style:c,children:[y&&e.jsx("div",{style:C,children:y}),T&&e.jsx(he,{onDownload:k,onCopy:M,copied:L}),e.jsx("div",{ref:j,children:o()})]})};exports.ChartRenderer=fe;exports.ChatHistoryPanel=le;exports.ChatInterface=ie;exports.ChatMessage=re;exports.MessageThread=pe;exports.ThinkingIndicator=se;
|
|
2
31
|
//# sourceMappingURL=chat.cjs.js.map
|