chordia-ui 3.9.0 → 3.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DataTable2.cjs.js +1 -1
- package/dist/DataTable2.cjs.js.map +1 -1
- package/dist/DataTable2.es.js +611 -604
- package/dist/DataTable2.es.js.map +1 -1
- package/dist/PerformancePanel.cjs.js +1 -1
- package/dist/PerformancePanel.cjs.js.map +1 -1
- package/dist/PerformancePanel.es.js +1068 -816
- package/dist/PerformancePanel.es.js.map +1 -1
- package/dist/SupervisorSelect.cjs.js +2 -0
- package/dist/SupervisorSelect.cjs.js.map +1 -0
- package/dist/SupervisorSelect.es.js +352 -0
- package/dist/SupervisorSelect.es.js.map +1 -0
- package/dist/components/Signals.cjs.js +1 -1
- package/dist/components/Signals.cjs.js.map +1 -1
- package/dist/components/Signals.es.js +273 -318
- package/dist/components/Signals.es.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.cjs.js +3 -3
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +98 -92
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/dist/components/performance.cjs.js +1 -1
- package/dist/components/performance.cjs.js.map +1 -1
- package/dist/components/performance.es.js +116 -349
- package/dist/components/performance.es.js.map +1 -1
- package/dist/components/reports.cjs.js +2 -2
- package/dist/components/reports.cjs.js.map +1 -1
- package/dist/components/reports.es.js +122 -141
- package/dist/components/reports.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +1 -1
- package/dist/pages/interactionDetails.cjs.js +2 -2
- package/dist/pages/interactionDetails.cjs.js.map +1 -1
- package/dist/pages/interactionDetails.es.js +130 -124
- package/dist/pages/interactionDetails.es.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Signals/SignalDetailsPage.jsx +2 -29
- package/src/components/Signals/SignalsListPage.jsx +2 -24
- package/src/components/UpdatedInteractionDetails/UpdatedCoachingSynthesisCard.jsx +8 -1
- package/src/components/data/DataTable2.jsx +19 -5
- package/src/components/pages/interactionDetails/CoachingSynthesisCard.jsx +8 -1
- package/src/components/performance/PerformanceDetailsPage.jsx +230 -75
- package/src/components/performance/PerformancePanel.jsx +42 -45
- package/src/components/performance/index.js +27 -0
- package/src/components/performance/performanceApiMap.js +133 -0
- package/src/components/performance/performanceMetrics.js +63 -0
- package/src/components/performance/performanceRangeFormat.js +92 -0
- package/src/components/performance/performanceSparkline.js +52 -0
- package/src/components/reports/ReportsList.jsx +2 -25
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../PerformancePanel.cjs.js"),M=require("../SupervisorSelect.cjs.js");require("react/jsx-runtime");require("react");require("react-dom");require("lucide-react");require("../DataTable2.cjs.js");require("../sortable.esm.cjs.js");require("../CustomFilterChips.cjs.js");require("motion/react");require("recharts");require("../AgentLiftAnalysisCard.cjs.js");require("../TourGuideTooltip.cjs.js");const m="—";function a(e){return e==null||typeof e=="number"&&Number.isNaN(e)}function l(e){return a(e)||e===0||e>0?"up":"down"}function c(e,{suffix:o="",decimals:n=1}={}){if(a(e))return null;const t=Number(e);return Number.isFinite(t)?`${t>0?"+":(t<0,"")}${t.toFixed(n)}${o}`:null}function s(e,o,{includeZero:n=!0}={}){return Array.isArray(e)?e.map(t=>t==null?void 0:t[o]).filter(t=>{if(t==null)return!1;const u=Number(t);return Number.isFinite(u)?n||u!==0:!1}).map(Number):[]}function p(e,o=1){return a(e)?m:`${(Number(e)*100).toFixed(o)}%`}function T(e,o=1){if(a(e))return m;const n=Number(e)*100;return`${n>0?"+":""}${n.toFixed(o)}pp`}function F(e){return a(e)?m:Number(e).toLocaleString("en-US")}function h(e,o=2){return a(e)?m:Number(e).toFixed(o)}function f(e,o,n){const t=n(o);return t?`${e} (${t})`:e}function C(e){const o=(e==null?void 0:e.current)??{},n=(e==null?void 0:e.deltas)??{},t=(e==null?void 0:e.trend)??[],u=s(t,"count",{includeZero:!0}),E=s(t,"csat"),_=s(t,"baseline").map(i=>i*100),L=s(t,"agent_lift").map(i=>i*100),D=s(t,"score").map(i=>i*100),d={value:F(o.call_count),label:"Volume",trend:l(n.call_count),points:u},S={value:h(o.avg_csat),label:f("Compass Score",n.csat,i=>c(i,{decimals:2})),trend:l(n.csat),points:E},b={value:p(o.avg_baseline),label:f("Baseline",n.baseline,i=>c(Number(i)*100,{suffix:"",decimals:1})),trend:l(n.baseline),points:_},g={value:T(o.avg_agent_lift),label:f("Agent Lift",n.agent_lift,i=>c(Number(i)*100,{suffix:"pp",decimals:1})),trend:l(n.agent_lift),points:L},P={value:p(o.avg_score),label:f("Score",n.score,i=>c(Number(i)*100,{suffix:"",decimals:1})),trend:l(n.score),points:D};for(const i of[d,S,b,g,P]){const N=r.trendFromPoints(i.points);N&&(i.trend=N)}return{volumeStat:d,compassStat:S,baselineSubStat:b,agentLiftSubStat:g,scoreSubStat:P}}exports.DEFAULT_AGENT_COLUMNS=r.DEFAULT_AGENT_COLUMNS;exports.DEFAULT_SESSION_COLUMNS=r.DEFAULT_SESSION_COLUMNS;exports.METRIC_PLACEHOLDER=r.METRIC_PLACEHOLDER;exports.PerformanceDetailsPage=r.PerformanceDetailsPage;exports.PerformancePanel=r.PerformancePanel;exports.RANGE_TO_MS=r.RANGE_TO_MS;exports.buildSparkPaths=r.buildSparkPaths;exports.computeWindowLabel=r.computeWindowLabel;exports.formatEightHourRangeEndpoints=r.formatEightHourRangeEndpoints;exports.formatEightHourWindowLabel=r.formatEightHourWindowLabel;exports.formatLocalDate=r.formatLocalDate;exports.formatMetricDisplay=r.formatMetricDisplay;exports.getPresetWindowDates=r.getPresetWindowDates;exports.hasChartData=r.hasChartData;exports.hasMeaningfulMetric=r.hasMeaningfulMetric;exports.isNullishMetric=r.isNullishMetric;exports.normalizeSparkPoints=r.normalizeSparkPoints;exports.resolveKpiTrend=r.resolveKpiTrend;exports.resolveTrend=r.resolveTrend;exports.trendFromPoints=r.trendFromPoints;exports.trendFromSignedValue=r.trendFromSignedValue;exports.SupervisorSelect=M.SupervisorSelect;exports.extractTrendSeries=s;exports.mapPerformanceKpiStats=C;
|
|
2
2
|
//# sourceMappingURL=performance.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.cjs.js","sources":["../../src/components/performance/SupervisorSelect.jsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { Search, Check } from \"lucide-react\";\n\nconst C = {\n white: \"#FFFFFF\",\n black: \"#0B0B0B\",\n borderSubtle: \"#E6E6E6\",\n border: \"#D9D9D9\",\n searchBg: \"#D8D8D8\",\n rowSelected: \"#F2F2F0\",\n textMuted: \"#989898\",\n textMid: \"#676767\",\n textDark: \"#323232\",\n applyBg: \"#2E3236\",\n scrollbar: \"#D5D9E2\",\n};\n\nconst FONT = \"var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)\";\n\nfunction Checkbox({ checked, mutedFill = false }) {\n return (\n <span\n style={{\n width: 20,\n height: 20,\n borderRadius: 4,\n background: checked ? C.black : mutedFill ? C.rowSelected : C.white,\n border: `1px solid ${checked ? C.black : C.textDark}`,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n boxSizing: \"border-box\",\n }}\n >\n {checked && <Check size={14} color={C.white} strokeWidth={3} />}\n </span>\n );\n}\n\nfunction Row({ supervisor, checked, muted = false, onToggle }) {\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n height: 32,\n padding: \"0 16px 0 8px\",\n borderRadius: 10,\n border: \"none\",\n background: checked ? C.rowSelected : \"transparent\",\n cursor: \"pointer\",\n width: \"100%\",\n textAlign: \"left\",\n fontFamily: FONT,\n flexShrink: 0,\n }}\n >\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 12, flex: 1, minWidth: 0 }}>\n <Checkbox checked={checked} mutedFill={muted} />\n <span\n style={{\n fontSize: 14,\n lineHeight: \"20px\",\n fontWeight: 400,\n color: !checked && muted ? C.textMid : C.black,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {supervisor.name}\n </span>\n </span>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n lineHeight: 1,\n color: !checked && muted ? C.textMid : C.black,\n whiteSpace: \"nowrap\",\n padding: \"4px 8px\",\n }}\n >\n {supervisor.agentCount} agents\n </span>\n </button>\n );\n}\n\nfunction MetaRow({ left, right }) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: 14,\n fontSize: 12,\n lineHeight: 1.5,\n fontFamily: FONT,\n flexShrink: 0,\n }}\n >\n {left}\n {right}\n </div>\n );\n}\n\nfunction ActionLink({ children, onClick, faded = false }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n background: \"transparent\",\n border: \"none\",\n padding: 0,\n cursor: onClick ? \"pointer\" : \"default\",\n fontFamily: FONT,\n fontSize: 12,\n fontWeight: 500,\n color: faded ? C.textMuted : C.textDark,\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </button>\n );\n}\n\nexport default function SupervisorSelect({\n supervisors = [],\n value = [],\n onApply,\n onClose,\n totalLabel,\n className = \"\",\n style,\n}) {\n const initialValueRef = React.useRef(value);\n const [staged, setStaged] = React.useState(value);\n const [query, setQuery] = React.useState(\"\");\n\n React.useEffect(() => {\n initialValueRef.current = value;\n setStaged(value);\n }, [value]);\n\n const stagedSet = React.useMemo(() => new Set(staged), [staged]);\n\n const isSearching = query.trim().length > 0;\n\n const filtered = React.useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return supervisors;\n return supervisors.filter((s) => s.name.toLowerCase().includes(q));\n }, [supervisors, query]);\n\n const allSelected = supervisors.length > 0 && staged.length === supervisors.length;\n const noneSelected = staged.length === 0;\n const isPartial = !allSelected && !noneSelected;\n\n const toggle = (id) => {\n setStaged((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n };\n const selectAll = () => setStaged(supervisors.map((s) => s.id));\n const deselectAll = () => setStaged([]);\n const reset = () => setStaged(initialValueRef.current);\n const clearSearch = () => setQuery(\"\");\n const apply = () => {\n onApply?.(staged);\n onClose?.();\n };\n\n const headerCount = isSearching\n ? `${filtered.length} Result${filtered.length === 1 ? \"\" : \"s\"}`\n : totalLabel || `${supervisors.length} Supervisors`;\n\n let headerRight;\n if (isSearching) {\n headerRight = filtered.length > 0 ? <ActionLink onClick={selectAll}>Select all</ActionLink> : null;\n } else if (allSelected) {\n headerRight = <ActionLink onClick={deselectAll}>Deselect all</ActionLink>;\n } else if (noneSelected) {\n headerRight = <ActionLink onClick={selectAll}>Select all</ActionLink>;\n } else {\n headerRight = (\n <span style={{ display: \"inline-flex\", gap: 12 }}>\n <ActionLink onClick={selectAll}>Select all</ActionLink>\n <ActionLink onClick={deselectAll}>Deselect all</ActionLink>\n </span>\n );\n }\n\n // Decide which sections to render\n const renderPartial = !isSearching && isPartial;\n const flatList = isSearching ? filtered : renderPartial ? [] : supervisors;\n const partialSelected = renderPartial ? supervisors.filter((s) => stagedSet.has(s.id)) : [];\n const partialOthers = renderPartial ? supervisors.filter((s) => !stagedSet.has(s.id)) : [];\n\n return (\n <div\n className={className}\n style={{\n width: 262,\n background: C.white,\n border: `1px solid ${C.borderSubtle}`,\n borderRadius: 10,\n padding: 12,\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n fontFamily: FONT,\n boxShadow: \"0 8px 24px rgba(11, 11, 11, 0.08)\",\n ...style,\n }}\n >\n <div\n style={{\n background: C.searchBg,\n height: 32,\n borderRadius: 10,\n padding: 1,\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <div\n style={{\n background: C.white,\n flex: 1,\n height: 30,\n borderRadius: 10,\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"0 8px\",\n }}\n >\n <Search size={16} color={C.textMuted} strokeWidth={2} />\n <input\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Search supervisors...\"\n style={{\n flex: 1,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontFamily: FONT,\n fontSize: 14,\n color: C.black,\n minWidth: 0,\n }}\n />\n </div>\n </div>\n\n <MetaRow\n left={\n <span style={{ color: C.textMuted, fontWeight: 400 }}>{headerCount}</span>\n }\n right={headerRight}\n />\n\n {flatList.length > 0 && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {flatList.map((s) => (\n <Row\n key={s.id}\n supervisor={s}\n checked={stagedSet.has(s.id)}\n muted={false}\n onToggle={() => toggle(s.id)}\n />\n ))}\n </div>\n )}\n\n {renderPartial && (\n <>\n {partialSelected.length > 0 && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {partialSelected.map((s) => (\n <Row key={s.id} supervisor={s} checked onToggle={() => toggle(s.id)} />\n ))}\n </div>\n )}\n {partialSelected.length > 0 && partialOthers.length > 0 && (\n <div style={{ height: 1, background: C.border, margin: \"4px 0\" }} />\n )}\n {partialOthers.length > 0 && (\n <>\n <MetaRow\n left={<span style={{ color: C.textMuted, fontWeight: 400 }}>Others</span>}\n right={null}\n />\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {partialOthers.map((s) => (\n <Row\n key={s.id}\n supervisor={s}\n checked={false}\n muted\n onToggle={() => toggle(s.id)}\n />\n ))}\n </div>\n </>\n )}\n </>\n )}\n\n {isSearching && filtered.length === 0 && (\n <div\n style={{\n padding: \"16px 8px\",\n textAlign: \"center\",\n fontSize: 14,\n color: C.textMid,\n fontFamily: FONT,\n }}\n >\n No results for “{query}”\n </div>\n )}\n {isSearching && filtered.length > 0 && supervisors.length > filtered.length && (\n <div\n style={{\n padding: \"10px 8px\",\n textAlign: \"center\",\n fontSize: 14,\n color: C.textMid,\n fontFamily: FONT,\n }}\n >\n No other results for “{query}”\n </div>\n )}\n\n <div style={{ height: 1, background: C.border, margin: \"2px 0\" }} />\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: 30,\n }}\n >\n {isSearching ? (\n <ActionLink onClick={clearSearch}>Clear search</ActionLink>\n ) : (\n <ActionLink onClick={reset}>Reset</ActionLink>\n )}\n <button\n type=\"button\"\n onClick={apply}\n style={{\n background: C.applyBg,\n color: C.white,\n border: \"none\",\n borderRadius: 10,\n height: 28,\n padding: \"0 14px\",\n fontFamily: FONT,\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n </div>\n );\n}\n"],"names":["C","FONT","Checkbox","checked","mutedFill","jsx","Check","Row","supervisor","muted","onToggle","jsxs","MetaRow","left","right","ActionLink","children","onClick","faded","SupervisorSelect","supervisors","value","onApply","onClose","totalLabel","className","style","initialValueRef","React","staged","setStaged","query","setQuery","stagedSet","isSearching","filtered","q","s","allSelected","noneSelected","isPartial","toggle","id","prev","x","selectAll","deselectAll","reset","clearSearch","apply","headerCount","headerRight","renderPartial","flatList","partialSelected","partialOthers","Search","e","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"performance.cjs.js","sources":["../../src/components/performance/performanceApiMap.js"],"sourcesContent":["import { trendFromPoints } from \"./performanceSparkline\";\n\nconst METRIC_PLACEHOLDER = \"—\";\n\nfunction isNullish(value) {\n return value == null || (typeof value === \"number\" && Number.isNaN(value));\n}\n\nfunction trendFromDelta(delta) {\n if (isNullish(delta) || delta === 0) return \"up\";\n return delta > 0 ? \"up\" : \"down\";\n}\n\nfunction formatSignedDelta(delta, { suffix = \"\", decimals = 1 } = {}) {\n if (isNullish(delta)) return null;\n const n = Number(delta);\n if (!Number.isFinite(n)) return null;\n const sign = n > 0 ? \"+\" : n < 0 ? \"\" : \"\";\n return `${sign}${n.toFixed(decimals)}${suffix}`;\n}\n\n/** Pull a numeric time series from API `trend[]` buckets (skips nulls). */\nexport function extractTrendSeries(trend, key, { includeZero = true } = {}) {\n if (!Array.isArray(trend)) return [];\n return trend\n .map((bucket) => bucket?.[key])\n .filter((v) => {\n if (v == null) return false;\n const n = Number(v);\n if (!Number.isFinite(n)) return false;\n return includeZero || n !== 0;\n })\n .map(Number);\n}\n\nfunction formatPercent(value, decimals = 1) {\n if (isNullish(value)) return METRIC_PLACEHOLDER;\n return `${(Number(value) * 100).toFixed(decimals)}%`;\n}\n\nfunction formatPp(value, decimals = 1) {\n if (isNullish(value)) return METRIC_PLACEHOLDER;\n const n = Number(value) * 100;\n const sign = n > 0 ? \"+\" : \"\";\n return `${sign}${n.toFixed(decimals)}pp`;\n}\n\nfunction formatCount(value) {\n if (isNullish(value)) return METRIC_PLACEHOLDER;\n return Number(value).toLocaleString(\"en-US\");\n}\n\nfunction formatCsat(value, decimals = 2) {\n if (isNullish(value)) return METRIC_PLACEHOLDER;\n return Number(value).toFixed(decimals);\n}\n\nfunction statLabel(base, delta, formatter) {\n const deltaStr = formatter(delta);\n return deltaStr ? `${base} (${deltaStr})` : base;\n}\n\n/**\n * Map `/performance/agents/{projectId}/v2/__all__` (or agent-specific) payload\n * to PerformancePanel KPI stat props. Pass each stat's `points` into the panel\n * for real sparklines instead of the decorative fallback curve.\n */\nexport function mapPerformanceKpiStats(api) {\n const current = api?.current ?? {};\n const deltas = api?.deltas ?? {};\n const trend = api?.trend ?? [];\n\n const volumePoints = extractTrendSeries(trend, \"count\", { includeZero: true });\n const csatPoints = extractTrendSeries(trend, \"csat\");\n const baselinePoints = extractTrendSeries(trend, \"baseline\").map((v) => v * 100);\n const liftPoints = extractTrendSeries(trend, \"agent_lift\").map((v) => v * 100);\n const scorePoints = extractTrendSeries(trend, \"score\").map((v) => v * 100);\n\n const volumeStat = {\n value: formatCount(current.call_count),\n label: \"Volume\",\n trend: trendFromDelta(deltas.call_count),\n points: volumePoints,\n };\n\n const compassStat = {\n value: formatCsat(current.avg_csat),\n label: statLabel(\"Compass Score\", deltas.csat, (d) => formatSignedDelta(d, { decimals: 2 })),\n trend: trendFromDelta(deltas.csat),\n points: csatPoints,\n };\n\n const baselineSubStat = {\n value: formatPercent(current.avg_baseline),\n label: statLabel(\"Baseline\", deltas.baseline, (d) =>\n formatSignedDelta(Number(d) * 100, { suffix: \"\", decimals: 1 }),\n ),\n trend: trendFromDelta(deltas.baseline),\n points: baselinePoints,\n };\n\n const agentLiftSubStat = {\n value: formatPp(current.avg_agent_lift),\n label: statLabel(\"Agent Lift\", deltas.agent_lift, (d) =>\n formatSignedDelta(Number(d) * 100, { suffix: \"pp\", decimals: 1 }),\n ),\n trend: trendFromDelta(deltas.agent_lift),\n points: liftPoints,\n };\n\n const scoreSubStat = {\n value: formatPercent(current.avg_score),\n label: statLabel(\"Score\", deltas.score, (d) =>\n formatSignedDelta(Number(d) * 100, { suffix: \"\", decimals: 1 }),\n ),\n trend: trendFromDelta(deltas.score),\n points: scorePoints,\n };\n\n // When points exist, prefer shape-derived direction for sparkline consistency.\n for (const stat of [volumeStat, compassStat, baselineSubStat, agentLiftSubStat, scoreSubStat]) {\n const derived = trendFromPoints(stat.points);\n if (derived) stat.trend = derived;\n }\n\n return {\n volumeStat,\n compassStat,\n baselineSubStat,\n agentLiftSubStat,\n scoreSubStat,\n };\n}\n"],"names":["METRIC_PLACEHOLDER","isNullish","value","trendFromDelta","delta","formatSignedDelta","suffix","decimals","n","extractTrendSeries","trend","key","includeZero","bucket","v","formatPercent","formatPp","formatCount","formatCsat","statLabel","base","formatter","deltaStr","mapPerformanceKpiStats","api","current","deltas","volumePoints","csatPoints","baselinePoints","liftPoints","scorePoints","volumeStat","compassStat","d","baselineSubStat","agentLiftSubStat","scoreSubStat","stat","derived","trendFromPoints"],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { t as D } from "../PerformancePanel.es.js";
|
|
2
|
+
import { D as K, b as V, M as j, a as z, P as B, R as Z, h as q, c as J, d as Q, f as X, e as Y, i as k, g as tt, j as et, k as rt, l as nt, n as ot, r as st, m as at, o as it } from "../PerformancePanel.es.js";
|
|
3
|
+
import { S as ct } from "../SupervisorSelect.es.js";
|
|
4
|
+
import "react/jsx-runtime";
|
|
5
|
+
import "react";
|
|
5
6
|
import "react-dom";
|
|
7
|
+
import "lucide-react";
|
|
6
8
|
import "../DataTable2.es.js";
|
|
7
9
|
import "../sortable.esm.es.js";
|
|
8
10
|
import "../CustomFilterChips.es.js";
|
|
@@ -10,356 +12,121 @@ import "motion/react";
|
|
|
10
12
|
import "recharts";
|
|
11
13
|
import "../AgentLiftAnalysisCard.es.js";
|
|
12
14
|
import "../TourGuideTooltip.es.js";
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
borderSubtle: "#E6E6E6",
|
|
17
|
-
border: "#D9D9D9",
|
|
18
|
-
searchBg: "#D8D8D8",
|
|
19
|
-
rowSelected: "#F2F2F0",
|
|
20
|
-
textMuted: "#989898",
|
|
21
|
-
textMid: "#676767",
|
|
22
|
-
textDark: "#323232",
|
|
23
|
-
applyBg: "#2E3236",
|
|
24
|
-
scrollbar: "#D5D9E2"
|
|
25
|
-
}, a = "var(--font-sans, 'Averta', ui-sans-serif, system-ui, sans-serif)";
|
|
26
|
-
function H({ checked: l, mutedFill: i = !1 }) {
|
|
27
|
-
return /* @__PURE__ */ e(
|
|
28
|
-
"span",
|
|
29
|
-
{
|
|
30
|
-
style: {
|
|
31
|
-
width: 20,
|
|
32
|
-
height: 20,
|
|
33
|
-
borderRadius: 4,
|
|
34
|
-
background: l ? n.black : i ? n.rowSelected : n.white,
|
|
35
|
-
border: `1px solid ${l ? n.black : n.textDark}`,
|
|
36
|
-
display: "inline-flex",
|
|
37
|
-
alignItems: "center",
|
|
38
|
-
justifyContent: "center",
|
|
39
|
-
flexShrink: 0,
|
|
40
|
-
boxSizing: "border-box"
|
|
41
|
-
},
|
|
42
|
-
children: l && /* @__PURE__ */ e(U, { size: 14, color: n.white, strokeWidth: 3 })
|
|
43
|
-
}
|
|
44
|
-
);
|
|
15
|
+
const m = "—";
|
|
16
|
+
function s(t) {
|
|
17
|
+
return t == null || typeof t == "number" && Number.isNaN(t);
|
|
45
18
|
}
|
|
46
|
-
function
|
|
47
|
-
return
|
|
48
|
-
"button",
|
|
49
|
-
{
|
|
50
|
-
type: "button",
|
|
51
|
-
onClick: f,
|
|
52
|
-
style: {
|
|
53
|
-
display: "flex",
|
|
54
|
-
alignItems: "center",
|
|
55
|
-
gap: 6,
|
|
56
|
-
height: 32,
|
|
57
|
-
padding: "0 16px 0 8px",
|
|
58
|
-
borderRadius: 10,
|
|
59
|
-
border: "none",
|
|
60
|
-
background: i ? n.rowSelected : "transparent",
|
|
61
|
-
cursor: "pointer",
|
|
62
|
-
width: "100%",
|
|
63
|
-
textAlign: "left",
|
|
64
|
-
fontFamily: a,
|
|
65
|
-
flexShrink: 0
|
|
66
|
-
},
|
|
67
|
-
children: [
|
|
68
|
-
/* @__PURE__ */ r("span", { style: { display: "flex", alignItems: "center", gap: 12, flex: 1, minWidth: 0 }, children: [
|
|
69
|
-
/* @__PURE__ */ e(H, { checked: i, mutedFill: o }),
|
|
70
|
-
/* @__PURE__ */ e(
|
|
71
|
-
"span",
|
|
72
|
-
{
|
|
73
|
-
style: {
|
|
74
|
-
fontSize: 14,
|
|
75
|
-
lineHeight: "20px",
|
|
76
|
-
fontWeight: 400,
|
|
77
|
-
color: !i && o ? n.textMid : n.black,
|
|
78
|
-
whiteSpace: "nowrap",
|
|
79
|
-
overflow: "hidden",
|
|
80
|
-
textOverflow: "ellipsis"
|
|
81
|
-
},
|
|
82
|
-
children: l.name
|
|
83
|
-
}
|
|
84
|
-
)
|
|
85
|
-
] }),
|
|
86
|
-
/* @__PURE__ */ r(
|
|
87
|
-
"span",
|
|
88
|
-
{
|
|
89
|
-
style: {
|
|
90
|
-
fontSize: 12,
|
|
91
|
-
fontWeight: 500,
|
|
92
|
-
lineHeight: 1,
|
|
93
|
-
color: !i && o ? n.textMid : n.black,
|
|
94
|
-
whiteSpace: "nowrap",
|
|
95
|
-
padding: "4px 8px"
|
|
96
|
-
},
|
|
97
|
-
children: [
|
|
98
|
-
l.agentCount,
|
|
99
|
-
" agents"
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
)
|
|
103
|
-
]
|
|
104
|
-
}
|
|
105
|
-
);
|
|
19
|
+
function i(t) {
|
|
20
|
+
return s(t) || t === 0 || t > 0 ? "up" : "down";
|
|
106
21
|
}
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
display: "flex",
|
|
113
|
-
alignItems: "center",
|
|
114
|
-
justifyContent: "space-between",
|
|
115
|
-
height: 14,
|
|
116
|
-
fontSize: 12,
|
|
117
|
-
lineHeight: 1.5,
|
|
118
|
-
fontFamily: a,
|
|
119
|
-
flexShrink: 0
|
|
120
|
-
},
|
|
121
|
-
children: [
|
|
122
|
-
l,
|
|
123
|
-
i
|
|
124
|
-
]
|
|
125
|
-
}
|
|
126
|
-
);
|
|
22
|
+
function c(t, { suffix: n = "", decimals: r = 1 } = {}) {
|
|
23
|
+
if (s(t))
|
|
24
|
+
return null;
|
|
25
|
+
const e = Number(t);
|
|
26
|
+
return Number.isFinite(e) ? `${e > 0 ? "+" : (e < 0, "")}${e.toFixed(r)}${n}` : null;
|
|
127
27
|
}
|
|
128
|
-
function
|
|
129
|
-
return
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
background: "transparent",
|
|
136
|
-
border: "none",
|
|
137
|
-
padding: 0,
|
|
138
|
-
cursor: i ? "pointer" : "default",
|
|
139
|
-
fontFamily: a,
|
|
140
|
-
fontSize: 12,
|
|
141
|
-
fontWeight: 500,
|
|
142
|
-
color: o ? n.textMuted : n.textDark,
|
|
143
|
-
whiteSpace: "nowrap"
|
|
144
|
-
},
|
|
145
|
-
children: l
|
|
146
|
-
}
|
|
147
|
-
);
|
|
28
|
+
function u(t, n, { includeZero: r = !0 } = {}) {
|
|
29
|
+
return Array.isArray(t) ? t.map((e) => e == null ? void 0 : e[n]).filter((e) => {
|
|
30
|
+
if (e == null)
|
|
31
|
+
return !1;
|
|
32
|
+
const a = Number(e);
|
|
33
|
+
return Number.isFinite(a) ? r || a !== 0 : !1;
|
|
34
|
+
}).map(Number) : [];
|
|
148
35
|
}
|
|
149
|
-
function
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
},
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
},
|
|
219
|
-
children: [
|
|
220
|
-
/* @__PURE__ */ e($, { size: 16, color: n.textMuted, strokeWidth: 2 }),
|
|
221
|
-
/* @__PURE__ */ e(
|
|
222
|
-
"input",
|
|
223
|
-
{
|
|
224
|
-
type: "text",
|
|
225
|
-
value: h,
|
|
226
|
-
onChange: (t) => M(t.target.value),
|
|
227
|
-
placeholder: "Search supervisors...",
|
|
228
|
-
style: {
|
|
229
|
-
flex: 1,
|
|
230
|
-
border: "none",
|
|
231
|
-
outline: "none",
|
|
232
|
-
background: "transparent",
|
|
233
|
-
fontFamily: a,
|
|
234
|
-
fontSize: 14,
|
|
235
|
-
color: n.black,
|
|
236
|
-
minWidth: 0
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
)
|
|
240
|
-
]
|
|
241
|
-
}
|
|
242
|
-
)
|
|
243
|
-
}
|
|
244
|
-
),
|
|
245
|
-
/* @__PURE__ */ e(
|
|
246
|
-
L,
|
|
247
|
-
{
|
|
248
|
-
left: /* @__PURE__ */ e("span", { style: { color: n.textMuted, fontWeight: 400 }, children: _ }),
|
|
249
|
-
right: x
|
|
250
|
-
}
|
|
251
|
-
),
|
|
252
|
-
W.length > 0 && /* @__PURE__ */ e("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: W.map((t) => /* @__PURE__ */ e(
|
|
253
|
-
D,
|
|
254
|
-
{
|
|
255
|
-
supervisor: t,
|
|
256
|
-
checked: y.has(t.id),
|
|
257
|
-
muted: !1,
|
|
258
|
-
onToggle: () => S(t.id)
|
|
259
|
-
},
|
|
260
|
-
t.id
|
|
261
|
-
)) }),
|
|
262
|
-
m && /* @__PURE__ */ r(I, { children: [
|
|
263
|
-
w.length > 0 && /* @__PURE__ */ e("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: w.map((t) => /* @__PURE__ */ e(D, { supervisor: t, checked: !0, onToggle: () => S(t.id) }, t.id)) }),
|
|
264
|
-
w.length > 0 && F.length > 0 && /* @__PURE__ */ e("div", { style: { height: 1, background: n.border, margin: "4px 0" } }),
|
|
265
|
-
F.length > 0 && /* @__PURE__ */ r(I, { children: [
|
|
266
|
-
/* @__PURE__ */ e(
|
|
267
|
-
L,
|
|
268
|
-
{
|
|
269
|
-
left: /* @__PURE__ */ e("span", { style: { color: n.textMuted, fontWeight: 400 }, children: "Others" }),
|
|
270
|
-
right: null
|
|
271
|
-
}
|
|
272
|
-
),
|
|
273
|
-
/* @__PURE__ */ e("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: F.map((t) => /* @__PURE__ */ e(
|
|
274
|
-
D,
|
|
275
|
-
{
|
|
276
|
-
supervisor: t,
|
|
277
|
-
checked: !1,
|
|
278
|
-
muted: !0,
|
|
279
|
-
onToggle: () => S(t.id)
|
|
280
|
-
},
|
|
281
|
-
t.id
|
|
282
|
-
)) })
|
|
283
|
-
] })
|
|
284
|
-
] }),
|
|
285
|
-
d && c.length === 0 && /* @__PURE__ */ r(
|
|
286
|
-
"div",
|
|
287
|
-
{
|
|
288
|
-
style: {
|
|
289
|
-
padding: "16px 8px",
|
|
290
|
-
textAlign: "center",
|
|
291
|
-
fontSize: 14,
|
|
292
|
-
color: n.textMid,
|
|
293
|
-
fontFamily: a
|
|
294
|
-
},
|
|
295
|
-
children: [
|
|
296
|
-
"No results for “",
|
|
297
|
-
h,
|
|
298
|
-
"”"
|
|
299
|
-
]
|
|
300
|
-
}
|
|
301
|
-
),
|
|
302
|
-
d && c.length > 0 && l.length > c.length && /* @__PURE__ */ r(
|
|
303
|
-
"div",
|
|
304
|
-
{
|
|
305
|
-
style: {
|
|
306
|
-
padding: "10px 8px",
|
|
307
|
-
textAlign: "center",
|
|
308
|
-
fontSize: 14,
|
|
309
|
-
color: n.textMid,
|
|
310
|
-
fontFamily: a
|
|
311
|
-
},
|
|
312
|
-
children: [
|
|
313
|
-
"No other results for “",
|
|
314
|
-
h,
|
|
315
|
-
"”"
|
|
316
|
-
]
|
|
317
|
-
}
|
|
318
|
-
),
|
|
319
|
-
/* @__PURE__ */ e("div", { style: { height: 1, background: n.border, margin: "2px 0" } }),
|
|
320
|
-
/* @__PURE__ */ r(
|
|
321
|
-
"div",
|
|
322
|
-
{
|
|
323
|
-
style: {
|
|
324
|
-
display: "flex",
|
|
325
|
-
alignItems: "center",
|
|
326
|
-
justifyContent: "space-between",
|
|
327
|
-
height: 30
|
|
328
|
-
},
|
|
329
|
-
children: [
|
|
330
|
-
d ? /* @__PURE__ */ e(s, { onClick: P, children: "Clear search" }) : /* @__PURE__ */ e(s, { onClick: O, children: "Reset" }),
|
|
331
|
-
/* @__PURE__ */ e(
|
|
332
|
-
"button",
|
|
333
|
-
{
|
|
334
|
-
type: "button",
|
|
335
|
-
onClick: T,
|
|
336
|
-
style: {
|
|
337
|
-
background: n.applyBg,
|
|
338
|
-
color: n.white,
|
|
339
|
-
border: "none",
|
|
340
|
-
borderRadius: 10,
|
|
341
|
-
height: 28,
|
|
342
|
-
padding: "0 14px",
|
|
343
|
-
fontFamily: a,
|
|
344
|
-
fontSize: 14,
|
|
345
|
-
fontWeight: 600,
|
|
346
|
-
cursor: "pointer"
|
|
347
|
-
},
|
|
348
|
-
children: "Apply"
|
|
349
|
-
}
|
|
350
|
-
)
|
|
351
|
-
]
|
|
352
|
-
}
|
|
353
|
-
)
|
|
354
|
-
]
|
|
355
|
-
}
|
|
356
|
-
);
|
|
36
|
+
function N(t, n = 1) {
|
|
37
|
+
return s(t) ? m : `${(Number(t) * 100).toFixed(n)}%`;
|
|
38
|
+
}
|
|
39
|
+
function x(t, n = 1) {
|
|
40
|
+
if (s(t))
|
|
41
|
+
return m;
|
|
42
|
+
const r = Number(t) * 100;
|
|
43
|
+
return `${r > 0 ? "+" : ""}${r.toFixed(n)}pp`;
|
|
44
|
+
}
|
|
45
|
+
function F(t) {
|
|
46
|
+
return s(t) ? m : Number(t).toLocaleString("en-US");
|
|
47
|
+
}
|
|
48
|
+
function C(t, n = 2) {
|
|
49
|
+
return s(t) ? m : Number(t).toFixed(n);
|
|
50
|
+
}
|
|
51
|
+
function l(t, n, r) {
|
|
52
|
+
const e = r(n);
|
|
53
|
+
return e ? `${t} (${e})` : t;
|
|
54
|
+
}
|
|
55
|
+
function I(t) {
|
|
56
|
+
const n = (t == null ? void 0 : t.current) ?? {}, r = (t == null ? void 0 : t.deltas) ?? {}, e = (t == null ? void 0 : t.trend) ?? [], a = u(e, "count", { includeZero: !0 }), P = u(e, "csat"), _ = u(e, "baseline").map((o) => o * 100), L = u(e, "agent_lift").map((o) => o * 100), E = u(e, "score").map((o) => o * 100), f = {
|
|
57
|
+
value: F(n.call_count),
|
|
58
|
+
label: "Volume",
|
|
59
|
+
trend: i(r.call_count),
|
|
60
|
+
points: a
|
|
61
|
+
}, d = {
|
|
62
|
+
value: C(n.avg_csat),
|
|
63
|
+
label: l("Compass Score", r.csat, (o) => c(o, { decimals: 2 })),
|
|
64
|
+
trend: i(r.csat),
|
|
65
|
+
points: P
|
|
66
|
+
}, p = {
|
|
67
|
+
value: N(n.avg_baseline),
|
|
68
|
+
label: l(
|
|
69
|
+
"Baseline",
|
|
70
|
+
r.baseline,
|
|
71
|
+
(o) => c(Number(o) * 100, { suffix: "", decimals: 1 })
|
|
72
|
+
),
|
|
73
|
+
trend: i(r.baseline),
|
|
74
|
+
points: _
|
|
75
|
+
}, b = {
|
|
76
|
+
value: x(n.avg_agent_lift),
|
|
77
|
+
label: l(
|
|
78
|
+
"Agent Lift",
|
|
79
|
+
r.agent_lift,
|
|
80
|
+
(o) => c(Number(o) * 100, { suffix: "pp", decimals: 1 })
|
|
81
|
+
),
|
|
82
|
+
trend: i(r.agent_lift),
|
|
83
|
+
points: L
|
|
84
|
+
}, S = {
|
|
85
|
+
value: N(n.avg_score),
|
|
86
|
+
label: l(
|
|
87
|
+
"Score",
|
|
88
|
+
r.score,
|
|
89
|
+
(o) => c(Number(o) * 100, { suffix: "", decimals: 1 })
|
|
90
|
+
),
|
|
91
|
+
trend: i(r.score),
|
|
92
|
+
points: E
|
|
93
|
+
};
|
|
94
|
+
for (const o of [f, d, p, b, S]) {
|
|
95
|
+
const g = D(o.points);
|
|
96
|
+
g && (o.trend = g);
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
volumeStat: f,
|
|
100
|
+
compassStat: d,
|
|
101
|
+
baselineSubStat: p,
|
|
102
|
+
agentLiftSubStat: b,
|
|
103
|
+
scoreSubStat: S
|
|
104
|
+
};
|
|
357
105
|
}
|
|
358
106
|
export {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
107
|
+
K as DEFAULT_AGENT_COLUMNS,
|
|
108
|
+
V as DEFAULT_SESSION_COLUMNS,
|
|
109
|
+
j as METRIC_PLACEHOLDER,
|
|
110
|
+
z as PerformanceDetailsPage,
|
|
111
|
+
B as PerformancePanel,
|
|
112
|
+
Z as RANGE_TO_MS,
|
|
113
|
+
ct as SupervisorSelect,
|
|
114
|
+
q as buildSparkPaths,
|
|
115
|
+
J as computeWindowLabel,
|
|
116
|
+
u as extractTrendSeries,
|
|
117
|
+
Q as formatEightHourRangeEndpoints,
|
|
118
|
+
X as formatEightHourWindowLabel,
|
|
119
|
+
Y as formatLocalDate,
|
|
120
|
+
k as formatMetricDisplay,
|
|
121
|
+
tt as getPresetWindowDates,
|
|
122
|
+
et as hasChartData,
|
|
123
|
+
rt as hasMeaningfulMetric,
|
|
124
|
+
nt as isNullishMetric,
|
|
125
|
+
I as mapPerformanceKpiStats,
|
|
126
|
+
ot as normalizeSparkPoints,
|
|
127
|
+
st as resolveKpiTrend,
|
|
128
|
+
at as resolveTrend,
|
|
129
|
+
D as trendFromPoints,
|
|
130
|
+
it as trendFromSignedValue
|
|
364
131
|
};
|
|
365
132
|
//# sourceMappingURL=performance.es.js.map
|