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.
@@ -1,12 +1,12 @@
1
- import { jsxs as r, jsx as t, Fragment as L } from "react/jsx-runtime";
2
- import { forwardRef as ce, useRef as he, useState as f, useImperativeHandle as ge } from "react";
3
- import { RotateCcw as ue, Pause as pe, Play as fe, RotateCw as ye, ChevronDown as me, ChevronLeft as ve, ChevronRight as be, AudioLines as X, PauseCircle as xe, PlayCircle as ke } from "lucide-react";
4
- import { a as Fe, T as we } from "./Timeline.es.js";
5
- function N(x) {
6
- const a = Math.floor(x / 60), k = Math.round(x % 60);
7
- return `${a}:${k.toString().padStart(2, "0")}`;
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 Se = {
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
- }, b = [
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
- ], We = ce(function({
32
+ ], Ie = ce(function({
33
33
  audioUrl: a,
34
- timelineSegments: k = [],
34
+ timelineSegments: x = [],
35
35
  durationSeconds: g = 0,
36
36
  currentTimeSeconds: G = 0,
37
37
  timelinePlaying: l = !1,
38
- playbackRate: F = 1,
39
- onSeek: w,
40
- onTogglePlay: W,
41
- onSeekBack: T,
42
- onSeekForward: R,
43
- onSetPlaybackRate: M,
44
- audioRef: Y,
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: S,
50
+ setExpandedSignals: w,
51
51
  onTurnPlayPause: q
52
52
  }, J) {
53
53
  var O;
54
- const u = he(null), [y, Q] = f(null), [U, ee] = f(F || 1), [C, m] = f(l), [te, z] = f(!1), [H, D] = f(V), $ = (e) => {
55
- for (let n = b.length - 1; n >= 0; n--) {
56
- const o = P(b[n].time);
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 : F, oe = B ? C : l;
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
- D(n), setTimeout(() => {
71
+ C(n), setTimeout(() => {
72
72
  var i;
73
- const o = (i = u.current) == null ? void 0 : i.children;
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
- w && w(n), Q(n), D($(n));
80
+ F && F(n), Q(n), C($(n));
81
81
  }, re = () => {
82
- W ? W() : m((e) => !e);
82
+ T ? T() : m((e) => !e);
83
83
  }, ie = () => {
84
- T ? T() : c(Math.max(0, (y ?? 0) - 10));
84
+ W ? W() : c(Math.max(0, (f ?? 0) - 10));
85
85
  }, se = () => {
86
- R ? R() : c(Math.min(g || 156, (y ?? 0) + 10));
86
+ M ? M() : c(Math.min(g || 156, (f ?? 0) + 10));
87
87
  }, ae = (e) => {
88
- M && M(e), ee(e), z(!1);
88
+ R && R(e), ee(e), z(!1);
89
89
  }, le = (e) => {
90
90
  var n;
91
- if (H === e && C)
91
+ if (H === e && D)
92
92
  m(!1);
93
93
  else {
94
- const o = P((n = b[e]) == null ? void 0 : n.time);
95
- D(e), m(!0), c(o);
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
- S == null || S((h) => /* @__PURE__ */ new Set([...h, s.signalKey])), setTimeout(() => {
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, v = g || 156, A = y ?? (g > 0 ? G : 0), p = v > 0 ? A / v * 100 : 0, _ = Math.round(A);
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(ye, { size: 20, color: "#808183", strokeWidth: 1.5 }) }),
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(me, { size: 12, color: "#808183" })
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(L, { children: [
229
+ a ? /* @__PURE__ */ r(X, { children: [
230
230
  /* @__PURE__ */ t(
231
- Fe,
231
+ xe,
232
232
  {
233
- segments: k,
233
+ segments: x,
234
234
  durationSeconds: g,
235
235
  currentTimeSeconds: G,
236
- onSeek: w,
236
+ onSeek: F,
237
237
  showControls: !1,
238
238
  hasRecording: !0,
239
239
  timelinePlaying: l,
240
- playbackRate: F
240
+ playbackRate: k
241
241
  }
242
242
  ),
243
- /* @__PURE__ */ t("audio", { ref: Y, preload: "none", style: { display: "none" }, children: /* @__PURE__ */ t("source", { src: a, type: "audio/mpeg" }) })
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: p > 0 ? "var(--Green-Primary, #00925F)" : "var(--Grey-Strong, #2E3236)",
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: N(_) }),
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)) * v;
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: `${p}%`,
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: `${p}%`,
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 * v);
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
- Se[e].map((o, i) => /* @__PURE__ */ t("div", { style: {
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: `${p}%`,
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: `${p}%`,
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: N(_) })
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__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [
418
- /* @__PURE__ */ t("span", { style: {
419
- fontSize: 14,
420
- fontWeight: 400,
421
- color: "var(--Grey-Strong, #2E3236)",
422
- lineHeight: 1.2
423
- }, children: "Transcript" }),
424
- /* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 12, marginLeft: "auto" }, children: [
425
- /* @__PURE__ */ t("button", { onClick: () => {
426
- var e;
427
- return (e = u.current) == null ? void 0 : e.scrollBy({ top: -200, behavior: "smooth" });
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: u, style: {
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: b.map((e, n) => {
463
- const o = n === H && C, i = e.type === "customer";
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
- border: "1px solid var(--Grey-absent, #D9D9D9)",
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(L, { children: [
489
- /* @__PURE__ */ t(X, { size: 12, color: "#2E3236" }),
490
- /* @__PURE__ */ t(X, { size: 12, color: "#2E3236" })
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(xe, { size: 17, color: "#2E3236", strokeWidth: 1.5 }) : /* @__PURE__ */ t(ke, { size: 17, color: "#808183", strokeWidth: 1 })
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
- We as U
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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"}