ahs-cti 0.0.5 → 0.0.7
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/agentDetailReport-ZR7U2LLB.mjs +17 -0
- package/dist/{agentPerformanceReport-U2QGVTXF.mjs → agentPerformanceReport-JZK5DN5E.mjs} +59 -57
- package/dist/{agentPerformanceReport-U2QGVTXF.mjs.map → agentPerformanceReport-JZK5DN5E.mjs.map} +1 -1
- package/dist/{auditReport-DEVQDTDT.mjs → auditReport-6ZUJ4UFO.mjs} +5 -5
- package/dist/{callHistory-MRBBY3UO.mjs → callHistory-T3M76D4B.mjs} +147 -156
- package/dist/{callHistory-MRBBY3UO.mjs.map → callHistory-T3M76D4B.mjs.map} +1 -1
- package/dist/{campaigns-ERO3QM6I.mjs → campaigns-5PVHXBSD.mjs} +384 -386
- package/dist/{campaigns-ERO3QM6I.mjs.map → campaigns-5PVHXBSD.mjs.map} +1 -1
- package/dist/{caroQualityAuditDashboard-NRWY6SEC.mjs → caroQualityAuditDashboard-EUDYZ3QY.mjs} +6 -5
- package/dist/{caroQualityAuditDashboard-NRWY6SEC.mjs.map → caroQualityAuditDashboard-EUDYZ3QY.mjs.map} +1 -1
- package/dist/{caroVoiceAI-Z5BDDDSY.mjs → caroVoiceAI-GGJCVUIQ.mjs} +5 -4
- package/dist/{caroVoiceAI-Z5BDDDSY.mjs.map → caroVoiceAI-GGJCVUIQ.mjs.map} +1 -1
- package/dist/{cdrReport-EZNOCELK.mjs → cdrReport-ZMDHSZUW.mjs} +101 -100
- package/dist/{cdrReport-EZNOCELK.mjs.map → cdrReport-ZMDHSZUW.mjs.map} +1 -1
- package/dist/{chunk-53DYH64M.mjs → chunk-2M3YEXYA.mjs} +91 -64
- package/dist/chunk-2M3YEXYA.mjs.map +1 -0
- package/dist/{chunk-ISQBOS5Q.mjs → chunk-33QNSXP7.mjs} +160 -160
- package/dist/{chunk-ISQBOS5Q.mjs.map → chunk-33QNSXP7.mjs.map} +1 -1
- package/dist/{chunk-YFW47Y76.mjs → chunk-3J7KQNEU.mjs} +15 -12
- package/dist/{chunk-YFW47Y76.mjs.map → chunk-3J7KQNEU.mjs.map} +1 -1
- package/dist/{chunk-MBHP7UOP.mjs → chunk-6WLG2PXL.mjs} +2 -2
- package/dist/{chunk-MBXHRFGP.mjs → chunk-7LE2VTAI.mjs} +2 -2
- package/dist/{chunk-MFZKONNR.mjs → chunk-AOJRUZTO.mjs} +2 -2
- package/dist/chunk-DF5EFKXC.mjs +28690 -0
- package/dist/chunk-DF5EFKXC.mjs.map +1 -0
- package/dist/{chunk-5FSMIU5K.mjs → chunk-DJP744FF.mjs} +2 -2
- package/dist/{chunk-BVQNDAS6.mjs → chunk-DNTGBNZD.mjs} +18 -14
- package/dist/{chunk-BVQNDAS6.mjs.map → chunk-DNTGBNZD.mjs.map} +1 -1
- package/dist/{chunk-AJQBR3AZ.mjs → chunk-E6KYWWAI.mjs} +4243 -7804
- package/dist/chunk-E6KYWWAI.mjs.map +1 -0
- package/dist/{chunk-3DOSR6LQ.mjs → chunk-FRKV2U3I.mjs} +2 -2
- package/dist/{chunk-ICGEHYJL.mjs → chunk-H7GRWLYI.mjs} +5 -5
- package/dist/{chunk-6MURUWDX.mjs → chunk-IDZWA6HG.mjs} +154 -156
- package/dist/{chunk-6MURUWDX.mjs.map → chunk-IDZWA6HG.mjs.map} +1 -1
- package/dist/chunk-LHE4QGJJ.mjs +10920 -0
- package/dist/chunk-LHE4QGJJ.mjs.map +1 -0
- package/dist/{chunk-HBR2JS4C.mjs → chunk-NAZO4HKB.mjs} +8 -4
- package/dist/{chunk-HBR2JS4C.mjs.map → chunk-NAZO4HKB.mjs.map} +1 -1
- package/dist/{chunk-DXZIYCNQ.mjs → chunk-OHJIW3I3.mjs} +2 -2
- package/dist/chunk-Q6G3MPS7.mjs +37797 -0
- package/dist/chunk-Q6G3MPS7.mjs.map +1 -0
- package/dist/{chunk-QPOHVXUK.mjs → chunk-U2UDKXMB.mjs} +2 -2
- package/dist/{chunk-XMRM5VR4.mjs → chunk-VBIDPX5Z.mjs} +18 -14
- package/dist/{chunk-XMRM5VR4.mjs.map → chunk-VBIDPX5Z.mjs.map} +1 -1
- package/dist/{chunk-6ICPXSN6.mjs → chunk-VVDJLUYT.mjs} +8 -4
- package/dist/{chunk-6ICPXSN6.mjs.map → chunk-VVDJLUYT.mjs.map} +1 -1
- package/dist/{chunk-XA5SCAZJ.mjs → chunk-WTBVFN4H.mjs} +2 -2
- package/dist/{chunk-RSL5OBRQ.mjs → chunk-YAQYTUTX.mjs} +2 -2
- package/dist/index.js +117240 -32148
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +276 -296
- package/dist/index.mjs.map +1 -1
- package/dist/{liveStatus-F6AKCC27.mjs → liveStatus-YSBYSVOO.mjs} +123 -122
- package/dist/{liveStatus-F6AKCC27.mjs.map → liveStatus-YSBYSVOO.mjs.map} +1 -1
- package/dist/{loginReport-MWTI4G6O.mjs → loginReport-YIVBJVJD.mjs} +118 -116
- package/dist/{loginReport-MWTI4G6O.mjs.map → loginReport-YIVBJVJD.mjs.map} +1 -1
- package/dist/managementDashboard-7EMQC2UA.mjs +536 -0
- package/dist/{managementDashboard-6UBOCLBA.mjs.map → managementDashboard-7EMQC2UA.mjs.map} +1 -1
- package/dist/{qualityAuditDashboard-ZJEEAMBS.mjs → qualityAuditDashboard-ENGQN2WQ.mjs} +6 -5
- package/dist/{qualityAuditDashboard-ZJEEAMBS.mjs.map → qualityAuditDashboard-ENGQN2WQ.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/agentDetailReport-F7XZLVVO.mjs +0 -16
- package/dist/chunk-53DYH64M.mjs.map +0 -1
- package/dist/chunk-AJQBR3AZ.mjs.map +0 -1
- package/dist/chunk-Q7FIRWF2.mjs +0 -1067
- package/dist/chunk-Q7FIRWF2.mjs.map +0 -1
- package/dist/chunk-UB5HSUGK.mjs +0 -65
- package/dist/chunk-UB5HSUGK.mjs.map +0 -1
- package/dist/managementDashboard-6UBOCLBA.mjs +0 -536
- /package/dist/{agentDetailReport-F7XZLVVO.mjs.map → agentDetailReport-ZR7U2LLB.mjs.map} +0 -0
- /package/dist/{auditReport-DEVQDTDT.mjs.map → auditReport-6ZUJ4UFO.mjs.map} +0 -0
- /package/dist/{chunk-MBHP7UOP.mjs.map → chunk-6WLG2PXL.mjs.map} +0 -0
- /package/dist/{chunk-MBXHRFGP.mjs.map → chunk-7LE2VTAI.mjs.map} +0 -0
- /package/dist/{chunk-MFZKONNR.mjs.map → chunk-AOJRUZTO.mjs.map} +0 -0
- /package/dist/{chunk-5FSMIU5K.mjs.map → chunk-DJP744FF.mjs.map} +0 -0
- /package/dist/{chunk-3DOSR6LQ.mjs.map → chunk-FRKV2U3I.mjs.map} +0 -0
- /package/dist/{chunk-ICGEHYJL.mjs.map → chunk-H7GRWLYI.mjs.map} +0 -0
- /package/dist/{chunk-DXZIYCNQ.mjs.map → chunk-OHJIW3I3.mjs.map} +0 -0
- /package/dist/{chunk-QPOHVXUK.mjs.map → chunk-U2UDKXMB.mjs.map} +0 -0
- /package/dist/{chunk-XA5SCAZJ.mjs.map → chunk-WTBVFN4H.mjs.map} +0 -0
- /package/dist/{chunk-RSL5OBRQ.mjs.map → chunk-YAQYTUTX.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../call-control-sdk/lib/pages/liveStatus/index.tsx","../call-control-sdk/lib/pages/liveStatus/useLiveStatus.ts","../call-control-sdk/lib/pages/liveStatus/styles.ts"],"sourcesContent":["import React, { useCallback, useState, useEffect } from \"react\";\r\nimport { Box, CircularProgress } from \"@mui/material\";\r\nimport { useCallMonitoring } from \"../../hooks/useCallMonitoring\";\r\nimport type { SupervisorMonitorMode } from \"../../hooks/useCallMonitoring\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\n\r\nimport {\r\n\tuseLiveStatus,\r\n\tgetSortedAgents,\r\n\tgetAgentStatusKey,\r\n\tfmtDur,\r\n\tLONG_CALL_SECS,\r\n\tWAITING_THRESHOLD,\r\n} from \"./useLiveStatus\";\r\nimport type { DashboardAgentCard } from \"./types\";\r\nimport type { MonitoringSession } from \"./types\";\r\nimport {\r\n\tC,\r\n\tSTATUS_COLORS,\r\n\tWallboardRoot,\r\n\tTopBar,\r\n\tBrandLogo,\r\n\tLiveBadge,\r\n\tPulseDot,\r\n\tKpiStrip,\r\n\tKpiCell,\r\n\tKpiValue,\r\n\tKpiLabel,\r\n\tBodyGrid,\r\n\tPanel,\r\n\tPanelHeader,\r\n\tPhTitle,\r\n\tBadge,\r\n\tStatusDot,\r\n\tAgentTable,\r\n\tAgTh,\r\n\tAgTd,\r\n\tPageInfo,\r\n\tQName,\r\n\tQNum,\r\n\tQBar,\r\n\tQBarFill,\r\n\tSbHeader,\r\n\tSbTitle,\r\n\tNoDataBox,\r\n\tFooter,\r\n\tTickerLabel,\r\n\tTickerTrack,\r\n\tTickerInner,\r\n\tTickerSpan,\r\n\tMonitorBtn,\r\n\tMonitorCard,\r\n\tslideUp,\r\n\tpulse,\r\n\trowBlink,\r\n} from \"./styles\";\r\n\r\n// ─── Agent Table Row ──────────────────────────────────────────────────────────\r\n\r\ninterface AgentTableRowProps {\r\n\tagent: DashboardAgentCard;\r\n\tdurSecs: number;\r\n\tonMonitor?: (agent: DashboardAgentCard, mode: SupervisorMonitorMode) => void;\r\n\tactiveMonitoring?: MonitoringSession | null;\r\n\tonStopMonitoring?: () => void;\r\n}\r\n\r\nconst AgentTableRow: React.FC<AgentTableRowProps> = React.memo(({\r\n\tagent,\r\n\tdurSecs,\r\n\tonMonitor,\r\n\tactiveMonitoring,\r\n\tonStopMonitoring,\r\n}) => {\r\n\tconst statusKey = getAgentStatusKey(agent.status, agent.callDirection);\r\n\tconst sc = STATUS_COLORS[statusKey];\r\n\tconst isOnCall = statusKey === \"s-oncall-in\" || statusKey === \"s-oncall-out\";\r\n\tconst isLong = isOnCall && durSecs >= LONG_CALL_SECS;\r\n\tconst isBeingMonitored = activeMonitoring?.agentId === agent.agentId;\r\n\r\n\tconst statusColor = isOnCall\r\n\t\t? agent.callDirection === \"OUTBOUND\" ? C.blue : C.green\r\n\t\t: sc.text;\r\n\tconst durColor = isLong ? C.red : statusColor;\r\n\r\n\treturn (\r\n\t\t<tr style={{ background: isLong ? \"rgba(204,42,42,.07)\" : sc.bg, transition: \"background 0.3s\" }}>\r\n\t\t\t{/* Name */}\r\n\t\t\t<AgTd sx={{ borderLeft: `2px solid ${sc.bar}`, pl: \"8px\", maxWidth: 160 }}>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11, fontWeight: 700, color: C.t1, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\r\n\t\t\t\t\t\t{agent.agentName}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t{isLong && (\r\n\t\t\t\t\t\t<Box component=\"span\" sx={{ fontSize: 7, fontWeight: 700, color: C.red, letterSpacing: 0.3, flexShrink: 0 }}>!7m</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Extension */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>{agent.extension || \"—\"}</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Status */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\", flexWrap: \"nowrap\" }}>\r\n\t\t\t\t\t<StatusDot dotColor={statusColor} animated={isOnCall} />\r\n\t\t\t\t\t<Box sx={{ fontSize: 8, fontWeight: 700, letterSpacing: 0.6, textTransform: \"uppercase\", color: statusColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t{agent.status}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Duration */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 700, color: durColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t{fmtDur(durSecs)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Caller number */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t{agent.activeCallerNumber || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Queue */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", maxWidth: 110 }}>\r\n\t\t\t\t\t{agent.queueNames || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Calls today */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, fontWeight: 700, color: C.t2 }}>\r\n\t\t\t\t\t{agent.callsToday}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Monitor actions — only for on-call agents */}\r\n\t\t\t{onMonitor !== undefined && (\r\n\t\t\t\t<AgTd>\r\n\t\t\t\t\t{isOnCall && onMonitor && (\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"3px\", flexWrap: \"nowrap\", alignItems: \"center\" }}>\r\n\t\t\t\t\t\t\t{isBeingMonitored ? (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, color: C.green, fontWeight: 600, display: \"flex\", alignItems: \"center\", gap: \"2px\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<StatusDot dotColor={C.green} animated />\r\n\t\t\t\t\t\t\t\t\t\t{activeMonitoring?.mode.toUpperCase()}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={onStopMonitoring}>⏹ Stop</MonitorBtn>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_LISTEN} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"listen\" onClick={() => onMonitor(agent, \"listen\")} title=\"Start listening\">👂</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_WHISPER} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"whisper\" onClick={() => onMonitor(agent, \"whisper\")} title=\"Whisper to agent\">🗣</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_BARGE} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"barge\" onClick={() => onMonitor(agent, \"barge\")} title=\"Barge in to call\">📢</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</AgTd>\r\n\t\t\t)}\r\n\t\t</tr>\r\n\t);\r\n});\r\n\r\n// ─── Main Component ───────────────────────────────────────────────────────────\r\n\r\ninterface LiveStatusPageProps {\r\n\tisTvDashboard?: boolean;\r\n}\r\n\r\nfunction LiveStatusPageInner({ isTvDashboard = false }: LiveStatusPageProps) {\r\n\tconst toast = useToast();\r\n\tconst {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t} = useLiveStatus();\r\n\r\n\t// Supervisor monitoring state\r\n\tconst { startMonitoring, stopMonitoring, changeMode, isLoading: monitoringLoading } = useCallMonitoring();\r\n\tconst [monitoringSession, setMonitoringSession] = useState<MonitoringSession | null>(null);\r\n\tconst [showMonitorModal, setShowMonitorModal] = useState(false);\r\n\tconst [selectedAgent, setSelectedAgent] = useState<DashboardAgentCard | null>(null);\r\n\tconst [selectedMode, setSelectedMode] = useState<SupervisorMonitorMode>(\"listen\");\r\n\tconst [monitoringError, setMonitoringError] = useState<string | null>(null);\r\n\r\n\t// Open monitor modal\r\n\tconst handleOpenMonitorModal = useCallback((agent: DashboardAgentCard, mode: SupervisorMonitorMode) => {\r\n\t\tsetSelectedAgent(agent);\r\n\t\tsetSelectedMode(mode);\r\n\t\tsetShowMonitorModal(true);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Start monitoring\r\n\tconst handleStartMonitoring = useCallback(async () => {\r\n\t\tif (!selectedAgent) return;\r\n\t\tif (!selectedAgent.activeCallUuid) {\r\n\t\t\tsetMonitoringError(\"No active call found for this agent\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMonitoringError(null);\r\n\r\n\t\tconst response = await startMonitoring({\r\n\t\t\tcall_id: selectedAgent.activeCallUuid,\r\n\t\t\tagent_extension: selectedAgent.extension || \"\",\r\n\t\t\tmode: selectedMode,\r\n\t\t});\r\n\r\n\t\tif (response?.success && response?.session_id) {\r\n\t\t\tsetMonitoringSession({\r\n\t\t\t\tsessionId: response.session_id,\r\n\t\t\t\tagentId: selectedAgent.agentId,\r\n\t\t\t\tagentName: selectedAgent.agentName,\r\n\t\t\t\tagentExt: selectedAgent.extension || \"\",\r\n\t\t\t\tmode: selectedMode,\r\n\t\t\t\tcallUuid: selectedAgent.activeCallUuid,\r\n\t\t\t\tstartTime: Date.now(),\r\n\t\t\t});\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t} else {\r\n\t\t\tsetMonitoringError(response?.message || \"Failed to start monitoring\");\r\n\t\t}\r\n\t}, [selectedAgent, selectedMode, startMonitoring, toast]);\r\n\r\n\t// Stop monitoring\r\n\tconst handleStopMonitoring = useCallback(async () => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await stopMonitoring({ call_uuid: monitoringSession.callUuid });\r\n\t\tif (response?.success && response?.message) toast.showToast(response.message, \"success\");\r\n\t\tsetMonitoringSession(null);\r\n\t}, [monitoringSession, stopMonitoring, toast]);\r\n\r\n\t// Change mode\r\n\tconst handleChangeMode = useCallback(async (newMode: SupervisorMonitorMode) => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await changeMode({ call_uuid: monitoringSession.callUuid, mode: newMode });\r\n\t\tif (response?.success) {\r\n\t\t\tsetMonitoringSession((prev) => prev ? { ...prev, mode: newMode } : null);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t}\r\n\t}, [monitoringSession, changeMode, toast]);\r\n\r\n\t// Close modal\r\n\tconst handleCloseMonitorModal = useCallback(() => {\r\n\t\tsetShowMonitorModal(false);\r\n\t\tsetSelectedAgent(null);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Auto-stop when monitored agent's call ends\r\n\tuseEffect(() => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst agent = agents.find((a) => a.agentId === monitoringSession.agentId);\r\n\t\tif (!agent) return;\r\n\t\tconst isOnCall = agent.status?.toUpperCase() === \"ONCALL\";\r\n\t\tconst callUuidChanged = agent.activeCallUuid !== monitoringSession.callUuid;\r\n\t\tif (!isOnCall || callUuidChanged) {\r\n\t\t\tsetMonitoringSession(null);\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\ttoast.showToast(\"Monitoring ended — agent call has ended.\", \"info\");\r\n\t\t}\r\n\t}, [agents, monitoringSession, toast]);\r\n\r\n\t// Derived counts\r\n\tconst sorted = getSortedAgents(agents);\r\n\tconst oncallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst breakCount = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst longCallCount = agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-oncall-in\" && (durations[a.agentId] || 0) >= LONG_CALL_SECS).length;\r\n\r\n\tconst kpiTotalAgents = topStats?.totalAgents ?? agents.length;\r\n\tconst kpiLoginCount = topStats?.loggedIn ?? agents.length;\r\n\tconst kpiIdleCount = topStats?.idleReady ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length;\r\n\tconst kpiOnCallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst kpiWrapup = topStats?.wrapup ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-wrapup\").length;\r\n\tconst kpiBreak = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst kpiNotLogged = topStats?.notLogged ?? Math.max(0, kpiTotalAgents - kpiLoginCount);\r\n\r\n\tconst tickerItems = queues.map((q) => ({\r\n\t\ttext: `${q.queueName} Queue — <b>${q.waitingCalls > 0 ? q.waitingCalls + \" waiting\" : \"all clear\"}</b> · avg ${q.avgWaitFormatted}`,\r\n\t\twarn: q.waitingCalls > 0,\r\n\t\tgood: q.waitingCalls === 0,\r\n\t}));\r\n\r\n\tif (isLoading) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{\r\n\t\t\t\theight: \"100vh\", display: \"flex\", flexDirection: \"column\",\r\n\t\t\t\talignItems: \"center\", justifyContent: \"center\", background: \"transparent\", gap: 2,\r\n\t\t\t}}>\r\n\t\t\t\t<CircularProgress size={48} sx={{ color: C.blue }} />\r\n\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 16, fontWeight: 600, color: C.t2, letterSpacing: 1, textTransform: \"uppercase\" }}>\r\n\t\t\t\t\tLoading Live Status...\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<WallboardRoot isTv={isTvDashboard}>\r\n\r\n\t\t\t{/* ══ TOP BAR (TV only) ════════════════════════════════════ */}\r\n\t\t\t{isTvDashboard && (\r\n\t\t\t\t<TopBar>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\r\n\t\t\t\t\t\t<BrandLogo>\r\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 26 26\" fill=\"none\" width={16} height={16}>\r\n\t\t\t\t\t\t\t\t<rect width=\"26\" height=\"26\" rx=\"5\" fill=\"#1A5F6C\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M5 18 Q5 8 13 8 Q21 8 21 18\" stroke=\"#1565c8\" strokeWidth=\"2.5\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M9 18 Q9 12 13 12 Q17 12 17 18\" stroke=\"#0a9a62\" strokeWidth=\"2\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<circle cx=\"13\" cy=\"19\" r=\"2\" fill=\"#1565c8\" />\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</BrandLogo>\r\n\t\t\t\t\t\t<Box sx={{ color: \"#fff\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 13, fontWeight: 800, letterSpacing: 1.2, lineHeight: 1 }}>AHS</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, letterSpacing: 1, color: \"rgba(255,255,255,.45)\", textTransform: \"uppercase\" }}>Supervisor Wallboard</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<LiveBadge>\r\n\t\t\t\t\t\t\t<PulseDot />\r\n\t\t\t\t\t\t\tLIVE\r\n\t\t\t\t\t\t</LiveBadge>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ textAlign: \"right\" }}>\r\n\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 14, fontWeight: 700, color: \"#fff\", letterSpacing: 1.5, lineHeight: 1 }}>{clockStr}</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, color: \"rgba(255,255,255,.4)\", letterSpacing: 0.5, mt: \"1px\" }}>{dateStr}</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</TopBar>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* ══ KPI STRIP ══════════════════════════════════════════════ */}\r\n\t\t\t<KpiStrip>\r\n\t\t\t\t<KpiCell accentColor=\"#94a3b8\"><KpiValue kcolor={C.t1}>{kpiTotalAgents}</KpiValue><KpiLabel>Total Agents</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{kpiLoginCount}</KpiValue><KpiLabel>Logged In</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor=\"#cbd5e1\"><KpiValue kcolor=\"#94a3b8\">{kpiNotLogged}</KpiValue><KpiLabel>Not Logged</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.teal}><KpiValue kcolor={C.teal}>{kpiIdleCount}</KpiValue><KpiLabel>Idle / Ready</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{kpiOnCallCount}</KpiValue><KpiLabel>On Call</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.inboundToday ?? 0}</KpiValue><KpiLabel>Inbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.outboundToday ?? 0}</KpiValue><KpiLabel>Outbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.purple}><KpiValue kcolor={C.purple}>{kpiWrapup}</KpiValue><KpiLabel>Wrapup</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{kpiBreak}</KpiValue><KpiLabel>On Break</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.callsToday ?? 0}</KpiValue><KpiLabel>Calls Today</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{topStats?.abandonedToday ?? 0}</KpiValue><KpiLabel>Abandoned</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.slaThisHrPct != null ? `${topStats.slaThisHrPct}%` : \"—\"}</KpiValue><KpiLabel>SLA This Hr</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{topStats?.avgSpeedAnswerFormatted ?? \"00:00\"}</KpiValue><KpiLabel>Avg Speed Ans</KpiLabel></KpiCell>\r\n\t\t\t</KpiStrip>\r\n\r\n\t\t\t{/* ══ BODY ══════════════════════════════════════════════════ */}\r\n\t\t\t<BodyGrid>\r\n\r\n\t\t\t\t{/* Column 1: Agent Status */}\r\n\t\t\t\t<Panel>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Agent Status</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.amberLt} color={C.amber} border={C.amberBd}>{oncallCount} On-Call</Badge>\r\n\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{breakCount} Break</Badge>\r\n\t\t\t\t\t\t\t{longCallCount > 0 && (\r\n\t\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{longCallCount} Long</Badge>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 8, color: C.t3 }}>{agents.length} agents</Box>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\toverflowX: \"auto\", overflowY: \"auto\", flex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3, height: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"20%\" }}>Agent</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"7%\" }}>Ext</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"14%\" }}>Status</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"10%\" }}>Duration</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"12%\" }}>Caller</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"17%\" }}>Queue</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"6%\" }}>Calls</AgTh>\r\n\t\t\t\t\t\t\t\t\t{!isTvDashboard && <AgTh style={{ width: \"14%\" }}>Actions</AgTh>}\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t{sorted.length > 0 ? sorted.map((a) => (\r\n\t\t\t\t\t\t\t\t\t<AgentTableRow\r\n\t\t\t\t\t\t\t\t\t\tkey={a.agentId}\r\n\t\t\t\t\t\t\t\t\t\tagent={a}\r\n\t\t\t\t\t\t\t\t\t\tdurSecs={durations[a.agentId] || 0}\r\n\t\t\t\t\t\t\t\t\t\tonMonitor={isTvDashboard ? undefined : handleOpenMonitorModal}\r\n\t\t\t\t\t\t\t\t\t\tactiveMonitoring={monitoringSession}\r\n\t\t\t\t\t\t\t\t\t\tonStopMonitoring={handleStopMonitoring}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)) : (\r\n\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={isTvDashboard ? 7 : 8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<PageInfo>\r\n\t\t\t\t\t\t<span>{agents.length} agents · {oncallCount} on call · {agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length} idle</span>\r\n\t\t\t\t\t\t<span>Auto-refreshes every 5s</span>\r\n\t\t\t\t\t</PageInfo>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t\t{/* Column 2: Queue Performance + Queue Pulse + Live Alerts */}\r\n\t\t\t\t<Panel sx={{ borderRight: `1px solid ${C.b1}`, maxHeight: { xs: \"none\", lg: \"calc(100vh - 96px)\" } }}>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Queue Performance</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>All Healthy</Badge>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Badge bg={C.bg2} color={C.t3} border={C.b2}>Live SLA</Badge>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\tflex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Box sx={{ overflowX: \"auto\", \"&::-webkit-scrollbar\": { height: 3 }, \"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 }, \"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2 } }}>\r\n\t\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Queue</AgTh><AgTh>Agents</AgTh><AgTh>Active</AgTh><AgTh>Waiting</AgTh>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Avg Wait</AgTh><AgTh>Load</AgTh><AgTh>SLA%</AgTh><AgTh>C/hr</AgTh>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t{queues.length > 0 ? queues.map((q) => {\r\n\t\t\t\t\t\t\t\t\t\tconst loadColor = q.loadPct > 50 ? C.red : q.loadPct > 25 ? C.amber : C.green;\r\n\t\t\t\t\t\t\t\t\t\tconst slaColor = q.slaPct >= 95 ? C.green : q.slaPct >= 85 ? C.amber : C.red;\r\n\t\t\t\t\t\t\t\t\t\tconst isWaitingHigh = q.waitingCalls > WAITING_THRESHOLD;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box component=\"tr\" key={q.queueId} sx={isWaitingHigh ? { animation: `${rowBlink} 1s ease infinite` } : q.slaPct < 90 ? { background: \"rgba(204,42,42,.04)\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QName>{q.queueName}</QName></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.totalAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.amber}>{q.activeAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={isWaitingHigh ? C.red : q.waitingCalls > 0 ? C.red : C.green}>{q.waitingCalls}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.green}>{q.avgWaitFormatted}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<QBar><QBarFill w={q.loadPct} barColor={loadColor} /></QBar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, color: C.t3 }}>{q.loadPct}%</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={slaColor}>{q.slaPct}%</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.callsPerHour}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}) : (\r\n\t\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Queue Pulse ── */}\r\n\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M1 8h2l2-5 2 9 2-7 2 5 1-2h3\" stroke={C.blue} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Queue Pulse</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>Live</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", borderBottom: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t{ label: \"In Queue\", value: queuePulse?.runningInQueue ?? 0, color: C.amber, bg: C.amberLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Ready\", value: queuePulse?.readyAgents ?? 0, color: C.green, bg: C.greenLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Avg Wait\", value: queuePulse?.avgWaitFormatted ?? \"--:--\", color: C.blue, bg: C.blueLt },\r\n\t\t\t\t\t\t\t\t].map((s) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={s.label} sx={{ p: \"12px\", borderRight: `1px solid ${C.b1}`, \"&:last-child\": { borderRight: \"none\" }, background: s.bg }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 20, fontWeight: 800, color: s.color, lineHeight: 1 }}>{s.value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\", color: s.color, mt: \"4px\", fontWeight: 600, opacity: 0.75 }}>{s.label}</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Live Alerts ── */}\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M8 1.5a5 5 0 0 1 5 5v2.5l1 2H2l1-2V6.5a5 5 0 0 1 5-5z\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinejoin=\"round\" />\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M6.5 13a1.5 1.5 0 0 0 3 0\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Live Alerts</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={alerts.length > 0 ? C.amberLt : C.bg2} color={alerts.length > 0 ? C.amber : C.t3} border={alerts.length > 0 ? C.amberBd : C.b2}>{alerts.length}</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\toverflowY: \"auto\", maxHeight: 220,\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t{alerts.length > 0 ? alerts.map((a, i) => {\r\n\t\t\t\t\t\t\t\t\tconst sk = a.severity?.toLowerCase() === \"critical\" ? \"red\" : a.severity?.toLowerCase() === \"warning\" ? \"amber\" : \"blue\";\r\n\t\t\t\t\t\t\t\t\tconst ALERT_COLORS: Record<string, { bg: string; color: string }> = {\r\n\t\t\t\t\t\t\t\t\t\tred: { bg: C.redLt, color: C.red },\r\n\t\t\t\t\t\t\t\t\t\tamber: { bg: C.amberLt, color: C.amber },\r\n\t\t\t\t\t\t\t\t\t\tblue: { bg: C.blueLt, color: C.blue },\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\tconst ac = ALERT_COLORS[sk] ?? ALERT_COLORS.blue;\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<Box key={i} sx={{ display: \"flex\", gap: \"10px\", px: \"12px\", py: \"9px\", borderBottom: `1px solid ${C.b1}`, background: i % 2 === 0 ? \"transparent\" : C.bg2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: ac.color, flexShrink: 0, mt: \"3px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flex: 1, minWidth: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, fontWeight: 600, color: C.t1, mb: \"2px\" }}>{a.alertTitle}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, lineHeight: 1.4 }}>{a.alertMessage}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flexShrink: 0, display: \"flex\", flexDirection: \"column\", alignItems: \"flex-end\", gap: \"4px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, fontWeight: 700, px: \"5px\", py: \"1px\", borderRadius: \"3px\", background: ac.bg, color: ac.color, textTransform: \"uppercase\", letterSpacing: 0.5 }}>{a.severity}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(() => { try { const [h, m] = a.alertTime.split(\":\"); const hr = parseInt(h, 10); return `${hr % 12 || 12}:${m} ${hr >= 12 ? \"PM\" : \"AM\"}`; } catch { return a.alertTime; } })()}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}) : <NoDataBox>No active alerts</NoDataBox>}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t</BodyGrid>\r\n\r\n\t\t\t{/* ══ FOOTER TICKER ══════════════════════════════════════════ */}\r\n\t\t\t<Footer>\r\n\t\t\t\t<TickerLabel>AHS Live</TickerLabel>\r\n\t\t\t\t<TickerTrack>\r\n\t\t\t\t\t<TickerInner>\r\n\t\t\t\t\t\t{[...tickerItems, ...tickerItems].map((t, i) => (\r\n\t\t\t\t\t\t\t<TickerSpan key={i} isWarn={t.warn} isGood={t.good} dangerouslySetInnerHTML={{ __html: t.text }} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</TickerInner>\r\n\t\t\t\t</TickerTrack>\r\n\t\t\t</Footer>\r\n\r\n\t\t\t{/* ══ SUPERVISOR MONITOR MODAL ════════════════════════════════ */}\r\n\t\t\t{showMonitorModal && selectedAgent && (() => {\r\n\t\t\t\tconst modeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", label: \"Listen\", desc: \"Silent – agent unaware\", accent: C.blue, accentLt: \"#e3f2fd\", accentText: \"#1565c0\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", label: \"Whisper\", desc: \"Only agent hears you\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", accentText: \"#e65100\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", label: \"Barge\", desc: \"Both parties hear you\", accent: \"#c2185b\", accentLt: \"#fce4ec\", accentText: \"#880e4f\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst m = modeConfig[selectedMode];\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box onClick={handleCloseMonitorModal} sx={{ position: \"fixed\", inset: 0, zIndex: 1000 }} />\r\n\t\t\t\t\t\t<MonitorCard>\r\n\t\t\t\t\t\t\t<Box sx={{ height: 3, background: m.accent }} />\r\n\t\t\t\t\t\t\t<Box sx={{ p: \"12px 14px\" }}>\r\n\t\t\t\t\t\t\t\t{/* Header */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 32, height: 32, borderRadius: \"10px\", background: m.accentLt, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 16 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{m.icon}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 13, color: C.t1, lineHeight: 1.2 }}>Monitor Call</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3 }}>{selectedAgent.agentName} · ext {selectedAgent.extension || \"\"}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ border: \"none\", background: \"none\", cursor: \"pointer\", color: C.t4, fontSize: 18, lineHeight: 1, p: 0, \"&:hover\": { color: C.t2 } }}>×</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Call snapshot */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: \"4px 0\", background: C.bg2, borderRadius: \"8px\", p: \"8px 10px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t[\"Customer\", selectedAgent.activeCallerNumber || \"—\"],\r\n\t\t\t\t\t\t\t\t\t\t[\"Duration\", fmtDur(durations[selectedAgent.agentId] || 0)],\r\n\t\t\t\t\t\t\t\t\t].map(([label, value]) => (\r\n\t\t\t\t\t\t\t\t\t\t<React.Fragment key={label}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3, fontWeight: 500 }}>{label}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, fontWeight: 600, color: C.t1, textAlign: \"right\" }}>{value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode pills */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"6px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).map((mode) => {\r\n\t\t\t\t\t\t\t\t\t\tconst mc = modeConfig[mode];\r\n\t\t\t\t\t\t\t\t\t\tconst active = selectedMode === mode;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={mode} onClick={() => setSelectedMode(mode)} sx={{ flex: 1, textAlign: \"center\", py: \"5px\", borderRadius: \"20px\", fontSize: 9, fontWeight: 700, letterSpacing: 0.4, cursor: \"pointer\", textTransform: \"uppercase\", transition: \"all 0.15s\", background: active ? mc.accent : C.bg2, color: active ? \"#fff\" : C.t3, border: `1px solid ${active ? mc.accent : \"transparent\"}`, \"&:hover\": { background: active ? mc.accent : C.bg3 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode hint */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: m.accentText, background: m.accentLt, borderRadius: \"6px\", px: 1.25, py: 0.75, mb: 1.5, display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11 }}>ℹ️</span> {m.desc} · Your dialer will ring to connect.\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Error */}\r\n\t\t\t\t\t\t\t\t{monitoringError && (\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ mb: 1.5, px: 1.25, py: 0.75, background: C.redLt, borderRadius: \"6px\", color: C.red, fontSize: 11 }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringError}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{/* Actions */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"8px\" }}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ flex: 1, py: \"7px\", border: `1px solid ${C.b2}`, borderRadius: \"8px\", cursor: \"pointer\", fontSize: 11, fontWeight: 500, background: \"transparent\", color: C.t2, \"&:hover\": { background: C.bg2 } }}>Cancel</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleStartMonitoring} disabled={monitoringLoading} sx={{ flex: 2, py: \"7px\", border: \"none\", borderRadius: \"8px\", cursor: monitoringLoading ? \"not-allowed\" : \"pointer\", fontSize: 11, fontWeight: 700, background: m.accent, color: \"#fff\", opacity: monitoringLoading ? 0.7 : 1, transition: \"opacity 0.15s\", \"&:hover\": { opacity: monitoringLoading ? 0.7 : 0.88 } }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringLoading ? \"Starting…\" : `▶ Start ${m.label}`}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</MonitorCard>\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t\t{/* ══ ACTIVE MONITORING INDICATOR ════════════════════════════ */}\r\n\t\t\t{monitoringSession && (() => {\r\n\t\t\t\tconst sessionModeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", accent: C.blue, accentLt: \"#e3f2fd\", label: \"Listen\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", label: \"Whisper\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", accent: \"#c2185b\", accentLt: \"#fce4ec\", label: \"Barge\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst sm = sessionModeConfig[monitoringSession.mode as keyof typeof sessionModeConfig] ?? sessionModeConfig.listen;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Box sx={{ position: \"fixed\", bottom: 20, right: 20, width: 268, background: \"#fff\", borderRadius: \"14px\", boxShadow: \"0 8px 28px rgba(13,30,53,0.16), 0 2px 6px rgba(13,30,53,0.08)\", zIndex: 999, overflow: \"hidden\", animation: `${slideUp} 0.22s cubic-bezier(.22,.68,0,1.2)` }}>\r\n\t\t\t\t\t\t<Box sx={{ height: 3, background: sm.accent }} />\r\n\t\t\t\t\t\t<Box sx={{ p: \"10px 12px\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", mb: 1 }}>\r\n\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: C.green, flexShrink: 0, animation: `${pulse} 1.6s ease infinite` }} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 11, color: C.t1, textTransform: \"uppercase\", letterSpacing: 0.6 }}>\r\n\t\t\t\t\t\t\t\t\t{sm.icon} {sm.label} Active\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ ml: \"auto\", fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600, color: sm.accent }}>\r\n\t\t\t\t\t\t\t\t\t{fmtDur(Math.floor((Date.now() - monitoringSession.startTime) / 1000))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, color: C.t2, mb: 1, pl: \"16px\" }}>\r\n\t\t\t\t\t\t\t\t{monitoringSession.agentName}\r\n\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ color: C.t4, mx: 0.5 }}>·</Box>\r\n\t\t\t\t\t\t\t\text {monitoringSession.agentExt}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}`, mb: 1 }} />\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).filter(m => m !== monitoringSession.mode).map((mode) => {\r\n\t\t\t\t\t\t\t\t\tconst mc = sessionModeConfig[mode];\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn key={mode} variant={mode} onClick={() => handleChangeMode(mode)} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={handleStopMonitoring} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t⏹ Stop\r\n\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t</WallboardRoot>\r\n\t);\r\n}\r\n\r\n// ─── SDK-wrapped export ───────────────────────────────────────────────────────\r\n\r\nexport default function LiveStatusPage(props: LiveStatusPageProps) {\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<LiveStatusPageInner {...props} />\r\n\t\t</SDKProvider>\r\n\t);\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tDashboardAgentCard,\r\n\tDashboardAlert,\r\n\tDashboardQueueData,\r\n\tDashboardQueuePulse,\r\n\tDashboardTopStats,\r\n} from \"./types\";\r\n\r\nexport const POLL_INTERVAL_MS = 5000;\r\nexport const LONG_CALL_SECS = 420;\r\nexport const WAITING_THRESHOLD = 3;\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nexport function parseDur(dur: string): number {\r\n\tconst p = (dur || \"00:00:00\").split(\":\").map(Number);\r\n\treturn (p[0] || 0) * 3600 + (p[1] || 0) * 60 + (p[2] || 0);\r\n}\r\n\r\nexport function fmtDur(s: number): string {\r\n\tconst h = Math.floor(s / 3600);\r\n\tconst m = Math.floor((s % 3600) / 60);\r\n\tconst sc = s % 60;\r\n\treturn [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nexport type AgentStatusKey = \"s-oncall-in\" | \"s-oncall-out\" | \"s-wrapup\" | \"s-break\" | \"s-idle\";\r\n\r\nexport const STATUS_PRIORITY: Record<AgentStatusKey, number> = {\r\n\t\"s-oncall-in\": 0,\r\n\t\"s-oncall-out\": 1,\r\n\t\"s-break\": 2,\r\n\t\"s-wrapup\": 3,\r\n\t\"s-idle\": 4,\r\n};\r\n\r\nexport function getAgentStatusKey(status: string, callDirection: string | null): AgentStatusKey {\r\n\tconst lower = (status || \"\").toLowerCase();\r\n\tif (lower.includes(\"idle\") || lower.includes(\"ready\") || lower.includes(\"available\")) return \"s-idle\";\r\n\tif (lower.includes(\"break\") || lower.includes(\"pause\")) return \"s-break\";\r\n\tif (lower.includes(\"wrap\") || lower.includes(\"acw\")) return \"s-wrapup\";\r\n\tif (lower.includes(\"outbound\") || lower.includes(\"outgoing\") || lower.includes(\"dialing\")) return \"s-oncall-out\";\r\n\tif (\r\n\t\tlower.includes(\"call\") || lower.includes(\"busy\") || lower.includes(\"oncall\") ||\r\n\t\tlower.includes(\"on-call\") || lower.includes(\"on_call\") || lower.includes(\"incoming\") ||\r\n\t\tlower.includes(\"ringing\") || lower.includes(\"connected\")\r\n\t) {\r\n\t\treturn callDirection === \"OUTBOUND\" ? \"s-oncall-out\" : \"s-oncall-in\";\r\n\t}\r\n\treturn \"s-idle\";\r\n}\r\n\r\nexport function getSortedAgents(list: DashboardAgentCard[]): DashboardAgentCard[] {\r\n\treturn [...list].sort(\r\n\t\t(a, b) =>\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(a.status, a.callDirection)] ?? 9) -\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(b.status, b.callDirection)] ?? 9),\r\n\t);\r\n}\r\n\r\n// ─── API functions ────────────────────────────────────────────────────────────\r\n\r\nasync function fetchTopStats(): Promise<DashboardTopStats> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_TOP_STATS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAgents(): Promise<DashboardAgentCard[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_AGENTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueues(): Promise<DashboardQueueData[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUES);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAlerts(): Promise<DashboardAlert[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_ALERTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueuePulse(): Promise<DashboardQueuePulse> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUE_PULSE);\r\n\treturn res.data;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseLiveStatusReturn {\r\n\tisLoading: boolean;\r\n\ttopStats: DashboardTopStats | null;\r\n\tagents: DashboardAgentCard[];\r\n\tqueues: DashboardQueueData[];\r\n\talerts: DashboardAlert[];\r\n\tqueuePulse: DashboardQueuePulse | null;\r\n\tdurations: Record<string, number>;\r\n\tclockStr: string;\r\n\tdateStr: string;\r\n\trefresh: () => void;\r\n}\r\n\r\nexport function useLiveStatus(): UseLiveStatusReturn {\r\n\tconst [isLoading, setIsLoading] = useState(true);\r\n\tconst [topStats, setTopStats] = useState<DashboardTopStats | null>(null);\r\n\tconst [agents, setAgents] = useState<DashboardAgentCard[]>([]);\r\n\tconst [queues, setQueues] = useState<DashboardQueueData[]>([]);\r\n\tconst [alerts, setAlerts] = useState<DashboardAlert[]>([]);\r\n\tconst [queuePulse, setQueuePulse] = useState<DashboardQueuePulse | null>(null);\r\n\tconst [durations, setDurations] = useState<Record<string, number>>({});\r\n\tconst [clockStr, setClockStr] = useState(\"--:--:--\");\r\n\tconst [dateStr, setDateStr] = useState(\"\");\r\n\r\n\tconst agentsRef = useRef(agents);\r\n\tagentsRef.current = agents;\r\n\r\n\tconst fetchDashboard = useCallback(async () => {\r\n\t\ttry {\r\n\t\t\tconst [topStatsRes, agentsRes, queuesRes, alertsRes, pulseRes] = await Promise.allSettled([\r\n\t\t\t\tfetchTopStats(),\r\n\t\t\t\tfetchAgents(),\r\n\t\t\t\tfetchQueues(),\r\n\t\t\t\tfetchAlerts(),\r\n\t\t\t\tfetchQueuePulse(),\r\n\t\t\t]);\r\n\r\n\t\t\tif (topStatsRes.status === \"fulfilled\" && topStatsRes.value) setTopStats(topStatsRes.value);\r\n\t\t\tif (agentsRes.status === \"fulfilled\" && agentsRes.value?.length) {\r\n\t\t\t\tsetAgents(agentsRes.value);\r\n\t\t\t\tconst m: Record<string, number> = {};\r\n\t\t\t\tagentsRes.value.forEach((a) => {\r\n\t\t\t\t\tm[a.agentId] = parseDur(a.statusDuration || \"00:00:00\");\r\n\t\t\t\t});\r\n\t\t\t\tsetDurations(m);\r\n\t\t\t}\r\n\t\t\tif (queuesRes.status === \"fulfilled\" && queuesRes.value) setQueues(queuesRes.value);\r\n\t\t\tif (alertsRes.status === \"fulfilled\" && alertsRes.value) setAlerts(alertsRes.value);\r\n\t\t\tif (pulseRes.status === \"fulfilled\" && pulseRes.value) setQueuePulse(pulseRes.value);\r\n\t\t} catch {\r\n\t\t\t// keep current data on unexpected error\r\n\t\t} finally {\r\n\t\t\tsetIsLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\t// Initial fetch + polling\r\n\tuseEffect(() => {\r\n\t\tfetchDashboard();\r\n\t\tconst iv = setInterval(fetchDashboard, POLL_INTERVAL_MS);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, [fetchDashboard]);\r\n\r\n\t// Clock + duration ticker\r\n\tuseEffect(() => {\r\n\t\tconst iv = setInterval(() => {\r\n\t\t\tconst now = new Date();\r\n\t\t\tsetClockStr(\r\n\t\t\t\t[now.getHours(), now.getMinutes(), now.getSeconds()]\r\n\t\t\t\t\t.map((v) => String(v).padStart(2, \"0\"))\r\n\t\t\t\t\t.join(\":\"),\r\n\t\t\t);\r\n\t\t\tsetDateStr(\r\n\t\t\t\tnow.toLocaleDateString(\"en-US\", {\r\n\t\t\t\t\tweekday: \"long\",\r\n\t\t\t\t\tyear: \"numeric\",\r\n\t\t\t\t\tmonth: \"long\",\r\n\t\t\t\t\tday: \"numeric\",\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\t\t\tsetDurations((prev) => {\r\n\t\t\t\tconst next = { ...prev };\r\n\t\t\t\tfor (const key of Object.keys(next)) next[key] = next[key] + 1;\r\n\t\t\t\treturn next;\r\n\t\t\t});\r\n\t\t}, 1000);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t\trefresh: fetchDashboard,\r\n\t};\r\n}\r\n","import { Box, styled } from \"@mui/material\";\r\nimport { keyframes } from \"@mui/material/styles\";\r\nimport type { AgentStatusKey } from \"./useLiveStatus\";\r\n\r\n// ─── Keyframes ────────────────────────────────────────────────────────────────\r\n\r\nexport const pulse = keyframes`\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.6); opacity: 0.3; }\r\n`;\r\n\r\nexport const slideUp = keyframes`\r\n from { transform: translateY(16px); opacity: 0; }\r\n to { transform: translateY(0); opacity: 1; }\r\n`;\r\n\r\nexport const flashBg = keyframes`\r\n 0%, 100% { background: #fdf3e0; }\r\n 50% { background: #fff7e0; }\r\n`;\r\n\r\nexport const rowBlink = keyframes`\r\n 0%, 100% { background: rgba(204,42,42,.07); }\r\n 50% { background: rgba(204,42,42,.2); }\r\n`;\r\n\r\nexport const ticker = keyframes`\r\n 0% { transform: translateX(0); }\r\n 100% { transform: translateX(-50%); }\r\n`;\r\n\r\n// ─── Color tokens ─────────────────────────────────────────────────────────────\r\n\r\nexport const C = {\r\n\tbg0: \"#eef2f7\", bg1: \"#ffffff\", bg2: \"#f4f7fb\", bg3: \"#e4eaf3\", bg4: \"#d5dfee\",\r\n\tb1: \"rgba(30,60,120,.08)\", b2: \"rgba(30,60,120,.14)\",\r\n\tt1: \"#0d1e35\", t2: \"#3a5278\", t3: \"#7a93b5\", t4: \"#b0c0d5\",\r\n\tgreen: \"#0a9a62\", greenLt: \"#e4f6ef\", greenBd: \"rgba(10,154,98,.2)\",\r\n\tamber: \"#c47c00\", amberLt: \"#fdf3e0\", amberBd: \"rgba(196,124,0,.2)\",\r\n\tblue: \"#1565c8\", blueLt: \"#e8f0fc\", blueBd: \"rgba(21,101,200,.2)\",\r\n\tred: \"#cc2a2a\", redLt: \"#fde8e8\", redBd: \"rgba(204,42,42,.2)\",\r\n\tpurple: \"#6b3fbf\", purpleLt: \"#f0eafa\", purpleBd: \"rgba(107,63,191,.2)\",\r\n\tteal: \"#0b7a8f\", tealLt: \"#e3f4f7\", tealBd: \"rgba(11,122,143,.2)\",\r\n\torange: \"#c45a00\", orangeLt: \"#fdf0e4\",\r\n\tnavy: \"#1A5F6C\",\r\n};\r\n\r\nexport const STATUS_COLORS: Record<AgentStatusKey, { bg: string; border: string; bar: string; text: string }> = {\r\n\t\"s-oncall-in\": { bg: \"#fff8e1\", border: \"rgba(196,124,0,.3)\", bar: \"#e68a00\", text: \"#b36b00\" },\r\n\t\"s-oncall-out\": { bg: \"#e3f2fd\", border: \"rgba(21,101,200,.3)\", bar: \"#1976d2\", text: \"#0d47a1\" },\r\n\t\"s-wrapup\": { bg: \"#f3e5f5\", border: \"rgba(107,63,191,.3)\", bar: \"#8e24aa\", text: \"#6a1b9a\" },\r\n\t\"s-break\": { bg: \"#ffebee\", border: \"rgba(204,42,42,.3)\", bar: \"#e53935\", text: \"#c62828\" },\r\n\t\"s-idle\": { bg: \"#e8f5e9\", border: \"rgba(46,125,50,.25)\", bar: \"#2e7d32\", text: \"#1b5e20\" },\r\n};\r\n\r\n// ─── Wallboard root ───────────────────────────────────────────────────────────\r\n\r\nexport const WallboardRoot = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== \"isTv\",\r\n})<{ isTv?: boolean }>(({ theme, isTv }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateRows: \"auto auto 1fr auto\",\r\n\tminHeight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tbackground: \"transparent\",\r\n\tcolor: C.t1,\r\n\t[theme.breakpoints.up(\"lg\")]: {\r\n\t\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\t\toverflow: \"hidden\",\r\n\t},\r\n}));\r\n\r\n// ─── Top bar ──────────────────────────────────────────────────────────────────\r\n\r\nexport const TopBar = styled(Box)(({ theme }) => ({\r\n\tbackground: C.navy,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n\tpadding: \"0 10px\",\r\n\theight: 34,\r\n\tminHeight: 34,\r\n\tborderBottom: `1px solid ${C.blue}`,\r\n\tflexWrap: \"wrap\" as const,\r\n\tgap: 4,\r\n\t[theme.breakpoints.up(\"sm\")]: { padding: \"0 14px\", flexWrap: \"nowrap\" as const },\r\n}));\r\n\r\nexport const BrandLogo = styled(Box)({\r\n\twidth: 22, height: 22, borderRadius: 4, background: \"#fff\",\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\", overflow: \"hidden\",\r\n});\r\n\r\nexport const LiveBadge = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", gap: 4,\r\n\tbackground: \"rgba(10,154,98,.2)\", border: \"1px solid rgba(10,154,98,.4)\",\r\n\tborderRadius: 12, padding: \"2px 7px\",\r\n\tfontSize: 8, fontWeight: 700, letterSpacing: 1.5, color: \"#0ef5a8\", textTransform: \"uppercase\" as const,\r\n});\r\n\r\nexport const PulseDot = styled(\"span\")({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", background: \"#0ef5a8\",\r\n\tdisplay: \"inline-block\",\r\n\tanimation: `${pulse} 1.5s ease infinite`,\r\n});\r\n\r\n// ─── KPI Strip ────────────────────────────────────────────────────────────────\r\n\r\nexport const KpiStrip = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"repeat(auto-fit, minmax(72px, 1fr))\",\r\n\tbackground: \"transparent\",\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"xl\")]: {\r\n\t\tgridTemplateColumns: \"repeat(14, 1fr)\",\r\n\t},\r\n}));\r\n\r\nexport const KpiCell = styled(Box)<{ accentColor: string }>(({ accentColor }) => ({\r\n\tpadding: \"4px 0 3px 8px\",\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\tposition: \"relative\" as const,\r\n\tcursor: \"default\",\r\n\t\"&:last-child\": { borderRight: \"none\" },\r\n\t\"&::after\": {\r\n\t\tcontent: '\"\"', position: \"absolute\" as const, bottom: 0, left: 0, width: \"100%\", height: 2,\r\n\t\tbackground: accentColor,\r\n\t},\r\n\t\"@media (min-width: 960px)\": { padding: \"5px 0 4px 6px\" },\r\n}));\r\n\r\nexport const KpiValue = styled(\"div\")<{ kcolor: string }>(({ kcolor, theme }) => ({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tfontSize: 15,\r\n\tfontWeight: 800,\r\n\tlineHeight: 1,\r\n\tcolor: kcolor,\r\n\t[(theme as any).breakpoints.up(\"md\")]: { fontSize: 17 },\r\n\t[(theme as any).breakpoints.up(\"lg\")]: { fontSize: 20 },\r\n}));\r\n\r\nexport const KpiLabel = styled(\"div\")({\r\n\tfontSize: 8,\r\n\tletterSpacing: 0.8,\r\n\ttextTransform: \"uppercase\" as const,\r\n\tcolor: C.t3,\r\n\tfontWeight: 600,\r\n\tmarginTop: 1,\r\n});\r\n\r\n// ─── Body grid ────────────────────────────────────────────────────────────────\r\n\r\nexport const BodyGrid = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"1fr\",\r\n\tmarginTop: 0,\r\n\toverflow: \"auto\",\r\n\tminHeight: 0,\r\n\t[theme.breakpoints.up(\"md\")]: { gridTemplateColumns: \"2fr 1fr\" },\r\n\t[theme.breakpoints.up(\"lg\")]: { gridTemplateColumns: \"2fr 1fr\", overflow: \"hidden\" },\r\n}));\r\n\r\nexport const Panel = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"flex\", flexDirection: \"column\" as const, overflow: \"auto\", minHeight: 0,\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"lg\")]: { overflow: \"hidden\" },\r\n}));\r\n\r\nexport const PanelHeader = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"4px 10px\", background: \"transparent\", borderBottom: `1px solid ${C.b1}`, flexShrink: 0,\r\n});\r\n\r\nexport const PhTitle = styled(\"span\")({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 10, fontWeight: 700,\r\n\tletterSpacing: 1.2, textTransform: \"uppercase\" as const, color: C.t2,\r\n});\r\n\r\nexport const Badge = styled(\"span\")<{ bg: string; color: string; border: string }>(({ bg, color, border }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, fontWeight: 700,\r\n\tpadding: \"1px 6px\", borderRadius: 3, letterSpacing: 0.2,\r\n\tbackground: bg, color, border: `1px solid ${border}`,\r\n}));\r\n\r\nexport const StatusDot = styled(\"span\")<{ dotColor: string; animated?: boolean }>(({ dotColor, animated }) => ({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", flexShrink: 0, background: dotColor,\r\n\t...(animated ? { animation: `${pulse} 1.3s ease infinite` } : {}),\r\n}));\r\n\r\n// ─── Agent table ──────────────────────────────────────────────────────────────\r\n\r\nexport const AgentTable = styled(\"table\")({\r\n\twidth: \"100%\", borderCollapse: \"collapse\", tableLayout: \"auto\",\r\n});\r\n\r\nexport const AgTh = styled(\"th\")({\r\n\tpadding: \"4px 8px\", fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\" as const,\r\n\tcolor: C.t3, fontWeight: 600, textAlign: \"left\" as const,\r\n\tborderBottom: `1px solid ${C.b2}`, background: C.bg2,\r\n\twhiteSpace: \"nowrap\" as const, position: \"sticky\" as const, top: 0, zIndex: 1,\r\n});\r\n\r\nexport const AgTd = styled(\"td\")({\r\n\tpadding: \"4px 8px\", fontSize: 11, borderBottom: `1px solid ${C.b1}`,\r\n\tverticalAlign: \"middle\",\r\n});\r\n\r\nexport const PageInfo = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"2px 10px\", fontSize: 8, color: C.t3, background: C.bg2,\r\n\tflexShrink: 0, borderTop: `1px solid ${C.b1}`,\r\n});\r\n\r\n// ─── Queue ────────────────────────────────────────────────────────────────────\r\n\r\nexport const QName = styled(\"span\")({\r\n\tfontWeight: 600, color: C.t1, fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11,\r\n\t\"@media (min-width: 1280px)\": { fontSize: 12 },\r\n});\r\n\r\nexport const QNum = styled(\"span\")<{ numColor?: string }>(({ numColor }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontWeight: 700, fontSize: 11, color: numColor || C.t1,\r\n}));\r\n\r\nexport const QBar = styled(Box)({ height: 4, background: C.bg3, borderRadius: 2, overflow: \"hidden\", width: 56 });\r\n\r\nexport const QBarFill = styled(Box)<{ w: number; barColor: string }>(({ w, barColor }) => ({\r\n\theight: \"100%\", borderRadius: 3, width: `${w}%`, background: barColor,\r\n}));\r\n\r\n// ─── Section header ───────────────────────────────────────────────────────────\r\n\r\nexport const SbHeader = styled(Box)({\r\n\tpadding: \"7px 12px\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tbackground: C.bg2, borderBottom: `1px solid ${C.b1}`,\r\n});\r\n\r\nexport const SbTitle = styled(\"span\")({\r\n\tfontSize: 9, fontWeight: 700, letterSpacing: 1.5, textTransform: \"uppercase\" as const, color: C.t3,\r\n});\r\n\r\n// ─── No data ──────────────────────────────────────────────────────────────────\r\n\r\nexport const NoDataBox = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\tpadding: \"12px 8px\", fontSize: 10, fontWeight: 600,\r\n\tcolor: C.t3, letterSpacing: 0.5, fontFamily: \"'Poppins', Arial, sans-serif\",\r\n});\r\n\r\n// ─── Footer ticker ────────────────────────────────────────────────────────────\r\n\r\nexport const Footer = styled(Box)({\r\n\tbackground: C.navy, borderTop: \"1px solid rgba(255,255,255,.08)\",\r\n\tdisplay: \"flex\", alignItems: \"center\", overflow: \"hidden\",\r\n\tminHeight: 18, height: 18,\r\n\tposition: \"sticky\", bottom: 0, zIndex: 5,\r\n});\r\n\r\nexport const TickerLabel = styled(\"div\")({\r\n\tflexShrink: 0, padding: \"0 8px\", fontSize: 7, fontWeight: 700, letterSpacing: 1.2,\r\n\ttextTransform: \"uppercase\" as const, color: \"rgba(255,255,255,.4)\",\r\n\tborderRight: \"1px solid rgba(255,255,255,.1)\", whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerTrack = styled(Box)({ flex: 1, overflow: \"hidden\", position: \"relative\" as const });\r\n\r\nexport const TickerInner = styled(Box)({\r\n\tdisplay: \"flex\", animation: `${ticker} 50s linear infinite`, whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerSpan = styled(\"span\")<{ isWarn?: boolean; isGood?: boolean }>(({ isWarn, isGood }) => ({\r\n\tfontSize: 9, color: \"rgba(255,255,255,.55)\", padding: \"0 16px\", letterSpacing: 0.3,\r\n\t\"& b\": {\r\n\t\tcolor: isWarn ? \"#fcd34d\" : isGood ? \"#6ee7b7\" : \"rgba(255,255,255,.85)\", fontWeight: 600,\r\n\t},\r\n}));\r\n\r\n// ─── Supervisor monitoring ────────────────────────────────────────────────────\r\n\r\nexport const MonitorBtn = styled(\"button\")<{ variant: \"listen\" | \"whisper\" | \"barge\" | \"stop\" }>(({ variant }) => {\r\n\tconst colors = {\r\n\t\tlisten: { bg: \"#e3f2fd\", color: \"#1976d2\", hoverBg: \"#bbdefb\" },\r\n\t\twhisper: { bg: \"#fff3e0\", color: \"#ef6c00\", hoverBg: \"#ffe0b2\" },\r\n\t\tbarge: { bg: \"#fce4ec\", color: \"#c2185b\", hoverBg: \"#f8bbd0\" },\r\n\t\tstop: { bg: \"#ffebee\", color: \"#c62828\", hoverBg: \"#ffcdd2\" },\r\n\t};\r\n\tconst c = colors[variant];\r\n\treturn {\r\n\t\tpadding: \"2px 5px\",\r\n\t\tborder: \"none\",\r\n\t\tborderRadius: 3,\r\n\t\tcursor: \"pointer\",\r\n\t\tfontSize: 8,\r\n\t\tfontWeight: 600,\r\n\t\tdisplay: \"flex\",\r\n\t\talignItems: \"center\",\r\n\t\tgap: 2,\r\n\t\tbackground: c.bg,\r\n\t\tcolor: c.color,\r\n\t\ttransition: \"all 0.2s\",\r\n\t\t\"&:hover\": { background: c.hoverBg },\r\n\t\t\"&:disabled\": { opacity: 0.5, cursor: \"not-allowed\" },\r\n\t};\r\n});\r\n\r\nexport const MonitorCard = styled(Box)({\r\n\tposition: \"fixed\",\r\n\tbottom: 20,\r\n\tright: 20,\r\n\twidth: 296,\r\n\tbackground: \"#fff\",\r\n\tborderRadius: 14,\r\n\tboxShadow: \"0 8px 32px rgba(13,30,53,0.18), 0 2px 8px rgba(13,30,53,0.08)\",\r\n\tzIndex: 1001,\r\n\toverflow: \"hidden\",\r\n\tanimation: `${slideUp} 0.2s cubic-bezier(.22,.68,0,1.2)`,\r\n});\r\n"],"mappings":"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","names":["useCallback","useState","useEffect","Box","Box","useState","useCallback","useEffect","_a","_b","_c"]}
|
|
1
|
+
{"version":3,"sources":["../call-control-sdk/lib/pages/liveStatus/index.tsx","../call-control-sdk/lib/pages/liveStatus/useLiveStatus.ts","../call-control-sdk/lib/pages/liveStatus/styles.ts"],"sourcesContent":["import React, { useCallback, useState, useEffect } from \"react\";\r\nimport { Box, CircularProgress } from \"@mui/material\";\r\nimport { useCallMonitoring } from \"../../hooks/useCallMonitoring\";\r\nimport type { SupervisorMonitorMode } from \"../../hooks/useCallMonitoring\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\n\r\nimport {\r\n\tuseLiveStatus,\r\n\tgetSortedAgents,\r\n\tgetAgentStatusKey,\r\n\tfmtDur,\r\n\tLONG_CALL_SECS,\r\n\tWAITING_THRESHOLD,\r\n} from \"./useLiveStatus\";\r\nimport type { DashboardAgentCard } from \"./types\";\r\nimport type { MonitoringSession } from \"./types\";\r\nimport {\r\n\tC,\r\n\tSTATUS_COLORS,\r\n\tWallboardRoot,\r\n\tTopBar,\r\n\tBrandLogo,\r\n\tLiveBadge,\r\n\tPulseDot,\r\n\tKpiStrip,\r\n\tKpiCell,\r\n\tKpiValue,\r\n\tKpiLabel,\r\n\tBodyGrid,\r\n\tPanel,\r\n\tPanelHeader,\r\n\tPhTitle,\r\n\tBadge,\r\n\tStatusDot,\r\n\tAgentTable,\r\n\tAgTh,\r\n\tAgTd,\r\n\tPageInfo,\r\n\tQName,\r\n\tQNum,\r\n\tQBar,\r\n\tQBarFill,\r\n\tSbHeader,\r\n\tSbTitle,\r\n\tNoDataBox,\r\n\tFooter,\r\n\tTickerLabel,\r\n\tTickerTrack,\r\n\tTickerInner,\r\n\tTickerSpan,\r\n\tMonitorBtn,\r\n\tMonitorCard,\r\n\tslideUp,\r\n\tpulse,\r\n\trowBlink,\r\n} from \"./styles\";\r\n\r\n// ─── Agent Table Row ──────────────────────────────────────────────────────────\r\n\r\ninterface AgentTableRowProps {\r\n\tagent: DashboardAgentCard;\r\n\tdurSecs: number;\r\n\tonMonitor?: (agent: DashboardAgentCard, mode: SupervisorMonitorMode) => void;\r\n\tactiveMonitoring?: MonitoringSession | null;\r\n\tonStopMonitoring?: () => void;\r\n}\r\n\r\nconst AgentTableRow: React.FC<AgentTableRowProps> = React.memo(({\r\n\tagent,\r\n\tdurSecs,\r\n\tonMonitor,\r\n\tactiveMonitoring,\r\n\tonStopMonitoring,\r\n}) => {\r\n\tconst statusKey = getAgentStatusKey(agent.status, agent.callDirection);\r\n\tconst sc = STATUS_COLORS[statusKey];\r\n\tconst isOnCall = statusKey === \"s-oncall-in\" || statusKey === \"s-oncall-out\";\r\n\tconst isLong = isOnCall && durSecs >= LONG_CALL_SECS;\r\n\tconst isBeingMonitored = activeMonitoring?.agentId === agent.agentId;\r\n\r\n\tconst statusColor = isOnCall\r\n\t\t? agent.callDirection === \"OUTBOUND\" ? C.blue : C.green\r\n\t\t: sc.text;\r\n\tconst durColor = isLong ? C.red : statusColor;\r\n\r\n\treturn (\r\n\t\t<tr style={{ background: isLong ? \"rgba(204,42,42,.07)\" : sc.bg, transition: \"background 0.3s\" }}>\r\n\t\t\t{/* Name */}\r\n\t\t\t<AgTd sx={{ borderLeft: `2px solid ${sc.bar}`, pl: \"8px\", maxWidth: 160 }}>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11, fontWeight: 700, color: C.t1, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\r\n\t\t\t\t\t\t{agent.agentName}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t{isLong && (\r\n\t\t\t\t\t\t<Box component=\"span\" sx={{ fontSize: 7, fontWeight: 700, color: C.red, letterSpacing: 0.3, flexShrink: 0 }}>!7m</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Extension */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>{agent.extension || \"—\"}</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Status */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"4px\", flexWrap: \"nowrap\" }}>\r\n\t\t\t\t\t<StatusDot dotColor={statusColor} animated={isOnCall} />\r\n\t\t\t\t\t<Box sx={{ fontSize: 8, fontWeight: 700, letterSpacing: 0.6, textTransform: \"uppercase\", color: statusColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t{agent.status}\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Duration */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 700, color: durColor, whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t{fmtDur(durSecs)}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Caller number */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t{agent.activeCallerNumber || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Queue */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", maxWidth: 110 }}>\r\n\t\t\t\t\t{agent.queueNames || \"—\"}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Calls today */}\r\n\t\t\t<AgTd>\r\n\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, fontWeight: 700, color: C.t2 }}>\r\n\t\t\t\t\t{agent.callsToday}\r\n\t\t\t\t</Box>\r\n\t\t\t</AgTd>\r\n\r\n\t\t\t{/* Monitor actions — only for on-call agents */}\r\n\t\t\t{onMonitor !== undefined && (\r\n\t\t\t\t<AgTd>\r\n\t\t\t\t\t{isOnCall && onMonitor && (\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"3px\", flexWrap: \"nowrap\", alignItems: \"center\" }}>\r\n\t\t\t\t\t\t\t{isBeingMonitored ? (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, color: C.green, fontWeight: 600, display: \"flex\", alignItems: \"center\", gap: \"2px\", whiteSpace: \"nowrap\" }}>\r\n\t\t\t\t\t\t\t\t\t\t<StatusDot dotColor={C.green} animated />\r\n\t\t\t\t\t\t\t\t\t\t{activeMonitoring?.mode.toUpperCase()}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={onStopMonitoring}>⏹ Stop</MonitorBtn>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_LISTEN} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"listen\" onClick={() => onMonitor(agent, \"listen\")} title=\"Start listening\">👂</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_WHISPER} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"whisper\" onClick={() => onMonitor(agent, \"whisper\")} title=\"Whisper to agent\">🗣</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t\t<SDKPermissionGuard permission={SDK_PERMISSIONS.SUPERVISOR_MONITOR_BARGE} showFallback={false}>\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn variant=\"barge\" onClick={() => onMonitor(agent, \"barge\")} title=\"Barge in to call\">📢</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t</SDKPermissionGuard>\r\n\t\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</AgTd>\r\n\t\t\t)}\r\n\t\t</tr>\r\n\t);\r\n});\r\n\r\n// ─── Main Component ───────────────────────────────────────────────────────────\r\n\r\ninterface LiveStatusPageProps {\r\n\tisTvDashboard?: boolean;\r\n}\r\n\r\nfunction LiveStatusPageInner({ isTvDashboard = false }: LiveStatusPageProps) {\r\n\tconst toast = useToast();\r\n\tconst {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t} = useLiveStatus();\r\n\r\n\t// Supervisor monitoring state\r\n\tconst { startMonitoring, stopMonitoring, changeMode, isLoading: monitoringLoading } = useCallMonitoring();\r\n\tconst [monitoringSession, setMonitoringSession] = useState<MonitoringSession | null>(null);\r\n\tconst [showMonitorModal, setShowMonitorModal] = useState(false);\r\n\tconst [selectedAgent, setSelectedAgent] = useState<DashboardAgentCard | null>(null);\r\n\tconst [selectedMode, setSelectedMode] = useState<SupervisorMonitorMode>(\"listen\");\r\n\tconst [monitoringError, setMonitoringError] = useState<string | null>(null);\r\n\r\n\t// Open monitor modal\r\n\tconst handleOpenMonitorModal = useCallback((agent: DashboardAgentCard, mode: SupervisorMonitorMode) => {\r\n\t\tsetSelectedAgent(agent);\r\n\t\tsetSelectedMode(mode);\r\n\t\tsetShowMonitorModal(true);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Start monitoring\r\n\tconst handleStartMonitoring = useCallback(async () => {\r\n\t\tif (!selectedAgent) return;\r\n\t\tif (!selectedAgent.activeCallUuid) {\r\n\t\t\tsetMonitoringError(\"No active call found for this agent\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMonitoringError(null);\r\n\r\n\t\tconst response = await startMonitoring({\r\n\t\t\tcall_id: selectedAgent.activeCallUuid,\r\n\t\t\tagent_extension: selectedAgent.extension || \"\",\r\n\t\t\tmode: selectedMode,\r\n\t\t});\r\n\r\n\t\tif (response?.success && response?.session_id) {\r\n\t\t\tsetMonitoringSession({\r\n\t\t\t\tsessionId: response.session_id,\r\n\t\t\t\tagentId: selectedAgent.agentId,\r\n\t\t\t\tagentName: selectedAgent.agentName,\r\n\t\t\t\tagentExt: selectedAgent.extension || \"\",\r\n\t\t\t\tmode: selectedMode,\r\n\t\t\t\tcallUuid: selectedAgent.activeCallUuid,\r\n\t\t\t\tstartTime: Date.now(),\r\n\t\t\t});\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t} else {\r\n\t\t\tsetMonitoringError(response?.message || \"Failed to start monitoring\");\r\n\t\t}\r\n\t}, [selectedAgent, selectedMode, startMonitoring, toast]);\r\n\r\n\t// Stop monitoring\r\n\tconst handleStopMonitoring = useCallback(async () => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await stopMonitoring({ call_uuid: monitoringSession.callUuid });\r\n\t\tif (response?.success && response?.message) toast.showToast(response.message, \"success\");\r\n\t\tsetMonitoringSession(null);\r\n\t}, [monitoringSession, stopMonitoring, toast]);\r\n\r\n\t// Change mode\r\n\tconst handleChangeMode = useCallback(async (newMode: SupervisorMonitorMode) => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst response = await changeMode({ call_uuid: monitoringSession.callUuid, mode: newMode });\r\n\t\tif (response?.success) {\r\n\t\t\tsetMonitoringSession((prev) => prev ? { ...prev, mode: newMode } : null);\r\n\t\t\tif (response.message) toast.showToast(response.message, \"success\");\r\n\t\t}\r\n\t}, [monitoringSession, changeMode, toast]);\r\n\r\n\t// Close modal\r\n\tconst handleCloseMonitorModal = useCallback(() => {\r\n\t\tsetShowMonitorModal(false);\r\n\t\tsetSelectedAgent(null);\r\n\t\tsetMonitoringError(null);\r\n\t}, []);\r\n\r\n\t// Auto-stop when monitored agent's call ends\r\n\tuseEffect(() => {\r\n\t\tif (!monitoringSession) return;\r\n\t\tconst agent = agents.find((a) => a.agentId === monitoringSession.agentId);\r\n\t\tif (!agent) return;\r\n\t\tconst isOnCall = agent.status?.toUpperCase() === \"ONCALL\";\r\n\t\tconst callUuidChanged = agent.activeCallUuid !== monitoringSession.callUuid;\r\n\t\tif (!isOnCall || callUuidChanged) {\r\n\t\t\tsetMonitoringSession(null);\r\n\t\t\tsetShowMonitorModal(false);\r\n\t\t\ttoast.showToast(\"Monitoring ended — agent call has ended.\", \"info\");\r\n\t\t}\r\n\t}, [agents, monitoringSession, toast]);\r\n\r\n\t// Derived counts\r\n\tconst sorted = getSortedAgents(agents);\r\n\tconst oncallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst breakCount = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst longCallCount = agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-oncall-in\" && (durations[a.agentId] || 0) >= LONG_CALL_SECS).length;\r\n\r\n\tconst kpiTotalAgents = topStats?.totalAgents ?? agents.length;\r\n\tconst kpiLoginCount = topStats?.loggedIn ?? agents.length;\r\n\tconst kpiIdleCount = topStats?.idleReady ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length;\r\n\tconst kpiOnCallCount = topStats?.onCall ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection).startsWith(\"s-oncall\")).length;\r\n\tconst kpiWrapup = topStats?.wrapup ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-wrapup\").length;\r\n\tconst kpiBreak = topStats?.onBreak ?? agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-break\").length;\r\n\tconst kpiNotLogged = topStats?.notLogged ?? Math.max(0, kpiTotalAgents - kpiLoginCount);\r\n\r\n\tconst tickerItems = queues.map((q) => ({\r\n\t\ttext: `${q.queueName} Queue — <b>${q.waitingCalls > 0 ? q.waitingCalls + \" waiting\" : \"all clear\"}</b> · avg ${q.avgWaitFormatted}`,\r\n\t\twarn: q.waitingCalls > 0,\r\n\t\tgood: q.waitingCalls === 0,\r\n\t}));\r\n\r\n\tif (isLoading) {\r\n\t\treturn (\r\n\t\t\t<Box sx={{\r\n\t\t\t\theight: \"100vh\", display: \"flex\", flexDirection: \"column\",\r\n\t\t\t\talignItems: \"center\", justifyContent: \"center\", background: \"transparent\", gap: 2,\r\n\t\t\t}}>\r\n\t\t\t\t<CircularProgress size={48} sx={{ color: C.blue }} />\r\n\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 16, fontWeight: 600, color: C.t2, letterSpacing: 1, textTransform: \"uppercase\" }}>\r\n\t\t\t\t\tLoading Live Status...\r\n\t\t\t\t</Box>\r\n\t\t\t</Box>\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<WallboardRoot isTv={isTvDashboard}>\r\n\r\n\t\t\t{/* ══ TOP BAR (TV only) ════════════════════════════════════ */}\r\n\t\t\t{isTvDashboard && (\r\n\t\t\t\t<TopBar>\r\n\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\r\n\t\t\t\t\t\t<BrandLogo>\r\n\t\t\t\t\t\t\t<svg viewBox=\"0 0 26 26\" fill=\"none\" width={16} height={16}>\r\n\t\t\t\t\t\t\t\t<rect width=\"26\" height=\"26\" rx=\"5\" fill=\"#1A5F6C\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M5 18 Q5 8 13 8 Q21 8 21 18\" stroke=\"#1565c8\" strokeWidth=\"2.5\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<path d=\"M9 18 Q9 12 13 12 Q17 12 17 18\" stroke=\"#0a9a62\" strokeWidth=\"2\" fill=\"none\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t<circle cx=\"13\" cy=\"19\" r=\"2\" fill=\"#1565c8\" />\r\n\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t</BrandLogo>\r\n\t\t\t\t\t\t<Box sx={{ color: \"#fff\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 13, fontWeight: 800, letterSpacing: 1.2, lineHeight: 1 }}>AHS</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, letterSpacing: 1, color: \"rgba(255,255,255,.45)\", textTransform: \"uppercase\" }}>Supervisor Wallboard</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<LiveBadge>\r\n\t\t\t\t\t\t\t<PulseDot />\r\n\t\t\t\t\t\t\tLIVE\r\n\t\t\t\t\t\t</LiveBadge>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<Box sx={{ textAlign: \"right\" }}>\r\n\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 14, fontWeight: 700, color: \"#fff\", letterSpacing: 1.5, lineHeight: 1 }}>{clockStr}</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 7.5, color: \"rgba(255,255,255,.4)\", letterSpacing: 0.5, mt: \"1px\" }}>{dateStr}</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</TopBar>\r\n\t\t\t)}\r\n\r\n\t\t\t{/* ══ KPI STRIP ══════════════════════════════════════════════ */}\r\n\t\t\t<KpiStrip>\r\n\t\t\t\t<KpiCell accentColor=\"#94a3b8\"><KpiValue kcolor={C.t1}>{kpiTotalAgents}</KpiValue><KpiLabel>Total Agents</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{kpiLoginCount}</KpiValue><KpiLabel>Logged In</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor=\"#cbd5e1\"><KpiValue kcolor=\"#94a3b8\">{kpiNotLogged}</KpiValue><KpiLabel>Not Logged</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.teal}><KpiValue kcolor={C.teal}>{kpiIdleCount}</KpiValue><KpiLabel>Idle / Ready</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{kpiOnCallCount}</KpiValue><KpiLabel>On Call</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.inboundToday ?? 0}</KpiValue><KpiLabel>Inbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.outboundToday ?? 0}</KpiValue><KpiLabel>Outbound</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.purple}><KpiValue kcolor={C.purple}>{kpiWrapup}</KpiValue><KpiLabel>Wrapup</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{kpiBreak}</KpiValue><KpiLabel>On Break</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.blue}><KpiValue kcolor={C.blue}>{topStats?.callsToday ?? 0}</KpiValue><KpiLabel>Calls Today</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.red}><KpiValue kcolor={C.red}>{topStats?.abandonedToday ?? 0}</KpiValue><KpiLabel>Abandoned</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.green}><KpiValue kcolor={C.green}>{topStats?.slaThisHrPct != null ? `${topStats.slaThisHrPct}%` : \"—\"}</KpiValue><KpiLabel>SLA This Hr</KpiLabel></KpiCell>\r\n\t\t\t\t<KpiCell accentColor={C.amber}><KpiValue kcolor={C.amber}>{topStats?.avgSpeedAnswerFormatted ?? \"00:00\"}</KpiValue><KpiLabel>Avg Speed Ans</KpiLabel></KpiCell>\r\n\t\t\t</KpiStrip>\r\n\r\n\t\t\t{/* ══ BODY ══════════════════════════════════════════════════ */}\r\n\t\t\t<BodyGrid>\r\n\r\n\t\t\t\t{/* Column 1: Agent Status */}\r\n\t\t\t\t<Panel>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Agent Status</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.amberLt} color={C.amber} border={C.amberBd}>{oncallCount} On-Call</Badge>\r\n\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{breakCount} Break</Badge>\r\n\t\t\t\t\t\t\t{longCallCount > 0 && (\r\n\t\t\t\t\t\t\t\t<Badge bg={C.redLt} color={C.red} border={C.redBd}>{longCallCount} Long</Badge>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Box sx={{ fontSize: 8, color: C.t3 }}>{agents.length} agents</Box>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\toverflowX: \"auto\", overflowY: \"auto\", flex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3, height: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"20%\" }}>Agent</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"7%\" }}>Ext</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"14%\" }}>Status</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"10%\" }}>Duration</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"12%\" }}>Caller</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"17%\" }}>Queue</AgTh>\r\n\t\t\t\t\t\t\t\t\t<AgTh style={{ width: \"6%\" }}>Calls</AgTh>\r\n\t\t\t\t\t\t\t\t\t{!isTvDashboard && <AgTh style={{ width: \"14%\" }}>Actions</AgTh>}\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t{sorted.length > 0 ? sorted.map((a) => (\r\n\t\t\t\t\t\t\t\t\t<AgentTableRow\r\n\t\t\t\t\t\t\t\t\t\tkey={a.agentId}\r\n\t\t\t\t\t\t\t\t\t\tagent={a}\r\n\t\t\t\t\t\t\t\t\t\tdurSecs={durations[a.agentId] || 0}\r\n\t\t\t\t\t\t\t\t\t\tonMonitor={isTvDashboard ? undefined : handleOpenMonitorModal}\r\n\t\t\t\t\t\t\t\t\t\tactiveMonitoring={monitoringSession}\r\n\t\t\t\t\t\t\t\t\t\tonStopMonitoring={handleStopMonitoring}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t)) : (\r\n\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={isTvDashboard ? 7 : 8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t\t<PageInfo>\r\n\t\t\t\t\t\t<span>{agents.length} agents · {oncallCount} on call · {agents.filter((a) => getAgentStatusKey(a.status, a.callDirection) === \"s-idle\").length} idle</span>\r\n\t\t\t\t\t\t<span>Auto-refreshes every 5s</span>\r\n\t\t\t\t\t</PageInfo>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t\t{/* Column 2: Queue Performance + Queue Pulse + Live Alerts */}\r\n\t\t\t\t<Panel sx={{ borderRight: `1px solid ${C.b1}`, maxHeight: { xs: \"none\", lg: \"calc(100vh - 96px)\" } }}>\r\n\t\t\t\t\t<PanelHeader>\r\n\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t<PhTitle>Queue Performance</PhTitle>\r\n\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>All Healthy</Badge>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Badge bg={C.bg2} color={C.t3} border={C.b2}>Live SLA</Badge>\r\n\t\t\t\t\t</PanelHeader>\r\n\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\tflex: 1, minHeight: 0,\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t}}>\r\n\t\t\t\t\t\t<Box sx={{ overflowX: \"auto\", \"&::-webkit-scrollbar\": { height: 3 }, \"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 }, \"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2 } }}>\r\n\t\t\t\t\t\t\t<AgentTable>\r\n\t\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Queue</AgTh><AgTh>Agents</AgTh><AgTh>Active</AgTh><AgTh>Waiting</AgTh>\r\n\t\t\t\t\t\t\t\t\t\t<AgTh>Avg Wait</AgTh><AgTh>Load</AgTh><AgTh>SLA%</AgTh><AgTh>C/hr</AgTh>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t\t{queues.length > 0 ? queues.map((q) => {\r\n\t\t\t\t\t\t\t\t\t\tconst loadColor = q.loadPct > 50 ? C.red : q.loadPct > 25 ? C.amber : C.green;\r\n\t\t\t\t\t\t\t\t\t\tconst slaColor = q.slaPct >= 95 ? C.green : q.slaPct >= 85 ? C.amber : C.red;\r\n\t\t\t\t\t\t\t\t\t\tconst isWaitingHigh = q.waitingCalls > WAITING_THRESHOLD;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box component=\"tr\" key={q.queueId} sx={isWaitingHigh ? { animation: `${rowBlink} 1s ease infinite` } : q.slaPct < 90 ? { background: \"rgba(204,42,42,.04)\" } : {}}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QName>{q.queueName}</QName></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.totalAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.amber}>{q.activeAgents}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={isWaitingHigh ? C.red : q.waitingCalls > 0 ? C.red : C.green}>{q.waitingCalls}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.green}>{q.avgWaitFormatted}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<QBar><QBarFill w={q.loadPct} barColor={loadColor} /></QBar>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 10, color: C.t3 }}>{q.loadPct}%</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={slaColor}>{q.slaPct}%</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<AgTd><QNum numColor={C.blue}>{q.callsPerHour}</QNum></AgTd>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}) : (\r\n\t\t\t\t\t\t\t\t\t\t<tr><AgTd colSpan={8}><NoDataBox>No data available</NoDataBox></AgTd></tr>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t\t</AgentTable>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Queue Pulse ── */}\r\n\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M1 8h2l2-5 2 9 2-7 2 5 1-2h3\" stroke={C.blue} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Queue Pulse</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={C.greenLt} color={C.green} border={C.greenBd}>Live</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", borderBottom: `1px solid ${C.b1}` }}>\r\n\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t{ label: \"In Queue\", value: queuePulse?.runningInQueue ?? 0, color: C.amber, bg: C.amberLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Ready\", value: queuePulse?.readyAgents ?? 0, color: C.green, bg: C.greenLt },\r\n\t\t\t\t\t\t\t\t\t{ label: \"Avg Wait\", value: queuePulse?.avgWaitFormatted ?? \"--:--\", color: C.blue, bg: C.blueLt },\r\n\t\t\t\t\t\t\t\t].map((s) => (\r\n\t\t\t\t\t\t\t\t\t<Box key={s.label} sx={{ p: \"12px\", borderRight: `1px solid ${C.b1}`, \"&:last-child\": { borderRight: \"none\" }, background: s.bg }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 20, fontWeight: 800, color: s.color, lineHeight: 1 }}>{s.value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\", color: s.color, mt: \"4px\", fontWeight: 600, opacity: 0.75 }}>{s.label}</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t{/* ── Live Alerts ── */}\r\n\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t<SbHeader>\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"7px\" }}>\r\n\t\t\t\t\t\t\t\t\t<svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M8 1.5a5 5 0 0 1 5 5v2.5l1 2H2l1-2V6.5a5 5 0 0 1 5-5z\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinejoin=\"round\" />\r\n\t\t\t\t\t\t\t\t\t\t<path d=\"M6.5 13a1.5 1.5 0 0 0 3 0\" stroke={alerts.length > 0 ? C.amber : C.t3} strokeWidth=\"1.4\" strokeLinecap=\"round\" />\r\n\t\t\t\t\t\t\t\t\t</svg>\r\n\t\t\t\t\t\t\t\t\t<SbTitle>Live Alerts</SbTitle>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Badge bg={alerts.length > 0 ? C.amberLt : C.bg2} color={alerts.length > 0 ? C.amber : C.t3} border={alerts.length > 0 ? C.amberBd : C.b2}>{alerts.length}</Badge>\r\n\t\t\t\t\t\t\t</SbHeader>\r\n\t\t\t\t\t\t\t<Box sx={{\r\n\t\t\t\t\t\t\t\toverflowY: \"auto\", maxHeight: 220,\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar\": { width: 3 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-track\": { background: C.bg2, borderRadius: 2 },\r\n\t\t\t\t\t\t\t\t\"&::-webkit-scrollbar-thumb\": { background: C.t4, borderRadius: 2, \"&:hover\": { background: C.t3 } },\r\n\t\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t\t{alerts.length > 0 ? alerts.map((a, i) => {\r\n\t\t\t\t\t\t\t\t\tconst sk = a.severity?.toLowerCase() === \"critical\" ? \"red\" : a.severity?.toLowerCase() === \"warning\" ? \"amber\" : \"blue\";\r\n\t\t\t\t\t\t\t\t\tconst ALERT_COLORS: Record<string, { bg: string; color: string }> = {\r\n\t\t\t\t\t\t\t\t\t\tred: { bg: C.redLt, color: C.red },\r\n\t\t\t\t\t\t\t\t\t\tamber: { bg: C.amberLt, color: C.amber },\r\n\t\t\t\t\t\t\t\t\t\tblue: { bg: C.blueLt, color: C.blue },\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\tconst ac = ALERT_COLORS[sk] ?? ALERT_COLORS.blue;\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<Box key={i} sx={{ display: \"flex\", gap: \"10px\", px: \"12px\", py: \"9px\", borderBottom: `1px solid ${C.b1}`, background: i % 2 === 0 ? \"transparent\" : C.bg2 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: ac.color, flexShrink: 0, mt: \"3px\" }} />\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flex: 1, minWidth: 0 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, fontWeight: 600, color: C.t1, mb: \"2px\" }}>{a.alertTitle}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 9, color: C.t3, lineHeight: 1.4 }}>{a.alertMessage}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ flexShrink: 0, display: \"flex\", flexDirection: \"column\", alignItems: \"flex-end\", gap: \"4px\" }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 7, fontWeight: 700, px: \"5px\", py: \"1px\", borderRadius: \"3px\", background: ac.bg, color: ac.color, textTransform: \"uppercase\", letterSpacing: 0.5 }}>{a.severity}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, color: C.t3 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(() => { try { const [h, m] = a.alertTime.split(\":\"); const hr = parseInt(h, 10); return `${hr % 12 || 12}:${m} ${hr >= 12 ? \"PM\" : \"AM\"}`; } catch { return a.alertTime; } })()}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}) : <NoDataBox>No active alerts</NoDataBox>}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t</Panel>\r\n\r\n\t\t\t</BodyGrid>\r\n\r\n\t\t\t{/* ══ FOOTER TICKER ══════════════════════════════════════════ */}\r\n\t\t\t<Footer>\r\n\t\t\t\t<TickerLabel>AHS Live</TickerLabel>\r\n\t\t\t\t<TickerTrack>\r\n\t\t\t\t\t<TickerInner>\r\n\t\t\t\t\t\t{[...tickerItems, ...tickerItems].map((t, i) => (\r\n\t\t\t\t\t\t\t<TickerSpan key={i} isWarn={t.warn} isGood={t.good} dangerouslySetInnerHTML={{ __html: t.text }} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</TickerInner>\r\n\t\t\t\t</TickerTrack>\r\n\t\t\t</Footer>\r\n\r\n\t\t\t{/* ══ SUPERVISOR MONITOR MODAL ════════════════════════════════ */}\r\n\t\t\t{showMonitorModal && selectedAgent && (() => {\r\n\t\t\t\tconst modeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", label: \"Listen\", desc: \"Silent – agent unaware\", accent: C.blue, accentLt: \"#e3f2fd\", accentText: \"#1565c0\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", label: \"Whisper\", desc: \"Only agent hears you\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", accentText: \"#e65100\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", label: \"Barge\", desc: \"Both parties hear you\", accent: \"#c2185b\", accentLt: \"#fce4ec\", accentText: \"#880e4f\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst m = modeConfig[selectedMode];\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box onClick={handleCloseMonitorModal} sx={{ position: \"fixed\", inset: 0, zIndex: 1000 }} />\r\n\t\t\t\t\t\t<MonitorCard>\r\n\t\t\t\t\t\t\t<Box sx={{ height: 3, background: m.accent }} />\r\n\t\t\t\t\t\t\t<Box sx={{ p: \"12px 14px\" }}>\r\n\t\t\t\t\t\t\t\t{/* Header */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n\t\t\t\t\t\t\t\t\t\t<Box sx={{ width: 32, height: 32, borderRadius: \"10px\", background: m.accentLt, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 16 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{m.icon}\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 13, color: C.t1, lineHeight: 1.2 }}>Monitor Call</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3 }}>{selectedAgent.agentName} · ext {selectedAgent.extension || \"\"}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ border: \"none\", background: \"none\", cursor: \"pointer\", color: C.t4, fontSize: 18, lineHeight: 1, p: 0, \"&:hover\": { color: C.t2 } }}>×</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Call snapshot */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: \"4px 0\", background: C.bg2, borderRadius: \"8px\", p: \"8px 10px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{[\r\n\t\t\t\t\t\t\t\t\t\t[\"Customer\", selectedAgent.activeCallerNumber || \"—\"],\r\n\t\t\t\t\t\t\t\t\t\t[\"Duration\", fmtDur(durations[selectedAgent.agentId] || 0)],\r\n\t\t\t\t\t\t\t\t\t].map(([label, value]) => (\r\n\t\t\t\t\t\t\t\t\t\t<React.Fragment key={label}>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: C.t3, fontWeight: 500 }}>{label}</Box>\r\n\t\t\t\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, fontWeight: 600, color: C.t1, textAlign: \"right\" }}>{value}</Box>\r\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\r\n\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode pills */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"6px\", mb: 1.5 }}>\r\n\t\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).map((mode) => {\r\n\t\t\t\t\t\t\t\t\t\tconst mc = modeConfig[mode];\r\n\t\t\t\t\t\t\t\t\t\tconst active = selectedMode === mode;\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Box key={mode} onClick={() => setSelectedMode(mode)} sx={{ flex: 1, textAlign: \"center\", py: \"5px\", borderRadius: \"20px\", fontSize: 9, fontWeight: 700, letterSpacing: 0.4, cursor: \"pointer\", textTransform: \"uppercase\", transition: \"all 0.15s\", background: active ? mc.accent : C.bg2, color: active ? \"#fff\" : C.t3, border: `1px solid ${active ? mc.accent : \"transparent\"}`, \"&:hover\": { background: active ? mc.accent : C.bg3 } }}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Mode hint */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontSize: 10, color: m.accentText, background: m.accentLt, borderRadius: \"6px\", px: 1.25, py: 0.75, mb: 1.5, display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: 11 }}>ℹ️</span> {m.desc} · Your dialer will ring to connect.\r\n\t\t\t\t\t\t\t\t</Box>\r\n\r\n\t\t\t\t\t\t\t\t{/* Error */}\r\n\t\t\t\t\t\t\t\t{monitoringError && (\r\n\t\t\t\t\t\t\t\t\t<Box sx={{ mb: 1.5, px: 1.25, py: 0.75, background: C.redLt, borderRadius: \"6px\", color: C.red, fontSize: 11 }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringError}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t\t\t\t{/* Actions */}\r\n\t\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"8px\" }}>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleCloseMonitorModal} sx={{ flex: 1, py: \"7px\", border: `1px solid ${C.b2}`, borderRadius: \"8px\", cursor: \"pointer\", fontSize: 11, fontWeight: 500, background: \"transparent\", color: C.t2, \"&:hover\": { background: C.bg2 } }}>Cancel</Box>\r\n\t\t\t\t\t\t\t\t\t<Box component=\"button\" onClick={handleStartMonitoring} disabled={monitoringLoading} sx={{ flex: 2, py: \"7px\", border: \"none\", borderRadius: \"8px\", cursor: monitoringLoading ? \"not-allowed\" : \"pointer\", fontSize: 11, fontWeight: 700, background: m.accent, color: \"#fff\", opacity: monitoringLoading ? 0.7 : 1, transition: \"opacity 0.15s\", \"&:hover\": { opacity: monitoringLoading ? 0.7 : 0.88 } }}>\r\n\t\t\t\t\t\t\t\t\t\t{monitoringLoading ? \"Starting…\" : `▶ Start ${m.label}`}\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</MonitorCard>\r\n\t\t\t\t\t</>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t\t{/* ══ ACTIVE MONITORING INDICATOR ════════════════════════════ */}\r\n\t\t\t{monitoringSession && (() => {\r\n\t\t\t\tconst sessionModeConfig = {\r\n\t\t\t\t\tlisten: { icon: \"👂\", accent: C.blue, accentLt: \"#e3f2fd\", label: \"Listen\" },\r\n\t\t\t\t\twhisper: { icon: \"🗣️\", accent: \"#ef6c00\", accentLt: \"#fff3e0\", label: \"Whisper\" },\r\n\t\t\t\t\tbarge: { icon: \"📢\", accent: \"#c2185b\", accentLt: \"#fce4ec\", label: \"Barge\" },\r\n\t\t\t\t} as const;\r\n\t\t\t\tconst sm = sessionModeConfig[monitoringSession.mode as keyof typeof sessionModeConfig] ?? sessionModeConfig.listen;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Box sx={{ position: \"fixed\", bottom: 20, right: 20, width: 268, background: \"#fff\", borderRadius: \"14px\", boxShadow: \"0 8px 28px rgba(13,30,53,0.16), 0 2px 6px rgba(13,30,53,0.08)\", zIndex: 999, overflow: \"hidden\", animation: `${slideUp} 0.22s cubic-bezier(.22,.68,0,1.2)` }}>\r\n\t\t\t\t\t\t<Box sx={{ height: 3, background: sm.accent }} />\r\n\t\t\t\t\t\t<Box sx={{ p: \"10px 12px\" }}>\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", mb: 1 }}>\r\n\t\t\t\t\t\t\t\t<Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: C.green, flexShrink: 0, animation: `${pulse} 1.6s ease infinite` }} />\r\n\t\t\t\t\t\t\t\t<Box sx={{ fontWeight: 700, fontSize: 11, color: C.t1, textTransform: \"uppercase\", letterSpacing: 0.6 }}>\r\n\t\t\t\t\t\t\t\t\t{sm.icon} {sm.label} Active\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box sx={{ ml: \"auto\", fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600, color: sm.accent }}>\r\n\t\t\t\t\t\t\t\t\t{fmtDur(Math.floor((Date.now() - monitoringSession.startTime) / 1000))}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ fontSize: 11, color: C.t2, mb: 1, pl: \"16px\" }}>\r\n\t\t\t\t\t\t\t\t{monitoringSession.agentName}\r\n\t\t\t\t\t\t\t\t<Box component=\"span\" sx={{ color: C.t4, mx: 0.5 }}>·</Box>\r\n\t\t\t\t\t\t\t\text {monitoringSession.agentExt}\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t<Box sx={{ borderTop: `1px solid ${C.b1}`, mb: 1 }} />\r\n\t\t\t\t\t\t\t<Box sx={{ display: \"flex\", gap: \"5px\" }}>\r\n\t\t\t\t\t\t\t\t{([\"listen\", \"whisper\", \"barge\"] as const).filter(m => m !== monitoringSession.mode).map((mode) => {\r\n\t\t\t\t\t\t\t\t\tconst mc = sessionModeConfig[mode];\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<MonitorBtn key={mode} variant={mode} onClick={() => handleChangeMode(mode)} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{mc.icon} {mc.label}\r\n\t\t\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t<MonitorBtn variant=\"stop\" onClick={handleStopMonitoring} style={{ flex: 1, justifyContent: \"center\", padding: \"4px 0\", fontSize: 9, borderRadius: 4 }}>\r\n\t\t\t\t\t\t\t\t\t⏹ Stop\r\n\t\t\t\t\t\t\t\t</MonitorBtn>\r\n\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</Box>\r\n\t\t\t\t);\r\n\t\t\t})()}\r\n\r\n\t\t</WallboardRoot>\r\n\t);\r\n}\r\n\r\n// ─── SDK-wrapped export ───────────────────────────────────────────────────────\r\n\r\nexport default function LiveStatusPage(props: LiveStatusPageProps) {\r\n\treturn (\r\n\t\t<SDKProvider>\r\n\t\t\t<LiveStatusPageInner {...props} />\r\n\t\t</SDKProvider>\r\n\t);\r\n}\r\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tDashboardAgentCard,\r\n\tDashboardAlert,\r\n\tDashboardQueueData,\r\n\tDashboardQueuePulse,\r\n\tDashboardTopStats,\r\n} from \"./types\";\r\n\r\nexport const POLL_INTERVAL_MS = 5000;\r\nexport const LONG_CALL_SECS = 420;\r\nexport const WAITING_THRESHOLD = 3;\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\nexport function parseDur(dur: string): number {\r\n\tconst p = (dur || \"00:00:00\").split(\":\").map(Number);\r\n\treturn (p[0] || 0) * 3600 + (p[1] || 0) * 60 + (p[2] || 0);\r\n}\r\n\r\nexport function fmtDur(s: number): string {\r\n\tconst h = Math.floor(s / 3600);\r\n\tconst m = Math.floor((s % 3600) / 60);\r\n\tconst sc = s % 60;\r\n\treturn [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nexport type AgentStatusKey = \"s-oncall-in\" | \"s-oncall-out\" | \"s-wrapup\" | \"s-break\" | \"s-idle\";\r\n\r\nexport const STATUS_PRIORITY: Record<AgentStatusKey, number> = {\r\n\t\"s-oncall-in\": 0,\r\n\t\"s-oncall-out\": 1,\r\n\t\"s-break\": 2,\r\n\t\"s-wrapup\": 3,\r\n\t\"s-idle\": 4,\r\n};\r\n\r\nexport function getAgentStatusKey(status: string, callDirection: string | null): AgentStatusKey {\r\n\tconst lower = (status || \"\").toLowerCase();\r\n\tif (lower.includes(\"idle\") || lower.includes(\"ready\") || lower.includes(\"available\")) return \"s-idle\";\r\n\tif (lower.includes(\"break\") || lower.includes(\"pause\")) return \"s-break\";\r\n\tif (lower.includes(\"wrap\") || lower.includes(\"acw\")) return \"s-wrapup\";\r\n\tif (lower.includes(\"outbound\") || lower.includes(\"outgoing\") || lower.includes(\"dialing\")) return \"s-oncall-out\";\r\n\tif (\r\n\t\tlower.includes(\"call\") || lower.includes(\"busy\") || lower.includes(\"oncall\") ||\r\n\t\tlower.includes(\"on-call\") || lower.includes(\"on_call\") || lower.includes(\"incoming\") ||\r\n\t\tlower.includes(\"ringing\") || lower.includes(\"connected\")\r\n\t) {\r\n\t\treturn callDirection === \"OUTBOUND\" ? \"s-oncall-out\" : \"s-oncall-in\";\r\n\t}\r\n\treturn \"s-idle\";\r\n}\r\n\r\nexport function getSortedAgents(list: DashboardAgentCard[]): DashboardAgentCard[] {\r\n\treturn [...list].sort(\r\n\t\t(a, b) =>\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(a.status, a.callDirection)] ?? 9) -\r\n\t\t\t(STATUS_PRIORITY[getAgentStatusKey(b.status, b.callDirection)] ?? 9),\r\n\t);\r\n}\r\n\r\n// ─── API functions ────────────────────────────────────────────────────────────\r\n\r\nasync function fetchTopStats(): Promise<DashboardTopStats> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_TOP_STATS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAgents(): Promise<DashboardAgentCard[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_AGENTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueues(): Promise<DashboardQueueData[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUES);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchAlerts(): Promise<DashboardAlert[]> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_ALERTS);\r\n\treturn res.data;\r\n}\r\n\r\nasync function fetchQueuePulse(): Promise<DashboardQueuePulse> {\r\n\tconst res = await axiosInstance.get(END_POINT.DASHBOARD_QUEUE_PULSE);\r\n\treturn res.data;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseLiveStatusReturn {\r\n\tisLoading: boolean;\r\n\ttopStats: DashboardTopStats | null;\r\n\tagents: DashboardAgentCard[];\r\n\tqueues: DashboardQueueData[];\r\n\talerts: DashboardAlert[];\r\n\tqueuePulse: DashboardQueuePulse | null;\r\n\tdurations: Record<string, number>;\r\n\tclockStr: string;\r\n\tdateStr: string;\r\n\trefresh: () => void;\r\n}\r\n\r\nexport function useLiveStatus(): UseLiveStatusReturn {\r\n\tconst [isLoading, setIsLoading] = useState(true);\r\n\tconst [topStats, setTopStats] = useState<DashboardTopStats | null>(null);\r\n\tconst [agents, setAgents] = useState<DashboardAgentCard[]>([]);\r\n\tconst [queues, setQueues] = useState<DashboardQueueData[]>([]);\r\n\tconst [alerts, setAlerts] = useState<DashboardAlert[]>([]);\r\n\tconst [queuePulse, setQueuePulse] = useState<DashboardQueuePulse | null>(null);\r\n\tconst [durations, setDurations] = useState<Record<string, number>>({});\r\n\tconst [clockStr, setClockStr] = useState(\"--:--:--\");\r\n\tconst [dateStr, setDateStr] = useState(\"\");\r\n\r\n\tconst agentsRef = useRef(agents);\r\n\tagentsRef.current = agents;\r\n\r\n\tconst fetchDashboard = useCallback(async () => {\r\n\t\ttry {\r\n\t\t\tconst [topStatsRes, agentsRes, queuesRes, alertsRes, pulseRes] = await Promise.allSettled([\r\n\t\t\t\tfetchTopStats(),\r\n\t\t\t\tfetchAgents(),\r\n\t\t\t\tfetchQueues(),\r\n\t\t\t\tfetchAlerts(),\r\n\t\t\t\tfetchQueuePulse(),\r\n\t\t\t]);\r\n\r\n\t\t\tif (topStatsRes.status === \"fulfilled\" && topStatsRes.value) setTopStats(topStatsRes.value);\r\n\t\t\tif (agentsRes.status === \"fulfilled\" && agentsRes.value?.length) {\r\n\t\t\t\tsetAgents(agentsRes.value);\r\n\t\t\t\tconst m: Record<string, number> = {};\r\n\t\t\t\tagentsRes.value.forEach((a) => {\r\n\t\t\t\t\tm[a.agentId] = parseDur(a.statusDuration || \"00:00:00\");\r\n\t\t\t\t});\r\n\t\t\t\tsetDurations(m);\r\n\t\t\t}\r\n\t\t\tif (queuesRes.status === \"fulfilled\" && queuesRes.value) setQueues(queuesRes.value);\r\n\t\t\tif (alertsRes.status === \"fulfilled\" && alertsRes.value) setAlerts(alertsRes.value);\r\n\t\t\tif (pulseRes.status === \"fulfilled\" && pulseRes.value) setQueuePulse(pulseRes.value);\r\n\t\t} catch {\r\n\t\t\t// keep current data on unexpected error\r\n\t\t} finally {\r\n\t\t\tsetIsLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\t// Initial fetch + polling\r\n\tuseEffect(() => {\r\n\t\tfetchDashboard();\r\n\t\tconst iv = setInterval(fetchDashboard, POLL_INTERVAL_MS);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, [fetchDashboard]);\r\n\r\n\t// Clock + duration ticker\r\n\tuseEffect(() => {\r\n\t\tconst iv = setInterval(() => {\r\n\t\t\tconst now = new Date();\r\n\t\t\tsetClockStr(\r\n\t\t\t\t[now.getHours(), now.getMinutes(), now.getSeconds()]\r\n\t\t\t\t\t.map((v) => String(v).padStart(2, \"0\"))\r\n\t\t\t\t\t.join(\":\"),\r\n\t\t\t);\r\n\t\t\tsetDateStr(\r\n\t\t\t\tnow.toLocaleDateString(\"en-US\", {\r\n\t\t\t\t\tweekday: \"long\",\r\n\t\t\t\t\tyear: \"numeric\",\r\n\t\t\t\t\tmonth: \"long\",\r\n\t\t\t\t\tday: \"numeric\",\r\n\t\t\t\t}),\r\n\t\t\t);\r\n\t\t\tsetDurations((prev) => {\r\n\t\t\t\tconst next = { ...prev };\r\n\t\t\t\tfor (const key of Object.keys(next)) next[key] = next[key] + 1;\r\n\t\t\t\treturn next;\r\n\t\t\t});\r\n\t\t}, 1000);\r\n\t\treturn () => clearInterval(iv);\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tisLoading,\r\n\t\ttopStats,\r\n\t\tagents,\r\n\t\tqueues,\r\n\t\talerts,\r\n\t\tqueuePulse,\r\n\t\tdurations,\r\n\t\tclockStr,\r\n\t\tdateStr,\r\n\t\trefresh: fetchDashboard,\r\n\t};\r\n}\r\n","import { Box, styled } from \"@mui/material\";\r\nimport { keyframes } from \"@mui/material/styles\";\r\nimport type { AgentStatusKey } from \"./useLiveStatus\";\r\n\r\n// ─── Keyframes ────────────────────────────────────────────────────────────────\r\n\r\nexport const pulse = keyframes`\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.6); opacity: 0.3; }\r\n`;\r\n\r\nexport const slideUp = keyframes`\r\n from { transform: translateY(16px); opacity: 0; }\r\n to { transform: translateY(0); opacity: 1; }\r\n`;\r\n\r\nexport const flashBg = keyframes`\r\n 0%, 100% { background: #fdf3e0; }\r\n 50% { background: #fff7e0; }\r\n`;\r\n\r\nexport const rowBlink = keyframes`\r\n 0%, 100% { background: rgba(204,42,42,.07); }\r\n 50% { background: rgba(204,42,42,.2); }\r\n`;\r\n\r\nexport const ticker = keyframes`\r\n 0% { transform: translateX(0); }\r\n 100% { transform: translateX(-50%); }\r\n`;\r\n\r\n// ─── Color tokens ─────────────────────────────────────────────────────────────\r\n\r\nexport const C = {\r\n\tbg0: \"#eef2f7\", bg1: \"#ffffff\", bg2: \"#f4f7fb\", bg3: \"#e4eaf3\", bg4: \"#d5dfee\",\r\n\tb1: \"rgba(30,60,120,.08)\", b2: \"rgba(30,60,120,.14)\",\r\n\tt1: \"#0d1e35\", t2: \"#3a5278\", t3: \"#7a93b5\", t4: \"#b0c0d5\",\r\n\tgreen: \"#0a9a62\", greenLt: \"#e4f6ef\", greenBd: \"rgba(10,154,98,.2)\",\r\n\tamber: \"#c47c00\", amberLt: \"#fdf3e0\", amberBd: \"rgba(196,124,0,.2)\",\r\n\tblue: \"#1565c8\", blueLt: \"#e8f0fc\", blueBd: \"rgba(21,101,200,.2)\",\r\n\tred: \"#cc2a2a\", redLt: \"#fde8e8\", redBd: \"rgba(204,42,42,.2)\",\r\n\tpurple: \"#6b3fbf\", purpleLt: \"#f0eafa\", purpleBd: \"rgba(107,63,191,.2)\",\r\n\tteal: \"#0b7a8f\", tealLt: \"#e3f4f7\", tealBd: \"rgba(11,122,143,.2)\",\r\n\torange: \"#c45a00\", orangeLt: \"#fdf0e4\",\r\n\tnavy: \"#1A5F6C\",\r\n};\r\n\r\nexport const STATUS_COLORS: Record<AgentStatusKey, { bg: string; border: string; bar: string; text: string }> = {\r\n\t\"s-oncall-in\": { bg: \"#fff8e1\", border: \"rgba(196,124,0,.3)\", bar: \"#e68a00\", text: \"#b36b00\" },\r\n\t\"s-oncall-out\": { bg: \"#e3f2fd\", border: \"rgba(21,101,200,.3)\", bar: \"#1976d2\", text: \"#0d47a1\" },\r\n\t\"s-wrapup\": { bg: \"#f3e5f5\", border: \"rgba(107,63,191,.3)\", bar: \"#8e24aa\", text: \"#6a1b9a\" },\r\n\t\"s-break\": { bg: \"#ffebee\", border: \"rgba(204,42,42,.3)\", bar: \"#e53935\", text: \"#c62828\" },\r\n\t\"s-idle\": { bg: \"#e8f5e9\", border: \"rgba(46,125,50,.25)\", bar: \"#2e7d32\", text: \"#1b5e20\" },\r\n};\r\n\r\n// ─── Wallboard root ───────────────────────────────────────────────────────────\r\n\r\nexport const WallboardRoot = styled(Box, {\r\n\tshouldForwardProp: (prop) => prop !== \"isTv\",\r\n})<{ isTv?: boolean }>(({ theme, isTv }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateRows: \"auto auto 1fr auto\",\r\n\tminHeight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tbackground: \"transparent\",\r\n\tcolor: C.t1,\r\n\t[theme.breakpoints.up(\"lg\")]: {\r\n\t\theight: isTv ? \"100vh\" : \"calc(100vh - 60px)\",\r\n\t\toverflow: \"hidden\",\r\n\t},\r\n}));\r\n\r\n// ─── Top bar ──────────────────────────────────────────────────────────────────\r\n\r\nexport const TopBar = styled(Box)(({ theme }) => ({\r\n\tbackground: C.navy,\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n\tjustifyContent: \"space-between\",\r\n\tpadding: \"0 10px\",\r\n\theight: 34,\r\n\tminHeight: 34,\r\n\tborderBottom: `1px solid ${C.blue}`,\r\n\tflexWrap: \"wrap\" as const,\r\n\tgap: 4,\r\n\t[theme.breakpoints.up(\"sm\")]: { padding: \"0 14px\", flexWrap: \"nowrap\" as const },\r\n}));\r\n\r\nexport const BrandLogo = styled(Box)({\r\n\twidth: 22, height: 22, borderRadius: 4, background: \"#fff\",\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\", overflow: \"hidden\",\r\n});\r\n\r\nexport const LiveBadge = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", gap: 4,\r\n\tbackground: \"rgba(10,154,98,.2)\", border: \"1px solid rgba(10,154,98,.4)\",\r\n\tborderRadius: 12, padding: \"2px 7px\",\r\n\tfontSize: 8, fontWeight: 700, letterSpacing: 1.5, color: \"#0ef5a8\", textTransform: \"uppercase\" as const,\r\n});\r\n\r\nexport const PulseDot = styled(\"span\")({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", background: \"#0ef5a8\",\r\n\tdisplay: \"inline-block\",\r\n\tanimation: `${pulse} 1.5s ease infinite`,\r\n});\r\n\r\n// ─── KPI Strip ────────────────────────────────────────────────────────────────\r\n\r\nexport const KpiStrip = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"repeat(auto-fit, minmax(72px, 1fr))\",\r\n\tbackground: \"transparent\",\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"xl\")]: {\r\n\t\tgridTemplateColumns: \"repeat(14, 1fr)\",\r\n\t},\r\n}));\r\n\r\nexport const KpiCell = styled(Box)<{ accentColor: string }>(({ accentColor }) => ({\r\n\tpadding: \"4px 0 3px 8px\",\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\tborderBottom: `1px solid ${C.b1}`,\r\n\tposition: \"relative\" as const,\r\n\tcursor: \"default\",\r\n\t\"&:last-child\": { borderRight: \"none\" },\r\n\t\"&::after\": {\r\n\t\tcontent: '\"\"', position: \"absolute\" as const, bottom: 0, left: 0, width: \"100%\", height: 2,\r\n\t\tbackground: accentColor,\r\n\t},\r\n\t\"@media (min-width: 960px)\": { padding: \"5px 0 4px 6px\" },\r\n}));\r\n\r\nexport const KpiValue = styled(\"div\")<{ kcolor: string }>(({ kcolor, theme }) => ({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\",\r\n\tfontSize: 15,\r\n\tfontWeight: 800,\r\n\tlineHeight: 1,\r\n\tcolor: kcolor,\r\n\t[(theme as any).breakpoints.up(\"md\")]: { fontSize: 17 },\r\n\t[(theme as any).breakpoints.up(\"lg\")]: { fontSize: 20 },\r\n}));\r\n\r\nexport const KpiLabel = styled(\"div\")({\r\n\tfontSize: 8,\r\n\tletterSpacing: 0.8,\r\n\ttextTransform: \"uppercase\" as const,\r\n\tcolor: C.t3,\r\n\tfontWeight: 600,\r\n\tmarginTop: 1,\r\n});\r\n\r\n// ─── Body grid ────────────────────────────────────────────────────────────────\r\n\r\nexport const BodyGrid = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"grid\",\r\n\tgridTemplateColumns: \"1fr\",\r\n\tmarginTop: 0,\r\n\toverflow: \"auto\",\r\n\tminHeight: 0,\r\n\t[theme.breakpoints.up(\"md\")]: { gridTemplateColumns: \"2fr 1fr\" },\r\n\t[theme.breakpoints.up(\"lg\")]: { gridTemplateColumns: \"2fr 1fr\", overflow: \"hidden\" },\r\n}));\r\n\r\nexport const Panel = styled(Box)(({ theme }) => ({\r\n\tdisplay: \"flex\", flexDirection: \"column\" as const, overflow: \"auto\", minHeight: 0,\r\n\tborderRight: `1px solid ${C.b1}`,\r\n\t[theme.breakpoints.up(\"lg\")]: { overflow: \"hidden\" },\r\n}));\r\n\r\nexport const PanelHeader = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"4px 10px\", background: \"transparent\", borderBottom: `1px solid ${C.b1}`, flexShrink: 0,\r\n});\r\n\r\nexport const PhTitle = styled(\"span\")({\r\n\tfontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 10, fontWeight: 700,\r\n\tletterSpacing: 1.2, textTransform: \"uppercase\" as const, color: C.t2,\r\n});\r\n\r\nexport const Badge = styled(\"span\")<{ bg: string; color: string; border: string }>(({ bg, color, border }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontSize: 9, fontWeight: 700,\r\n\tpadding: \"1px 6px\", borderRadius: 3, letterSpacing: 0.2,\r\n\tbackground: bg, color, border: `1px solid ${border}`,\r\n}));\r\n\r\nexport const StatusDot = styled(\"span\")<{ dotColor: string; animated?: boolean }>(({ dotColor, animated }) => ({\r\n\twidth: 5, height: 5, borderRadius: \"50%\", flexShrink: 0, background: dotColor,\r\n\t...(animated ? { animation: `${pulse} 1.3s ease infinite` } : {}),\r\n}));\r\n\r\n// ─── Agent table ──────────────────────────────────────────────────────────────\r\n\r\nexport const AgentTable = styled(\"table\")({\r\n\twidth: \"100%\", borderCollapse: \"collapse\", tableLayout: \"auto\",\r\n});\r\n\r\nexport const AgTh = styled(\"th\")({\r\n\tpadding: \"4px 8px\", fontSize: 8, letterSpacing: 0.8, textTransform: \"uppercase\" as const,\r\n\tcolor: C.t3, fontWeight: 600, textAlign: \"left\" as const,\r\n\tborderBottom: `1px solid ${C.b2}`, background: C.bg2,\r\n\twhiteSpace: \"nowrap\" as const, position: \"sticky\" as const, top: 0, zIndex: 1,\r\n});\r\n\r\nexport const AgTd = styled(\"td\")({\r\n\tpadding: \"4px 8px\", fontSize: 11, borderBottom: `1px solid ${C.b1}`,\r\n\tverticalAlign: \"middle\",\r\n});\r\n\r\nexport const PageInfo = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tpadding: \"2px 10px\", fontSize: 8, color: C.t3, background: C.bg2,\r\n\tflexShrink: 0, borderTop: `1px solid ${C.b1}`,\r\n});\r\n\r\n// ─── Queue ────────────────────────────────────────────────────────────────────\r\n\r\nexport const QName = styled(\"span\")({\r\n\tfontWeight: 600, color: C.t1, fontFamily: \"'Poppins', Arial, sans-serif\", fontSize: 11,\r\n\t\"@media (min-width: 1280px)\": { fontSize: 12 },\r\n});\r\n\r\nexport const QNum = styled(\"span\")<{ numColor?: string }>(({ numColor }) => ({\r\n\tfontFamily: \"'JetBrains Mono', monospace\", fontWeight: 700, fontSize: 11, color: numColor || C.t1,\r\n}));\r\n\r\nexport const QBar = styled(Box)({ height: 4, background: C.bg3, borderRadius: 2, overflow: \"hidden\", width: 56 });\r\n\r\nexport const QBarFill = styled(Box)<{ w: number; barColor: string }>(({ w, barColor }) => ({\r\n\theight: \"100%\", borderRadius: 3, width: `${w}%`, background: barColor,\r\n}));\r\n\r\n// ─── Section header ───────────────────────────────────────────────────────────\r\n\r\nexport const SbHeader = styled(Box)({\r\n\tpadding: \"7px 12px\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\r\n\tbackground: C.bg2, borderBottom: `1px solid ${C.b1}`,\r\n});\r\n\r\nexport const SbTitle = styled(\"span\")({\r\n\tfontSize: 9, fontWeight: 700, letterSpacing: 1.5, textTransform: \"uppercase\" as const, color: C.t3,\r\n});\r\n\r\n// ─── No data ──────────────────────────────────────────────────────────────────\r\n\r\nexport const NoDataBox = styled(Box)({\r\n\tdisplay: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n\tpadding: \"12px 8px\", fontSize: 10, fontWeight: 600,\r\n\tcolor: C.t3, letterSpacing: 0.5, fontFamily: \"'Poppins', Arial, sans-serif\",\r\n});\r\n\r\n// ─── Footer ticker ────────────────────────────────────────────────────────────\r\n\r\nexport const Footer = styled(Box)({\r\n\tbackground: C.navy, borderTop: \"1px solid rgba(255,255,255,.08)\",\r\n\tdisplay: \"flex\", alignItems: \"center\", overflow: \"hidden\",\r\n\tminHeight: 18, height: 18,\r\n\tposition: \"sticky\", bottom: 0, zIndex: 5,\r\n});\r\n\r\nexport const TickerLabel = styled(\"div\")({\r\n\tflexShrink: 0, padding: \"0 8px\", fontSize: 7, fontWeight: 700, letterSpacing: 1.2,\r\n\ttextTransform: \"uppercase\" as const, color: \"rgba(255,255,255,.4)\",\r\n\tborderRight: \"1px solid rgba(255,255,255,.1)\", whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerTrack = styled(Box)({ flex: 1, overflow: \"hidden\", position: \"relative\" as const });\r\n\r\nexport const TickerInner = styled(Box)({\r\n\tdisplay: \"flex\", animation: `${ticker} 50s linear infinite`, whiteSpace: \"nowrap\" as const,\r\n});\r\n\r\nexport const TickerSpan = styled(\"span\")<{ isWarn?: boolean; isGood?: boolean }>(({ isWarn, isGood }) => ({\r\n\tfontSize: 9, color: \"rgba(255,255,255,.55)\", padding: \"0 16px\", letterSpacing: 0.3,\r\n\t\"& b\": {\r\n\t\tcolor: isWarn ? \"#fcd34d\" : isGood ? \"#6ee7b7\" : \"rgba(255,255,255,.85)\", fontWeight: 600,\r\n\t},\r\n}));\r\n\r\n// ─── Supervisor monitoring ────────────────────────────────────────────────────\r\n\r\nexport const MonitorBtn = styled(\"button\")<{ variant: \"listen\" | \"whisper\" | \"barge\" | \"stop\" }>(({ variant }) => {\r\n\tconst colors = {\r\n\t\tlisten: { bg: \"#e3f2fd\", color: \"#1976d2\", hoverBg: \"#bbdefb\" },\r\n\t\twhisper: { bg: \"#fff3e0\", color: \"#ef6c00\", hoverBg: \"#ffe0b2\" },\r\n\t\tbarge: { bg: \"#fce4ec\", color: \"#c2185b\", hoverBg: \"#f8bbd0\" },\r\n\t\tstop: { bg: \"#ffebee\", color: \"#c62828\", hoverBg: \"#ffcdd2\" },\r\n\t};\r\n\tconst c = colors[variant];\r\n\treturn {\r\n\t\tpadding: \"2px 5px\",\r\n\t\tborder: \"none\",\r\n\t\tborderRadius: 3,\r\n\t\tcursor: \"pointer\",\r\n\t\tfontSize: 8,\r\n\t\tfontWeight: 600,\r\n\t\tdisplay: \"flex\",\r\n\t\talignItems: \"center\",\r\n\t\tgap: 2,\r\n\t\tbackground: c.bg,\r\n\t\tcolor: c.color,\r\n\t\ttransition: \"all 0.2s\",\r\n\t\t\"&:hover\": { background: c.hoverBg },\r\n\t\t\"&:disabled\": { opacity: 0.5, cursor: \"not-allowed\" },\r\n\t};\r\n});\r\n\r\nexport const MonitorCard = styled(Box)({\r\n\tposition: \"fixed\",\r\n\tbottom: 20,\r\n\tright: 20,\r\n\twidth: 296,\r\n\tbackground: \"#fff\",\r\n\tborderRadius: 14,\r\n\tboxShadow: \"0 8px 32px rgba(13,30,53,0.18), 0 2px 8px rgba(13,30,53,0.08)\",\r\n\tzIndex: 1001,\r\n\toverflow: \"hidden\",\r\n\tanimation: `${slideUp} 0.2s cubic-bezier(.22,.68,0,1.2)`,\r\n});\r\n"],"mappings":"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","names":["useCallback","useState","useEffect","useState","useCallback","useEffect","_a","_b","_c"]}
|