chordia-ui 3.3.8 → 3.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/AgentLiftCard.cjs.js.map +1 -1
  2. package/dist/AgentLiftCard.es.js +5 -3
  3. package/dist/AgentLiftCard.es.js.map +1 -1
  4. package/dist/CustomFilterChips.cjs.js.map +1 -1
  5. package/dist/CustomFilterChips.es.js +2 -1
  6. package/dist/CustomFilterChips.es.js.map +1 -1
  7. package/dist/FileUploadingState.cjs.js.map +1 -1
  8. package/dist/FileUploadingState.es.js +16 -10
  9. package/dist/FileUploadingState.es.js.map +1 -1
  10. package/dist/IntegrationCard.cjs.js.map +1 -1
  11. package/dist/IntegrationCard.es.js +3 -3
  12. package/dist/IntegrationCard.es.js.map +1 -1
  13. package/dist/SectionLabel.cjs.js.map +1 -1
  14. package/dist/SectionLabel.es.js.map +1 -1
  15. package/dist/SmallButton.cjs.js.map +1 -1
  16. package/dist/SmallButton.es.js +16 -16
  17. package/dist/SmallButton.es.js.map +1 -1
  18. package/dist/SummarySection.cjs.js.map +1 -1
  19. package/dist/SummarySection.es.js +11 -9
  20. package/dist/SummarySection.es.js.map +1 -1
  21. package/dist/TextInput.cjs.js.map +1 -1
  22. package/dist/TextInput.es.js.map +1 -1
  23. package/dist/Timeline.cjs.js.map +1 -1
  24. package/dist/Timeline.es.js +14 -8
  25. package/dist/Timeline.es.js.map +1 -1
  26. package/dist/Tooltip.cjs.js +1 -1
  27. package/dist/Tooltip.cjs.js.map +1 -1
  28. package/dist/Tooltip.es.js +31 -20
  29. package/dist/Tooltip.es.js.map +1 -1
  30. package/dist/TourGuideTooltip.cjs.js.map +1 -1
  31. package/dist/TourGuideTooltip.es.js +2 -1
  32. package/dist/TourGuideTooltip.es.js.map +1 -1
  33. package/dist/UpdatedInteractionRecording.cjs.js +1 -1
  34. package/dist/UpdatedInteractionRecording.cjs.js.map +1 -1
  35. package/dist/UpdatedInteractionRecording.es.js +79 -97
  36. package/dist/UpdatedInteractionRecording.es.js.map +1 -1
  37. package/dist/UploadInteraction.cjs.js.map +1 -1
  38. package/dist/UploadInteraction.es.js.map +1 -1
  39. package/dist/colors.cjs.js +2 -0
  40. package/dist/colors.cjs.js.map +1 -0
  41. package/dist/colors.es.js +2 -0
  42. package/dist/colors.es.js.map +1 -0
  43. package/dist/components/UpdatedInteractionDetails.cjs.js +10 -1
  44. package/dist/components/UpdatedInteractionDetails.cjs.js.map +1 -1
  45. package/dist/components/UpdatedInteractionDetails.es.js +1531 -9
  46. package/dist/components/UpdatedInteractionDetails.es.js.map +1 -1
  47. package/dist/components/chat.cjs.js +30 -1
  48. package/dist/components/chat.cjs.js.map +1 -1
  49. package/dist/components/chat.es.js +2222 -7
  50. package/dist/components/chat.es.js.map +1 -1
  51. package/dist/components/common.cjs.js +1 -1
  52. package/dist/components/common.es.js +32 -25
  53. package/dist/components/common.es.js.map +1 -1
  54. package/dist/components/data.cjs.js +1 -1
  55. package/dist/components/data.cjs.js.map +1 -1
  56. package/dist/components/data.es.js +1033 -4
  57. package/dist/components/data.es.js.map +1 -1
  58. package/dist/components/layout.cjs.js +3 -1
  59. package/dist/components/layout.cjs.js.map +1 -1
  60. package/dist/components/layout.es.js +1533 -8
  61. package/dist/components/layout.es.js.map +1 -1
  62. package/dist/components/login.cjs.js +1 -1
  63. package/dist/components/login.es.js +6 -2
  64. package/dist/components/login.es.js.map +1 -1
  65. package/dist/components/media.cjs.js +1 -1
  66. package/dist/components/media.cjs.js.map +1 -1
  67. package/dist/components/media.es.js +220 -6
  68. package/dist/components/media.es.js.map +1 -1
  69. package/dist/components/models.cjs.js +1 -1
  70. package/dist/components/models.cjs.js.map +1 -1
  71. package/dist/components/models.es.js +91 -2
  72. package/dist/components/models.es.js.map +1 -1
  73. package/dist/components/navigation.cjs.js +1 -1
  74. package/dist/components/navigation.cjs.js.map +1 -1
  75. package/dist/components/navigation.es.js +766 -7
  76. package/dist/components/navigation.es.js.map +1 -1
  77. package/dist/components/notifications.cjs.js +1 -1
  78. package/dist/components/notifications.cjs.js.map +1 -1
  79. package/dist/components/notifications.es.js +368 -3
  80. package/dist/components/notifications.es.js.map +1 -1
  81. package/dist/components/onboarding.cjs.js +1 -1
  82. package/dist/components/onboarding.cjs.js.map +1 -1
  83. package/dist/components/onboarding.es.js +985 -7
  84. package/dist/components/onboarding.es.js.map +1 -1
  85. package/dist/components/primitives.cjs.js +1 -1
  86. package/dist/components/primitives.cjs.js.map +1 -1
  87. package/dist/components/primitives.es.js +635 -25
  88. package/dist/components/primitives.es.js.map +1 -1
  89. package/dist/debugger-wc.cjs.js +4 -4
  90. package/dist/debugger-wc.cjs.js.map +1 -1
  91. package/dist/debugger-wc.es.js +15 -11
  92. package/dist/debugger-wc.es.js.map +1 -1
  93. package/dist/index.cjs.js +1 -1
  94. package/dist/index.cjs2.js +2 -49
  95. package/dist/index.cjs2.js.map +1 -1
  96. package/dist/index.cjs3.js +50 -0
  97. package/dist/index.cjs3.js.map +1 -0
  98. package/dist/index.es.js +104 -99
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.es2.js +2632 -1776
  101. package/dist/index.es2.js.map +1 -1
  102. package/dist/index.es3.js +1944 -0
  103. package/dist/index.es3.js.map +1 -0
  104. package/dist/pages/interactionDetails.cjs.js +1 -1
  105. package/dist/pages/interactionDetails.cjs.js.map +1 -1
  106. package/dist/pages/interactionDetails.es.js +70 -47
  107. package/dist/pages/interactionDetails.es.js.map +1 -1
  108. package/dist/sortable.esm.cjs.js +1 -1
  109. package/dist/sortable.esm.cjs.js.map +1 -1
  110. package/dist/sortable.esm.es.js +55 -53
  111. package/dist/sortable.esm.es.js.map +1 -1
  112. package/dist/{chordia-ui.css → style.css} +1 -1
  113. package/package.json +1 -1
  114. package/src/components/UpdatedInteractionDetails/UpdatedInteractionDetails.jsx +318 -77
  115. package/src/components/UpdatedInteractionDetails/UpdatedInteractionRecording.jsx +7 -17
  116. package/dist/ChartRenderer.cjs.js +0 -31
  117. package/dist/ChartRenderer.cjs.js.map +0 -1
  118. package/dist/ChartRenderer.es.js +0 -2210
  119. package/dist/ChartRenderer.es.js.map +0 -1
  120. package/dist/GettingStarted.cjs.js +0 -2
  121. package/dist/GettingStarted.cjs.js.map +0 -1
  122. package/dist/GettingStarted.es.js +0 -983
  123. package/dist/GettingStarted.es.js.map +0 -1
  124. package/dist/InlineConfirm.cjs.js +0 -2
  125. package/dist/InlineConfirm.cjs.js.map +0 -1
  126. package/dist/InlineConfirm.es.js +0 -618
  127. package/dist/InlineConfirm.es.js.map +0 -1
  128. package/dist/InteractionSummaryCard.cjs.js +0 -2
  129. package/dist/InteractionSummaryCard.cjs.js.map +0 -1
  130. package/dist/InteractionSummaryCard.es.js +0 -216
  131. package/dist/InteractionSummaryCard.es.js.map +0 -1
  132. package/dist/LoginPage.cjs.js +0 -3
  133. package/dist/LoginPage.cjs.js.map +0 -1
  134. package/dist/LoginPage.es.js +0 -2618
  135. package/dist/LoginPage.es.js.map +0 -1
  136. package/dist/NavigationBar.cjs.js +0 -2
  137. package/dist/NavigationBar.cjs.js.map +0 -1
  138. package/dist/NavigationBar.es.js +0 -762
  139. package/dist/NavigationBar.es.js.map +0 -1
  140. package/dist/NotificationPanel.cjs.js +0 -2
  141. package/dist/NotificationPanel.cjs.js.map +0 -1
  142. package/dist/NotificationPanel.es.js +0 -371
  143. package/dist/NotificationPanel.es.js.map +0 -1
  144. package/dist/OverlayPanel.cjs.js +0 -2
  145. package/dist/OverlayPanel.cjs.js.map +0 -1
  146. package/dist/OverlayPanel.es.js +0 -93
  147. package/dist/OverlayPanel.es.js.map +0 -1
  148. package/dist/SplitPane.cjs.js +0 -4
  149. package/dist/SplitPane.cjs.js.map +0 -1
  150. package/dist/SplitPane.es.js +0 -1531
  151. package/dist/SplitPane.es.js.map +0 -1
  152. package/dist/SummaryStatsPanel.cjs.js +0 -2
  153. package/dist/SummaryStatsPanel.cjs.js.map +0 -1
  154. package/dist/SummaryStatsPanel.es.js +0 -1027
  155. package/dist/SummaryStatsPanel.es.js.map +0 -1
  156. package/dist/UpdatedInteractionDetails.cjs.js +0 -11
  157. package/dist/UpdatedInteractionDetails.cjs.js.map +0 -1
  158. package/dist/UpdatedInteractionDetails.es.js +0 -1310
  159. package/dist/UpdatedInteractionDetails.es.js.map +0 -1
