chordia-ui 3.3.7 → 3.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/UpdatedInteractionRecording.cjs.js +1 -1
- package/dist/UpdatedInteractionRecording.cjs.js.map +1 -1
- package/dist/UpdatedInteractionRecording.es.js +73 -94
- package/dist/UpdatedInteractionRecording.es.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.cjs.js +2 -2
- package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
- package/dist/components/UpdatedInteractionDetails.es.js +589 -372
- package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
- package/dist/index.cjs2.js +2 -2
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.es2.js +269 -272
- package/dist/index.es2.js.map +1 -1
- package/package.json +1 -1
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +318 -77
- package/src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx +7 -17
- package/src/components/login/LoginPage.jsx +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsxs as r, jsx as t, Fragment as
|
|
2
|
-
import { forwardRef as ce, useRef as he, useState as
|
|
3
|
-
import { RotateCcw as ue, Pause as pe, Play as fe, RotateCw as
|
|
4
|
-
import { a as
|
|
5
|
-
function
|
|
6
|
-
const a = Math.floor(
|
|
7
|
-
return `${a}:${
|
|
1
|
+
import { jsxs as r, jsx as t, Fragment as X } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as ce, useRef as he, useState as p, useImperativeHandle as ge } from "react";
|
|
3
|
+
import { RotateCcw as ue, Pause as pe, Play as fe, RotateCw as me, ChevronDown as ye, AudioLines as N, PauseCircle as ve, PlayCircle as be } from "lucide-react";
|
|
4
|
+
import { a as xe, T as ke } from "./Timeline.es.js";
|
|
5
|
+
function Y(b) {
|
|
6
|
+
const a = Math.floor(b / 60), x = Math.round(b % 60);
|
|
7
|
+
return `${a}:${x.toString().padStart(2, "0")}`;
|
|
8
8
|
}
|
|
9
|
-
const
|
|
9
|
+
const Fe = {
|
|
10
10
|
David: [
|
|
11
11
|
{ start: 0, end: 0.08 },
|
|
12
12
|
{ start: 0.18, end: 0.22 },
|
|
@@ -23,37 +23,37 @@ const Se = {
|
|
|
23
23
|
{ start: 0.6, end: 0.66 },
|
|
24
24
|
{ start: 0.74, end: 0.8 }
|
|
25
25
|
]
|
|
26
|
-
},
|
|
26
|
+
}, v = [
|
|
27
27
|
{ speaker: "David", type: "agent", time: "00:04", text: "Thanks for calling Miles Point S Pensau. This is Steve. How can I help you?" },
|
|
28
28
|
{ speaker: "Customer", type: "customer", time: "00:12", text: "Hi, Steve. This is Sandra with Botai Catering." },
|
|
29
29
|
{ speaker: "David", type: "agent", time: "00:18", text: "Hello. How are you?" },
|
|
30
30
|
{ speaker: "Customer", type: "customer", time: "00:20", text: "I'm doing really good. Hey. I brought my vans in last week, and I call it a beeping van, the one that beeps when you back up. Makes the crunchy noise. So I just took it on Saturday after, I think I had the, the Miles. I picked it up on Saturday morning, and I went to an event. So So I don't know if it's the tire or something, but makes it a little crunchy noise. Sometimes when I do the brake, but only if I turn the wheel too." },
|
|
31
31
|
{ speaker: "David", type: "agent", time: "00:21", text: "Oh, interesting. Okay. Can you swing by with it one of these days?" }
|
|
32
|
-
],
|
|
32
|
+
], Ie = ce(function({
|
|
33
33
|
audioUrl: a,
|
|
34
|
-
timelineSegments:
|
|
34
|
+
timelineSegments: x = [],
|
|
35
35
|
durationSeconds: g = 0,
|
|
36
36
|
currentTimeSeconds: G = 0,
|
|
37
37
|
timelinePlaying: l = !1,
|
|
38
|
-
playbackRate:
|
|
39
|
-
onSeek:
|
|
40
|
-
onTogglePlay:
|
|
41
|
-
onSeekBack:
|
|
42
|
-
onSeekForward:
|
|
43
|
-
onSetPlaybackRate:
|
|
44
|
-
audioRef:
|
|
38
|
+
playbackRate: k = 1,
|
|
39
|
+
onSeek: F,
|
|
40
|
+
onTogglePlay: T,
|
|
41
|
+
onSeekBack: W,
|
|
42
|
+
onSeekForward: M,
|
|
43
|
+
onSetPlaybackRate: R,
|
|
44
|
+
audioRef: L,
|
|
45
45
|
transcript: d,
|
|
46
46
|
highlightedTurns: K = /* @__PURE__ */ new Set(),
|
|
47
47
|
activeTurnIndex: E,
|
|
48
48
|
activeDemoIndex: V = 1,
|
|
49
49
|
turnObservations: Z = {},
|
|
50
|
-
setExpandedSignals:
|
|
50
|
+
setExpandedSignals: w,
|
|
51
51
|
onTurnPlayPause: q
|
|
52
52
|
}, J) {
|
|
53
53
|
var O;
|
|
54
|
-
const
|
|
55
|
-
for (let n =
|
|
56
|
-
const o = P(
|
|
54
|
+
const S = he(null), [f, Q] = p(null), [U, ee] = p(k || 1), [D, m] = p(l), [te, z] = p(!1), [H, C] = p(V), $ = (e) => {
|
|
55
|
+
for (let n = v.length - 1; n >= 0; n--) {
|
|
56
|
+
const o = P(v[n].time);
|
|
57
57
|
if (e >= o)
|
|
58
58
|
return n;
|
|
59
59
|
}
|
|
@@ -63,36 +63,36 @@ const Se = {
|
|
|
63
63
|
return 0;
|
|
64
64
|
const n = e.split(":").map(Number);
|
|
65
65
|
return (n[0] || 0) * 60 + (n[1] || 0);
|
|
66
|
-
}, ne = [1, 1.25, 1.5, 2], B = !a, I = B ? U :
|
|
66
|
+
}, ne = [1, 1.25, 1.5, 2], B = !a, I = B ? U : k, oe = B ? D : l;
|
|
67
67
|
ge(J, () => ({
|
|
68
68
|
seekTo: (e) => {
|
|
69
69
|
c(e), m(!0);
|
|
70
70
|
const n = $(e);
|
|
71
|
-
|
|
71
|
+
C(n), setTimeout(() => {
|
|
72
72
|
var i;
|
|
73
|
-
const o = (i =
|
|
73
|
+
const o = (i = S.current) == null ? void 0 : i.children;
|
|
74
74
|
o != null && o[n] && o[n].scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
75
75
|
}, 50);
|
|
76
76
|
}
|
|
77
77
|
}));
|
|
78
78
|
const c = (e) => {
|
|
79
79
|
const n = Math.max(0, Math.min(e, g || 156));
|
|
80
|
-
|
|
80
|
+
F && F(n), Q(n), C($(n));
|
|
81
81
|
}, re = () => {
|
|
82
|
-
|
|
82
|
+
T ? T() : m((e) => !e);
|
|
83
83
|
}, ie = () => {
|
|
84
|
-
|
|
84
|
+
W ? W() : c(Math.max(0, (f ?? 0) - 10));
|
|
85
85
|
}, se = () => {
|
|
86
|
-
|
|
86
|
+
M ? M() : c(Math.min(g || 156, (f ?? 0) + 10));
|
|
87
87
|
}, ae = (e) => {
|
|
88
|
-
|
|
88
|
+
R && R(e), ee(e), z(!1);
|
|
89
89
|
}, le = (e) => {
|
|
90
90
|
var n;
|
|
91
|
-
if (H === e &&
|
|
91
|
+
if (H === e && D)
|
|
92
92
|
m(!1);
|
|
93
93
|
else {
|
|
94
|
-
const o = P((n =
|
|
95
|
-
|
|
94
|
+
const o = P((n = v[e]) == null ? void 0 : n.time);
|
|
95
|
+
C(e), m(!0), c(o);
|
|
96
96
|
}
|
|
97
97
|
}, de = (e, n) => {
|
|
98
98
|
if (e == null)
|
|
@@ -114,14 +114,14 @@ const Se = {
|
|
|
114
114
|
observations: (Z[n] || []).map((s) => ({
|
|
115
115
|
...s,
|
|
116
116
|
onClick: () => {
|
|
117
|
-
|
|
117
|
+
w == null || w((h) => /* @__PURE__ */ new Set([...h, s.signalKey])), setTimeout(() => {
|
|
118
118
|
const h = document.getElementById(`signal-${s.signalKey}`);
|
|
119
119
|
h && h.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
120
120
|
}, 100);
|
|
121
121
|
}
|
|
122
122
|
}))
|
|
123
123
|
};
|
|
124
|
-
}) : null,
|
|
124
|
+
}) : null, y = g || 156, A = f ?? (g > 0 ? G : 0), u = y > 0 ? A / y * 100 : 0, _ = Math.round(A);
|
|
125
125
|
return /* @__PURE__ */ r("div", { style: {
|
|
126
126
|
display: "flex",
|
|
127
127
|
padding: 24,
|
|
@@ -155,7 +155,7 @@ const Se = {
|
|
|
155
155
|
alignItems: "center",
|
|
156
156
|
justifyContent: "center"
|
|
157
157
|
}, children: oe ? /* @__PURE__ */ t(pe, { size: 14, color: "#FFF", fill: "#FFF" }) : /* @__PURE__ */ t(fe, { size: 14, color: "#FFF", fill: "#FFF", strokeWidth: 1.5, style: { marginLeft: 2 } }) }),
|
|
158
|
-
/* @__PURE__ */ t("button", { onClick: se, style: { background: "none", border: "none", cursor: "pointer", padding: 0, display: "flex", alignItems: "center" }, children: /* @__PURE__ */ t(
|
|
158
|
+
/* @__PURE__ */ t("button", { onClick: se, style: { background: "none", border: "none", cursor: "pointer", padding: 0, display: "flex", alignItems: "center" }, children: /* @__PURE__ */ t(me, { size: 20, color: "#808183", strokeWidth: 1.5 }) }),
|
|
159
159
|
/* @__PURE__ */ t("span", { style: { fontSize: 13, fontWeight: 400, color: "var(--Grey-Muted, #808183)", lineHeight: 1.2 }, children: "10" })
|
|
160
160
|
] }),
|
|
161
161
|
/* @__PURE__ */ r("div", { style: { position: "relative" }, children: [
|
|
@@ -184,7 +184,7 @@ const Se = {
|
|
|
184
184
|
children: [
|
|
185
185
|
I,
|
|
186
186
|
"x",
|
|
187
|
-
/* @__PURE__ */ t(
|
|
187
|
+
/* @__PURE__ */ t(ye, { size: 12, color: "#808183" })
|
|
188
188
|
]
|
|
189
189
|
}
|
|
190
190
|
),
|
|
@@ -226,36 +226,36 @@ const Se = {
|
|
|
226
226
|
)) })
|
|
227
227
|
] })
|
|
228
228
|
] }),
|
|
229
|
-
a ? /* @__PURE__ */ r(
|
|
229
|
+
a ? /* @__PURE__ */ r(X, { children: [
|
|
230
230
|
/* @__PURE__ */ t(
|
|
231
|
-
|
|
231
|
+
xe,
|
|
232
232
|
{
|
|
233
|
-
segments:
|
|
233
|
+
segments: x,
|
|
234
234
|
durationSeconds: g,
|
|
235
235
|
currentTimeSeconds: G,
|
|
236
|
-
onSeek:
|
|
236
|
+
onSeek: F,
|
|
237
237
|
showControls: !1,
|
|
238
238
|
hasRecording: !0,
|
|
239
239
|
timelinePlaying: l,
|
|
240
|
-
playbackRate:
|
|
240
|
+
playbackRate: k
|
|
241
241
|
}
|
|
242
242
|
),
|
|
243
|
-
/* @__PURE__ */ t("audio", { ref:
|
|
243
|
+
/* @__PURE__ */ t("audio", { ref: L, preload: "none", style: { display: "none" }, children: /* @__PURE__ */ t("source", { src: a, type: "audio/mpeg" }) })
|
|
244
244
|
] }) : /* @__PURE__ */ r("div", { style: { display: "flex", flexDirection: "column", gap: 12 }, children: [
|
|
245
245
|
/* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
246
246
|
/* @__PURE__ */ t("span", { style: {
|
|
247
247
|
fontSize: 13,
|
|
248
248
|
fontWeight: 600,
|
|
249
|
-
color:
|
|
249
|
+
color: u > 0 ? "var(--Green-Primary, #00925F)" : "var(--Grey-Strong, #2E3236)",
|
|
250
250
|
fontFamily: "var(--font-sans)",
|
|
251
251
|
lineHeight: 1.2,
|
|
252
252
|
minWidth: 60
|
|
253
|
-
}, children:
|
|
253
|
+
}, children: Y(_) }),
|
|
254
254
|
/* @__PURE__ */ r(
|
|
255
255
|
"div",
|
|
256
256
|
{
|
|
257
257
|
onClick: (e) => {
|
|
258
|
-
const n = e.currentTarget.getBoundingClientRect(), o = e.clientX - n.left, s = Math.max(0, Math.min(1, o / n.width)) *
|
|
258
|
+
const n = e.currentTarget.getBoundingClientRect(), o = e.clientX - n.left, s = Math.max(0, Math.min(1, o / n.width)) * y;
|
|
259
259
|
c(s);
|
|
260
260
|
},
|
|
261
261
|
style: {
|
|
@@ -281,7 +281,7 @@ const Se = {
|
|
|
281
281
|
left: 0,
|
|
282
282
|
top: "50%",
|
|
283
283
|
transform: "translateY(-50%)",
|
|
284
|
-
width: `${
|
|
284
|
+
width: `${u}%`,
|
|
285
285
|
height: 4,
|
|
286
286
|
borderRadius: 2,
|
|
287
287
|
background: "var(--Green-Primary, #00925F)",
|
|
@@ -297,7 +297,7 @@ const Se = {
|
|
|
297
297
|
xmlns: "http://www.w3.org/2000/svg",
|
|
298
298
|
style: {
|
|
299
299
|
position: "absolute",
|
|
300
|
-
left: `${
|
|
300
|
+
left: `${u}%`,
|
|
301
301
|
top: "50%",
|
|
302
302
|
transform: "translate(-50%, -50%)",
|
|
303
303
|
pointerEvents: "none"
|
|
@@ -338,7 +338,7 @@ const Se = {
|
|
|
338
338
|
{
|
|
339
339
|
onClick: (o) => {
|
|
340
340
|
const i = o.currentTarget.getBoundingClientRect(), s = Math.max(0, Math.min(1, (o.clientX - i.left) / i.width));
|
|
341
|
-
c(s *
|
|
341
|
+
c(s * y);
|
|
342
342
|
},
|
|
343
343
|
style: {
|
|
344
344
|
flex: 1,
|
|
@@ -358,7 +358,7 @@ const Se = {
|
|
|
358
358
|
borderRadius: 2,
|
|
359
359
|
background: "var(--rail-surface-2, #E3E1D7)"
|
|
360
360
|
} }),
|
|
361
|
-
|
|
361
|
+
Fe[e].map((o, i) => /* @__PURE__ */ t("div", { style: {
|
|
362
362
|
position: "absolute",
|
|
363
363
|
left: `${o.start * 100}%`,
|
|
364
364
|
width: `${(o.end - o.start) * 100}%`,
|
|
@@ -382,7 +382,7 @@ const Se = {
|
|
|
382
382
|
}, children: [
|
|
383
383
|
/* @__PURE__ */ t("div", { style: {
|
|
384
384
|
position: "absolute",
|
|
385
|
-
left: `${
|
|
385
|
+
left: `${u}%`,
|
|
386
386
|
top: 0,
|
|
387
387
|
height: 44,
|
|
388
388
|
/* spans both rows */
|
|
@@ -392,7 +392,7 @@ const Se = {
|
|
|
392
392
|
} }),
|
|
393
393
|
/* @__PURE__ */ t("div", { style: {
|
|
394
394
|
position: "absolute",
|
|
395
|
-
left: `${
|
|
395
|
+
left: `${u}%`,
|
|
396
396
|
bottom: 0,
|
|
397
397
|
transform: "translateX(-50%)",
|
|
398
398
|
background: "var(--Grey-Strong, #2E3236)",
|
|
@@ -403,7 +403,7 @@ const Se = {
|
|
|
403
403
|
padding: "4px 6px",
|
|
404
404
|
borderRadius: 4,
|
|
405
405
|
whiteSpace: "nowrap"
|
|
406
|
-
}, children:
|
|
406
|
+
}, children: Y(_) })
|
|
407
407
|
] })
|
|
408
408
|
] })
|
|
409
409
|
] })
|
|
@@ -414,38 +414,17 @@ const Se = {
|
|
|
414
414
|
flexDirection: "column",
|
|
415
415
|
gap: 16
|
|
416
416
|
}, children: [
|
|
417
|
-
/* @__PURE__ */
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
}, style: {
|
|
429
|
-
background: "none",
|
|
430
|
-
border: "none",
|
|
431
|
-
cursor: "pointer",
|
|
432
|
-
padding: 0,
|
|
433
|
-
display: "flex"
|
|
434
|
-
}, children: /* @__PURE__ */ t(ve, { size: 16, color: "#808183", strokeWidth: 1.5 }) }),
|
|
435
|
-
/* @__PURE__ */ t("button", { onClick: () => {
|
|
436
|
-
var e;
|
|
437
|
-
return (e = u.current) == null ? void 0 : e.scrollBy({ top: 200, behavior: "smooth" });
|
|
438
|
-
}, style: {
|
|
439
|
-
background: "none",
|
|
440
|
-
border: "none",
|
|
441
|
-
cursor: "pointer",
|
|
442
|
-
padding: 0,
|
|
443
|
-
display: "flex"
|
|
444
|
-
}, children: /* @__PURE__ */ t(be, { size: 16, color: "#808183", strokeWidth: 1.5 }) })
|
|
445
|
-
] })
|
|
446
|
-
] }),
|
|
447
|
-
j ? /* @__PURE__ */ t("div", { id: "transcript-container", ref: u, style: { maxHeight: 600, overflowY: "auto" }, children: /* @__PURE__ */ t(
|
|
448
|
-
we,
|
|
417
|
+
/* @__PURE__ */ t("div", { style: {
|
|
418
|
+
borderBottom: "1px solid var(--Grey-absent, #D9D9D9)",
|
|
419
|
+
paddingBottom: 16
|
|
420
|
+
}, children: /* @__PURE__ */ t("span", { style: {
|
|
421
|
+
fontSize: 14,
|
|
422
|
+
fontWeight: 400,
|
|
423
|
+
color: "var(--Grey-Strong, #2E3236)",
|
|
424
|
+
lineHeight: 1.2
|
|
425
|
+
}, children: "Transcript" }) }),
|
|
426
|
+
j ? /* @__PURE__ */ t("div", { id: "transcript-container", ref: S, style: { maxHeight: 600, overflowY: "auto" }, children: /* @__PURE__ */ t(
|
|
427
|
+
ke,
|
|
449
428
|
{
|
|
450
429
|
turns: j,
|
|
451
430
|
audioUrl: a,
|
|
@@ -454,13 +433,13 @@ const Se = {
|
|
|
454
433
|
isExternalPlaying: l,
|
|
455
434
|
onTurnPlayPause: q
|
|
456
435
|
}
|
|
457
|
-
) }) : /* @__PURE__ */ t("div", { ref:
|
|
436
|
+
) }) : /* @__PURE__ */ t("div", { ref: S, style: {
|
|
458
437
|
display: "flex",
|
|
459
438
|
flexDirection: "column",
|
|
460
439
|
maxHeight: 600,
|
|
461
440
|
overflowY: "auto"
|
|
462
|
-
}, children:
|
|
463
|
-
const o = n === H &&
|
|
441
|
+
}, children: v.map((e, n) => {
|
|
442
|
+
const o = n === H && D, i = e.type === "customer";
|
|
464
443
|
return /* @__PURE__ */ r("div", { style: {
|
|
465
444
|
display: "flex",
|
|
466
445
|
padding: 16,
|
|
@@ -468,7 +447,7 @@ const Se = {
|
|
|
468
447
|
alignItems: "flex-start",
|
|
469
448
|
gap: 16,
|
|
470
449
|
alignSelf: "stretch",
|
|
471
|
-
|
|
450
|
+
borderTop: n > 0 ? "1px solid var(--Grey-absent, #D9D9D9)" : "none",
|
|
472
451
|
background: o ? "var(--surface-hover, #F3F7F7)" : "var(--Grey-White, #FFF)"
|
|
473
452
|
}, children: [
|
|
474
453
|
/* @__PURE__ */ r("div", { style: {
|
|
@@ -485,9 +464,9 @@ const Se = {
|
|
|
485
464
|
color: i ? "var(--Grey-Strong, #2E3236)" : "var(--Grey-Muted, #808183)"
|
|
486
465
|
}, children: e.speaker }),
|
|
487
466
|
/* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
488
|
-
o && /* @__PURE__ */ r(
|
|
489
|
-
/* @__PURE__ */ t(
|
|
490
|
-
/* @__PURE__ */ t(
|
|
467
|
+
o && /* @__PURE__ */ r(X, { children: [
|
|
468
|
+
/* @__PURE__ */ t(N, { size: 12, color: "#2E3236" }),
|
|
469
|
+
/* @__PURE__ */ t(N, { size: 12, color: "#2E3236" })
|
|
491
470
|
] }),
|
|
492
471
|
/* @__PURE__ */ t("span", { style: {
|
|
493
472
|
fontSize: 13,
|
|
@@ -510,7 +489,7 @@ const Se = {
|
|
|
510
489
|
flexShrink: 0,
|
|
511
490
|
display: "flex"
|
|
512
491
|
},
|
|
513
|
-
children: o ? /* @__PURE__ */ t(
|
|
492
|
+
children: o ? /* @__PURE__ */ t(ve, { size: 17, color: "#2E3236", strokeWidth: 1.5 }) : /* @__PURE__ */ t(be, { size: 17, color: "#808183", strokeWidth: 1 })
|
|
514
493
|
}
|
|
515
494
|
),
|
|
516
495
|
/* @__PURE__ */ t("p", { style: {
|
|
@@ -528,6 +507,6 @@ const Se = {
|
|
|
528
507
|
] });
|
|
529
508
|
});
|
|
530
509
|
export {
|
|
531
|
-
|
|
510
|
+
Ie as U
|
|
532
511
|
};
|
|
533
512
|
//# sourceMappingURL=UpdatedInteractionRecording.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdatedInteractionRecording.es.js","sources":["../src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx"],"sourcesContent":["import { useRef, useState, forwardRef, useImperativeHandle } from 'react';\nimport {\n Play, Pause, RotateCcw, RotateCw,\n ChevronLeft, ChevronRight, ChevronDown,\n AudioLines, PlayCircle, PauseCircle,\n} from 'lucide-react';\nimport Timeline from '../media/Timeline.jsx';\nimport TranscriptCard from '../media/TranscriptCard.jsx';\n\nfunction fmtTime(seconds) {\n const m = Math.floor(seconds / 60);\n const s = Math.round(seconds % 60);\n return `${m}:${s.toString().padStart(2, '0')}`;\n}\n\n/* ── Demo data for static preview ── */\nconst DEMO_SEGMENTS = {\n David: [\n { start: 0, end: 0.08 },\n { start: 0.18, end: 0.22 },\n { start: 0.38, end: 0.42 },\n { start: 0.55, end: 0.58 },\n { start: 0.68, end: 0.72 },\n { start: 0.82, end: 0.88 },\n { start: 0.94, end: 1 },\n ],\n Customer: [\n { start: 0.1, end: 0.16 },\n { start: 0.24, end: 0.36 },\n { start: 0.44, end: 0.52 },\n { start: 0.6, end: 0.66 },\n { start: 0.74, end: 0.80 },\n ],\n};\n\nconst DEMO_TRANSCRIPT = [\n { speaker: 'David', type: 'agent', time: '00:04', text: 'Thanks for calling Miles Point S Pensau. This is Steve. How can I help you?' },\n { speaker: 'Customer', type: 'customer', time: '00:12', text: 'Hi, Steve. This is Sandra with Botai Catering.' },\n { speaker: 'David', type: 'agent', time: '00:18', text: 'Hello. How are you?' },\n { speaker: 'Customer', type: 'customer', time: '00:20', text: \"I'm doing really good. Hey. I brought my vans in last week, and I call it a beeping van, the one that beeps when you back up. Makes the crunchy noise. So I just took it on Saturday after, I think I had the, the Miles. I picked it up on Saturday morning, and I went to an event. So So I don't know if it's the tire or something, but makes it a little crunchy noise. Sometimes when I do the brake, but only if I turn the wheel too.\" },\n { speaker: 'David', type: 'agent', time: '00:21', text: 'Oh, interesting. Okay. Can you swing by with it one of these days?' },\n];\n\n/* ── Component ── */\nconst UpdatedInteractionRecording = forwardRef(function UpdatedInteractionRecording({\n audioUrl,\n timelineSegments = [],\n durationSeconds = 0,\n currentTimeSeconds = 0,\n timelinePlaying = false,\n playbackRate = 1,\n onSeek,\n onTogglePlay,\n onSeekBack,\n onSeekForward,\n onSetPlaybackRate,\n audioRef,\n transcript,\n highlightedTurns = new Set(),\n activeTurnIndex,\n activeDemoIndex = 1,\n turnObservations = {},\n setExpandedSignals,\n onTurnPlayPause,\n}, ref) {\n const scrollRef = useRef(null);\n const [demoSeekTime, setDemoSeekTime] = useState(null);\n const [demoRate, setDemoRate] = useState(playbackRate || 1);\n const [demoPlaying, setDemoPlaying] = useState(timelinePlaying);\n const [showSpeedMenu, setShowSpeedMenu] = useState(false);\n const [activeDemoIdx, setActiveDemoIdx] = useState(activeDemoIndex);\n\n /* Compute which transcript card matches current playback time */\n const computeActiveIdx = (timeSec) => {\n for (let i = DEMO_TRANSCRIPT.length - 1; i >= 0; i--) {\n const turnTime = parseTimeStr(DEMO_TRANSCRIPT[i].time);\n if (timeSec >= turnTime) return i;\n }\n return 0;\n };\n\n const parseTimeStr = (timeStr) => {\n if (!timeStr) return 0;\n const parts = timeStr.split(':').map(Number);\n return (parts[0] || 0) * 60 + (parts[1] || 0);\n };\n\n const SPEED_OPTIONS = [1, 1.25, 1.5, 2];\n const isDemo = !audioUrl;\n const activeRate = isDemo ? demoRate : playbackRate;\n const activePlaying = isDemo ? demoPlaying : timelinePlaying;\n\n /* Expose seekTo for parent to call via ref */\n useImperativeHandle(ref, () => ({\n seekTo: (timeSec) => {\n handleSeek(timeSec);\n setDemoPlaying(true);\n // Scroll to matching transcript card\n const idx = computeActiveIdx(timeSec);\n setActiveDemoIdx(idx);\n setTimeout(() => {\n const cards = scrollRef.current?.children;\n if (cards?.[idx]) {\n cards[idx].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 50);\n },\n }));\n\n /* Handle seek — updates local demo state or calls parent onSeek */\n const handleSeek = (timeSeconds) => {\n const clamped = Math.max(0, Math.min(timeSeconds, durationSeconds || 156));\n if (onSeek) onSeek(clamped);\n setDemoSeekTime(clamped);\n setActiveDemoIdx(computeActiveIdx(clamped));\n };\n\n const handleTogglePlay = () => {\n if (onTogglePlay) onTogglePlay();\n else setDemoPlaying((prev) => !prev);\n };\n\n const handleSeekBack = () => {\n if (onSeekBack) onSeekBack();\n else handleSeek(Math.max(0, (demoSeekTime ?? 0) - 10));\n };\n\n const handleSeekForward = () => {\n if (onSeekForward) onSeekForward();\n else {\n const demoDur = durationSeconds || 156;\n handleSeek(Math.min(demoDur, (demoSeekTime ?? 0) + 10));\n }\n };\n\n const handleSetRate = (rate) => {\n if (onSetPlaybackRate) onSetPlaybackRate(rate);\n setDemoRate(rate);\n setShowSpeedMenu(false);\n };\n\n /* Handle transcript card play/pause */\n const handleDemoTurnPlayPause = (idx) => {\n if (activeDemoIdx === idx && demoPlaying) {\n setDemoPlaying(false);\n } else {\n const turnTime = parseTimeStr(DEMO_TRANSCRIPT[idx]?.time);\n setActiveDemoIdx(idx);\n setDemoPlaying(true);\n handleSeek(turnTime);\n }\n };\n\n /* transcript turn builder */\n const formatTimeRange = (startMs, endMs) => {\n if (startMs == null) return undefined;\n const fmt = (ms) => {\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n };\n return `${fmt(startMs)}\\u2013${endMs != null ? fmt(endMs) : fmt(startMs)}`;\n };\n\n const turns = transcript?.messages?.length\n ? transcript.messages.map((m, i) => ({\n actor: m.actor === 'agent' ? (transcript.actor_map?.agent || 'Agent') : (transcript.actor_map?.customer || 'Customer'),\n actorType: m.actor === 'agent' ? 'agent' : 'customer',\n text: m.text || '',\n timeRange: formatTimeRange(m.start ?? m.start_ms, m.end ?? m.end_ms),\n isHighlighted: highlightedTurns.has(i),\n highlightColor: timelinePlaying && activeTurnIndex === i\n ? (m.actor === 'agent' ? 'var(--rail-outcome)' : 'var(--rail-discovery)')\n : undefined,\n observations: (turnObservations[i] || []).map((obs) => ({\n ...obs,\n onClick: () => {\n setExpandedSignals?.((prev) => new Set([...prev, obs.signalKey]));\n setTimeout(() => {\n const el = document.getElementById(`signal-${obs.signalKey}`);\n if (el) el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }, 100);\n },\n })),\n }))\n : null;\n\n const demoDuration = durationSeconds || 156;\n const effectiveTime = demoSeekTime != null ? demoSeekTime : (durationSeconds > 0 ? currentTimeSeconds : 0);\n const progress = demoDuration > 0 ? (effectiveTime / demoDuration) * 100 : 0;\n const demoCurrentTime = Math.round(effectiveTime);\n\n return (\n <div style={{\n display: 'flex',\n padding: 24,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: 24,\n borderRadius: 8,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-White, #FFF)',\n }}>\n\n {/* ════════════════════════════════════════\n RECORDING SECTION\n ════════════════════════════════════════ */}\n <div style={{ width: '100%', display: 'flex', flexDirection: 'column', gap: 16 }}>\n\n {/* ── Row 1: Title + Controls — Figma: Frame 35, horizontal, space-between, center ── */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 24 }}>\n <span style={{\n fontSize: 15, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n Recording\n </span>\n\n {/* Frame 34: controls — horizontal, gap: 12, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, flex: 1, justifyContent: 'center' }}>\n {/* Skip back 10s */}\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.2 }}>10</span>\n <button onClick={handleSeekBack} style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', alignItems: 'center' }}>\n <RotateCcw size={20} color=\"#808183\" strokeWidth={1.5} />\n </button>\n\n {/* Play / Pause — 32x32 dark circle */}\n <button onClick={handleTogglePlay} style={{\n background: 'var(--Grey-Strong, #2E3236)',\n border: 'none', cursor: 'pointer',\n width: 32, height: 32, borderRadius: 48,\n padding: 0,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n }}>\n {activePlaying\n ? <Pause size={14} color=\"#FFF\" fill=\"#FFF\" />\n : <Play size={14} color=\"#FFF\" fill=\"#FFF\" strokeWidth={1.5} style={{ marginLeft: 2 }} />\n }\n </button>\n\n {/* Skip forward 10s */}\n <button onClick={handleSeekForward} style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', alignItems: 'center' }}>\n <RotateCw size={20} color=\"#808183\" strokeWidth={1.5} />\n </button>\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.2 }}>10</span>\n </div>\n\n {/* Speed pill with dropdown */}\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => setShowSpeedMenu((prev) => !prev)}\n style={{\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 20,\n padding: '0 5px 0 10px',\n height: 24,\n minWidth: 56,\n cursor: 'pointer',\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 4,\n }}\n >\n {activeRate}x\n <ChevronDown size={12} color=\"#808183\" />\n </button>\n\n {showSpeedMenu && (\n <div style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 8,\n boxShadow: '0 4px 12px rgba(0,0,0,0.1)',\n zIndex: 10,\n overflow: 'hidden',\n minWidth: 80,\n }}>\n {SPEED_OPTIONS.map((speed) => (\n <button\n key={speed}\n onClick={() => handleSetRate(speed)}\n style={{\n display: 'block',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n background: activeRate === speed ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n cursor: 'pointer',\n fontSize: 13,\n fontWeight: activeRate === speed ? 600 : 400,\n color: 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n textAlign: 'left',\n }}\n >\n {speed}x\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Row 2: Progress bar ── */}\n {audioUrl ? (\n <>\n <Timeline\n segments={timelineSegments}\n durationSeconds={durationSeconds}\n currentTimeSeconds={currentTimeSeconds}\n onSeek={onSeek}\n showControls={false}\n hasRecording\n timelinePlaying={timelinePlaying}\n playbackRate={playbackRate}\n />\n <audio ref={audioRef} preload=\"none\" style={{ display: 'none' }}>\n <source src={audioUrl} type=\"audio/mpeg\" />\n </audio>\n </>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* Time label + scrubber bar */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span style={{\n fontSize: 13, fontWeight: 600,\n color: progress > 0 ? 'var(--Green-Primary, #00925F)' : 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n minWidth: 60,\n }}>\n {fmtTime(demoCurrentTime)}\n </span>\n <div\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const pct = Math.max(0, Math.min(1, clickX / rect.width));\n const seekTime = pct * demoDuration;\n handleSeek(seekTime);\n }}\n style={{\n flex: 1, height: 16,\n position: 'relative',\n display: 'flex', alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n {/* Background track — Figma: #E3E1D7, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, right: 0,\n height: 4, borderRadius: 2,\n background: 'var(--rail-surface-2, #E3E1D7)',\n pointerEvents: 'none',\n }} />\n {/* Played portion — Figma: #00925F, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, top: '50%',\n transform: 'translateY(-50%)',\n width: `${progress}%`,\n height: 4, borderRadius: 2,\n background: 'var(--Green-Primary, #00925F)',\n pointerEvents: 'none',\n }} />\n {/* Scrubber handle — Figma ellipse */}\n <svg\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n left: `${progress}%`,\n top: '50%',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n }}\n >\n <path\n d=\"M7.875 1C11.6572 1 14.75 4.1191 14.75 8C14.75 11.8809 11.6572 15 7.875 15C4.09284 15 1 11.8809 1 8C1 4.1191 4.09284 1 7.875 1Z\"\n fill=\"#FFF\"\n stroke=\"#00925F\"\n strokeWidth=\"2\"\n />\n </svg>\n </div>\n </div>\n\n {/* ── Row 3: Speaker timeline bars + playback indicator ── */}\n <div style={{ position: 'relative', paddingBottom: 30, cursor: 'pointer' }}>\n {['David', 'Customer'].map((speaker, rowIdx) => (\n <div key={speaker} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n height: 20,\n marginBottom: rowIdx === 0 ? 4 : 0,\n }}>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n minWidth: 60,\n }}>\n {speaker}\n </span>\n <div\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n handleSeek(pct * demoDuration);\n }}\n style={{\n flex: 1, height: 6,\n position: 'relative', borderRadius: 3,\n cursor: 'pointer',\n }}\n >\n {/* Thin baseline — Figma: #E3E1D7, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, right: 0,\n top: '50%', transform: 'translateY(-50%)',\n height: 4, borderRadius: 2,\n background: 'var(--rail-surface-2, #E3E1D7)',\n }} />\n {/* Speech segments */}\n {DEMO_SEGMENTS[speaker].map((seg, i) => (\n <div key={i} style={{\n position: 'absolute',\n left: `${seg.start * 100}%`,\n width: `${(seg.end - seg.start) * 100}%`,\n top: 0, bottom: 0, borderRadius: 3,\n background: speaker === 'David'\n ? 'var(--Grey-Strong, #2E3236)'\n : 'var(--Grey-Muted, #808183)',\n }} />\n ))}\n </div>\n </div>\n ))}\n\n {/* ── Playback position: dotted line + avatar + time tooltip ── */}\n <div style={{\n position: 'absolute',\n left: 68, /* 60 label + 8 gap */\n right: 0,\n top: 0,\n bottom: 0,\n pointerEvents: 'none',\n }}>\n {/* Dotted vertical line */}\n <div style={{\n position: 'absolute',\n left: `${progress}%`,\n top: 0,\n height: 44, /* spans both rows */\n transform: 'translateX(-50%)',\n borderLeft: '1.5px dashed var(--Grey-Muted, #808183)',\n opacity: 0.5,\n }} />\n\n {/* Time tooltip — Figma: Frame 30, bg=#2E3236, pad 4 6, r=4, 14px/600/#FFF */}\n <div style={{\n position: 'absolute',\n left: `${progress}%`,\n bottom: 0,\n transform: 'translateX(-50%)',\n background: 'var(--Grey-Strong, #2E3236)',\n color: 'var(--Grey-White, #FFF)',\n fontSize: 14, fontWeight: 600,\n lineHeight: 1.2,\n padding: '4px 6px',\n borderRadius: 4,\n whiteSpace: 'nowrap',\n }}>\n {fmtTime(demoCurrentTime)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* ════════════════════════════════════════\n TRANSCRIPT SECTION\n ════════════════════════════════════════ */}\n {/* Figma: Frame 49, vertical, gap: 16 */}\n <div style={{\n width: '100%',\n display: 'flex', flexDirection: 'column', gap: 16,\n }}>\n {/* ── Header: Frame 50 — Transcript + nav arrows, horizontal, gap: 12, center ── */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n Transcript\n </span>\n {/* Frame 51: nav arrows — horizontal, gap: 12, align: end, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, marginLeft: 'auto' }}>\n <button onClick={() => scrollRef.current?.scrollBy({ top: -200, behavior: 'smooth' })} style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex',\n }}>\n <ChevronLeft size={16} color=\"#808183\" strokeWidth={1.5} />\n </button>\n <button onClick={() => scrollRef.current?.scrollBy({ top: 200, behavior: 'smooth' })} style={{\n background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex',\n }}>\n <ChevronRight size={16} color=\"#808183\" strokeWidth={1.5} />\n </button>\n </div>\n </div>\n\n {/* ── Cards ── */}\n {turns ? (\n <div id=\"transcript-container\" ref={scrollRef} style={{ maxHeight: 600, overflowY: 'auto' }}>\n <TranscriptCard\n turns={turns}\n audioUrl={audioUrl}\n activeTurnIndex={activeTurnIndex}\n autoScrollActiveTurn={timelinePlaying}\n isExternalPlaying={timelinePlaying}\n onTurnPlayPause={onTurnPlayPause}\n />\n </div>\n ) : (\n <div ref={scrollRef} style={{\n display: 'flex', flexDirection: 'column',\n maxHeight: 600, overflowY: 'auto',\n }}>\n {DEMO_TRANSCRIPT.map((card, i) => {\n const isActive = i === activeDemoIdx && demoPlaying;\n const isCustomer = card.type === 'customer';\n\n return (\n <div key={i} style={{\n display: 'flex',\n padding: 16,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: 16,\n alignSelf: 'stretch',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: isActive ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n }}>\n {/* Frame 40: Speaker name + time — horizontal, space-between, center */}\n <div style={{\n display: 'flex', alignItems: 'center',\n justifyContent: 'space-between', width: '100%',\n gap: 8,\n }}>\n <span style={{\n fontSize: 14, fontWeight: 600,\n lineHeight: 1.2,\n color: isCustomer ? 'var(--Grey-Strong, #2E3236)' : 'var(--Grey-Muted, #808183)',\n }}>\n {card.speaker}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {isActive && (\n <>\n <AudioLines size={12} color=\"#2E3236\" />\n <AudioLines size={12} color=\"#2E3236\" />\n </>\n )}\n <span style={{\n fontSize: 13, fontWeight: 400,\n lineHeight: 1.2,\n color: 'var(--Grey-Muted, #808183)',\n }}>\n {card.time}\n </span>\n </div>\n </div>\n\n {/* Frame 39: Play/Pause icon + text — horizontal, gap: 8 */}\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8, width: '100%' }}>\n <button\n onClick={() => handleDemoTurnPlayPause(i)}\n style={{\n background: 'none', border: 'none',\n cursor: 'pointer', padding: 0,\n flexShrink: 0,\n display: 'flex',\n }}\n >\n {isActive ? (\n <PauseCircle size={17} color=\"#2E3236\" strokeWidth={1.5} />\n ) : (\n <PlayCircle size={17} color=\"#808183\" strokeWidth={1} />\n )}\n </button>\n <p style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n margin: 0,\n flex: 1,\n }}>\n {card.text}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n});\n\nexport default UpdatedInteractionRecording;\n"],"names":["fmtTime","seconds","m","s","DEMO_SEGMENTS","DEMO_TRANSCRIPT","UpdatedInteractionRecording","forwardRef","audioUrl","timelineSegments","durationSeconds","currentTimeSeconds","timelinePlaying","playbackRate","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","audioRef","transcript","highlightedTurns","activeTurnIndex","activeDemoIndex","turnObservations","setExpandedSignals","onTurnPlayPause","ref","scrollRef","useRef","demoSeekTime","setDemoSeekTime","useState","demoRate","setDemoRate","demoPlaying","setDemoPlaying","showSpeedMenu","setShowSpeedMenu","activeDemoIdx","setActiveDemoIdx","computeActiveIdx","timeSec","i","turnTime","parseTimeStr","timeStr","parts","SPEED_OPTIONS","isDemo","activeRate","activePlaying","useImperativeHandle","handleSeek","idx","cards","_a","timeSeconds","clamped","handleTogglePlay","prev","handleSeekBack","handleSeekForward","handleSetRate","rate","handleDemoTurnPlayPause","formatTimeRange","startMs","endMs","fmt","ms","minutes","turns","_b","obs","el","demoDuration","effectiveTime","progress","demoCurrentTime","jsxs","jsx","RotateCcw","Pause","Play","RotateCw","ChevronDown","speed","Fragment","Timeline","rect","clickX","seekTime","speaker","rowIdx","e","pct","seg","ChevronLeft","ChevronRight","TranscriptCard","card","isActive","isCustomer","AudioLines","PauseCircle","PlayCircle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdatedInteractionRecording.es.js","sources":["../src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx"],"sourcesContent":["import { useRef, useState, forwardRef, useImperativeHandle } from 'react';\nimport {\n Play, Pause, RotateCcw, RotateCw,\n ChevronDown,\n AudioLines, PlayCircle, PauseCircle,\n} from 'lucide-react';\nimport Timeline from '../media/Timeline.jsx';\nimport TranscriptCard from '../media/TranscriptCard.jsx';\n\nfunction fmtTime(seconds) {\n const m = Math.floor(seconds / 60);\n const s = Math.round(seconds % 60);\n return `${m}:${s.toString().padStart(2, '0')}`;\n}\n\n/* ── Demo data for static preview ── */\nconst DEMO_SEGMENTS = {\n David: [\n { start: 0, end: 0.08 },\n { start: 0.18, end: 0.22 },\n { start: 0.38, end: 0.42 },\n { start: 0.55, end: 0.58 },\n { start: 0.68, end: 0.72 },\n { start: 0.82, end: 0.88 },\n { start: 0.94, end: 1 },\n ],\n Customer: [\n { start: 0.1, end: 0.16 },\n { start: 0.24, end: 0.36 },\n { start: 0.44, end: 0.52 },\n { start: 0.6, end: 0.66 },\n { start: 0.74, end: 0.80 },\n ],\n};\n\nconst DEMO_TRANSCRIPT = [\n { speaker: 'David', type: 'agent', time: '00:04', text: 'Thanks for calling Miles Point S Pensau. This is Steve. How can I help you?' },\n { speaker: 'Customer', type: 'customer', time: '00:12', text: 'Hi, Steve. This is Sandra with Botai Catering.' },\n { speaker: 'David', type: 'agent', time: '00:18', text: 'Hello. How are you?' },\n { speaker: 'Customer', type: 'customer', time: '00:20', text: \"I'm doing really good. Hey. I brought my vans in last week, and I call it a beeping van, the one that beeps when you back up. Makes the crunchy noise. So I just took it on Saturday after, I think I had the, the Miles. I picked it up on Saturday morning, and I went to an event. So So I don't know if it's the tire or something, but makes it a little crunchy noise. Sometimes when I do the brake, but only if I turn the wheel too.\" },\n { speaker: 'David', type: 'agent', time: '00:21', text: 'Oh, interesting. Okay. Can you swing by with it one of these days?' },\n];\n\n/* ── Component ── */\nconst UpdatedInteractionRecording = forwardRef(function UpdatedInteractionRecording({\n audioUrl,\n timelineSegments = [],\n durationSeconds = 0,\n currentTimeSeconds = 0,\n timelinePlaying = false,\n playbackRate = 1,\n onSeek,\n onTogglePlay,\n onSeekBack,\n onSeekForward,\n onSetPlaybackRate,\n audioRef,\n transcript,\n highlightedTurns = new Set(),\n activeTurnIndex,\n activeDemoIndex = 1,\n turnObservations = {},\n setExpandedSignals,\n onTurnPlayPause,\n}, ref) {\n const scrollRef = useRef(null);\n const [demoSeekTime, setDemoSeekTime] = useState(null);\n const [demoRate, setDemoRate] = useState(playbackRate || 1);\n const [demoPlaying, setDemoPlaying] = useState(timelinePlaying);\n const [showSpeedMenu, setShowSpeedMenu] = useState(false);\n const [activeDemoIdx, setActiveDemoIdx] = useState(activeDemoIndex);\n\n /* Compute which transcript card matches current playback time */\n const computeActiveIdx = (timeSec) => {\n for (let i = DEMO_TRANSCRIPT.length - 1; i >= 0; i--) {\n const turnTime = parseTimeStr(DEMO_TRANSCRIPT[i].time);\n if (timeSec >= turnTime) return i;\n }\n return 0;\n };\n\n const parseTimeStr = (timeStr) => {\n if (!timeStr) return 0;\n const parts = timeStr.split(':').map(Number);\n return (parts[0] || 0) * 60 + (parts[1] || 0);\n };\n\n const SPEED_OPTIONS = [1, 1.25, 1.5, 2];\n const isDemo = !audioUrl;\n const activeRate = isDemo ? demoRate : playbackRate;\n const activePlaying = isDemo ? demoPlaying : timelinePlaying;\n\n /* Expose seekTo for parent to call via ref */\n useImperativeHandle(ref, () => ({\n seekTo: (timeSec) => {\n handleSeek(timeSec);\n setDemoPlaying(true);\n // Scroll to matching transcript card\n const idx = computeActiveIdx(timeSec);\n setActiveDemoIdx(idx);\n setTimeout(() => {\n const cards = scrollRef.current?.children;\n if (cards?.[idx]) {\n cards[idx].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }, 50);\n },\n }));\n\n /* Handle seek — updates local demo state or calls parent onSeek */\n const handleSeek = (timeSeconds) => {\n const clamped = Math.max(0, Math.min(timeSeconds, durationSeconds || 156));\n if (onSeek) onSeek(clamped);\n setDemoSeekTime(clamped);\n setActiveDemoIdx(computeActiveIdx(clamped));\n };\n\n const handleTogglePlay = () => {\n if (onTogglePlay) onTogglePlay();\n else setDemoPlaying((prev) => !prev);\n };\n\n const handleSeekBack = () => {\n if (onSeekBack) onSeekBack();\n else handleSeek(Math.max(0, (demoSeekTime ?? 0) - 10));\n };\n\n const handleSeekForward = () => {\n if (onSeekForward) onSeekForward();\n else {\n const demoDur = durationSeconds || 156;\n handleSeek(Math.min(demoDur, (demoSeekTime ?? 0) + 10));\n }\n };\n\n const handleSetRate = (rate) => {\n if (onSetPlaybackRate) onSetPlaybackRate(rate);\n setDemoRate(rate);\n setShowSpeedMenu(false);\n };\n\n /* Handle transcript card play/pause */\n const handleDemoTurnPlayPause = (idx) => {\n if (activeDemoIdx === idx && demoPlaying) {\n setDemoPlaying(false);\n } else {\n const turnTime = parseTimeStr(DEMO_TRANSCRIPT[idx]?.time);\n setActiveDemoIdx(idx);\n setDemoPlaying(true);\n handleSeek(turnTime);\n }\n };\n\n /* transcript turn builder */\n const formatTimeRange = (startMs, endMs) => {\n if (startMs == null) return undefined;\n const fmt = (ms) => {\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n };\n return `${fmt(startMs)}\\u2013${endMs != null ? fmt(endMs) : fmt(startMs)}`;\n };\n\n const turns = transcript?.messages?.length\n ? transcript.messages.map((m, i) => ({\n actor: m.actor === 'agent' ? (transcript.actor_map?.agent || 'Agent') : (transcript.actor_map?.customer || 'Customer'),\n actorType: m.actor === 'agent' ? 'agent' : 'customer',\n text: m.text || '',\n timeRange: formatTimeRange(m.start ?? m.start_ms, m.end ?? m.end_ms),\n isHighlighted: highlightedTurns.has(i),\n highlightColor: timelinePlaying && activeTurnIndex === i\n ? (m.actor === 'agent' ? 'var(--rail-outcome)' : 'var(--rail-discovery)')\n : undefined,\n observations: (turnObservations[i] || []).map((obs) => ({\n ...obs,\n onClick: () => {\n setExpandedSignals?.((prev) => new Set([...prev, obs.signalKey]));\n setTimeout(() => {\n const el = document.getElementById(`signal-${obs.signalKey}`);\n if (el) el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }, 100);\n },\n })),\n }))\n : null;\n\n const demoDuration = durationSeconds || 156;\n const effectiveTime = demoSeekTime != null ? demoSeekTime : (durationSeconds > 0 ? currentTimeSeconds : 0);\n const progress = demoDuration > 0 ? (effectiveTime / demoDuration) * 100 : 0;\n const demoCurrentTime = Math.round(effectiveTime);\n\n return (\n <div style={{\n display: 'flex',\n padding: 24,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: 24,\n borderRadius: 8,\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n background: 'var(--Grey-White, #FFF)',\n }}>\n\n {/* ════════════════════════════════════════\n RECORDING SECTION\n ════════════════════════════════════════ */}\n <div style={{ width: '100%', display: 'flex', flexDirection: 'column', gap: 16 }}>\n\n {/* ── Row 1: Title + Controls — Figma: Frame 35, horizontal, space-between, center ── */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 24 }}>\n <span style={{\n fontSize: 15, fontWeight: 600,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n Recording\n </span>\n\n {/* Frame 34: controls — horizontal, gap: 12, center */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 12, flex: 1, justifyContent: 'center' }}>\n {/* Skip back 10s */}\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.2 }}>10</span>\n <button onClick={handleSeekBack} style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', alignItems: 'center' }}>\n <RotateCcw size={20} color=\"#808183\" strokeWidth={1.5} />\n </button>\n\n {/* Play / Pause — 32x32 dark circle */}\n <button onClick={handleTogglePlay} style={{\n background: 'var(--Grey-Strong, #2E3236)',\n border: 'none', cursor: 'pointer',\n width: 32, height: 32, borderRadius: 48,\n padding: 0,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n }}>\n {activePlaying\n ? <Pause size={14} color=\"#FFF\" fill=\"#FFF\" />\n : <Play size={14} color=\"#FFF\" fill=\"#FFF\" strokeWidth={1.5} style={{ marginLeft: 2 }} />\n }\n </button>\n\n {/* Skip forward 10s */}\n <button onClick={handleSeekForward} style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', alignItems: 'center' }}>\n <RotateCw size={20} color=\"#808183\" strokeWidth={1.5} />\n </button>\n <span style={{ fontSize: 13, fontWeight: 400, color: 'var(--Grey-Muted, #808183)', lineHeight: 1.2 }}>10</span>\n </div>\n\n {/* Speed pill with dropdown */}\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => setShowSpeedMenu((prev) => !prev)}\n style={{\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 20,\n padding: '0 5px 0 10px',\n height: 24,\n minWidth: 56,\n cursor: 'pointer',\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 4,\n }}\n >\n {activeRate}x\n <ChevronDown size={12} color=\"#808183\" />\n </button>\n\n {showSpeedMenu && (\n <div style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 4,\n background: 'var(--Grey-White, #FFF)',\n border: '1px solid var(--Grey-absent, #D9D9D9)',\n borderRadius: 8,\n boxShadow: '0 4px 12px rgba(0,0,0,0.1)',\n zIndex: 10,\n overflow: 'hidden',\n minWidth: 80,\n }}>\n {SPEED_OPTIONS.map((speed) => (\n <button\n key={speed}\n onClick={() => handleSetRate(speed)}\n style={{\n display: 'block',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n background: activeRate === speed ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n cursor: 'pointer',\n fontSize: 13,\n fontWeight: activeRate === speed ? 600 : 400,\n color: 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n textAlign: 'left',\n }}\n >\n {speed}x\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Row 2: Progress bar ── */}\n {audioUrl ? (\n <>\n <Timeline\n segments={timelineSegments}\n durationSeconds={durationSeconds}\n currentTimeSeconds={currentTimeSeconds}\n onSeek={onSeek}\n showControls={false}\n hasRecording\n timelinePlaying={timelinePlaying}\n playbackRate={playbackRate}\n />\n <audio ref={audioRef} preload=\"none\" style={{ display: 'none' }}>\n <source src={audioUrl} type=\"audio/mpeg\" />\n </audio>\n </>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* Time label + scrubber bar */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span style={{\n fontSize: 13, fontWeight: 600,\n color: progress > 0 ? 'var(--Green-Primary, #00925F)' : 'var(--Grey-Strong, #2E3236)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n minWidth: 60,\n }}>\n {fmtTime(demoCurrentTime)}\n </span>\n <div\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const pct = Math.max(0, Math.min(1, clickX / rect.width));\n const seekTime = pct * demoDuration;\n handleSeek(seekTime);\n }}\n style={{\n flex: 1, height: 16,\n position: 'relative',\n display: 'flex', alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n {/* Background track — Figma: #E3E1D7, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, right: 0,\n height: 4, borderRadius: 2,\n background: 'var(--rail-surface-2, #E3E1D7)',\n pointerEvents: 'none',\n }} />\n {/* Played portion — Figma: #00925F, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, top: '50%',\n transform: 'translateY(-50%)',\n width: `${progress}%`,\n height: 4, borderRadius: 2,\n background: 'var(--Green-Primary, #00925F)',\n pointerEvents: 'none',\n }} />\n {/* Scrubber handle — Figma ellipse */}\n <svg\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n left: `${progress}%`,\n top: '50%',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n }}\n >\n <path\n d=\"M7.875 1C11.6572 1 14.75 4.1191 14.75 8C14.75 11.8809 11.6572 15 7.875 15C4.09284 15 1 11.8809 1 8C1 4.1191 4.09284 1 7.875 1Z\"\n fill=\"#FFF\"\n stroke=\"#00925F\"\n strokeWidth=\"2\"\n />\n </svg>\n </div>\n </div>\n\n {/* ── Row 3: Speaker timeline bars + playback indicator ── */}\n <div style={{ position: 'relative', paddingBottom: 30, cursor: 'pointer' }}>\n {['David', 'Customer'].map((speaker, rowIdx) => (\n <div key={speaker} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n height: 20,\n marginBottom: rowIdx === 0 ? 4 : 0,\n }}>\n <span style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Muted, #808183)',\n fontFamily: 'var(--font-sans)',\n lineHeight: 1.2,\n minWidth: 60,\n }}>\n {speaker}\n </span>\n <div\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));\n handleSeek(pct * demoDuration);\n }}\n style={{\n flex: 1, height: 6,\n position: 'relative', borderRadius: 3,\n cursor: 'pointer',\n }}\n >\n {/* Thin baseline — Figma: #E3E1D7, stroke w=4 */}\n <div style={{\n position: 'absolute', left: 0, right: 0,\n top: '50%', transform: 'translateY(-50%)',\n height: 4, borderRadius: 2,\n background: 'var(--rail-surface-2, #E3E1D7)',\n }} />\n {/* Speech segments */}\n {DEMO_SEGMENTS[speaker].map((seg, i) => (\n <div key={i} style={{\n position: 'absolute',\n left: `${seg.start * 100}%`,\n width: `${(seg.end - seg.start) * 100}%`,\n top: 0, bottom: 0, borderRadius: 3,\n background: speaker === 'David'\n ? 'var(--Grey-Strong, #2E3236)'\n : 'var(--Grey-Muted, #808183)',\n }} />\n ))}\n </div>\n </div>\n ))}\n\n {/* ── Playback position: dotted line + avatar + time tooltip ── */}\n <div style={{\n position: 'absolute',\n left: 68, /* 60 label + 8 gap */\n right: 0,\n top: 0,\n bottom: 0,\n pointerEvents: 'none',\n }}>\n {/* Dotted vertical line */}\n <div style={{\n position: 'absolute',\n left: `${progress}%`,\n top: 0,\n height: 44, /* spans both rows */\n transform: 'translateX(-50%)',\n borderLeft: '1.5px dashed var(--Grey-Muted, #808183)',\n opacity: 0.5,\n }} />\n\n {/* Time tooltip — Figma: Frame 30, bg=#2E3236, pad 4 6, r=4, 14px/600/#FFF */}\n <div style={{\n position: 'absolute',\n left: `${progress}%`,\n bottom: 0,\n transform: 'translateX(-50%)',\n background: 'var(--Grey-Strong, #2E3236)',\n color: 'var(--Grey-White, #FFF)',\n fontSize: 14, fontWeight: 600,\n lineHeight: 1.2,\n padding: '4px 6px',\n borderRadius: 4,\n whiteSpace: 'nowrap',\n }}>\n {fmtTime(demoCurrentTime)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* ════════════════════════════════════════\n TRANSCRIPT SECTION\n ════════════════════════════════════════ */}\n {/* Figma: Frame 49, vertical, gap: 16 */}\n <div style={{\n width: '100%',\n display: 'flex', flexDirection: 'column', gap: 16,\n }}>\n {/* ── Header: Transcript ── */}\n <div style={{\n borderBottom: '1px solid var(--Grey-absent, #D9D9D9)',\n paddingBottom: 16,\n }}>\n <span style={{\n fontSize: 14, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n }}>\n Transcript\n </span>\n </div>\n\n {/* ── Cards ── */}\n {turns ? (\n <div id=\"transcript-container\" ref={scrollRef} style={{ maxHeight: 600, overflowY: 'auto' }}>\n <TranscriptCard\n turns={turns}\n audioUrl={audioUrl}\n activeTurnIndex={activeTurnIndex}\n autoScrollActiveTurn={timelinePlaying}\n isExternalPlaying={timelinePlaying}\n onTurnPlayPause={onTurnPlayPause}\n />\n </div>\n ) : (\n <div ref={scrollRef} style={{\n display: 'flex', flexDirection: 'column',\n maxHeight: 600, overflowY: 'auto',\n }}>\n {DEMO_TRANSCRIPT.map((card, i) => {\n const isActive = i === activeDemoIdx && demoPlaying;\n const isCustomer = card.type === 'customer';\n\n return (\n <div key={i} style={{\n display: 'flex',\n padding: 16,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: 16,\n alignSelf: 'stretch',\n borderTop: i > 0 ? '1px solid var(--Grey-absent, #D9D9D9)' : 'none',\n background: isActive ? 'var(--surface-hover, #F3F7F7)' : 'var(--Grey-White, #FFF)',\n }}>\n {/* Frame 40: Speaker name + time — horizontal, space-between, center */}\n <div style={{\n display: 'flex', alignItems: 'center',\n justifyContent: 'space-between', width: '100%',\n gap: 8,\n }}>\n <span style={{\n fontSize: 14, fontWeight: 600,\n lineHeight: 1.2,\n color: isCustomer ? 'var(--Grey-Strong, #2E3236)' : 'var(--Grey-Muted, #808183)',\n }}>\n {card.speaker}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {isActive && (\n <>\n <AudioLines size={12} color=\"#2E3236\" />\n <AudioLines size={12} color=\"#2E3236\" />\n </>\n )}\n <span style={{\n fontSize: 13, fontWeight: 400,\n lineHeight: 1.2,\n color: 'var(--Grey-Muted, #808183)',\n }}>\n {card.time}\n </span>\n </div>\n </div>\n\n {/* Frame 39: Play/Pause icon + text — horizontal, gap: 8 */}\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 8, width: '100%' }}>\n <button\n onClick={() => handleDemoTurnPlayPause(i)}\n style={{\n background: 'none', border: 'none',\n cursor: 'pointer', padding: 0,\n flexShrink: 0,\n display: 'flex',\n }}\n >\n {isActive ? (\n <PauseCircle size={17} color=\"#2E3236\" strokeWidth={1.5} />\n ) : (\n <PlayCircle size={17} color=\"#808183\" strokeWidth={1} />\n )}\n </button>\n <p style={{\n fontSize: 13, fontWeight: 400,\n color: 'var(--Grey-Strong, #2E3236)',\n lineHeight: 1.2,\n margin: 0,\n flex: 1,\n }}>\n {card.text}\n </p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n});\n\nexport default UpdatedInteractionRecording;\n"],"names":["fmtTime","seconds","m","s","DEMO_SEGMENTS","DEMO_TRANSCRIPT","UpdatedInteractionRecording","forwardRef","audioUrl","timelineSegments","durationSeconds","currentTimeSeconds","timelinePlaying","playbackRate","onSeek","onTogglePlay","onSeekBack","onSeekForward","onSetPlaybackRate","audioRef","transcript","highlightedTurns","activeTurnIndex","activeDemoIndex","turnObservations","setExpandedSignals","onTurnPlayPause","ref","scrollRef","useRef","demoSeekTime","setDemoSeekTime","useState","demoRate","setDemoRate","demoPlaying","setDemoPlaying","showSpeedMenu","setShowSpeedMenu","activeDemoIdx","setActiveDemoIdx","computeActiveIdx","timeSec","i","turnTime","parseTimeStr","timeStr","parts","SPEED_OPTIONS","isDemo","activeRate","activePlaying","useImperativeHandle","handleSeek","idx","cards","_a","timeSeconds","clamped","handleTogglePlay","prev","handleSeekBack","handleSeekForward","handleSetRate","rate","handleDemoTurnPlayPause","formatTimeRange","startMs","endMs","fmt","ms","minutes","turns","_b","obs","el","demoDuration","effectiveTime","progress","demoCurrentTime","jsxs","jsx","RotateCcw","Pause","Play","RotateCw","ChevronDown","speed","Fragment","Timeline","rect","clickX","seekTime","speaker","rowIdx","e","pct","seg","TranscriptCard","card","isActive","isCustomer","AudioLines","PauseCircle","PlayCircle"],"mappings":"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"}
|