@@ -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 { T as Fe, a 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,77 +23,80 @@ 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);
57
- if (e >= o) return n;
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
+ if (e >= o)
58
+ return n;
58
59
  }
59
60
  return 0;
60
61
  }, P = (e) => {
61
- if (!e) return 0;
62
+ if (!e)
63
+ return 0;
62
64
  const n = e.split(":").map(Number);
63
65
  return (n[0] || 0) * 60 + (n[1] || 0);
64
- }, 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;
65
67
  ge(J, () => ({
66
68
  seekTo: (e) => {
67
69
  c(e), m(!0);
68
70
  const n = $(e);
69
- D(n), setTimeout(() => {
71
+ C(n), setTimeout(() => {
70
72
  var i;
71
- const o = (i = u.current) == null ? void 0 : i.children;
73
+ const o = (i = S.current) == null ? void 0 : i.children;
72
74
  o != null && o[n] && o[n].scrollIntoView({ behavior: "smooth", block: "nearest" });
73
75
  }, 50);
74
76
  }
75
77
  }));
76
78
  const c = (e) => {
77
79
  const n = Math.max(0, Math.min(e, g || 156));
78
- w && w(n), Q(n), D($(n));
80
+ F && F(n), Q(n), C($(n));
79
81
  }, re = () => {
80
- W ? W() : m((e) => !e);
82
+ T ? T() : m((e) => !e);
81
83
  }, ie = () => {
82
- T ? T() : c(Math.max(0, (y ?? 0) - 10));
84
+ W ? W() : c(Math.max(0, (f ?? 0) - 10));
83
85
  }, se = () => {
84
- R ? R() : c(Math.min(g || 156, (y ?? 0) + 10));
86
+ M ? M() : c(Math.min(g || 156, (f ?? 0) + 10));
85
87
  }, ae = (e) => {
86
- M && M(e), ee(e), z(!1);
88
+ R && R(e), ee(e), z(!1);
87
89
  }, le = (e) => {
88
90
  var n;
89
- if (H === e && C)
91
+ if (H === e && D)
90
92
  m(!1);
91
93
  else {
92
- const o = P((n = b[e]) == null ? void 0 : n.time);
93
- 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);
94
96
  }
95
97
  }, de = (e, n) => {
96
- if (e == null) return;
98
+ if (e == null)
99
+ return;
97
100
  const o = (i) => {
98
101
  const s = Math.floor(i / 6e4), h = Math.floor(i % 6e4 / 1e3);
99
102
  return `${s.toString().padStart(2, "0")}:${h.toString().padStart(2, "0")}`;
@@ -111,14 +114,14 @@ const Se = {
111
114
  observations: (Z[n] || []).map((s) => ({
112
115
  ...s,
113
116
  onClick: () => {
114
- S == null || S((h) => /* @__PURE__ */ new Set([...h, s.signalKey])), setTimeout(() => {
117
+ w == null || w((h) => /* @__PURE__ */ new Set([...h, s.signalKey])), setTimeout(() => {
115
118
  const h = document.getElementById(`signal-${s.signalKey}`);
116
119
  h && h.scrollIntoView({ behavior: "smooth", block: "nearest" });
117
120
  }, 100);
118
121
  }
119
122
  }))
120
123
  };
121
- }) : 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);
122
125
  return /* @__PURE__ */ r("div", { style: {
123
126
  display: "flex",
124
127
  padding: 24,
@@ -152,7 +155,7 @@ const Se = {
152
155
  alignItems: "center",
153
156
  justifyContent: "center"
154
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 } }) }),
155
- /* @__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 }) }),
156
159
  /* @__PURE__ */ t("span", { style: { fontSize: 13, fontWeight: 400, color: "var(--Grey-Muted, #808183)", lineHeight: 1.2 }, children: "10" })
157
160
  ] }),
158
161
  /* @__PURE__ */ r("div", { style: { position: "relative" }, children: [
@@ -181,7 +184,7 @@ const Se = {
181
184
  children: [
182
185
  I,
183
186
  "x",
184
- /* @__PURE__ */ t(me, { size: 12, color: "#808183" })
187
+ /* @__PURE__ */ t(ye, { size: 12, color: "#808183" })
185
188
  ]
186
189
  }
187
190
  ),
@@ -223,36 +226,36 @@ const Se = {
223
226
  )) })
224
227
  ] })
225
228
  ] }),
226
- a ? /* @__PURE__ */ r(L, { children: [
229
+ a ? /* @__PURE__ */ r(X, { children: [
227
230
  /* @__PURE__ */ t(
228
- Fe,
231
+ xe,
229
232
  {
230
- segments: k,
233
+ segments: x,
231
234
  durationSeconds: g,
232
235
  currentTimeSeconds: G,
233
- onSeek: w,
236
+ onSeek: F,
234
237
  showControls: !1,
235
238
  hasRecording: !0,
236
239
  timelinePlaying: l,
237
- playbackRate: F
240
+ playbackRate: k
238
241
  }
239
242
  ),
240
- /* @__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" }) })
241
244
  ] }) : /* @__PURE__ */ r("div", { style: { display: "flex", flexDirection: "column", gap: 12 }, children: [
242
245
  /* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
243
246
  /* @__PURE__ */ t("span", { style: {
244
247
  fontSize: 13,
245
248
  fontWeight: 600,
246
- color: p > 0 ? "var(--Green-Primary, #00925F)" : "var(--Grey-Strong, #2E3236)",
249
+ color: u > 0 ? "var(--Green-Primary, #00925F)" : "var(--Grey-Strong, #2E3236)",
247
250
  fontFamily: "var(--font-sans)",
248
251
  lineHeight: 1.2,
249
252
  minWidth: 60
250
- }, children: N(_) }),
253
+ }, children: Y(_) }),
251
254
  /* @__PURE__ */ r(
252
255
  "div",
253
256
  {
254
257
  onClick: (e) => {
255
- 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;
256
259
  c(s);
257
260
  },
258
261
  style: {
@@ -278,7 +281,7 @@ const Se = {
278
281
  left: 0,
279
282
  top: "50%",
280
283
  transform: "translateY(-50%)",
281
- width: `${p}%`,
284
+ width: `${u}%`,
282
285
  height: 4,
283
286
  borderRadius: 2,
284
287
  background: "var(--Green-Primary, #00925F)",
@@ -294,7 +297,7 @@ const Se = {
294
297
  xmlns: "http://www.w3.org/2000/svg",
295
298
  style: {
296
299
  position: "absolute",
297
- left: `${p}%`,
300
+ left: `${u}%`,
298
301
  top: "50%",
299
302
  transform: "translate(-50%, -50%)",
300
303
  pointerEvents: "none"
@@ -335,7 +338,7 @@ const Se = {
335
338
  {
336
339
  onClick: (o) => {
337
340
  const i = o.currentTarget.getBoundingClientRect(), s = Math.max(0, Math.min(1, (o.clientX - i.left) / i.width));
338
- c(s * v);
341
+ c(s * y);
339
342
  },
340
343
  style: {
341
344
  flex: 1,
@@ -355,7 +358,7 @@ const Se = {
355
358
  borderRadius: 2,
356
359
  background: "var(--rail-surface-2, #E3E1D7)"
357
360
  } }),
358
- Se[e].map((o, i) => /* @__PURE__ */ t("div", { style: {
361
+ Fe[e].map((o, i) => /* @__PURE__ */ t("div", { style: {
359
362
  position: "absolute",
360
363
  left: `${o.start * 100}%`,
361
364
  width: `${(o.end - o.start) * 100}%`,
@@ -379,7 +382,7 @@ const Se = {
379
382
  }, children: [
380
383
  /* @__PURE__ */ t("div", { style: {
381
384
  position: "absolute",
382
- left: `${p}%`,
385
+ left: `${u}%`,
383
386
  top: 0,
384
387
  height: 44,
385
388
  /* spans both rows */
@@ -389,7 +392,7 @@ const Se = {
389
392
  } }),
390
393
  /* @__PURE__ */ t("div", { style: {
391
394
  position: "absolute",
392
- left: `${p}%`,
395
+ left: `${u}%`,
393
396
  bottom: 0,
394
397
  transform: "translateX(-50%)",
395
398
  background: "var(--Grey-Strong, #2E3236)",
@@ -400,7 +403,7 @@ const Se = {
400
403
  padding: "4px 6px",
401
404
  borderRadius: 4,
402
405
  whiteSpace: "nowrap"
403
- }, children: N(_) })
406
+ }, children: Y(_) })
404
407
  ] })
405
408
  ] })
406
409
  ] })
@@ -411,38 +414,17 @@ const Se = {
411
414
  flexDirection: "column",
412
415
  gap: 16
413
416
  }, children: [
414
- /* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [
415
- /* @__PURE__ */ t("span", { style: {
416
- fontSize: 14,
417
- fontWeight: 400,
418
- color: "var(--Grey-Strong, #2E3236)",
419
- lineHeight: 1.2
420
- }, children: "Transcript" }),
421
- /* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 12, marginLeft: "auto" }, children: [
422
- /* @__PURE__ */ t("button", { onClick: () => {
423
- var e;
424
- return (e = u.current) == null ? void 0 : e.scrollBy({ top: -200, behavior: "smooth" });
425
- }, style: {
426
- background: "none",
427
- border: "none",
428
- cursor: "pointer",
429
- padding: 0,
430
- display: "flex"
431
- }, children: /* @__PURE__ */ t(ve, { size: 16, color: "#808183", strokeWidth: 1.5 }) }),
432
- /* @__PURE__ */ t("button", { onClick: () => {
433
- var e;
434
- return (e = u.current) == null ? void 0 : e.scrollBy({ top: 200, behavior: "smooth" });
435
- }, style: {
436
- background: "none",
437
- border: "none",
438
- cursor: "pointer",
439
- padding: 0,
440
- display: "flex"
441
- }, children: /* @__PURE__ */ t(be, { size: 16, color: "#808183", strokeWidth: 1.5 }) })
442
- ] })
443
- ] }),
444
- j ? /* @__PURE__ */ t("div", { id: "transcript-container", ref: u, style: { maxHeight: 600, overflowY: "auto" }, children: /* @__PURE__ */ t(
445
- 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,
446
428
  {
447
429
  turns: j,
448
430
  audioUrl: a,
@@ -451,13 +433,13 @@ const Se = {
451
433
  isExternalPlaying: l,
452
434
  onTurnPlayPause: q
453
435
  }
454
- ) }) : /* @__PURE__ */ t("div", { ref: u, style: {
436
+ ) }) : /* @__PURE__ */ t("div", { ref: S, style: {
455
437
  display: "flex",
456
438
  flexDirection: "column",
457
439
  maxHeight: 600,
458
440
  overflowY: "auto"
459
- }, children: b.map((e, n) => {
460
- 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";
461
443
  return /* @__PURE__ */ r("div", { style: {
462
444
  display: "flex",
463
445
  padding: 16,
@@ -465,7 +447,7 @@ const Se = {
465
447
  alignItems: "flex-start",
466
448
  gap: 16,
467
449
  alignSelf: "stretch",
468
- border: "1px solid var(--Grey-absent, #D9D9D9)",
450
+ borderTop: n > 0 ? "1px solid var(--Grey-absent, #D9D9D9)" : "none",
469
451
  background: o ? "var(--surface-hover, #F3F7F7)" : "var(--Grey-White, #FFF)"
470
452
  }, children: [
471
453
  /* @__PURE__ */ r("div", { style: {
@@ -482,9 +464,9 @@ const Se = {
482
464
  color: i ? "var(--Grey-Strong, #2E3236)" : "var(--Grey-Muted, #808183)"
483
465
  }, children: e.speaker }),
484
466
  /* @__PURE__ */ r("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
485
- o && /* @__PURE__ */ r(L, { children: [
486
- /* @__PURE__ */ t(X, { size: 12, color: "#2E3236" }),
487
- /* @__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" })
488
470
  ] }),
489
471
  /* @__PURE__ */ t("span", { style: {
490
472
  fontSize: 13,
@@ -507,7 +489,7 @@ const Se = {
507
489
  flexShrink: 0,
508
490
  display: "flex"
509
491
  },
510
- 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 })
511
493
  }
512
494
  ),
513
495
  /* @__PURE__ */ t("p", { style: {
@@ -525,6 +507,6 @@ const Se = {
525
507
  ] });
526
508
  });
527
509
  export {
528
- We as U
510
+ Ie as U
529
511
  };
530
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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"}