@flowengage/react-chatbot 8.0.130 → 8.0.132

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.
@@ -34,72 +34,72 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
34
34
  agentName: "flowengage.agentName",
35
35
  agentHeadshot: "flowengage.agentHeadshot",
36
36
  visitorEmail: "flowengage.visitorEmail"
37
- }, ee = 6e4, te = 480 * 60, ne = 3e4, j = typeof window < "u", re = (e) => e ? `flowengage.visitorEmail.${e}` : null, ie = () => {
37
+ }, ee = 6e4, te = 480 * 60, ne = 3e4, j = typeof window < "u", M = (e) => e ? `flowengage.visitorEmail.${e}` : null, re = () => {
38
38
  if (!j) return null;
39
39
  let e = window.localStorage.getItem(A.chatId);
40
40
  return e && String(e).trim() ? String(e).trim() : null;
41
- }, ae = () => {
41
+ }, ie = () => {
42
42
  if (j) try {
43
43
  window.localStorage.removeItem(A.chatId);
44
44
  } catch {}
45
- }, oe = () => j ? typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(16).slice(2)}` : "server-chat-id", M = (e) => e ? `flowengage.entrySeen.${e}` : null, se = (e) => {
45
+ }, ae = () => j ? typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(16).slice(2)}` : "server-chat-id", N = (e) => e ? `flowengage.entrySeen.${e}` : null, oe = (e) => {
46
46
  if (!j || !e) return !1;
47
47
  try {
48
- let t = M(e);
48
+ let t = N(e);
49
49
  return t ? window.localStorage.getItem(t) === "1" : !1;
50
50
  } catch {
51
51
  return !1;
52
52
  }
53
- }, N = (e) => {
53
+ }, se = (e) => {
54
54
  if (!(!j || !e)) try {
55
- let t = M(e);
55
+ let t = N(e);
56
56
  t && window.localStorage.setItem(t, "1");
57
57
  } catch {}
58
- }, ce = (e) => e ? `flowengage.navPreference.${e}` : null, P = (e) => e ? `flowengage.navPreferencePromptShown.${e}` : null, le = (e) => {
58
+ }, P = (e) => e ? `flowengage.navPreference.${e}` : null, F = (e) => e ? `flowengage.navPreferencePromptShown.${e}` : null, ce = (e) => {
59
59
  if (!j || !e) return null;
60
60
  try {
61
- let t = ce(e), n = t ? window.localStorage.getItem(t) : null;
61
+ let t = P(e), n = t ? window.localStorage.getItem(t) : null;
62
62
  return n === "auto" || n === "ask" ? n : null;
63
63
  } catch {
64
64
  return null;
65
65
  }
66
- }, ue = (e, t) => {
66
+ }, le = (e, t) => {
67
67
  if (!(!j || !e || t !== "auto" && t !== "ask")) try {
68
- let n = ce(e);
69
- n && window.localStorage.setItem(n, t), fe(e);
68
+ let n = P(e);
69
+ n && window.localStorage.setItem(n, t), de(e);
70
70
  } catch {}
71
- }, de = (e) => {
71
+ }, ue = (e) => {
72
72
  if (!j || !e) return !1;
73
73
  try {
74
- let t = P(e);
74
+ let t = F(e);
75
75
  return t ? window.localStorage.getItem(t) === "1" : !1;
76
76
  } catch {
77
77
  return !1;
78
78
  }
79
- }, fe = (e) => {
79
+ }, de = (e) => {
80
80
  if (!(!j || !e)) try {
81
- let t = P(e);
81
+ let t = F(e);
82
82
  t && window.localStorage.setItem(t, "1");
83
83
  } catch {}
84
- }, pe = (e) => e ? `flowengage.persistedChatId.${e}` : null, me = (e) => {
84
+ }, fe = (e) => e ? `flowengage.persistedChatId.${e}` : null, pe = (e) => {
85
85
  if (!j || !e) return null;
86
86
  try {
87
- let t = pe(e), n = t ? window.localStorage.getItem(t) : null;
87
+ let t = fe(e), n = t ? window.localStorage.getItem(t) : null;
88
88
  return n && String(n).trim() ? String(n).trim() : null;
89
89
  } catch {
90
90
  return null;
91
91
  }
92
- }, he = (e) => {
92
+ }, me = (e) => {
93
93
  if (!(!j || !e)) try {
94
- let t = pe(e);
94
+ let t = fe(e);
95
95
  t && window.localStorage.removeItem(t);
96
96
  } catch {}
97
- }, ge = (e, t) => {
97
+ }, he = (e, t) => {
98
98
  if (!(!j || !e || !t)) try {
99
- let n = pe(e);
99
+ let n = fe(e);
100
100
  n && window.localStorage.setItem(n, String(t).trim());
101
101
  } catch {}
102
- }, _e = () => j ? {
102
+ }, ge = () => j ? {
103
103
  isOpen: !1,
104
104
  activeScreen: window.sessionStorage.getItem(A.activeScreen) || "ai",
105
105
  isHumanHandled: window.sessionStorage.getItem(A.isHumanHandled) === "true",
@@ -113,7 +113,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
113
113
  agentName: null,
114
114
  agentHeadshot: null,
115
115
  visitorEmail: ""
116
- }, ve = (e) => {
116
+ }, _e = (e) => {
117
117
  j && Object.entries(e).forEach(([e, t]) => {
118
118
  let n = A[e];
119
119
  if (n) {
@@ -124,17 +124,17 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
124
124
  window.sessionStorage.setItem(n, String(t));
125
125
  }
126
126
  });
127
- }, ye = (e) => {
127
+ }, ve = (e) => {
128
128
  if (!j || !e) return "";
129
- let t = re(e), n = window.localStorage.getItem(t);
129
+ let t = M(e), n = window.localStorage.getItem(t);
130
130
  if (!n) {
131
131
  let e = window.sessionStorage.getItem(A.visitorEmail);
132
132
  e && (window.localStorage.setItem(t, e), window.sessionStorage.removeItem(A.visitorEmail), n = e);
133
133
  }
134
134
  return n || "";
135
- }, be = (e, t) => {
135
+ }, ye = (e, t) => {
136
136
  if (!j) return;
137
- let n = re(t);
137
+ let n = M(t);
138
138
  if (!n) return;
139
139
  let r = typeof e == "string" ? e.trim() : "";
140
140
  if (!r) {
@@ -142,91 +142,91 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
142
142
  return;
143
143
  }
144
144
  window.localStorage.setItem(n, r), window.sessionStorage.removeItem(A.visitorEmail);
145
- }, xe = (e) => e ? `flowengage.visitorId.${e}` : null, Se = () => `v_${Date.now().toString(36)}_${typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID().replace(/-/g, "").slice(0, 16) : Math.random().toString(36).slice(2, 18)}`, F = (e) => {
145
+ }, be = (e) => e ? `flowengage.visitorId.${e}` : null, xe = () => `v_${Date.now().toString(36)}_${typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID().replace(/-/g, "").slice(0, 16) : Math.random().toString(36).slice(2, 18)}`, I = (e) => {
146
146
  if (!j || !e) return null;
147
147
  try {
148
- let t = xe(e), n = t ? window.localStorage.getItem(t) : null;
148
+ let t = be(e), n = t ? window.localStorage.getItem(t) : null;
149
149
  return n && String(n).trim() ? String(n).trim() : null;
150
150
  } catch {
151
151
  return null;
152
152
  }
153
- }, I = (e) => {
153
+ }, L = (e) => {
154
154
  if (!j || !e) return null;
155
155
  try {
156
- let t = F(e);
156
+ let t = I(e);
157
157
  if (t) return t;
158
- let n = Se(), r = xe(e);
158
+ let n = xe(), r = be(e);
159
159
  return r && window.localStorage.setItem(r, n), n;
160
160
  } catch {
161
- return Se();
161
+ return xe();
162
162
  }
163
- }, L = "flowengage.tabId", Ce = () => {
163
+ }, R = "flowengage.tabId", Se = () => {
164
164
  if (!j) return "default";
165
165
  try {
166
- let e = window.sessionStorage.getItem(L);
167
- return e || (e = typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID().replace(/-/g, "").slice(0, 12) : Math.random().toString(36).slice(2, 14), window.sessionStorage.setItem(L, e)), e;
166
+ let e = window.sessionStorage.getItem(R);
167
+ return e || (e = typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID().replace(/-/g, "").slice(0, 12) : Math.random().toString(36).slice(2, 14), window.sessionStorage.setItem(R, e)), e;
168
168
  } catch {
169
169
  return "default";
170
170
  }
171
- }, we = (e) => e ? `flowengage.voice.transcript.${e}.${Ce()}` : null, Te = 600 * 1e3, Ee = (e, t, n = {}) => {
171
+ }, Ce = (e) => e ? `flowengage.voice.transcript.${e}.${Se()}` : null, we = 600 * 1e3, Te = (e, t, n = {}) => {
172
172
  if (!j || !e) return;
173
173
  let r = typeof t == "string" ? t.trim() : "";
174
174
  if (!r) return;
175
- let i = Number.isFinite(n.ttlMs) ? n.ttlMs : Te, a = {
175
+ let i = Number.isFinite(n.ttlMs) ? n.ttlMs : we, a = {
176
176
  transcript: r,
177
177
  expiresAt: Date.now() + i
178
178
  };
179
179
  try {
180
- let t = we(e);
180
+ let t = Ce(e);
181
181
  t && window.localStorage.setItem(t, JSON.stringify(a));
182
182
  } catch {}
183
- }, De = (e) => {
183
+ }, Ee = (e) => {
184
184
  if (!j || !e) return null;
185
185
  try {
186
- let t = we(e), n = t ? window.localStorage.getItem(t) : null;
186
+ let t = Ce(e), n = t ? window.localStorage.getItem(t) : null;
187
187
  if (!n) return null;
188
188
  let r = JSON.parse(n);
189
189
  return !r || typeof r.transcript != "string" ? null : Number.isFinite(r.expiresAt) && Date.now() > r.expiresAt ? (window.localStorage.removeItem(t), null) : r;
190
190
  } catch {
191
191
  return null;
192
192
  }
193
- }, Oe = (e) => {
193
+ }, De = (e) => {
194
194
  if (!(!j || !e)) try {
195
- let t = we(e);
195
+ let t = Ce(e);
196
196
  t && window.localStorage.removeItem(t);
197
197
  } catch {}
198
- }, ke = "flowengage.voice.pendingResume", Ae = () => {
198
+ }, Oe = "flowengage.voice.pendingResume", ke = () => {
199
199
  if (j) try {
200
- window.sessionStorage.setItem(ke, "1");
200
+ window.sessionStorage.setItem(Oe, "1");
201
201
  } catch {}
202
- }, je = () => {
202
+ }, Ae = () => {
203
203
  if (!j) return !1;
204
204
  try {
205
- return window.sessionStorage.getItem(ke) === "1" ? (window.sessionStorage.removeItem(ke), !0) : !1;
205
+ return window.sessionStorage.getItem(Oe) === "1" ? (window.sessionStorage.removeItem(Oe), !0) : !1;
206
206
  } catch {
207
207
  return !1;
208
208
  }
209
- }, Me = "flowengage.chat.pendingReopen", Ne = () => {
209
+ }, je = "flowengage.chat.pendingReopen", Me = () => {
210
210
  if (j) try {
211
- window.sessionStorage.setItem(Me, "1");
211
+ window.sessionStorage.setItem(je, "1");
212
212
  } catch {}
213
- }, Pe = () => {
213
+ }, Ne = () => {
214
214
  if (!j) return !1;
215
215
  try {
216
- return window.sessionStorage.getItem(Me) === "1" ? (window.sessionStorage.removeItem(Me), !0) : !1;
216
+ return window.sessionStorage.getItem(je) === "1" ? (window.sessionStorage.removeItem(je), !0) : !1;
217
217
  } catch {
218
218
  return !1;
219
219
  }
220
- }, Fe = () => {
220
+ }, Pe = () => {
221
221
  if (!j) return !1;
222
222
  try {
223
- return window.sessionStorage.getItem(ke) === "1";
223
+ return window.sessionStorage.getItem(Oe) === "1";
224
224
  } catch {
225
225
  return !1;
226
226
  }
227
- }, Ie = (e) => e ? `flowengage.voice.navState.${e}.${Ce()}` : null, Le = (e, t, n, r) => {
227
+ }, Fe = (e) => e ? `flowengage.voice.navState.${e}.${Se()}` : null, Ie = (e, t, n, r) => {
228
228
  if (!(!j || !e || !t)) try {
229
- let i = Ie(e);
229
+ let i = Fe(e);
230
230
  i && window.sessionStorage.setItem(i, JSON.stringify({
231
231
  previousPage: String(t),
232
232
  targetPath: n ? new URL(String(n), window.location.href).pathname : null,
@@ -234,10 +234,10 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
234
234
  ts: Date.now()
235
235
  }));
236
236
  } catch {}
237
- }, Re = (e) => {
237
+ }, Le = (e) => {
238
238
  if (!j || !e) return null;
239
239
  try {
240
- let t = Ie(e);
240
+ let t = Fe(e);
241
241
  if (!t) return null;
242
242
  let n = window.sessionStorage.getItem(t);
243
243
  if (!n) return null;
@@ -250,14 +250,14 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
250
250
  } catch {
251
251
  return null;
252
252
  }
253
- }, R = async (e) => {
253
+ }, z = async (e) => {
254
254
  let t = await e.json().catch(() => ({}));
255
255
  if (!e.ok) {
256
256
  let n = Error(t.message || t.error || `Request failed with status ${e.status}`);
257
257
  throw n.status = e.status, n;
258
258
  }
259
259
  return t;
260
- }, ze = async (e, t = {}) => {
260
+ }, Re = async (e, t = {}) => {
261
261
  try {
262
262
  return await fetch(e, {
263
263
  mode: "cors",
@@ -267,9 +267,9 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
267
267
  let n = /* @__PURE__ */ Error(`Network error reaching ${e}. Check: (1) backend is running, (2) CORS allows this origin, (3) siteId is correct. Original: ${t.message}`);
268
268
  throw n.status = 0, n.cause = t, n;
269
269
  }
270
- }, Be = async ({ apiBaseUrl: e, userId: t, siteId: n, priorChatId: r = null, forceNew: i = !1, resumeChatId: a = null, visitorId: o = null }) => {
270
+ }, ze = async ({ apiBaseUrl: e, userId: t, siteId: n, priorChatId: r = null, forceNew: i = !1, resumeChatId: a = null, visitorId: o = null }) => {
271
271
  let s = `${e}/api/visitors/resolve-session`, c = { siteId: n };
272
- return r && String(r).trim() && (c.priorChatId = String(r).trim()), i && (c.forceNew = !0), a && (c.resumeChatId = a), o && (c.visitorId = o), R(await ze(s, {
272
+ return r && String(r).trim() && (c.priorChatId = String(r).trim()), i && (c.forceNew = !0), a && (c.resumeChatId = a), o && (c.visitorId = o), z(await Re(s, {
273
273
  method: "POST",
274
274
  mode: "cors",
275
275
  headers: {
@@ -280,13 +280,13 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
280
280
  },
281
281
  body: JSON.stringify(c)
282
282
  }));
283
- }, Ve = async ({ apiBaseUrl: e, siteId: t }) => {
283
+ }, Be = async ({ apiBaseUrl: e, siteId: t }) => {
284
284
  let n = typeof window < "u" ? window.location.origin : "http://localhost";
285
- return (await R(await ze(`${e}/api/widget/chatbot-loader?${new URLSearchParams({
285
+ return (await z(await Re(`${e}/api/widget/chatbot-loader?${new URLSearchParams({
286
286
  siteId: t,
287
287
  origin: n
288
288
  }).toString()}`, { method: "GET" }))).data;
289
- }, z = ({ apiBaseUrl: e, userId: t, siteId: n, visitorId: r = null }) => {
289
+ }, Ve = ({ apiBaseUrl: e, userId: t, siteId: n, visitorId: r = null }) => {
290
290
  let i = (t, n) => {
291
291
  let r = `${e}${t}`, i = JSON.stringify(n);
292
292
  if (typeof navigator < "u" && navigator.sendBeacon) try {
@@ -300,7 +300,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
300
300
  headers: { "Content-Type": "application/json" },
301
301
  body: i
302
302
  }).catch(() => {}), !0) : !1;
303
- }, a = async (i, a = {}) => R(await ze(`${e}${i}`, {
303
+ }, a = async (i, a = {}) => z(await Re(`${e}${i}`, {
304
304
  ...a,
305
305
  headers: {
306
306
  "Content-Type": "application/json",
@@ -315,7 +315,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
315
315
  ...n ? { "x-site-id": n } : {},
316
316
  ...a.headers || {}
317
317
  };
318
- return R(await ze(`${e}${r}`, {
318
+ return z(await Re(`${e}${r}`, {
319
319
  ...a,
320
320
  body: i,
321
321
  headers: o
@@ -346,7 +346,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
346
346
  method: "POST",
347
347
  body: JSON.stringify(f)
348
348
  });
349
- let p = await ze(`${e}/api/ai/chat`, {
349
+ let p = await Re(`${e}/api/ai/chat`, {
350
350
  method: "POST",
351
351
  headers: {
352
352
  "Content-Type": "application/json",
@@ -359,7 +359,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
359
359
  stream: !0
360
360
  })
361
361
  });
362
- if (!(p.headers.get("content-type") || "").includes("text/event-stream")) return R(p);
362
+ if (!(p.headers.get("content-type") || "").includes("text/event-stream")) return z(p);
363
363
  let m = p.body.getReader(), h = new TextDecoder(), g = "", _ = null, v = (e) => {
364
364
  let t = e.split("\n").find((e) => e.startsWith("data: "));
365
365
  if (t) try {
@@ -475,7 +475,7 @@ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, b = Object.g
475
475
  });
476
476
  },
477
477
  async getIceServersConfig() {
478
- return R(await ze(`${e}/api/calls/ice-config`, {
478
+ return z(await Re(`${e}/api/calls/ice-config`, {
479
479
  method: "GET",
480
480
  headers: {
481
481
  "x-user-id": t,
@@ -2881,7 +2881,7 @@ async function Ar(e, t = {}) {
2881
2881
  reason: "already-on-page"
2882
2882
  };
2883
2883
  let a = i.pathname + i.search + i.hash;
2884
- if (window.Shopify) return n && br(n), r || Ne(), r ? kr().then(() => window.location.assign(i.href)) : window.location.assign(i.href), { navigated: !0 };
2884
+ if (window.Shopify) return n && br(n), r || Me(), r ? kr().then(() => window.location.assign(i.href)) : window.location.assign(i.href), { navigated: !0 };
2885
2885
  let o = window.next?.router;
2886
2886
  if (o?.push) return new Promise((e) => {
2887
2887
  let t = () => {
@@ -2900,11 +2900,11 @@ async function Ar(e, t = {}) {
2900
2900
  try {
2901
2901
  window.history.pushState({}, "", e), window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
2902
2902
  } catch {}
2903
- return n && br(n), r || Ne(), window.location.assign(i.href), { navigated: !0 };
2903
+ return n && br(n), r || Me(), window.location.assign(i.href), { navigated: !0 };
2904
2904
  }
2905
2905
  return { navigated: !0 };
2906
2906
  }
2907
- return n && br(n), r || Ne(), window.location.assign(i.href), { navigated: !0 };
2907
+ return n && br(n), r || Me(), window.location.assign(i.href), { navigated: !0 };
2908
2908
  } catch (t) {
2909
2909
  console.warn("[FlowEngage] shadowNavigate error:", t), n && br(n);
2910
2910
  try {
@@ -3325,7 +3325,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3325
3325
  message: "Looks like you're already on this page!",
3326
3326
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
3327
3327
  }]);
3328
- }, []), [D, O] = m(_e().isOpen), [k, A] = m(_e().activeScreen), [j, re] = m(_e().isHumanHandled), [M, se] = m(_e().agentName), [N, ce] = m(_e().agentHeadshot), [P, ue] = m(() => ye(i?.siteId)), [pe, xe] = m(!1), [Se, F] = m(!1), [L, Ce] = m("idle"), [we, Te] = m(!1), [Ee, De] = m(!1), [Oe, ke] = m(""), [je, Me] = m(!1), [Ne, Pe] = m(0), [Fe, Ie] = m(0), [Le, Re] = m(!1), [R, ze] = m(null), [B, He] = m(null), [Ue, V] = m("idle"), [We, Ge] = m(null), [Ke, qe] = m(!1), [Je, Ye] = m(""), [Xe, Ze] = m(!1), H = p(null), U = p(null), Qe = p(""), $e = p(!1), W = p(null), et = p(null), tt = p(null), nt = p(null), rt = p(null), it = p(null), at = p(null), ot = p(!1), st = p({
3328
+ }, []), [D, O] = m(ge().isOpen), [k, A] = m(ge().activeScreen), [j, M] = m(ge().isHumanHandled), [N, oe] = m(ge().agentName), [se, P] = m(ge().agentHeadshot), [F, le] = m(() => ve(i?.siteId)), [fe, be] = m(!1), [xe, I] = m(!1), [R, Se] = m("idle"), [Ce, we] = m(!1), [Te, Ee] = m(!1), [De, Oe] = m(""), [Ae, je] = m(!1), [Me, Ne] = m(0), [Pe, Fe] = m(0), [Ie, Le] = m(!1), [z, Re] = m(null), [B, He] = m(null), [Ue, V] = m("idle"), [We, Ge] = m(null), [Ke, qe] = m(!1), [Je, Ye] = m(""), [Xe, Ze] = m(!1), H = p(null), U = p(null), Qe = p(""), $e = p(!1), W = p(null), et = p(null), tt = p(null), nt = p(null), rt = p(null), it = p(null), at = p(null), ot = p(!1), st = p({
3329
3329
  url: null,
3330
3330
  at: 0
3331
3331
  }), ct = o((e, t) => {
@@ -3342,23 +3342,23 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3342
3342
  url: n,
3343
3343
  at: Date.now()
3344
3344
  }, Ar(e, t));
3345
- }, []), G = p([]), lt = p(null), ut = p(null), dt = p(null), ft = p(!1), pt = p(!1), mt = p(""), ht = p(null), gt = p(null), _t = p([]), vt = p(0), yt = p(M), bt = p([]), xt = p(!1), St = p(!1), Ct = p(i), wt = p({
3345
+ }, []), G = p([]), lt = p(null), ut = p(null), dt = p(null), ft = p(!1), pt = p(!1), mt = p(""), ht = p(null), gt = p(null), _t = p([]), vt = p(0), yt = p(N), bt = p([]), xt = p(!1), St = p(!1), Ct = p(i), wt = p({
3346
3346
  notifyRouteChange: () => {},
3347
3347
  cleanup: () => {}
3348
3348
  }), Tt = o((e = {}) => {
3349
3349
  let t = !!e.is_human_handled;
3350
- return re(t), t ? (A("agent"), e.agent_info?.name && se(e.agent_info.name), e.agent_info?.headshot && ce(e.agent_info.headshot), t) : (A("ai"), t);
3350
+ return M(t), t ? (A("agent"), e.agent_info?.name && oe(e.agent_info.name), e.agent_info?.headshot && P(e.agent_info.headshot), t) : (A("ai"), t);
3351
3351
  }, []), Et = f(() => {
3352
3352
  let e = _?.widgetSettings?.call?.maxDurationSeconds ?? i?.widgetSettings?.call?.maxDurationSeconds ?? i?.callMaxDurationSeconds, t = Number(e);
3353
3353
  return Number.isFinite(t) && t > 0 ? t : te;
3354
3354
  }, [i, _]);
3355
3355
  c(() => {
3356
- et.current = R;
3357
- }, [R]), c(() => {
3358
- yt.current = M;
3359
- }, [M]), c(() => {
3360
- St.current = je;
3361
- }, [je]), c(() => {
3356
+ et.current = z;
3357
+ }, [z]), c(() => {
3358
+ yt.current = N;
3359
+ }, [N]), c(() => {
3360
+ St.current = Ae;
3361
+ }, [Ae]), c(() => {
3362
3362
  Ct.current = i;
3363
3363
  }, [i]);
3364
3364
  let Dt = () => {
@@ -3367,17 +3367,17 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3367
3367
  dt.current &&= (window.clearTimeout(dt.current), null);
3368
3368
  }, []), kt = (e) => {
3369
3369
  let t = typeof e == "string" ? e.trim().toLowerCase() : "";
3370
- return ue(t), be(t, i?.siteId), t;
3370
+ return le(t), ye(t, i?.siteId), t;
3371
3371
  };
3372
3372
  c(() => {
3373
3373
  let e = i?.siteId;
3374
3374
  if (!e) return;
3375
- let t = ye(e);
3375
+ let t = ve(e);
3376
3376
  if (t) {
3377
- ue(t);
3377
+ le(t);
3378
3378
  return;
3379
3379
  }
3380
- ue((t) => (t && be(t, e), t));
3380
+ le((t) => (t && ye(t, e), t));
3381
3381
  }, [i?.siteId]);
3382
3382
  let At = (e = "unspecified") => {
3383
3383
  let t = lt.current || it.current?.callId, n = vt.current, r = ht.current;
@@ -3407,7 +3407,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3407
3407
  } catch {}
3408
3408
  gt.current = null;
3409
3409
  }
3410
- tt.current &&= (tt.current.close(), null), nt.current &&= (nt.current.getTracks().forEach((e) => e.stop()), null), rt.current &&= (rt.current.srcObject = null, rt.current.remove(), null), Ot(), it.current = null, G.current = [], lt.current = null, ut.current = null, ft.current = !1, qe(!1), ze(null), He(null), V("idle"), Ge(null);
3410
+ tt.current &&= (tt.current.close(), null), nt.current &&= (nt.current.getTracks().forEach((e) => e.stop()), null), rt.current &&= (rt.current.srcObject = null, rt.current.remove(), null), Ot(), it.current = null, G.current = [], lt.current = null, ut.current = null, ft.current = !1, qe(!1), Re(null), He(null), V("idle"), Ge(null);
3411
3411
  }, jt = (e = (/* @__PURE__ */ new Date()).toISOString()) => {
3412
3412
  let t = H.current, n = lt.current || it.current?.callId;
3413
3413
  if (!(!t?.connected || !n || ft.current)) {
@@ -3459,7 +3459,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3459
3459
  if (!e.callId) return;
3460
3460
  let t = ut.current === e.callId, n = lt.current === e.callId, r = et.current?.callId === e.callId;
3461
3461
  if (!(!t && !n && !r)) {
3462
- if (Ot(), ze(null), t || n) {
3462
+ if (Ot(), Re(null), t || n) {
3463
3463
  lt.current = e.callId, He(e.callId), V((e) => e === "connected" ? e : "connecting"), O(!0);
3464
3464
  return;
3465
3465
  }
@@ -3473,7 +3473,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3473
3473
  At();
3474
3474
  return;
3475
3475
  }
3476
- ut.current = null, it.current = null, G.current = [], ze(null), V("idle");
3476
+ ut.current = null, it.current = null, G.current = [], Re(null), V("idle");
3477
3477
  }
3478
3478
  }, Pt = async (e = {}) => {
3479
3479
  let t = tt.current, n = H.current, r = e.sdpOffer || e.offer?.sdp;
@@ -3507,44 +3507,44 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3507
3507
  });
3508
3508
  };
3509
3509
  c(() => {
3510
- ve({
3510
+ _e({
3511
3511
  isOpen: D,
3512
3512
  activeScreen: k,
3513
3513
  isHumanHandled: j,
3514
- agentName: M,
3515
- agentHeadshot: N
3514
+ agentName: N,
3515
+ agentHeadshot: se
3516
3516
  });
3517
3517
  }, [
3518
3518
  D,
3519
3519
  k,
3520
3520
  j,
3521
- M,
3522
- N
3521
+ N,
3522
+ se
3523
3523
  ]), c(() => {
3524
3524
  let e = !0;
3525
3525
  return (async () => {
3526
3526
  Ze(!0);
3527
3527
  try {
3528
- let t = E(i), n = await Ve(t);
3528
+ let t = E(i), n = await Be(t);
3529
3529
  if (!e) return;
3530
- let a = t.siteId, o = me(a), s = I(a), c = "";
3530
+ let a = t.siteId, o = pe(a), s = L(a), c = "";
3531
3531
  try {
3532
3532
  let e = $e.current, r = W.current;
3533
- if ($e.current = !1, W.current = null, c = (await Be({
3533
+ if ($e.current = !1, W.current = null, c = (await ze({
3534
3534
  apiBaseUrl: t.apiBaseUrl,
3535
3535
  userId: n.userId,
3536
3536
  siteId: a,
3537
- priorChatId: e || r ? null : o || ie(),
3537
+ priorChatId: e || r ? null : o || re(),
3538
3538
  forceNew: e,
3539
3539
  resumeChatId: r,
3540
3540
  visitorId: s
3541
3541
  }))?.data?.chatId, !c) throw Error("resolve-session returned no chatId");
3542
- ae(), ge(a, c);
3542
+ ie(), he(a, c);
3543
3543
  } catch (e) {
3544
- console.warn("[FlowEngageProvider] resolve-session failed, reusing persisted or ephemeral chat id", e?.message || e), c = o || oe(), ge(a, c);
3544
+ console.warn("[FlowEngageProvider] resolve-session failed, reusing persisted or ephemeral chat id", e?.message || e), c = o || ae(), he(a, c);
3545
3545
  }
3546
3546
  Qe.current = c;
3547
- let l = z({
3547
+ let l = Ve({
3548
3548
  apiBaseUrl: t.apiBaseUrl,
3549
3549
  userId: n.userId,
3550
3550
  siteId: t.siteId,
@@ -3561,23 +3561,23 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3561
3561
  siteId: t.siteId
3562
3562
  });
3563
3563
  H.current = f, f.on("connect", async () => {
3564
- Ce("connected");
3564
+ Se("connected");
3565
3565
  let e = Qe.current;
3566
3566
  if (e && U.current) try {
3567
3567
  Tt(await U.current.checkHumanHandled(e));
3568
3568
  } catch {}
3569
3569
  }), f.on("disconnect", () => {
3570
- Ce("disconnected");
3570
+ Se("disconnected");
3571
3571
  }), f.on("aiTyping", () => {
3572
- F(!0);
3572
+ I(!0);
3573
3573
  }), f.on("ai:typing", () => {
3574
- F(!0);
3574
+ I(!0);
3575
3575
  }), f.on("messageReceived", (e) => {
3576
3576
  let t = e.message || e, n = {
3577
3577
  ...t,
3578
3578
  message: fi(t.message)
3579
3579
  };
3580
- F(!1), xe(!1), !(n.type === "call_recording" || typeof n.message == "string" && n.message.includes("AI chat recording")) && S((e) => [...e.filter((e) => !e.isPending), {
3580
+ I(!1), be(!1), !(n.type === "call_recording" || typeof n.message == "string" && n.message.includes("AI chat recording")) && S((e) => [...e.filter((e) => !e.isPending), {
3581
3581
  ...n,
3582
3582
  isPending: !1,
3583
3583
  id: n.messageId || `${n.sender}-${Date.now()}-${Math.random()}`
@@ -3595,7 +3595,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3595
3595
  ...t,
3596
3596
  message: fi(t.message)
3597
3597
  };
3598
- F(!1), !(n.type === "call_recording" || typeof n.message == "string" && n.message.includes("AI chat recording")) && ((n.sender === "agent" || n.agent_name || n.sender === "ai" || n.sender === "bot") && xe(!1), S((e) => n.sender === "bot" || n.sender === "ai" ? [...e, {
3598
+ I(!1), !(n.type === "call_recording" || typeof n.message == "string" && n.message.includes("AI chat recording")) && ((n.sender === "agent" || n.agent_name || n.sender === "ai" || n.sender === "bot") && be(!1), S((e) => n.sender === "bot" || n.sender === "ai" ? [...e, {
3599
3599
  ...n,
3600
3600
  isPending: !1,
3601
3601
  id: n.messageId || `${n.sender}-${Date.now()}-${Math.random()}`
@@ -3607,11 +3607,11 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3607
3607
  ...n,
3608
3608
  isPending: !1,
3609
3609
  id: n.messageId || `${n.sender}-${Date.now()}-${Math.random()}`
3610
- }]), (n.sender === "agent" || n.agent_name) && (re(!0), A("agent"), se(_i([
3610
+ }]), (n.sender === "agent" || n.agent_name) && (M(!0), A("agent"), oe(_i([
3611
3611
  n.agent_name,
3612
3612
  n.agentName,
3613
3613
  n.metadata?.agentName
3614
- ], d)), n.sender_headshot && ce(n.sender_headshot), O(!0), Pe((e) => e + 1)));
3614
+ ], d)), n.sender_headshot && P(n.sender_headshot), O(!0), Ne((e) => e + 1)));
3615
3615
  });
3616
3616
  let p = (e = {}) => {
3617
3617
  let t = _i([
@@ -3620,7 +3620,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3620
3620
  e.agent_name,
3621
3621
  yt.current
3622
3622
  ], d);
3623
- re(!0), A("agent"), se(t), ce(e.agent?.headshot || null), O(!0), Pe((e) => e + 1), S((e) => vi(e, {
3623
+ M(!0), A("agent"), oe(t), P(e.agent?.headshot || null), O(!0), Ne((e) => e + 1), S((e) => vi(e, {
3624
3624
  id: `agent-joined-${Date.now()}`,
3625
3625
  sender: "system",
3626
3626
  message: `${t} has joined the chat.`,
@@ -3634,7 +3634,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3634
3634
  e.agent_name,
3635
3635
  yt.current
3636
3636
  ], d);
3637
- re(!1), A("ai"), S((e) => vi(e, {
3637
+ M(!1), A("ai"), S((e) => vi(e, {
3638
3638
  id: `agent-left-${Date.now()}`,
3639
3639
  sender: "system",
3640
3640
  message: `${t} has left the chat.`,
@@ -3643,7 +3643,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3643
3643
  }));
3644
3644
  };
3645
3645
  f.on("agent:joined", p), f.on("agentJoined", p), f.on("agent:left", m), f.on("agentLeft", m), f.on("conversationEnded", (e) => {
3646
- Re(!0);
3646
+ Le(!0);
3647
3647
  let t = e?.message || "This conversation has ended. Thank you for reaching out!";
3648
3648
  S((e) => [...e, {
3649
3649
  id: `conversation-ended-${Date.now()}`,
@@ -3654,15 +3654,15 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3654
3654
  }]);
3655
3655
  }), f.on("chat:history_update", (e) => {
3656
3656
  let t = pi(e.chat_history || []);
3657
- S(t), t.length === 0 && (Re(!1), re(!1), A("ai"), F(!1), xe(!1));
3657
+ S(t), t.length === 0 && (Le(!1), M(!1), A("ai"), I(!1), be(!1));
3658
3658
  }), f.on("conversation:reset", () => {
3659
- S([]), Re(!1), re(!1), A("ai"), F(!1), xe(!1);
3659
+ S([]), Le(!1), M(!1), A("ai"), I(!1), be(!1);
3660
3660
  }), f.on("voice:end_session", (e = {}) => {
3661
- console.log("[FlowEngageProvider] voice:end_session received — ending voice session"), Ie((e) => e + 1), O(!0), Pe((e) => e + 1);
3661
+ console.log("[FlowEngageProvider] voice:end_session received — ending voice session"), Fe((e) => e + 1), O(!0), Ne((e) => e + 1);
3662
3662
  }), f.on("typing:start", (e) => {
3663
- e.sender === "agent" && xe(!0);
3663
+ e.sender === "agent" && be(!0);
3664
3664
  }), f.on("typing:stop", (e) => {
3665
- e.sender === "agent" && xe(!1);
3665
+ e.sender === "agent" && be(!1);
3666
3666
  }), f.on("call:incoming", (e = {}) => {
3667
3667
  let t = _i([
3668
3668
  e.agentName,
@@ -3670,12 +3670,12 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3670
3670
  e.agent?.name,
3671
3671
  yt.current
3672
3672
  ], "Agent");
3673
- Dt(), Ot(), ft.current = !1, ze({
3673
+ Dt(), Ot(), ft.current = !1, Re({
3674
3674
  callId: e.callId,
3675
3675
  from: e.from || "owner",
3676
3676
  agentId: e.agentId || null,
3677
3677
  agentName: t
3678
- }), se((e) => _i([t, e], "Agent")), V("incoming"), Ge(null), O(!0);
3678
+ }), oe((e) => _i([t, e], "Agent")), V("incoming"), Ge(null), O(!0);
3679
3679
  }), f.on("call:offer", async (e = {}) => {
3680
3680
  it.current = e;
3681
3681
  try {
@@ -3718,10 +3718,10 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3718
3718
  if (!e.callId) return;
3719
3719
  let t = ut.current === e.callId, n = lt.current === e.callId, r = it.current?.callId === e.callId, i = et.current?.callId === e.callId;
3720
3720
  if (!t && !n && !r) {
3721
- i && (ze(null), V("idle"));
3721
+ i && (Re(null), V("idle"));
3722
3722
  return;
3723
3723
  }
3724
- ft.current = !0, ut.current = null, lt.current = e.callId, He(e.callId), ze(null), V("connected"), Ge(e.connectedAt || (/* @__PURE__ */ new Date()).toISOString()), O(!0);
3724
+ ft.current = !0, ut.current = null, lt.current = e.callId, He(e.callId), Re(null), V("connected"), Ge(e.connectedAt || (/* @__PURE__ */ new Date()).toISOString()), O(!0);
3725
3725
  }), f.on("call:unavailable", (e = {}) => {
3726
3726
  At("socket:call_unavailable"), Ye(hi(e, "This visitor is not available for a call right now.")), O(!0);
3727
3727
  }), f.on("call:error", (e = {}) => {
@@ -3750,7 +3750,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3750
3750
  });
3751
3751
  let h = await l.loadHistory(c, r);
3752
3752
  if (!e) return;
3753
- S(pi(h.chat_history || [])), re(!!h.is_human_handled), A(h.is_human_handled ? "agent" : k);
3753
+ S(pi(h.chat_history || [])), M(!!h.is_human_handled), A(h.is_human_handled ? "agent" : k);
3754
3754
  let g = h?.visitor_email || h?.visitorEmail;
3755
3755
  if (g && String(g).trim() && kt(String(g).trim()), await new Promise((e) => setTimeout(e, 500)), !e) return;
3756
3756
  u("ready");
@@ -3768,11 +3768,11 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3768
3768
  r,
3769
3769
  a
3770
3770
  ]), c(() => () => {
3771
- if (je && !xt.current && bt.current.length > 0) {
3771
+ if (Ae && !xt.current && bt.current.length > 0) {
3772
3772
  let e = Qe.current, t = bt.current, n = U.current;
3773
3773
  n && e && t.length > 0 && (console.log("[FlowEngageProvider] safety-net: syncing voice transcript on unmount"), n.beaconSyncVoice(e, t) || n.syncVoice(e, t).catch(() => {}), xt.current = !0);
3774
3774
  }
3775
- }, [je, _]);
3775
+ }, [Ae, _]);
3776
3776
  let Ft = p(null);
3777
3777
  c(() => {
3778
3778
  let e = U.current;
@@ -3785,8 +3785,8 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3785
3785
  return window.addEventListener("pagehide", e), () => window.removeEventListener("pagehide", e);
3786
3786
  }, []);
3787
3787
  let It = async () => {
3788
- if (!(!R?.callId || !U.current || !H.current || !y)) {
3789
- Dt(), ut.current = R.callId, Ot();
3788
+ if (!(!z?.callId || !U.current || !H.current || !y)) {
3789
+ Dt(), ut.current = z.callId, Ot();
3790
3790
  try {
3791
3791
  let e = await navigator.mediaDevices.getUserMedia({ audio: !0 });
3792
3792
  nt.current = e;
@@ -3828,7 +3828,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3828
3828
  if (!e.candidate || !H.current?.connected) return;
3829
3829
  let t = e.candidate;
3830
3830
  H.current.emit("call:ice-candidate", {
3831
- callId: R.callId,
3831
+ callId: z.callId,
3832
3832
  candidate: t.candidate,
3833
3833
  sdpMid: t.sdpMid,
3834
3834
  sdpMLineIndex: t.sdpMLineIndex,
@@ -3842,7 +3842,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3842
3842
  e.id = "flowengage-remote-audio", e.autoplay = !0, e.playsInline = !0, e.onplay = () => {}, e.onpause = () => {}, e.onended = () => {}, e.onerror = (e) => {}, rt.current = e, document.body.appendChild(e);
3843
3843
  }
3844
3844
  rt.current.srcObject = e.streams[0];
3845
- let r = R?.callId, i = r && (ut.current === r || lt.current === r);
3845
+ let r = z?.callId, i = r && (ut.current === r || lt.current === r);
3846
3846
  if (!ft.current && i) {
3847
3847
  let e = (/* @__PURE__ */ new Date()).toISOString();
3848
3848
  V("connected"), Ge((t) => t || e), lt.current = r, He(r), jt(e);
@@ -3853,15 +3853,15 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3853
3853
  };
3854
3854
  let r = it.current;
3855
3855
  r && (console.log("[FlowEngageProvider] found pending remote offer during accept", {
3856
- callId: r.callId || R.callId,
3856
+ callId: r.callId || z.callId,
3857
3857
  chatId: y
3858
3858
  }), await Pt({
3859
3859
  ...r,
3860
- callId: r.callId || R.callId
3861
- })), await U.current.acceptCall(R.callId, y), H.current?.emit("call:accepted", {
3862
- callId: R.callId,
3860
+ callId: r.callId || z.callId
3861
+ })), await U.current.acceptCall(z.callId, y), H.current?.emit("call:accepted", {
3862
+ callId: z.callId,
3863
3863
  chatId: y
3864
- }), lt.current = R.callId, He(R.callId), V((e) => e === "connected" || ft.current ? "connected" : "connecting"), ze(null), O(!0);
3864
+ }), lt.current = z.callId, He(z.callId), V((e) => e === "connected" || ft.current ? "connected" : "connecting"), Re(null), O(!0);
3865
3865
  } catch (e) {
3866
3866
  if (ut.current = null, At("accept_call_failed"), e?.status === 404 || e?.status === 409 || e?.status === 422) {
3867
3867
  Ye(hi(e, "This visitor call is no longer available."));
@@ -3869,7 +3869,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3869
3869
  }
3870
3870
  if (e?.name === "NotAllowedError" || e?.name === "PermissionDeniedError") {
3871
3871
  try {
3872
- await U.current.rejectCall(R.callId, y);
3872
+ await U.current.rejectCall(z.callId, y);
3873
3873
  } catch (e) {
3874
3874
  console.error("[FlowEngageProvider] failed to reject call after microphone denial", e);
3875
3875
  }
@@ -3880,11 +3880,11 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3880
3880
  }
3881
3881
  }
3882
3882
  }, Lt = async () => {
3883
- if (!R?.callId || !U.current || !y) {
3883
+ if (!z?.callId || !U.current || !y) {
3884
3884
  At("reject_call_without_server_context");
3885
3885
  return;
3886
3886
  }
3887
- let e = R.callId;
3887
+ let e = z.callId;
3888
3888
  Ot(), Dt(), H.current?.emit("call:rejected", {
3889
3889
  callId: e,
3890
3890
  chatId: y,
@@ -3899,11 +3899,11 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3899
3899
  }
3900
3900
  }, Rt = p(Lt);
3901
3901
  Rt.current = Lt, c(() => {
3902
- if (!R?.callId || B) {
3902
+ if (!z?.callId || B) {
3903
3903
  Ot();
3904
3904
  return;
3905
3905
  }
3906
- let e = R.callId;
3906
+ let e = z.callId;
3907
3907
  return Ot(), dt.current = window.setTimeout(() => {
3908
3908
  et.current?.callId === e && ut.current !== e && lt.current !== e && Rt.current();
3909
3909
  }, ne), () => {
@@ -3912,7 +3912,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3912
3912
  }, [
3913
3913
  B,
3914
3914
  Ot,
3915
- R?.callId
3915
+ z?.callId
3916
3916
  ]);
3917
3917
  let zt = async () => {
3918
3918
  if (!B || !U.current || !y) {
@@ -3991,7 +3991,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
3991
3991
  }
3992
3992
  let qt = async (e, t = "", n = null, a = {}) => {
3993
3993
  let o = typeof e == "string" ? e.trim() : "";
3994
- if (!o || !U.current || !y || l !== "ready" || Le) return;
3994
+ if (!o || !U.current || !y || l !== "ready" || Ie) return;
3995
3995
  Wt(), ot.current = !1;
3996
3996
  let s = /^\s*(yes|yeah|sure|ok|okay|go ahead|take me(?: there)?(?!\s+\w)|navigate(?!\s+(?:me\s+)?to\s+\w)|yep|absolutely|please do|do it|let'?s go|go there|show me(?!\s+(?:the|a|an)\s+\w)|go to it|bring me there|navigate me there)\b/i, c = /^\s*(?:yes|yeah|sure|ok|okay|yep|absolutely)\s+(?!(?:please|do\s+it|let'?s|that|this|there|it|thanks|go|cool|great|perfect|sounds|alright|proceed)\b)\w/i, u = /\b(take me|navigate|go to|show me|bring me|open|go there|navigate to|take me to|let'?s go to)\b/i;
3997
3997
  if (at.current && s.test(o) && !c.test(o)) {
@@ -4027,17 +4027,17 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4027
4027
  chatId: y,
4028
4028
  content: e,
4029
4029
  sender: "user",
4030
- email: P || void 0,
4030
+ email: F || void 0,
4031
4031
  type: a?.type || "text",
4032
4032
  metadata: a?.metadata || {},
4033
4033
  ...n || {}
4034
4034
  });
4035
4035
  return;
4036
4036
  }
4037
- Te(!0);
4037
+ we(!0);
4038
4038
  try {
4039
4039
  let s = await Ur(), c = Vr(), l = `stream-preview-${Date.now().toString(36)}`, d = (e) => {
4040
- F(!1), S((t) => {
4040
+ I(!1), S((t) => {
4041
4041
  let n = t.findIndex((e) => e.id === l);
4042
4042
  if (n === -1) return [...t, {
4043
4043
  id: l,
@@ -4054,14 +4054,14 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4054
4054
  });
4055
4055
  }, f = await U.current.sendAiMessage(y, e, r, t, {
4056
4056
  ...n || {},
4057
- ...P ? { email: P } : {}
4057
+ ...F ? { email: F } : {}
4058
4058
  }, {
4059
4059
  ...a,
4060
4060
  currentPageUrl: typeof window < "u" ? window.location.href : void 0,
4061
4061
  currentPageTitle: typeof window < "u" ? document.title : void 0,
4062
4062
  currentPagePath: typeof window < "u" ? window.location.pathname : void 0,
4063
4063
  currentPageContent: Kt() || void 0,
4064
- navPreference: le(i?.siteId) || void 0,
4064
+ navPreference: ce(i?.siteId) || void 0,
4065
4065
  ...s ? { shopifyCart: s } : {},
4066
4066
  ...c ? { shopifyCustomerId: c } : {}
4067
4067
  }, d), p = f.chat_history || [];
@@ -4087,7 +4087,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4087
4087
  }, 300);
4088
4088
  })) : (at.current = e, console.log("[FWH Nav] Stored pending nav →", at.current));
4089
4089
  let t = i?.siteId;
4090
- t && !de(t) && (fe(t), S((e) => [...e, {
4090
+ t && !ue(t) && (de(t), S((e) => [...e, {
4091
4091
  id: `nav-pref-${Date.now()}`,
4092
4092
  type: "nav_pref_choice",
4093
4093
  sender: "system",
@@ -4140,14 +4140,14 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4140
4140
  });
4141
4141
  }
4142
4142
  }
4143
- S(pi(p)), Array.isArray(f.cart_actions) && f.cart_actions.length && w(f.cart_actions), re(!!f.is_human_handled), A(f.is_human_handled ? "agent" : "ai"), F(!1), Te(!1), await U.current.updateChatStatus(y, "messageSent");
4143
+ S(pi(p)), Array.isArray(f.cart_actions) && f.cart_actions.length && w(f.cart_actions), M(!!f.is_human_handled), A(f.is_human_handled ? "agent" : "ai"), I(!1), we(!1), await U.current.updateChatStatus(y, "messageSent");
4144
4144
  } catch (e) {
4145
4145
  S((e) => e.filter((e) => !e.isStreaming).map((e) => e.id === d ? {
4146
4146
  ...e,
4147
4147
  isPending: !1,
4148
4148
  failed: !0
4149
- } : e)), F(!1), Te(!1), e.status === 429 ? (De(!0), ke(e.message), window.setTimeout(() => {
4150
- De(!1), ke("");
4149
+ } : e)), I(!1), we(!1), e.status === 429 ? (Ee(!0), Oe(e.message), window.setTimeout(() => {
4150
+ Ee(!1), Oe("");
4151
4151
  }, ee)) : h(e);
4152
4152
  }
4153
4153
  }, Jt = async (e) => {
@@ -4159,12 +4159,12 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4159
4159
  let t = e ? "voice" : "text";
4160
4160
  await U.current.setChatMode(y, t);
4161
4161
  } catch {}
4162
- Me(e), e && (xt.current = !1);
4162
+ je(e), e && (xt.current = !1);
4163
4163
  }
4164
4164
  }, Xt = async (e) => {
4165
4165
  if (xt.current) return;
4166
4166
  if (xt.current = !0, !U.current || !y || !e?.length) {
4167
- Me(!1);
4167
+ je(!1);
4168
4168
  return;
4169
4169
  }
4170
4170
  let t = () => {
@@ -4188,11 +4188,11 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4188
4188
  } catch {
4189
4189
  t();
4190
4190
  } finally {
4191
- Me(!1);
4191
+ je(!1);
4192
4192
  }
4193
4193
  }, Zt = async () => {
4194
4194
  if (!(!U.current || !y)) {
4195
- je && !xt.current && bt.current.length > 0 && await Xt(bt.current);
4195
+ Ae && !xt.current && bt.current.length > 0 && await Xt(bt.current);
4196
4196
  try {
4197
4197
  await U.current.endConversation(y);
4198
4198
  } catch {
@@ -4200,7 +4200,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4200
4200
  await U.current.updateChatStatus(y, "ended");
4201
4201
  } catch {}
4202
4202
  }
4203
- Re(!0), S((e) => [...e, {
4203
+ Le(!0), S((e) => [...e, {
4204
4204
  id: `conversation-ended-${Date.now()}`,
4205
4205
  sender: "system",
4206
4206
  message: "This conversation has ended. Thank you for reaching out!",
@@ -4226,7 +4226,7 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4226
4226
  let e = () => {
4227
4227
  let e = Qe.current, t = U.current;
4228
4228
  if (!t || !e) return;
4229
- if (St.current && bt.current.length > 0 && Ae(), !xt.current && bt.current.length > 0 && (t.beaconSyncVoice(e, bt.current) || t.syncVoice(e, bt.current).catch(() => {}), xt.current = !0), lt.current) {
4229
+ if (St.current && bt.current.length > 0 && ke(), !xt.current && bt.current.length > 0 && (t.beaconSyncVoice(e, bt.current) || t.syncVoice(e, bt.current).catch(() => {}), xt.current = !0), lt.current) {
4230
4230
  t.beaconEndWebRTCCall(lt.current, e);
4231
4231
  return;
4232
4232
  }
@@ -4239,9 +4239,9 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4239
4239
  }, []);
4240
4240
  let Qt = o(() => {
4241
4241
  let e = i?.siteId;
4242
- he(e), $e.current = !0, W.current = null, H.current?.disconnect(), S([]), b(""), Qe.current = "", Re(!1), re(!1), se(null), ce(null), Ze(!0), s((e) => e + 1);
4242
+ me(e), $e.current = !0, W.current = null, H.current?.disconnect(), S([]), b(""), Qe.current = "", Le(!1), M(!1), oe(null), P(null), Ze(!0), s((e) => e + 1);
4243
4243
  }, [i?.siteId]), $t = o((e) => {
4244
- i?.siteId, $e.current = !1, W.current = e, H.current?.disconnect(), S([]), b(""), Qe.current = "", Re(!1), re(!1), se(null), ce(null), Ze(!0), s((e) => e + 1);
4244
+ i?.siteId, $e.current = !1, W.current = e, H.current?.disconnect(), S([]), b(""), Qe.current = "", Le(!1), M(!1), oe(null), P(null), Ze(!0), s((e) => e + 1);
4245
4245
  }, [i?.siteId]), en = f(() => ({
4246
4246
  status: l,
4247
4247
  error: d,
@@ -4252,21 +4252,21 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4252
4252
  isOpen: D,
4253
4253
  activeScreen: k,
4254
4254
  isHumanHandled: j,
4255
- agentName: M,
4256
- agentHeadshot: N,
4257
- visitorEmail: P,
4258
- isAgentTyping: pe,
4259
- isAiTyping: Se,
4260
- connectionStatus: L,
4261
- isLoading: we,
4262
- isVoiceMode: je,
4263
- isRateLimited: Ee,
4264
- rateLimitMessage: Oe,
4265
- isConversationEnded: Le,
4255
+ agentName: N,
4256
+ agentHeadshot: se,
4257
+ visitorEmail: F,
4258
+ isAgentTyping: fe,
4259
+ isAiTyping: xe,
4260
+ connectionStatus: R,
4261
+ isLoading: Ce,
4262
+ isVoiceMode: Ae,
4263
+ isRateLimited: Te,
4264
+ rateLimitMessage: De,
4265
+ isConversationEnded: Ie,
4266
4266
  isSessionRestoring: Xe,
4267
- openToChatCounter: Ne,
4268
- voiceEndCounter: Fe,
4269
- incomingCall: R,
4267
+ openToChatCounter: Me,
4268
+ voiceEndCounter: Pe,
4269
+ incomingCall: z,
4270
4270
  activeCallId: B,
4271
4271
  callConnectionState: Ue,
4272
4272
  callConnectedAt: We,
@@ -4317,21 +4317,21 @@ function yi({ siteId: e, config: t, children: n, language: r = "en" }) {
4317
4317
  D,
4318
4318
  k,
4319
4319
  j,
4320
- M,
4321
4320
  N,
4322
- P,
4323
- pe,
4324
- Se,
4325
- L,
4326
- we,
4327
- je,
4328
- Ee,
4329
- Oe,
4330
- Le,
4331
- Xe,
4332
- Ne,
4333
- Fe,
4321
+ se,
4322
+ F,
4323
+ fe,
4324
+ xe,
4334
4325
  R,
4326
+ Ce,
4327
+ Ae,
4328
+ Te,
4329
+ De,
4330
+ Ie,
4331
+ Xe,
4332
+ Me,
4333
+ Pe,
4334
+ z,
4335
4335
  B,
4336
4336
  Ue,
4337
4337
  We,
@@ -9349,7 +9349,7 @@ async function Dh(e, t, n) {
9349
9349
  let r = new URLSearchParams({ siteId: t || "" });
9350
9350
  n && r.set("chatId", n);
9351
9351
  let i = Vr();
9352
- i && r.set("shopifyCustomerId", String(i)), le(t) === "auto" && r.set("navPreference", "auto");
9352
+ i && r.set("shopifyCustomerId", String(i)), ce(t) === "auto" && r.set("navPreference", "auto");
9353
9353
  let a = await fetch(`${e}/api/voice/session?${r.toString()}`, {
9354
9354
  method: "GET",
9355
9355
  headers: { "Content-Type": "application/json" }
@@ -9364,38 +9364,38 @@ async function Dh(e, t, n) {
9364
9364
  return o;
9365
9365
  }
9366
9366
  async function Oh(e) {
9367
- let { apiBaseUrl: t, siteId: n, chatId: r, clientTools: i = {}, onConnect: a, onDisconnect: o, onMessage: s, onModeChange: c, onError: l, onUnhandledClientToolCall: u, onAgentTurnEnd: d, onSessionInfo: f, onSessionEnding: p, onPanel: m } = e, h = await Dh(t, n, r);
9368
- f?.({ emailOnFile: !!h.emailOnFile });
9369
- let g = { type: "Start" };
9370
- e.greeting !== void 0 && (g.greeting = e.greeting || null);
9371
- let _ = await navigator.mediaDevices.getUserMedia({ audio: {
9367
+ let { apiBaseUrl: t, siteId: n, chatId: r, clientTools: i = {}, onConnect: a, onDisconnect: o, onMessage: s, onModeChange: c, onError: l, onUnhandledClientToolCall: u, onAgentTurnEnd: d, onSessionInfo: f, onSessionEnding: p, onPanel: m, onStartWalkthrough: h } = e, g = await Dh(t, n, r);
9368
+ f?.({ emailOnFile: !!g.emailOnFile });
9369
+ let _ = { type: "Start" };
9370
+ e.greeting !== void 0 && (_.greeting = e.greeting || null);
9371
+ let v = await navigator.mediaDevices.getUserMedia({ audio: {
9372
9372
  channelCount: 1,
9373
9373
  echoCancellation: !0,
9374
9374
  noiseSuppression: !0,
9375
9375
  autoGainControl: !0
9376
- } }), v = new (window.AudioContext || window.webkitAudioContext)({ sampleRate: sh });
9377
- v.state === "suspended" && await v.resume();
9378
- let y = v.createMediaStreamDestination(), b = Ch(), x = [], S = null, C = r || n || null;
9379
- b && (S = new window.MediaRecorder(y.stream, { mimeType: b }), S.ondataavailable = (e) => {
9380
- e.data && e.data.size > 0 && x.push(e.data);
9381
- }, S.start());
9382
- let w = new WebSocket(h.wsUrl);
9383
- w.binaryType = "arraybuffer";
9384
- let T = /* @__PURE__ */ new Set(), E = {
9376
+ } }), y = new (window.AudioContext || window.webkitAudioContext)({ sampleRate: sh });
9377
+ y.state === "suspended" && await y.resume();
9378
+ let b = y.createMediaStreamDestination(), x = Ch(), S = [], C = null, w = r || n || null;
9379
+ x && (C = new window.MediaRecorder(b.stream, { mimeType: x }), C.ondataavailable = (e) => {
9380
+ e.data && e.data.size > 0 && S.push(e.data);
9381
+ }, C.start());
9382
+ let T = new WebSocket(g.wsUrl);
9383
+ T.binaryType = "arraybuffer";
9384
+ let E = /* @__PURE__ */ new Set(), D = {
9385
9385
  role: null,
9386
9386
  text: "",
9387
9387
  timer: null,
9388
9388
  debug: null
9389
- }, D = "", O = () => {
9390
- E.timer &&= (clearTimeout(E.timer), null);
9391
- let e = E.text.trim(), t = E.role, n = E.debug;
9392
- if (E.text = "", E.role = null, E.debug = null, !(!e || !t)) {
9389
+ }, O = "", k = () => {
9390
+ D.timer &&= (clearTimeout(D.timer), null);
9391
+ let e = D.text.trim(), t = D.role, n = D.debug;
9392
+ if (D.text = "", D.role = null, D.debug = null, !(!e || !t)) {
9393
9393
  if (t === "agent") {
9394
- if (e === D) {
9394
+ if (e === O) {
9395
9395
  console.debug("[FlowEngage] duplicate agent turn suppressed");
9396
9396
  return;
9397
9397
  }
9398
- D = e;
9398
+ O = e;
9399
9399
  }
9400
9400
  s?.({
9401
9401
  role: t,
@@ -9403,64 +9403,64 @@ async function Oh(e) {
9403
9403
  debug: n
9404
9404
  });
9405
9405
  }
9406
- }, k = (e, t, n) => {
9407
- t && (E.role && E.role !== e && O(), E.role = e, E.text = E.text ? `${E.text} ${t}`.replace(/\s+/g, " ") : t, n && (E.debug = n), E.timer && clearTimeout(E.timer), E.timer = setTimeout(O, lh));
9408
- }, A = !1, ee = !1, te = !1, ne = !1, j = !1, re = !0, ie = 0, ae = 0, oe = !1, M = !1, se = uh, N = null, ce = !1, P = !1, le = () => {
9409
- N && clearTimeout(N);
9406
+ }, A = (e, t, n) => {
9407
+ t && (D.role && D.role !== e && k(), D.role = e, D.text = D.text ? `${D.text} ${t}`.replace(/\s+/g, " ") : t, n && (D.debug = n), D.timer && clearTimeout(D.timer), D.timer = setTimeout(k, lh));
9408
+ }, ee = !1, te = !1, ne = !1, j = !1, M = !1, re = !0, ie = 0, ae = 0, N = !1, oe = !1, se = uh, P = null, F = !1, ce = !1, le = () => {
9409
+ P && clearTimeout(P);
9410
9410
  let e = () => {
9411
- if (!A) {
9411
+ if (!ee) {
9412
9412
  if (ue.isPlaying()) {
9413
- N = setTimeout(e, 150);
9413
+ P = setTimeout(e, 150);
9414
9414
  return;
9415
9415
  }
9416
- if (N = null, ce) {
9416
+ if (P = null, F) {
9417
9417
  p?.();
9418
9418
  return;
9419
9419
  }
9420
- !A && w.readyState === WebSocket.OPEN && w.send(JSON.stringify({ type: "PlaybackDrained" })), P && (P = !1, d?.());
9420
+ !ee && T.readyState === WebSocket.OPEN && T.send(JSON.stringify({ type: "PlaybackDrained" })), ce && (ce = !1, d?.());
9421
9421
  }
9422
9422
  };
9423
- N = setTimeout(e, 150);
9424
- }, ue = Eh(v, () => {
9425
- ne && (ne = !1, c?.({ mode: j ? "thinking" : "listening" }));
9426
- }, y);
9423
+ P = setTimeout(e, 150);
9424
+ }, ue = Eh(y, () => {
9425
+ j && (j = !1, c?.({ mode: M ? "thinking" : "listening" }));
9426
+ }, b);
9427
9427
  typeof window < "u" && (window.__fe_agentAudioPlaying = () => ue.isPlaying());
9428
- let de = v.createMediaStreamSource(_);
9429
- de.connect(y);
9430
- let fe = v.createScriptProcessor(ch, 1, 1), pe = !1;
9428
+ let de = y.createMediaStreamSource(v);
9429
+ de.connect(b);
9430
+ let fe = y.createScriptProcessor(ch, 1, 1), pe = !1;
9431
9431
  fe.onaudioprocess = (e) => {
9432
- if (A || w.readyState !== WebSocket.OPEN) return;
9433
- let t = e.inputBuffer.getChannelData(0), n = () => w.send(new Int16Array(t.length).buffer);
9434
- if (ee) {
9435
- te || (te = !0, console.debug("[FlowEngage] mic held — streaming silence to keep socket alive")), pe = !1, ie = 0, ae = 0, n();
9432
+ if (ee || T.readyState !== WebSocket.OPEN) return;
9433
+ let t = e.inputBuffer.getChannelData(0), n = () => T.send(new Int16Array(t.length).buffer);
9434
+ if (te) {
9435
+ ne || (ne = !0, console.debug("[FlowEngage] mic held — streaming silence to keep socket alive")), pe = !1, ie = 0, ae = 0, n();
9436
9436
  return;
9437
9437
  }
9438
- let r = vh(t), i = _h(t), a = ue.isPlaying() || M, o = a ? se * gh : se, s = a ? hh : ph;
9439
- if (r >= o && i >= dh && i <= fh ? (ae = 0, ie += 1) : ++ae >= mh && (ie = 0), a ? pe = !1 : !pe && ie >= ph ? (pe = !0, c?.({ mode: "user-speaking" })) : pe && ie === 0 && (pe = !1), a && !oe && ie >= s) {
9440
- oe = !0, j = !1, ie = 0;
9438
+ let r = vh(t), i = _h(t), a = ue.isPlaying() || oe, o = a ? se * gh : se, s = a ? hh : ph;
9439
+ if (r >= o && i >= dh && i <= fh ? (ae = 0, ie += 1) : ++ae >= mh && (ie = 0), a ? pe = !1 : !pe && ie >= ph ? (pe = !0, c?.({ mode: "user-speaking" })) : pe && ie === 0 && (pe = !1), a && !N && ie >= s) {
9440
+ N = !0, M = !1, ie = 0;
9441
9441
  let e = ue.playedMs();
9442
- ue.stop(), re = !1, M = !1, N && !ce && (clearTimeout(N), N = null), P = !1, w.send(JSON.stringify({
9442
+ ue.stop(), re = !1, oe = !1, P && !F && (clearTimeout(P), P = null), ce = !1, T.send(JSON.stringify({
9443
9443
  type: "VisitorInterrupted",
9444
9444
  played_ms: Math.round(e)
9445
9445
  })), console.debug("[FlowEngage] barge-in — visitor spoke over the agent");
9446
9446
  }
9447
- w.send(yh(t).buffer);
9448
- }, de.connect(fe), fe.connect(v.destination);
9447
+ T.send(yh(t).buffer);
9448
+ }, de.connect(fe), fe.connect(y.destination);
9449
9449
  let me = () => {
9450
- if (!A) {
9451
- A = !0, N &&= (clearTimeout(N), null), O(), ue.stop(), typeof window < "u" && delete window.__fe_agentAudioPlaying;
9450
+ if (!ee) {
9451
+ ee = !0, P &&= (clearTimeout(P), null), k(), ue.stop(), typeof window < "u" && delete window.__fe_agentAudioPlaying;
9452
9452
  try {
9453
9453
  fe.disconnect(), de.disconnect();
9454
9454
  } catch {}
9455
- if (_.getTracks().forEach((e) => e.stop()), S && S.state !== "inactive") {
9456
- S.onstop = () => wh(t, n, C, x, b);
9455
+ if (v.getTracks().forEach((e) => e.stop()), C && C.state !== "inactive") {
9456
+ C.onstop = () => wh(t, n, w, S, x);
9457
9457
  try {
9458
- S.stop();
9458
+ C.stop();
9459
9459
  } catch {
9460
- S.onstop = null;
9460
+ C.onstop = null;
9461
9461
  }
9462
- } else x.length && wh(t, n, C, x, b);
9463
- v.close().catch(() => {}), (w.readyState === WebSocket.OPEN || w.readyState === WebSocket.CONNECTING) && w.close();
9462
+ } else S.length && wh(t, n, w, S, x);
9463
+ y.close().catch(() => {}), (T.readyState === WebSocket.OPEN || T.readyState === WebSocket.CONNECTING) && T.close();
9464
9464
  }
9465
9465
  }, he = async (e) => {
9466
9466
  let t = i[e.name];
@@ -9478,8 +9478,8 @@ async function Oh(e) {
9478
9478
  for (let t of e.functions || []) {
9479
9479
  if (!t.client_side) continue;
9480
9480
  let e = await he(t);
9481
- if (A || w.readyState !== WebSocket.OPEN) return;
9482
- w.send(JSON.stringify({
9481
+ if (ee || T.readyState !== WebSocket.OPEN) return;
9482
+ T.send(JSON.stringify({
9483
9483
  type: "FunctionCallResponse",
9484
9484
  id: t.id,
9485
9485
  name: t.name,
@@ -9489,14 +9489,14 @@ async function Oh(e) {
9489
9489
  }, _e = (e) => {
9490
9490
  switch (e.type) {
9491
9491
  case "Welcome":
9492
- Number.isFinite(e.barge_in_rms) && e.barge_in_rms > 0 && (se = e.barge_in_rms), Number.isFinite(e.barge_in_frames) && e.barge_in_frames > 0 && e.barge_in_frames, C = e.session_id || r || n || null, a?.({ conversationId: C });
9492
+ Number.isFinite(e.barge_in_rms) && e.barge_in_rms > 0 && (se = e.barge_in_rms), Number.isFinite(e.barge_in_frames) && e.barge_in_frames > 0 && e.barge_in_frames, w = e.session_id || r || n || null, a?.({ conversationId: w });
9493
9493
  break;
9494
9494
  case "ConversationText": {
9495
9495
  let t = String(e.content || "");
9496
9496
  if (e.role === "user") {
9497
9497
  let e = t.trim();
9498
- if (T.has(e)) {
9499
- T.delete(e);
9498
+ if (E.has(e)) {
9499
+ E.delete(e);
9500
9500
  break;
9501
9501
  }
9502
9502
  if (/^\[SYSTEM:/i.test(e) || /^Continue (now )?to the next section/i.test(e) || /^That was the last section/i.test(e)) {
@@ -9504,32 +9504,35 @@ async function Oh(e) {
9504
9504
  break;
9505
9505
  }
9506
9506
  }
9507
- k(e.role === "user" ? "user" : "agent", t, e.debug);
9507
+ A(e.role === "user" ? "user" : "agent", t, e.debug);
9508
9508
  break;
9509
9509
  }
9510
9510
  case "UserStartedSpeaking":
9511
- O(), ue.stop(), M = !1, re = !1, ne = !1, j = !1, N && !ce && (clearTimeout(N), N = null), P = !1, c?.({ mode: "listening" });
9511
+ k(), ue.stop(), oe = !1, re = !1, j = !1, M = !1, P && !F && (clearTimeout(P), P = null), ce = !1, c?.({ mode: "listening" });
9512
9512
  break;
9513
9513
  case "AgentStartedSpeaking":
9514
- re = !0, ne = !0, oe = !1, ie = 0, c?.({ mode: "speaking" });
9514
+ re = !0, j = !0, N = !1, ie = 0, c?.({ mode: "speaking" });
9515
9515
  break;
9516
9516
  case "AgentAudioDone":
9517
- M = !1, O(), le(), ue.isPlaying() || (ne = !1, c?.({ mode: j ? "thinking" : "listening" }));
9517
+ oe = !1, k(), le(), ue.isPlaying() || (j = !1, c?.({ mode: M ? "thinking" : "listening" }));
9518
9518
  break;
9519
9519
  case "FunctionCallRequest":
9520
9520
  ge(e);
9521
9521
  break;
9522
9522
  case "AgentPreparing":
9523
- M = !0;
9523
+ oe = !0;
9524
9524
  break;
9525
9525
  case "AgentTurnComplete":
9526
- j = !1, P = !0, le();
9526
+ M = !1, ce = !0, le();
9527
9527
  break;
9528
9528
  case "SessionEnding":
9529
- console.debug("[FlowEngage] server is ending the session:", e.reason || "unspecified"), ce = !0;
9529
+ console.debug("[FlowEngage] server is ending the session:", e.reason || "unspecified"), F = !0;
9530
+ break;
9531
+ case "StartWalkthrough":
9532
+ h?.();
9530
9533
  break;
9531
9534
  case "AgentThinking":
9532
- j = !0, c?.({ mode: "thinking" });
9535
+ M = !0, c?.({ mode: "thinking" });
9533
9536
  break;
9534
9537
  case "PromptUpdated": break;
9535
9538
  case "AgentPanel":
@@ -9548,7 +9551,7 @@ async function Oh(e) {
9548
9551
  default: break;
9549
9552
  }
9550
9553
  };
9551
- return w.onopen = () => w.send(JSON.stringify(g)), w.onmessage = (e) => {
9554
+ return T.onopen = () => T.send(JSON.stringify(_)), T.onmessage = (e) => {
9552
9555
  if (e.data instanceof ArrayBuffer) {
9553
9556
  re && ue.enqueue(new Int16Array(e.data));
9554
9557
  return;
@@ -9564,44 +9567,51 @@ async function Oh(e) {
9564
9567
  } catch (e) {
9565
9568
  console.error("[FlowEngage] voice event handler failed:", t?.type, e);
9566
9569
  }
9567
- }, w.onerror = () => l?.(/* @__PURE__ */ Error("Voice connection failed")), w.onclose = () => {
9570
+ }, T.onerror = () => l?.(/* @__PURE__ */ Error("Voice connection failed")), T.onclose = () => {
9568
9571
  me(), o?.();
9569
9572
  }, {
9570
9573
  endSession: async () => me(),
9571
9574
  sendContextualUpdate: (e) => {
9572
- A || w.readyState !== WebSocket.OPEN || !e || w.send(JSON.stringify({
9575
+ ee || T.readyState !== WebSocket.OPEN || !e || T.send(JSON.stringify({
9573
9576
  type: "UpdatePrompt",
9574
9577
  prompt: e
9575
9578
  }));
9576
9579
  },
9580
+ reportPage: (e, t) => {
9581
+ ee || T.readyState !== WebSocket.OPEN || !e || T.send(JSON.stringify({
9582
+ type: "PageChanged",
9583
+ path: e,
9584
+ title: t || null
9585
+ }));
9586
+ },
9577
9587
  sendUserMessage: (e, { silent: t = !0, suppressQuestion: n = !1 } = {}) => {
9578
- A || w.readyState !== WebSocket.OPEN || !e || (t && T.add(e.trim()), w.send(JSON.stringify({
9588
+ ee || T.readyState !== WebSocket.OPEN || !e || (t && E.add(e.trim()), T.send(JSON.stringify({
9579
9589
  type: "InjectUserMessage",
9580
9590
  content: e,
9581
9591
  suppress_question: n
9582
9592
  })));
9583
9593
  },
9584
9594
  injectAgentSpeech: (e, t = "interrupt") => {
9585
- A || w.readyState !== WebSocket.OPEN || !e || w.send(JSON.stringify({
9595
+ ee || T.readyState !== WebSocket.OPEN || !e || T.send(JSON.stringify({
9586
9596
  type: "InjectAgentMessage",
9587
9597
  message: e,
9588
9598
  behavior: t
9589
9599
  }));
9590
9600
  },
9591
9601
  setWalkthroughActive: (e) => {
9592
- A || w.readyState !== WebSocket.OPEN || w.send(JSON.stringify({
9602
+ ee || T.readyState !== WebSocket.OPEN || T.send(JSON.stringify({
9593
9603
  type: "WalkthroughActive",
9594
9604
  active: !!e
9595
9605
  }));
9596
9606
  },
9597
9607
  setMicMuted: (e) => {
9598
- ee = !!e, !A && w.readyState === WebSocket.OPEN && w.send(JSON.stringify({
9608
+ te = !!e, !ee && T.readyState === WebSocket.OPEN && T.send(JSON.stringify({
9599
9609
  type: "MicHeld",
9600
- held: ee
9610
+ held: te
9601
9611
  }));
9602
9612
  },
9603
9613
  get status() {
9604
- return A ? "disconnected" : "connected";
9614
+ return ee ? "disconnected" : "connected";
9605
9615
  }
9606
9616
  };
9607
9617
  }
@@ -10400,7 +10410,7 @@ function Lg({ src: e, name: t, imgStyle: n, initialsSpanStyle: r }) {
10400
10410
  //#region src/components/MessageList.jsx
10401
10411
  function Rg({ siteId: e, onChoose: t }) {
10402
10412
  let [n, r] = m(null), i = (n) => {
10403
- ue(e, n), r(n), t?.(n);
10413
+ le(e, n), r(n), t?.(n);
10404
10414
  };
10405
10415
  return /* @__PURE__ */ g("div", {
10406
10416
  style: {
@@ -12820,7 +12830,7 @@ function T_(e) {
12820
12830
  function E_(e) {
12821
12831
  let t = e.siteId || null, n = (e.apiBaseUrl || "").replace(/\/$/, ""), r = typeof e.getLastUserVoiceText == "function" ? e.getLastUserVoiceText : null, i = typeof e.beaconSyncFullVoiceHistory == "function" ? e.beaconSyncFullVoiceHistory : null, a = [], o = {
12822
12832
  "fwh-navigate-mvp": async (n) => {
12823
- if ($("fwh-navigate-mvp ▶ raw parameters:", n), e?.isWalkthroughActive?.()) return $("fwh-navigate-mvp ✖ blocked — walkthrough in progress"), "NAVIGATION_BLOCKED_DURING_WALKTHROUGH. A walkthrough of the current page is running, so the visitor was not moved.";
12833
+ $("fwh-navigate-mvp ▶ raw parameters:", n);
12824
12834
  let a = x_(n), o = S_(a), s = a.section_text ?? a.sectionText ?? a.section, c = Array.isArray(a.expected_landmarks) ? a.expected_landmarks : Array.isArray(a.expectedLandmarks) ? a.expectedLandmarks : [];
12825
12835
  if ($("fwh-navigate-mvp · coerced:", {
12826
12836
  url: o,
@@ -12872,10 +12882,10 @@ function E_(e) {
12872
12882
  sender: "user",
12873
12883
  message: e
12874
12884
  }]);
12875
- n && Ee(t, n);
12885
+ n && Te(t, n);
12876
12886
  }
12877
12887
  } catch {}
12878
- Ae();
12888
+ ke();
12879
12889
  let e = o;
12880
12890
  try {
12881
12891
  e = new URL(o, typeof window < "u" ? window.location.href : "").href;
@@ -12885,7 +12895,7 @@ function E_(e) {
12885
12895
  let e = new URL(o, window.location.href).pathname.split("/").filter(Boolean).pop() || "";
12886
12896
  n = e ? e.replace(/[-_]/g, " ").replace(/\b\w/g, (e) => e.toUpperCase()) : "Home";
12887
12897
  } catch {}
12888
- t && typeof window < "u" && Le(t, window.location.href, e, n), Sr(e);
12898
+ t && typeof window < "u" && Ie(t, window.location.href, e, n), Sr(e);
12889
12899
  try {
12890
12900
  window.__fe_agent_nav = {
12891
12901
  path: new URL(e, window.location.href).pathname,
@@ -13250,7 +13260,7 @@ function E_(e) {
13250
13260
  try {
13251
13261
  r = new URL(e, window.location.href).href;
13252
13262
  } catch {}
13253
- return t && Le(t, window.location.href, r, n), Sr(r), kr().then(() => {
13263
+ return t && Ie(t, window.location.href, r, n), Sr(r), kr().then(() => {
13254
13264
  window.location.assign(r);
13255
13265
  }), `OK_NAVIGATING to ${n}. The page is loading.`;
13256
13266
  }
@@ -13296,7 +13306,13 @@ var A_ = "[PAGE_CONTEXT]";
13296
13306
  function j_(e, t, n, r) {
13297
13307
  return `${A_} The visitor is on ${e}${r ? `, having moved here themselves from the ${r} page` : ""}. Approximate headings: ${t || "none"}. ${n ? `Forms: ${n}. ` : ""}`.trim();
13298
13308
  }
13299
- var M_ = {
13309
+ function M_(e, t, n, r, i) {
13310
+ e?.sendContextualUpdate?.(j_(t, n, r, i));
13311
+ try {
13312
+ e?.reportPage?.(new URL(t, window.location.href).pathname, document.title);
13313
+ } catch {}
13314
+ }
13315
+ var N_ = {
13300
13316
  blue: "#135bd8",
13301
13317
  red: "#ef334b",
13302
13318
  yellow: "#ffbd2e",
@@ -13304,7 +13320,7 @@ var M_ = {
13304
13320
  highlight: "rgba(255,255,255,0.9)",
13305
13321
  green: "#10b981"
13306
13322
  };
13307
- function N_(e) {
13323
+ function P_(e) {
13308
13324
  if (!Array.isArray(e) || e.length < 2) return "linear-gradient(145deg, #dce8f022 0%, #e8dff522 45%, #f5e0e022 100%), #f7f8fa";
13309
13325
  let [t, n, r] = e;
13310
13326
  return e.length >= 3 && r ? [
@@ -13318,12 +13334,12 @@ function N_(e) {
13318
13334
  "#f7f8fa"
13319
13335
  ].join(", ");
13320
13336
  }
13321
- function P_(e) {
13337
+ function F_(e) {
13322
13338
  if (!e || typeof e != "string") return "#1a1a1a";
13323
13339
  let t = e.replace("#", ""), n = t.length === 3 ? t.split("").map((e) => e + e).join("") : t, r = parseInt(n.slice(0, 2), 16) / 255, i = parseInt(n.slice(2, 4), 16) / 255, a = parseInt(n.slice(4, 6), 16) / 255, o = (e) => e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4;
13324
13340
  return .2126 * o(r) + .7152 * o(i) + .0722 * o(a) > .179 ? "#1a1a1a" : "#ffffff";
13325
13341
  }
13326
- function F_(t) {
13342
+ function I_(t) {
13327
13343
  let [n, r] = e.useState(null), i = typeof t == "string" ? t.trim() : "";
13328
13344
  return e.useEffect(() => {
13329
13345
  if (!i) {
@@ -13341,8 +13357,8 @@ function F_(t) {
13341
13357
  };
13342
13358
  }, [i]), n;
13343
13359
  }
13344
- function I_({ logo: t, style: n }) {
13345
- let r = F_(typeof t == "string" ? t : null);
13360
+ function L_({ logo: t, style: n }) {
13361
+ let r = I_(typeof t == "string" ? t : null);
13346
13362
  if (!t) return null;
13347
13363
  if (typeof t == "string") return r ? /* @__PURE__ */ g("img", {
13348
13364
  src: r,
@@ -13367,7 +13383,7 @@ function I_({ logo: t, style: n }) {
13367
13383
  children: i
13368
13384
  }) : null;
13369
13385
  }
13370
- function L_({ title: e }) {
13386
+ function R_({ title: e }) {
13371
13387
  return /* @__PURE__ */ g("div", {
13372
13388
  style: {
13373
13389
  width: "100%",
@@ -13385,18 +13401,18 @@ function L_({ title: e }) {
13385
13401
  children: String(e || "FE").split(/\s+/).filter(Boolean).slice(0, 2).map((e) => e[0]?.toUpperCase() || "").join("") || "FE"
13386
13402
  });
13387
13403
  }
13388
- function R_(e, t) {
13404
+ function z_(e, t) {
13389
13405
  let n = (t || "").trim();
13390
13406
  return n ? !!(/\b(let'?s|let us)\s+(end|stop|finish|wrap up|close)\s+(the\s+)?(voice\s+)?(session|call|chat)\b/i.test(n) || /\bend\s+(this\s+)?(the\s+)?(voice\s+)?(session|call|chat)\b/i.test(n) || /\b(hang\s+up|disconnect)\b/i.test(n) || e === "bot" && (/\b(that'?s all|we'?re done)\b/i.test(n) || /\b(goodbye|bye)\b/i.test(n) || /\b(I'?ll|I will|Let me|I can|I'?m going to)\s+(end|close)\s+(the\s+)?(voice\s+)?(session|call)\b/i.test(n) || /\b(ending|closing)\s+(the\s+)?(voice\s+)?session\b|\bvoice\s+session\s+(is\s+)?(now\s+)?(ended|over|closing)\b/i.test(n) || /\b(session|call)\s+(is\s+)?(now\s+)?(ended|over)\b/i.test(n) || /\bwe\s+can\s+end\s+(the\s+)?(session|call)?\s*(here|now)\b/i.test(n) || /\b(wrapping\s+up|signing\s+off)\b/i.test(n))) : !1;
13391
13407
  }
13392
- function z_({ orbColors: e, ...t }) {
13408
+ function B_({ orbColors: e, ...t }) {
13393
13409
  return /* @__PURE__ */ g(Zg, {
13394
13410
  colors: e,
13395
13411
  ...t
13396
13412
  });
13397
13413
  }
13398
- function B_({ copy: e, orbColors: t, primaryColor: n, onYes: r, onLater: i, isMobile: a, isClosing: o }) {
13399
- let s = n || M_.green, c = P_(s), l = a ? 72 : 94, u = /* @__PURE__ */ _("div", {
13414
+ function V_({ copy: e, orbColors: t, primaryColor: n, onYes: r, onLater: i, isMobile: a, isClosing: o }) {
13415
+ let s = n || N_.green, c = F_(s), l = a ? 72 : 94, u = /* @__PURE__ */ _("div", {
13400
13416
  style: {
13401
13417
  display: "flex",
13402
13418
  alignItems: a ? "flex-end" : "center",
@@ -13522,7 +13538,7 @@ function B_({ copy: e, orbColors: t, primaryColor: n, onYes: r, onLater: i, isMo
13522
13538
  delay: 0
13523
13539
  },
13524
13540
  style: { flexShrink: 0 },
13525
- children: /* @__PURE__ */ g(z_, {
13541
+ children: /* @__PURE__ */ g(B_, {
13526
13542
  size: l,
13527
13543
  orbColors: t
13528
13544
  })
@@ -13554,8 +13570,8 @@ function B_({ copy: e, orbColors: t, primaryColor: n, onYes: r, onLater: i, isMo
13554
13570
  children: u
13555
13571
  })] });
13556
13572
  }
13557
- function V_({ copy: e, orbColors: t, primaryColor: n, onVoice: r, onText: i, onClose: a, isMobile: o, isClosing: s }) {
13558
- let c = n || M_.green, l = P_(c);
13573
+ function H_({ copy: e, orbColors: t, primaryColor: n, onVoice: r, onText: i, onClose: a, isMobile: o, isClosing: s }) {
13574
+ let c = n || N_.green, l = F_(c);
13559
13575
  return /* @__PURE__ */ _(oh.div, {
13560
13576
  initial: {
13561
13577
  scale: 50 / 350,
@@ -13626,7 +13642,7 @@ function V_({ copy: e, orbColors: t, primaryColor: n, onVoice: r, onText: i, onC
13626
13642
  children: /* @__PURE__ */ g("polyline", { points: "6 9 12 15 18 9" })
13627
13643
  })
13628
13644
  }),
13629
- /* @__PURE__ */ g(z_, {
13645
+ /* @__PURE__ */ g(B_, {
13630
13646
  size: 72,
13631
13647
  orbColors: t
13632
13648
  }),
@@ -13706,89 +13722,88 @@ function V_({ copy: e, orbColors: t, primaryColor: n, onVoice: r, onText: i, onC
13706
13722
  ]
13707
13723
  });
13708
13724
  }
13709
- function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i, apiBaseUrl: a, chatId: s, historyRef: l, onMessageSync: u, beaconSyncVoiceTranscript: d, widgetPosition: f = "bottom-right", voiceEndCounter: h, websiteName: v, voiceFirstMessage: y, captureVisitorEmail: b, emailRequired: x, emailCaptureEnabled: S = !0, listeningLabel: C = "Listening...", thinkingLabel: w = "Thinking...", enterChatModeLabel: T = "Enter Chat Mode", endConversationLabel: E = "End Conversation" }) {
13725
+ function U_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i, apiBaseUrl: a, chatId: s, historyRef: l, onMessageSync: u, beaconSyncVoiceTranscript: d, widgetPosition: f = "bottom-right", voiceEndCounter: h, websiteName: v, voiceFirstMessage: y, captureVisitorEmail: b, emailRequired: x, emailCaptureEnabled: S = !0, listeningLabel: C = "Listening...", thinkingLabel: w = "Thinking...", enterChatModeLabel: T = "Enter Chat Mode", endConversationLabel: E = "End Conversation" }) {
13710
13726
  c(() => (console.log("[FlowEngage:VoiceDebug] 🔵 VoiceMode MOUNTED"), () => console.log("[FlowEngage:VoiceDebug] 🔴 VoiceMode UNMOUNTED")), []);
13711
- let [D, O] = m("idle"), [k, A] = m(!1), [ee, te] = m(!1), [ne, j] = m(() => le(i) === "auto"), re = () => {
13727
+ let [D, O] = m("idle"), [k, A] = m(!1), [ee, te] = m(!1), [ne, j] = m(() => ce(i) === "auto"), M = () => {
13712
13728
  let e = ne ? "ask" : "auto";
13713
- ue(i, e), j(e === "auto");
13714
- }, [ie, ae] = m(!1), [oe, M] = m(""), [se, N] = m(""), ce = p(!1), P = p(!1), de = p(null), fe = p(0), pe = p(""), me = p(!1), he = p(0), ge = p(!1), _e = p(!1), ve = p(!1), ye = p([]), be = p(null), xe = p(""), Se = p(null), F = (e) => {
13715
- ge.current = e, e || (_e.current = !1), L.current?.setWalkthroughActive?.(e);
13729
+ le(i, e), j(e === "auto");
13730
+ }, [re, ie] = m(!1), [ae, N] = m(""), [oe, se] = m(""), P = p(!1), F = p(!1), ue = p(null), de = p(0), fe = p(""), pe = p(!1), me = p(0), he = p(!1), ge = p(!1), _e = p(!1), ve = p([]), ye = p(null), be = p(""), xe = p(null), I = (e) => {
13731
+ he.current = e, e || (ge.current = !1), R.current?.setWalkthroughActive?.(e);
13716
13732
  };
13717
- Se.current = async () => {
13718
- if (_e.current) return;
13733
+ xe.current = async () => {
13734
+ if (ge.current) return;
13719
13735
  let e = typeof window < "u" ? window.location.pathname : null;
13720
- if (e && be.current && e !== be.current) {
13721
- console.log("[FlowEngage] walkthrough ended — visitor left " + be.current), be.current = null, ye.current = [], F(!1);
13736
+ if (e && ye.current && e !== ye.current) {
13737
+ console.log("[FlowEngage] walkthrough ended — visitor left " + ye.current), ye.current = null, ve.current = [], I(!1);
13722
13738
  return;
13723
13739
  }
13724
- let t = ye.current;
13725
- I.current += 1;
13726
- let n = I.current, r = t[n];
13740
+ let t = ve.current;
13741
+ L.current += 1;
13742
+ let n = L.current, r = t[n];
13727
13743
  if (!r) {
13728
- if (F(!1), t.length) L.current?.sendUserMessage?.("That was the last section. Say so in one short sentence and ask if they want to explore any section further.");
13744
+ if (I(!1), t.length) R.current?.sendUserMessage?.("That was the last section. Say so in one short sentence and ask if they want to explore any section further.");
13729
13745
  else if (n === 0) {
13730
13746
  let e = "";
13731
13747
  try {
13732
- let t = await Ce.current?.["fwh-read-content-mvp"]?.({});
13748
+ let t = await Se.current?.["fwh-read-content-mvp"]?.({});
13733
13749
  typeof t == "string" && t && !/^Could not/i.test(t) && (e = t.slice(0, 2800));
13734
13750
  } catch {}
13735
- L.current?.sendUserMessage?.(e ? `Give the visitor a complete spoken overview of this page in 4-6 sentences, based ONLY on this page content:\n"""${e}"""\nThen ask which part they'd like to hear more about. Do not call any tool.` : "Give the visitor a complete spoken overview of this page in 4-6 sentences based on what you know about it, then ask which part they'd like to hear more about. Do not call any tool.", { suppressQuestion: !0 });
13751
+ R.current?.sendUserMessage?.(e ? `Give the visitor a complete spoken overview of this page in 4-6 sentences, based ONLY on this page content:\n"""${e}"""\nThen ask which part they'd like to hear more about. Do not call any tool.` : "Give the visitor a complete spoken overview of this page in 4-6 sentences based on what you know about it, then ask which part they'd like to hear more about. Do not call any tool.", { suppressQuestion: !0 });
13736
13752
  }
13737
13753
  return;
13738
13754
  }
13739
13755
  try {
13740
- await Ce.current?.highlightOnPage?.({ section_text: r });
13756
+ await Se.current?.highlightOnPage?.({ section_text: r });
13741
13757
  } catch (e) {
13742
13758
  console.warn("[FlowEngage] walkthrough highlight failed:", e?.message || e);
13743
13759
  }
13744
13760
  console.debug(`[FlowEngage] walkthrough step ${n + 1}/${t.length}: ${r}`);
13745
13761
  let i = "";
13746
13762
  try {
13747
- let e = await Ce.current?.["fwh-read-content-mvp"]?.({ section_text: r });
13763
+ let e = await Se.current?.["fwh-read-content-mvp"]?.({ section_text: r });
13748
13764
  typeof e == "string" && e && !/^Could not/i.test(e) && (i = e.slice(0, 2500));
13749
13765
  } catch {}
13750
- let a = i ? `Here is this section's full content — describe it from THIS text only, and do not call any tool:\n"""${i}"""\n` : "read the section's content silently first (fwh-read-content-mvp) if you don't already have it. ";
13751
- L.current?.sendUserMessage?.(`Describe the section titled "${r}" in 3-4 sentences, starting with ${n === 0 ? "Starting with" : "Next —"} ${r}. Describe ONLY this section. If this section contains named sub-items (steps, checklist entries, cards, plans, FAQs, team members), name EVERY one of them in order with a short phrase each — never skip or collapse them into a summary; ` + a + "This section is ON THE PAGE THE VISITOR IS ALREADY ON — do NOT call fwh-navigate-mvp, do not go to a product/detail page, and do not offer to, even if this section's name also matches a page name. Do not mention any other section, do not ask whether to continue, then stop.", { suppressQuestion: !0 });
13766
+ R.current?.sendUserMessage?.(`Describe the section titled "${r}".` + (i ? ` Its content:\n"""${i}"""` : ""), { suppressQuestion: !0 });
13752
13767
  };
13753
- let I = p(0), L = p(null), Ce = p(null), we = p(""), Te = p(async () => {}), ke = p(!1), je = p(!1), Me = p(!1), Ne = p(!1), Pe = p("minimized"), Ie = p(null), Le = p(null), R = p(null), ze = p(0), Be = p(!1), Ve = p("idle"), z = p(null), B = p(!1), He = p(null), Ue = o((e = "minimized") => {
13768
+ let L = p(0), R = p(null), Se = p(null), Ce = p(""), we = p(async () => {}), Oe = p(!1), Ae = p(!1), je = p(!1), Me = p(!1), Ne = p("minimized"), Fe = p(null), Ie = p(null), z = p(null), Re = p(0), ze = p(!1), Be = p("idle"), Ve = p(null), B = p(!1), He = p(null), Ue = o((e = "minimized") => {
13754
13769
  console.warn("[FlowEngage:VoiceDebug] 🛑 requestSessionShutdown called", {
13755
13770
  destination: e,
13756
13771
  stack: (/* @__PURE__ */ Error()).stack?.split("\n").slice(1, 4).join(" | ")
13757
- }), Pe.current = e, Ne.current = !0, queueMicrotask(() => {
13758
- ke.current || (ke.current = !0, Te.current?.());
13772
+ }), Ne.current = e, Me.current = !0, queueMicrotask(() => {
13773
+ Oe.current || (Oe.current = !0, we.current?.());
13759
13774
  });
13760
13775
  }, [l]), V = o(() => {
13761
- de.current &&= (clearTimeout(de.current), null);
13776
+ ue.current &&= (clearTimeout(ue.current), null);
13762
13777
  }, []);
13763
13778
  c(() => {
13764
13779
  if (x) {
13765
- ce.current = !1;
13780
+ P.current = !1;
13766
13781
  return;
13767
13782
  }
13768
- if (ce.current = !0, P.current = !1, ae(!1), V(), me.current) {
13769
- me.current = !1, L.current?.setMicMuted?.(!1);
13770
- let e = pe.current;
13771
- pe.current = "", L.current?.injectAgentSpeech?.("Thanks — I already have your email on file.", "interrupt"), e && L.current?.sendUserMessage?.(`The visitor's email is already on file — do not ask for it. Answer their question now: "${e}"`);
13783
+ if (P.current = !0, F.current = !1, ie(!1), V(), pe.current) {
13784
+ pe.current = !1, R.current?.setMicMuted?.(!1);
13785
+ let e = fe.current;
13786
+ fe.current = "", R.current?.injectAgentSpeech?.("Thanks — I already have your email on file.", "interrupt"), e && R.current?.sendUserMessage?.(`The visitor's email is already on file — do not ask for it. Answer their question now: "${e}"`);
13772
13787
  }
13773
- L.current?.sendContextualUpdate?.("EMAIL REQUIREMENT SATISFIED — the visitor's email is already on file. All earlier instructions about requiring or asking for an email are VOID. Never ask for it again.");
13788
+ R.current?.sendContextualUpdate?.("EMAIL REQUIREMENT SATISFIED — the visitor's email is already on file. All earlier instructions about requiring or asking for an email are VOID. Never ask for it again.");
13774
13789
  }, [x, V]);
13775
- let We = /(walk\s*(me\s*)?through|walkthrough|take me through|(complete|full|detailed) (overview|understanding|walkthrough|picture|breakdown|explanation)|give me (a|an|the) (overview|tour|walk)|tell me about (each|all)|go through (it|them|each|all)|overview of|one by one|tell me everything|explain (me )?(this|the) (whole |entire |full )?page|everything (about|on) this page|show me (each|all|around))/i, Ge = /(that covers everything|that was all|covered everything|that(?:'|’)?s everything)/i, Ke = /^((uh+|um+|so|well|okay|ok|yeah)[,.\s]+)*(yes|yeah|yep|yup|sure|ok(ay)?|please|continue|go on|next|keep going|carry on|go ahead|resume|back to the tour)[\s.!,]*$/i, qe = /(would you like (me )?to take you|shall i take you|want me to take you|would you like to (go|explore|visit|see)|take you there)/i, Je = /^((uh+|um+|oh|ah|so|well)[,.\s]+)*(cool|nice|great|awesome|wow|lovely|perfect|got it|gotcha|i see|understood|makes sense|interesting|right|alright|sounds good|mm+-?hmm+|hmm+|k)[\s.!,]*$/i, Ye = (e) => String(e || "").replace(/[\s.,!?]*((uh+|um+|er+|hmm+|mm+)[\s.,!?]*)+$/i, "").trim(), Xe = o(() => {
13776
- V(), de.current = setTimeout(() => {
13777
- if (!(!P.current || ce.current)) if (fe.current < 3) {
13778
- fe.current += 1;
13790
+ let We = /(that covers everything|that was all|covered everything|that(?:'|’)?s everything)/i, Ge = /^((uh+|um+|so|well|okay|ok|yeah)[,.\s]+)*(yes|yeah|yep|yup|sure|ok(ay)?|please|continue|go on|next|keep going|carry on|go ahead|resume|back to the tour)[\s.!,]*$/i, Ke = /(would you like (me )?to take you|shall i take you|want me to take you|would you like to (go|explore|visit|see)|take you there)/i, qe = /^((uh+|um+|oh|ah|so|well)[,.\s]+)*(cool|nice|great|awesome|wow|lovely|perfect|got it|gotcha|i see|understood|makes sense|interesting|right|alright|sounds good|mm+-?hmm+|hmm+|k)[\s.!,]*$/i, Je = (e) => String(e || "").replace(/[\s.,!?]*((uh+|um+|er+|hmm+|mm+)[\s.,!?]*)+$/i, "").trim(), Ye = o(() => {
13791
+ V(), ue.current = setTimeout(() => {
13792
+ if (!(!F.current || P.current)) if (de.current < 3) {
13793
+ de.current += 1;
13779
13794
  try {
13780
- L.current?.injectAgentSpeech?.("I still need your email in the box below to continue — could you enter it, please?", "queue");
13795
+ R.current?.injectAgentSpeech?.("I still need your email in the box below to continue — could you enter it, please?", "queue");
13781
13796
  } catch {}
13782
- Xe();
13797
+ Ye();
13783
13798
  } else {
13784
13799
  try {
13785
- L.current?.injectAgentSpeech?.("Since I haven't received your email, I'll close this session for now. Feel free to come back anytime — take care!", "queue");
13800
+ R.current?.injectAgentSpeech?.("Since I haven't received your email, I'll close this session for now. Feel free to come back anytime — take care!", "queue");
13786
13801
  } catch {}
13787
- P.current = !1, ae(!1), V(), Be.current = !0;
13802
+ F.current = !1, ie(!1), V(), ze.current = !0;
13788
13803
  }
13789
13804
  }, 1e4);
13790
- }, [V]), Ze = o(async (e) => {
13791
- Ne.current = !0;
13805
+ }, [V]), Xe = o(async (e) => {
13806
+ Me.current = !0;
13792
13807
  try {
13793
13808
  Pn();
13794
13809
  } catch {}
@@ -13796,12 +13811,12 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13796
13811
  Jh();
13797
13812
  } catch {}
13798
13813
  if (i) try {
13799
- Re(i);
13814
+ Le(i);
13800
13815
  } catch {}
13801
13816
  try {
13802
- await L.current?.endSession?.();
13817
+ await R.current?.endSession?.();
13803
13818
  } catch {}
13804
- let t = Ie.current, n = Le.current;
13819
+ let t = Fe.current, n = Ie.current;
13805
13820
  if (t && s && a) {
13806
13821
  let e = n ? Math.round((Date.now() - n) / 1e3) : 0;
13807
13822
  fetch(`${a}/api/voice/save-chat-recording`, {
@@ -13815,8 +13830,8 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13815
13830
  })
13816
13831
  }).catch((e) => console.warn("[FlowEngage] save-chat-recording failed:", e.message));
13817
13832
  }
13818
- if (Ie.current = null, Le.current = null, L.current = null, O("idle"), A(!1), ke.current = !1, Pr(), i) try {
13819
- Oe(i);
13833
+ if (Fe.current = null, Ie.current = null, R.current = null, O("idle"), A(!1), Oe.current = !1, Pr(), i) try {
13834
+ De(i);
13820
13835
  } catch {}
13821
13836
  typeof u == "function" && await u(l.current), e?.();
13822
13837
  }, [
@@ -13826,8 +13841,8 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13826
13841
  s,
13827
13842
  a
13828
13843
  ]);
13829
- Te.current = () => Ze(Pe.current === "chat" ? t : n), c(() => {
13830
- je.current = k;
13844
+ we.current = () => Xe(Ne.current === "chat" ? t : n), c(() => {
13845
+ Ae.current = k;
13831
13846
  }, [k]), c(() => {
13832
13847
  h && Ue("chat");
13833
13848
  }, [h]), c(() => {
@@ -13839,13 +13854,13 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13839
13854
  }
13840
13855
  try {
13841
13856
  if ((await navigator.mediaDevices.getUserMedia({ audio: !0 })).getTracks().forEach((e) => e.stop()), e) return;
13842
- l.current = [], we.current = "", ke.current = !1, Me.current = !1, Ne.current = !1, Pe.current = "minimized", Nr({ onBeforeNavigate: () => {
13857
+ l.current = [], Ce.current = "", Oe.current = !1, je.current = !1, Me.current = !1, Ne.current = "minimized", Nr({ onBeforeNavigate: () => {
13843
13858
  if (i && l.current.length > 0) try {
13844
13859
  let e = o_(l.current);
13845
- e && Ee(i, e);
13860
+ e && Te(i, e);
13846
13861
  } catch {}
13847
13862
  if (!$n()) {
13848
- let e = Ie.current, t = Le.current;
13863
+ let e = Fe.current, t = Ie.current;
13849
13864
  if (e && s && a) try {
13850
13865
  let n = t ? Math.round((Date.now() - t) / 1e3) : 0, r = JSON.stringify({
13851
13866
  chatId: s,
@@ -13858,31 +13873,31 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13858
13873
  headers: { "Content-Type": "application/json" },
13859
13874
  body: r,
13860
13875
  keepalive: !0
13861
- }).catch(() => {}), Ie.current = null, Le.current = null;
13876
+ }).catch(() => {}), Fe.current = null, Ie.current = null;
13862
13877
  } catch {}
13863
13878
  }
13864
- Ae();
13879
+ ke();
13865
13880
  } });
13866
13881
  let t = k_(E_({
13867
13882
  siteId: i || null,
13868
13883
  apiBaseUrl: a || null,
13869
13884
  chatId: s || null,
13870
- getLastUserVoiceText: () => we.current,
13885
+ getLastUserVoiceText: () => Ce.current,
13871
13886
  beaconSyncFullVoiceHistory: () => d?.(l.current),
13872
- isWalkthroughActive: () => ge.current && !_e.current,
13887
+ isWalkthroughActive: () => he.current && !ge.current,
13873
13888
  requestEndSession: () => {
13874
- Be.current = !0;
13889
+ ze.current = !0;
13875
13890
  },
13876
13891
  requestEmailCollection: () => {
13877
- S && (ce.current || P.current || (P.current = !0, fe.current = 0, ae(!0), Xe()));
13892
+ S && (P.current || F.current || (F.current = !0, de.current = 0, ie(!0), Ye()));
13878
13893
  }
13879
- })), n = !!(i ? De(i) : null)?.transcript, r = i ? Re(i) : null, u = !!r, m = typeof window < "u" ? window.location.pathname : "/", h = typeof document < "u" ? document.title : "", g = m.replace(/^\/[a-z]{2}(?:-[a-z]{2})?(?=\/|$)/i, "") || "/", _ = g === "/" || g === "", b = {
13894
+ })), n = !!(i ? Ee(i) : null)?.transcript, r = i ? Le(i) : null, u = !!r, m = typeof window < "u" ? window.location.pathname : "/", h = typeof document < "u" ? document.title : "", g = m.replace(/^\/[a-z]{2}(?:-[a-z]{2})?(?=\/|$)/i, "") || "/", _ = g === "/" || g === "", b = {
13880
13895
  apiBaseUrl: a,
13881
13896
  siteId: i,
13882
13897
  chatId: s,
13883
13898
  clientTools: t
13884
13899
  };
13885
- Ce.current = t;
13900
+ Se.current = t;
13886
13901
  let C = (m.split("/").filter(Boolean).pop() || "").replace(/[-_]/g, " ").replace(/\b\w/g, (e) => e.toUpperCase()), w = "";
13887
13902
  h && h.includes("|") && (w = h.split("|").map((e) => e.trim()).filter(Boolean).reduce((e, t) => e.length <= t.length ? e : t));
13888
13903
  let T = w || C || "", E = T ? `the ${T} page` : "this page", D = (() => {
@@ -13898,21 +13913,24 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13898
13913
  let e = v || "";
13899
13914
  b.greeting = y || (_ ? e ? `Hi, welcome to ${e}! How may I help you?` : "Hi, welcome! How may I help you?" : `Welcome to ${E}! How may I help you?`), _ || console.log(`[FlowEngage] 🏠 Page-context greeting: "${T}" for ${m}`);
13900
13915
  }
13901
- let k = !1, ee = !1, te = S && !!x && !ve.current, ne = await kh.startSession({
13916
+ let k = !1, ee = !1, te = S && !!x && !_e.current, ne = await kh.startSession({
13902
13917
  ...b,
13903
13918
  onConnect: ({ conversationId: e }) => {
13904
- Ie.current = e, Le.current = Date.now(), console.log("[FlowEngage] 🎙️ AI chat session connected:", e);
13919
+ Fe.current = e, Ie.current = Date.now(), console.log("[FlowEngage] 🎙️ AI chat session connected:", e);
13905
13920
  },
13906
13921
  onUnhandledClientToolCall: (e) => console.error("[FlowEngage] Unhandled tool:", e?.tool_name),
13907
13922
  onSessionInfo: ({ emailOnFile: e }) => {
13908
- ve.current = !!e, e && (ce.current = !0, P.current = !1, ae(!1), V(), console.log("[FlowEngage] email already on file per server — gate disabled"));
13923
+ _e.current = !!e, e && (P.current = !0, F.current = !1, ie(!1), V(), console.log("[FlowEngage] email already on file per server — gate disabled"));
13909
13924
  },
13910
13925
  onAgentTurnEnd: () => {
13911
- e || ge.current && (_e.current || me.current || setTimeout(() => Se.current?.(), 250));
13926
+ e || he.current && (ge.current || pe.current || setTimeout(() => xe.current?.(), 250));
13912
13927
  },
13913
13928
  onSessionEnding: () => {
13914
13929
  e || Ue("minimized");
13915
13930
  },
13931
+ onStartWalkthrough: () => {
13932
+ e || (typeof window < "u" && (window.__fe_user_nav_during_speech = null), I(!0), ge.current = !1, me.current = 0, L.current = -1, ve.current = O_(), ye.current = typeof window < "u" ? window.location.pathname : null, console.log(`[FlowEngage] walkthrough started — ${ve.current.length} sections on this page`), xe.current?.());
13933
+ },
13916
13934
  onPanel: ({ title: t, items: n }) => {
13917
13935
  e || Kh(n, {
13918
13936
  title: t || "Products",
@@ -13923,99 +13941,97 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
13923
13941
  onModeChange: ({ mode: t, tentative: n }) => {
13924
13942
  if (!e) {
13925
13943
  if (t === "speaking") {
13926
- z.current &&= (clearTimeout(z.current), null), He.current &&= (clearTimeout(He.current), null), O("speaking"), Ve.current = "speaking", B.current = !1;
13944
+ Ve.current &&= (clearTimeout(Ve.current), null), He.current &&= (clearTimeout(He.current), null), O("speaking"), Be.current = "speaking", B.current = !1;
13927
13945
  return;
13928
13946
  }
13929
13947
  if (t === "user-speaking") {
13930
- if (P.current && !ce.current && Xe(), He.current &&= (clearTimeout(He.current), null), Ve.current === "speaking") return;
13948
+ if (F.current && !P.current && Ye(), He.current &&= (clearTimeout(He.current), null), Be.current === "speaking") return;
13931
13949
  try {
13932
13950
  Pn();
13933
13951
  } catch {}
13934
- z.current &&= (clearTimeout(z.current), null), Ve.current !== "listening" && (O("listening"), Ve.current = "listening");
13952
+ Ve.current &&= (clearTimeout(Ve.current), null), Be.current !== "listening" && (O("listening"), Be.current = "listening");
13935
13953
  return;
13936
13954
  }
13937
13955
  if (t === "thinking") {
13938
- if (z.current &&= (clearTimeout(z.current), null), He.current &&= (clearTimeout(He.current), null), Ve.current === "speaking") return;
13939
- O("thinking"), Ve.current = "thinking", n && (He.current = setTimeout(() => {
13940
- He.current = null, !(e || Ve.current !== "thinking") && (Ve.current = "listening", O("listening"));
13956
+ if (Ve.current &&= (clearTimeout(Ve.current), null), He.current &&= (clearTimeout(He.current), null), Be.current === "speaking") return;
13957
+ O("thinking"), Be.current = "thinking", n && (He.current = setTimeout(() => {
13958
+ He.current = null, !(e || Be.current !== "thinking") && (Be.current = "listening", O("listening"));
13941
13959
  }, 4e3));
13942
13960
  return;
13943
13961
  }
13944
- if (Ve.current = "listening", Be.current) {
13945
- Be.current = !1, Ue();
13962
+ if (Be.current = "listening", ze.current) {
13963
+ ze.current = !1, Ue();
13946
13964
  return;
13947
13965
  }
13948
- if (te && !ee && !ce.current && !ve.current) {
13966
+ if (te && !ee && !P.current && !_e.current) {
13949
13967
  ee = !0;
13950
13968
  try {
13951
- L.current?.sendContextualUpdate?.("The visitor hasn't given their email yet; the app will ask for it when they first speak.");
13969
+ R.current?.sendContextualUpdate?.("The visitor hasn't given their email yet; the app will ask for it when they first speak.");
13952
13970
  } catch {}
13953
13971
  }
13954
- z.current && clearTimeout(z.current), z.current = setTimeout(() => {
13955
- e || Ve.current !== "speaking" && (B.current || (z.current = null, Ve.current = "listening", O("listening")));
13972
+ Ve.current && clearTimeout(Ve.current), Ve.current = setTimeout(() => {
13973
+ e || Be.current !== "speaking" && (B.current || (Ve.current = null, Be.current = "listening", O("listening")));
13956
13974
  }, 1200);
13957
13975
  }
13958
13976
  },
13959
13977
  onMessage: (t) => {
13960
- if (e || me.current && t.role !== "user" && !/email/i.test(String(t.message || ""))) return;
13978
+ if (e || pe.current && t.role !== "user" && !/email/i.test(String(t.message || ""))) return;
13961
13979
  let n = t.role === "user" && /^(Describe the section titled "|\[SYSTEM:|Give the visitor a complete spoken overview|That was the last section)/.test(String(t.message || "").trim());
13962
13980
  if (t.role === "user" && !n) try {
13963
13981
  Jh();
13964
13982
  } catch {}
13965
- let r = /\b(?:this|that|the)\s+(?:case\s*stud(?:y|ies)|product|article|blog|post|item|service)\b/i.test(String(t.message || ""));
13966
- if (!n && !r && t.role === "user" && We.test(String(t.message || ""))) typeof window < "u" && (window.__fe_user_nav_during_speech = null), F(!0), _e.current = !1, he.current = 0, I.current = -1, ye.current = O_(), be.current = typeof window < "u" ? window.location.pathname : null, setTimeout(() => Se.current?.(), 400), console.log(`[FlowEngage] walkthrough armed — ${ye.current.length} sections on this page`);
13967
- else if (!n && t.role === "user" && ge.current) {
13968
- let e = String(t.message || "").trim(), n = Ye(e), r = (e) => !!e && (Ke.test(e) || Je.test(e));
13969
- qe.test(xe.current || "") ? (console.log("[FlowEngage] walkthrough ended — visitor accepted a navigation offer"), be.current = null, ye.current = [], F(!1)) : !n || r(e) || r(n) ? _e.current && (_e.current = !1, console.debug("[FlowEngage] walkthrough resumed by visitor"), setTimeout(() => Se.current?.(), 300)) : (console.log("[FlowEngage] walkthrough ended — visitor moved to a new topic"), be.current = null, ye.current = [], F(!1));
13983
+ if (!n && t.role === "user" && he.current) {
13984
+ let e = String(t.message || "").trim(), n = Je(e), r = (e) => !!e && (Ge.test(e) || qe.test(e));
13985
+ Ke.test(be.current || "") ? (console.log("[FlowEngage] walkthrough ended — visitor accepted a navigation offer"), ye.current = null, ve.current = [], I(!1)) : !n || r(e) || r(n) ? ge.current && (ge.current = !1, console.debug("[FlowEngage] walkthrough resumed by visitor"), setTimeout(() => xe.current?.(), 300)) : (console.log("[FlowEngage] walkthrough ended — visitor moved to a new topic"), ye.current = null, ve.current = [], I(!1));
13970
13986
  }
13971
- if (t.role !== "user" && !n && (xe.current = String(t.message || "")), t.role !== "user" && Ge.test(String(t.message || ""))) {
13972
- let e = ye.current.length;
13973
- !e || I.current >= e - 1 ? F(!1) : console.debug(`[FlowEngage] agent claimed completion at step ${I.current + 1}/${e} — ignoring, tour continues`);
13987
+ if (t.role !== "user" && !n && (be.current = String(t.message || "")), t.role !== "user" && We.test(String(t.message || ""))) {
13988
+ let e = ve.current.length;
13989
+ !e || L.current >= e - 1 ? I(!1) : console.debug(`[FlowEngage] agent claimed completion at step ${L.current + 1}/${e} — ignoring, tour continues`);
13974
13990
  }
13975
- let a = t.role === "user" ? "user" : "bot", o = t.message || t.text || t.content || "";
13976
- if (o) {
13977
- if (a === "user" && (we.current = o, typeof window < "u" && (window.__fe_user_nav_during_speech = null), B.current = !0, z.current &&= (clearTimeout(z.current), null), Ve.current !== "speaking" && (O("thinking"), Ve.current = "thinking"), te && !k && !ce.current && !ve.current && (k = !0, pe.current = o, me.current = !0, L.current?.injectAgentSpeech?.("Before I answer that, could you please enter your email in the text box below?", "interrupt"), L.current?.setMicMuted?.(!0), P.current || (P.current = !0, fe.current = 0, ae(!0), Xe()))), l.current = [...l.current, {
13978
- sender: a,
13979
- message: o,
13991
+ let r = t.role === "user" ? "user" : "bot", a = t.message || t.text || t.content || "";
13992
+ if (a) {
13993
+ if (r === "user" && (Ce.current = a, typeof window < "u" && (window.__fe_user_nav_during_speech = null), B.current = !0, Ve.current &&= (clearTimeout(Ve.current), null), Be.current !== "speaking" && (O("thinking"), Be.current = "thinking"), te && !k && !P.current && !_e.current && (k = !0, fe.current = a, pe.current = !0, R.current?.injectAgentSpeech?.("Before I answer that, could you please enter your email in the text box below?", "interrupt"), R.current?.setMicMuted?.(!0), F.current || (F.current = !0, de.current = 0, ie(!0), Ye()))), l.current = [...l.current, {
13994
+ sender: r,
13995
+ message: a,
13980
13996
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
13981
13997
  debug: t.debug
13982
13998
  }], i) try {
13983
13999
  let e = o_(l.current);
13984
- e && Ee(i, e);
14000
+ e && Te(i, e);
13985
14001
  } catch {}
13986
- if (R_(a, o)) {
13987
- Be.current = !0;
14002
+ if (z_(r, a)) {
14003
+ ze.current = !0;
13988
14004
  return;
13989
14005
  }
13990
- je.current && a === "bot" && /are you still there|still there\??|hello\?|anyone there|checking in|you there|are you available|is anyone|did you step away/i.test(o) && (ze.current += 1, ze.current >= 5 && Ue("minimized"));
14006
+ Ae.current && r === "bot" && /are you still there|still there\??|hello\?|anyone there|checking in|you there|are you available|is anyone|did you step away/i.test(a) && (Re.current += 1, Re.current >= 5 && Ue("minimized"));
13991
14007
  }
13992
14008
  },
13993
14009
  onError: (t) => {
13994
- if (!e && !Ne.current && !Me.current && !Fe()) {
13995
- Me.current = !0, console.error("[FlowEngageVoiceCall] session:error", {
14010
+ if (!e && !Me.current && !je.current && !Pe()) {
14011
+ je.current = !0, console.error("[FlowEngageVoiceCall] session:error", {
13996
14012
  message: t?.message,
13997
14013
  name: t?.name,
13998
14014
  raw: t
13999
14015
  });
14000
14016
  try {
14001
- L.current?.setMicMuted?.(!0);
14017
+ R.current?.setMicMuted?.(!0);
14002
14018
  } catch {}
14003
14019
  A(!0), O("error"), Ue("chat");
14004
14020
  }
14005
14021
  },
14006
14022
  onDisconnect: (t) => {
14007
- if (e || Ne.current || Me.current || Fe()) return;
14023
+ if (e || Me.current || je.current || Pe()) return;
14008
14024
  let n = l.current?.length || 0;
14009
14025
  console.warn("[FlowEngageVoiceCall] session:disconnected", {
14010
14026
  historyCount: n,
14011
14027
  reason: t?.reason,
14012
14028
  closeCode: t?.context?.code,
14013
14029
  closeReason: t?.context?.reason || t?.message,
14014
- lastUserText: we.current || "",
14015
- wasMuted: je.current
14016
- }), Me.current = !0;
14030
+ lastUserText: Ce.current || "",
14031
+ wasMuted: Ae.current
14032
+ }), je.current = !0;
14017
14033
  try {
14018
- L.current?.setMicMuted?.(!0);
14034
+ R.current?.setMicMuted?.(!0);
14019
14035
  } catch {}
14020
14036
  A(!0), Ue("chat");
14021
14037
  }
@@ -14024,7 +14040,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14024
14040
  console.warn("[FlowEngage:VoiceDebug] ❌ cancelled=true after startSession resolved — killing session immediately"), ne.endSession().catch(() => {});
14025
14041
  return;
14026
14042
  }
14027
- o = ne, L.current = ne, O("listening");
14043
+ o = ne, R.current = ne, O("listening");
14028
14044
  try {
14029
14045
  sessionStorage.setItem(`el_conv_${i}`, ne.getId());
14030
14046
  } catch {}
@@ -14039,7 +14055,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14039
14055
  let e = "#flowengage-root, .flowengage-shell, .flowengage-widget-root", t = document.querySelector("main, [role='main']") || document.body, n = Array.from(t.querySelectorAll("h1, h2, h3")).filter((t) => !t.closest(e)).map((e) => e.textContent.replace(/\s+/g, " ").trim()).filter((e) => e.length > 2 && e.length < 200);
14040
14056
  n.length || (n = Array.from(document.body.querySelectorAll("h1, h2, h3")).filter((t) => !t.closest(e)).map((e) => e.textContent.replace(/\s+/g, " ").trim()).filter((e) => e.length > 2 && e.length < 200)), n.length && (r = [...new Set(n)].slice(0, 15).join(" | "));
14041
14057
  } catch {}
14042
- x || ne.sendContextualUpdate("The visitor's email is already on file from an earlier session."), ne.sendContextualUpdate(j_(e, r, n));
14058
+ x || ne.sendContextualUpdate("The visitor's email is already on file from an earlier session."), M_(ne, e, r, n);
14043
14059
  } catch {}
14044
14060
  if (typeof window < "u") {
14045
14061
  let t = window.location.pathname, n = Date.now(), r = (e) => {
@@ -14072,7 +14088,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14072
14088
  if (o) {
14073
14089
  typeof window < "u" && (window.__fe_agent_nav = null), console.log(`[FlowEngage] agent-driven navigation settled: "${s}" → "${i}"`);
14074
14090
  try {
14075
- L.current?.sendContextualUpdate?.(j_(c, u));
14091
+ M_(R.current, c, u);
14076
14092
  } catch {}
14077
14093
  return;
14078
14094
  }
@@ -14084,7 +14100,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14084
14100
  ts: Date.now()
14085
14101
  }), console.log(`[FlowEngage] visitor navigation detected: "${s}" → "${i}" (agent target: ${D || "none"})`);
14086
14102
  try {
14087
- L.current?.sendContextualUpdate?.(j_(c, u, null, f));
14103
+ M_(R.current, c, u, null, f);
14088
14104
  } catch {}
14089
14105
  };
14090
14106
  c = window.history.pushState.bind(window.history), window.history.pushState = (...e) => {
@@ -14092,7 +14108,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14092
14108
  }, p = () => setTimeout(i, 50), window.addEventListener("popstate", p);
14093
14109
  }
14094
14110
  } catch (r) {
14095
- e || (console.error("[FlowEngage] startSession failed", r), r.message && r.message.includes("Too many voice sessions") ? (alert(r.message), n && n("minimized")) : (O("error"), Pe.current = "chat", window.setTimeout(() => {
14111
+ e || (console.error("[FlowEngage] startSession failed", r), r.message && r.message.includes("Too many voice sessions") ? (alert(r.message), n && n("minimized")) : (O("error"), Ne.current = "chat", window.setTimeout(() => {
14096
14112
  e || t?.();
14097
14113
  }, 0)));
14098
14114
  }
@@ -14101,15 +14117,15 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14101
14117
  agentId: r,
14102
14118
  siteId: i,
14103
14119
  apiBaseUrl: a
14104
- }), e = !0, Ne.current = !0;
14120
+ }), e = !0, Me.current = !0;
14105
14121
  try {
14106
14122
  Pn();
14107
14123
  } catch {}
14108
14124
  if (i) try {
14109
- Re(i);
14125
+ Le(i);
14110
14126
  } catch {}
14111
- typeof window < "u" && (window.__fe_user_nav_during_speech = null), Pr(), z.current &&= (clearTimeout(z.current), null), He.current &&= (clearTimeout(He.current), null), de.current &&= (clearTimeout(de.current), null), B.current = !1, Ve.current = "idle", c && typeof window < "u" && (window.history.pushState = c), p && typeof window < "u" && window.removeEventListener("popstate", p);
14112
- let t = o || L.current, n = Ie.current, d = Le.current;
14127
+ typeof window < "u" && (window.__fe_user_nav_during_speech = null), Pr(), Ve.current &&= (clearTimeout(Ve.current), null), He.current &&= (clearTimeout(He.current), null), ue.current &&= (clearTimeout(ue.current), null), B.current = !1, Be.current = "idle", c && typeof window < "u" && (window.history.pushState = c), p && typeof window < "u" && window.removeEventListener("popstate", p);
14128
+ let t = o || R.current, n = Fe.current, d = Ie.current;
14113
14129
  if (t?.endSession?.().catch(() => {}), n && s && a) {
14114
14130
  let e = d ? Math.round((Date.now() - d) / 1e3) : 0, t = JSON.stringify({
14115
14131
  chatId: s,
@@ -14122,7 +14138,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14122
14138
  headers: { "Content-Type": "application/json" },
14123
14139
  body: t,
14124
14140
  keepalive: !0
14125
- }).catch(() => {}), Ie.current = null, Le.current = null;
14141
+ }).catch(() => {}), Fe.current = null, Ie.current = null;
14126
14142
  }
14127
14143
  typeof u == "function" && l.current.length > 0 && u(l.current).catch?.(() => {});
14128
14144
  };
@@ -14135,48 +14151,48 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14135
14151
  if (!ee) return;
14136
14152
  let e = (e) => {
14137
14153
  let t = e.composedPath?.()?.[0] || e.target;
14138
- R.current && !R.current.contains(t) && te(!1);
14154
+ z.current && !z.current.contains(t) && te(!1);
14139
14155
  };
14140
14156
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
14141
14157
  }, [ee]);
14142
- let H = async () => {
14143
- if (L.current) try {
14158
+ let Ze = async () => {
14159
+ if (R.current) try {
14144
14160
  if (k) {
14145
- ze.current = 0, await L.current.setMicMuted?.(!1), A(!1);
14161
+ Re.current = 0, await R.current.setMicMuted?.(!1), A(!1);
14146
14162
  try {
14147
- L.current.sendContextualUpdate?.("[MIC] The visitor unmuted their microphone.");
14163
+ R.current.sendContextualUpdate?.("[MIC] The visitor unmuted their microphone.");
14148
14164
  } catch {}
14149
14165
  } else {
14150
- ze.current = 0, await L.current.setMicMuted?.(!0), A(!0);
14166
+ Re.current = 0, await R.current.setMicMuted?.(!0), A(!0);
14151
14167
  try {
14152
- L.current.sendContextualUpdate?.("[MIC] The visitor muted their microphone.");
14168
+ R.current.sendContextualUpdate?.("[MIC] The visitor muted their microphone.");
14153
14169
  } catch {}
14154
14170
  }
14155
14171
  } catch {}
14156
- }, U = o(async (e) => {
14172
+ }, H = o(async (e) => {
14157
14173
  e?.preventDefault?.();
14158
- let t = oe.trim().toLowerCase();
14174
+ let t = ae.trim().toLowerCase();
14159
14175
  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)) {
14160
- N("Please enter a valid email address.");
14176
+ se("Please enter a valid email address.");
14161
14177
  return;
14162
14178
  }
14163
- N(""), ce.current = !0, P.current = !1, V(), ae(!1), M(""), me.current = !1;
14179
+ se(""), P.current = !0, F.current = !1, V(), ie(!1), N(""), pe.current = !1;
14164
14180
  try {
14165
14181
  typeof b == "function" && await b(t);
14166
14182
  } catch {}
14167
- L.current?.setMicMuted?.(!1);
14168
- let n = pe.current;
14169
- pe.current = "";
14183
+ R.current?.setMicMuted?.(!1);
14184
+ let n = fe.current;
14185
+ fe.current = "";
14170
14186
  try {
14171
- L.current?.injectAgentSpeech?.("Thank you for submitting your email."), L.current?.sendUserMessage?.(n || "The visitor's email is on file. Carry on helping them and never ask for it again.");
14187
+ R.current?.injectAgentSpeech?.("Thank you for submitting your email."), R.current?.sendUserMessage?.(n || "The visitor's email is on file. Carry on helping them and never ask for it again.");
14172
14188
  } catch {}
14173
14189
  }, [
14174
- oe,
14190
+ ae,
14175
14191
  b,
14176
14192
  V
14177
- ]), Qe = Array.isArray(e) && e[0] || "#3B82F6";
14193
+ ]), U = Array.isArray(e) && e[0] || "#3B82F6";
14178
14194
  return /* @__PURE__ */ _("div", {
14179
- ref: R,
14195
+ ref: z,
14180
14196
  style: {
14181
14197
  position: "relative",
14182
14198
  display: "flex",
@@ -14186,8 +14202,8 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14186
14202
  animation: "fe-orb-slide-up 0.42s cubic-bezier(0.16,1,0.3,1)"
14187
14203
  },
14188
14204
  children: [
14189
- ie && /* @__PURE__ */ _("form", {
14190
- onSubmit: U,
14205
+ re && /* @__PURE__ */ _("form", {
14206
+ onSubmit: H,
14191
14207
  style: {
14192
14208
  width: "270px",
14193
14209
  maxWidth: "calc(100vw - 40px)",
@@ -14218,9 +14234,9 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14218
14234
  inputMode: "email",
14219
14235
  autoComplete: "email",
14220
14236
  autoFocus: !0,
14221
- value: oe,
14237
+ value: ae,
14222
14238
  onChange: (e) => {
14223
- M(e.target.value), se && N("");
14239
+ N(e.target.value), oe && se("");
14224
14240
  },
14225
14241
  placeholder: "you@example.com",
14226
14242
  style: {
@@ -14228,33 +14244,33 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14228
14244
  boxSizing: "border-box",
14229
14245
  padding: "10px 12px",
14230
14246
  borderRadius: "10px",
14231
- border: se ? "1.5px solid #ef4444" : "1.5px solid #4b5563",
14247
+ border: oe ? "1.5px solid #ef4444" : "1.5px solid #4b5563",
14232
14248
  background: "#1f2937",
14233
14249
  color: "white",
14234
14250
  fontSize: "14px",
14235
14251
  outline: "none"
14236
14252
  }
14237
14253
  }),
14238
- se && /* @__PURE__ */ g("span", {
14254
+ oe && /* @__PURE__ */ g("span", {
14239
14255
  style: {
14240
14256
  color: "#f87171",
14241
14257
  fontSize: "12px"
14242
14258
  },
14243
- children: se
14259
+ children: oe
14244
14260
  }),
14245
14261
  /* @__PURE__ */ g("button", {
14246
14262
  type: "submit",
14247
- disabled: !oe.trim(),
14263
+ disabled: !ae.trim(),
14248
14264
  style: {
14249
14265
  width: "100%",
14250
14266
  padding: "10px 12px",
14251
14267
  borderRadius: "10px",
14252
14268
  border: "none",
14253
- background: oe.trim() ? Qe : "#374151",
14269
+ background: ae.trim() ? U : "#374151",
14254
14270
  color: "white",
14255
14271
  fontSize: "14px",
14256
14272
  fontWeight: 600,
14257
- cursor: oe.trim() ? "pointer" : "default",
14273
+ cursor: ae.trim() ? "pointer" : "default",
14258
14274
  transition: "background 0.2s ease"
14259
14275
  },
14260
14276
  children: "Submit"
@@ -14296,7 +14312,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14296
14312
  },
14297
14313
  children: "Muted"
14298
14314
  }),
14299
- /* @__PURE__ */ g(z_, {
14315
+ /* @__PURE__ */ g(B_, {
14300
14316
  size: 72,
14301
14317
  voiceState: D,
14302
14318
  isMuted: k,
@@ -14319,7 +14335,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14319
14335
  alignItems: "center"
14320
14336
  },
14321
14337
  children: [/* @__PURE__ */ g("button", {
14322
- onClick: H,
14338
+ onClick: Ze,
14323
14339
  title: k ? "Unmute" : "Mute",
14324
14340
  style: {
14325
14341
  width: "24px",
@@ -14414,7 +14430,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14414
14430
  children: [
14415
14431
  /* @__PURE__ */ _("button", {
14416
14432
  onClick: () => {
14417
- te(!1), Pe.current = "chat", Ze(t);
14433
+ te(!1), Ne.current = "chat", Xe(t);
14418
14434
  },
14419
14435
  style: {
14420
14436
  display: "flex",
@@ -14442,7 +14458,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14442
14458
  children: [/* @__PURE__ */ g(vg, {}), T]
14443
14459
  }),
14444
14460
  i && /* @__PURE__ */ _("button", {
14445
- onClick: () => re(),
14461
+ onClick: () => M(),
14446
14462
  style: {
14447
14463
  display: "flex",
14448
14464
  alignItems: "center",
@@ -14518,7 +14534,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14518
14534
  }),
14519
14535
  /* @__PURE__ */ _("button", {
14520
14536
  onClick: () => {
14521
- te(!1), Pe.current = "minimized", Ze(n);
14537
+ te(!1), Ne.current = "minimized", Xe(n);
14522
14538
  },
14523
14539
  style: {
14524
14540
  display: "flex",
@@ -14595,7 +14611,7 @@ function H_({ orbColors: e, onEnterChat: t, onEndChat: n, agentId: r, siteId: i,
14595
14611
  ]
14596
14612
  });
14597
14613
  }
14598
- function U_({ orbColors: e }) {
14614
+ function W_({ orbColors: e }) {
14599
14615
  let t = Array.isArray(e) && e.length > 0 ? e : [
14600
14616
  "#135bd8",
14601
14617
  "#ef334b",
@@ -14614,7 +14630,7 @@ function U_({ orbColors: e }) {
14614
14630
  `.replace(/\s+/g, " ").trim()
14615
14631
  } });
14616
14632
  }
14617
- var W_ = () => /* @__PURE__ */ g("div", {
14633
+ var G_ = () => /* @__PURE__ */ g("div", {
14618
14634
  style: {
14619
14635
  display: "flex",
14620
14636
  marginBottom: "12px",
@@ -14644,11 +14660,11 @@ var W_ = () => /* @__PURE__ */ g("div", {
14644
14660
  } }, e))
14645
14661
  })
14646
14662
  });
14647
- function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i, quickChatOptions: a, onQuickChatSelect: o, isMobile: s, chatHistory: l, isAiTyping: u, isAgentTyping: d, activeScreen: f, agentName: v, agentHeadshot: y, fallbackAgentName: b, input: x, setInput: S, onSubmit: C, isConversationEnded: w, isLoading: T, isRateLimited: E, rateLimitMessage: D, selectedFile: O, onFileSelect: k, onRemoveSelectedFile: A, attachmentError: ee, isUploadingAttachment: te, requiresEmail: ne, emailInput: j, setEmailInput: re, emailError: ie, emailCaptureSuccess: ae, replyContext: oe, setReplyContext: M, webRTCError: se, micError: N, setMicError: ce, dismissCallError: P, activeCallId: de, isCallMuted: fe, toggleCallMute: pe, endWebRTCCall: me, formatCallDuration: he, callDurationSeconds: ge, isCallMinimized: _e, onExpand: ve, onCollapse: ye, onStartVoice: be, voiceEnabled: xe, headerBgColor: Se, onNewChat: F, showPoweredBy: I, privacyPolicyUrl: L, getVisitorChatHistory: Ce, resumeChat: we, isSessionRestoring: Te, isClosing: Ee }) {
14648
- let De = l.length > 0, Oe = T || E || w, ke = !!de, [Ae, je] = m(!1), { resolvedConfig: Me } = kn(), Ne = Me?.siteId || null, [Pe, Fe] = m(() => le(Ne) === "auto"), Ie = () => {
14649
- let e = Pe ? "ask" : "auto";
14650
- ue(Ne, e), Fe(e === "auto");
14651
- }, [Le, Re] = m(!1), [R, ze] = m([]), [Be, Ve] = m(!1), z = p(null), [B, He] = m(() => typeof window < "u" ? window.visualViewport?.height ?? window.innerHeight : 600), [Ue, V] = m(0);
14663
+ function K_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i, quickChatOptions: a, onQuickChatSelect: o, isMobile: s, chatHistory: l, isAiTyping: u, isAgentTyping: d, activeScreen: f, agentName: v, agentHeadshot: y, fallbackAgentName: b, input: x, setInput: S, onSubmit: C, isConversationEnded: w, isLoading: T, isRateLimited: E, rateLimitMessage: D, selectedFile: O, onFileSelect: k, onRemoveSelectedFile: A, attachmentError: ee, isUploadingAttachment: te, requiresEmail: ne, emailInput: j, setEmailInput: M, emailError: re, emailCaptureSuccess: ie, replyContext: ae, setReplyContext: N, webRTCError: oe, micError: se, setMicError: P, dismissCallError: F, activeCallId: ue, isCallMuted: de, toggleCallMute: fe, endWebRTCCall: pe, formatCallDuration: me, callDurationSeconds: he, isCallMinimized: ge, onExpand: _e, onCollapse: ve, onStartVoice: ye, voiceEnabled: be, headerBgColor: xe, onNewChat: I, showPoweredBy: L, privacyPolicyUrl: R, getVisitorChatHistory: Se, resumeChat: Ce, isSessionRestoring: we, isClosing: Te }) {
14664
+ let Ee = l.length > 0, De = T || E || w, Oe = !!ue, [ke, Ae] = m(!1), { resolvedConfig: je } = kn(), Me = je?.siteId || null, [Ne, Pe] = m(() => ce(Me) === "auto"), Fe = () => {
14665
+ let e = Ne ? "ask" : "auto";
14666
+ le(Me, e), Pe(e === "auto");
14667
+ }, [Ie, Le] = m(!1), [z, Re] = m([]), [ze, Be] = m(!1), Ve = p(null), [B, He] = m(() => typeof window < "u" ? window.visualViewport?.height ?? window.innerHeight : 600), [Ue, V] = m(0);
14652
14668
  c(() => {
14653
14669
  if (!s) return;
14654
14670
  let e = window.visualViewport;
@@ -14661,26 +14677,26 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14661
14677
  };
14662
14678
  }, [s]);
14663
14679
  let We = s && window.innerHeight - B > 150, Ge = async () => {
14664
- je(!1), Re(!0), Ve(!0);
14680
+ Ae(!1), Le(!0), Be(!0);
14665
14681
  try {
14666
- let e = await Ce();
14667
- e?.data && ze(e.data);
14682
+ let e = await Se();
14683
+ e?.data && Re(e.data);
14668
14684
  } catch (e) {
14669
14685
  console.error(e);
14670
14686
  } finally {
14671
- Ve(!1);
14687
+ Be(!1);
14672
14688
  }
14673
14689
  }, Ke = async (e) => {
14674
- Re(!1), we?.(e.chatId);
14690
+ Le(!1), Ce?.(e.chatId);
14675
14691
  };
14676
14692
  return c(() => {
14677
- if (!Ae) return;
14693
+ if (!ke) return;
14678
14694
  let e = (e) => {
14679
14695
  let t = e.composedPath?.()?.[0] || e.target;
14680
- z.current && !z.current.contains(t) && je(!1);
14696
+ Ve.current && !Ve.current.contains(t) && Ae(!1);
14681
14697
  };
14682
14698
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
14683
- }, [Ae]), /* @__PURE__ */ _("div", {
14699
+ }, [ke]), /* @__PURE__ */ _("div", {
14684
14700
  style: s ? {
14685
14701
  "--flowengage-primary": n,
14686
14702
  "--flowengage-accent": n,
@@ -14694,7 +14710,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14694
14710
  display: "flex",
14695
14711
  flexDirection: "column",
14696
14712
  overflow: "hidden",
14697
- animation: Ee ? "fe-orb-slide-down 0.28s cubic-bezier(0.16,1,0.3,1) forwards" : "fe-orb-slide-up 0.28s cubic-bezier(0.16,1,0.3,1)"
14713
+ animation: Te ? "fe-orb-slide-down 0.28s cubic-bezier(0.16,1,0.3,1) forwards" : "fe-orb-slide-up 0.28s cubic-bezier(0.16,1,0.3,1)"
14698
14714
  } : {
14699
14715
  "--flowengage-primary": n,
14700
14716
  "--flowengage-accent": n,
@@ -14707,7 +14723,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14707
14723
  flexDirection: "column",
14708
14724
  overflow: "hidden",
14709
14725
  position: "relative",
14710
- animation: Ee ? "fe-orb-slide-down 0.28s cubic-bezier(0.16,1,0.3,1) forwards" : "fe-orb-slide-up 0.36s cubic-bezier(0.16,1,0.3,1)"
14726
+ animation: Te ? "fe-orb-slide-down 0.28s cubic-bezier(0.16,1,0.3,1) forwards" : "fe-orb-slide-up 0.36s cubic-bezier(0.16,1,0.3,1)"
14711
14727
  },
14712
14728
  children: [
14713
14729
  /* @__PURE__ */ _("div", {
@@ -14717,7 +14733,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14717
14733
  alignItems: "center",
14718
14734
  columnGap: "14px",
14719
14735
  padding: "16px 10px 14px",
14720
- background: Se || "transparent",
14736
+ background: xe || "transparent",
14721
14737
  flexShrink: 0,
14722
14738
  position: "relative",
14723
14739
  zIndex: 30
@@ -14730,7 +14746,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14730
14746
  alignItems: "center"
14731
14747
  },
14732
14748
  children: /* @__PURE__ */ g("button", {
14733
- onClick: ye,
14749
+ onClick: ve,
14734
14750
  style: {
14735
14751
  width: "40px",
14736
14752
  height: "40px",
@@ -14787,7 +14803,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14787
14803
  justifyContent: "center",
14788
14804
  height: "40px"
14789
14805
  },
14790
- children: i ? /* @__PURE__ */ g(I_, {
14806
+ children: i ? /* @__PURE__ */ g(L_, {
14791
14807
  logo: i,
14792
14808
  style: {
14793
14809
  height: "34px",
@@ -14800,7 +14816,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14800
14816
  height: "40px",
14801
14817
  flexShrink: 0
14802
14818
  },
14803
- children: /* @__PURE__ */ g(L_, { title: e.chatTitle })
14819
+ children: /* @__PURE__ */ g(R_, { title: e.chatTitle })
14804
14820
  })
14805
14821
  }), o && /* @__PURE__ */ g("div", {
14806
14822
  style: {
@@ -14832,10 +14848,10 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14832
14848
  isolation: "isolate",
14833
14849
  zIndex: 10
14834
14850
  },
14835
- ref: z,
14851
+ ref: Ve,
14836
14852
  children: [/* @__PURE__ */ g("button", {
14837
14853
  type: "button",
14838
- onClick: () => je((e) => !e),
14854
+ onClick: () => Ae((e) => !e),
14839
14855
  style: {
14840
14856
  width: "40px",
14841
14857
  height: "40px",
@@ -14881,7 +14897,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14881
14897
  })
14882
14898
  ]
14883
14899
  })
14884
- }), Ae && /* @__PURE__ */ _("div", {
14900
+ }), ke && /* @__PURE__ */ _("div", {
14885
14901
  style: {
14886
14902
  position: "absolute",
14887
14903
  top: "34px",
@@ -14897,10 +14913,10 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14897
14913
  animation: "fe-orb-fade-in 0.18s ease"
14898
14914
  },
14899
14915
  children: [
14900
- xe && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ _("button", {
14916
+ be && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ _("button", {
14901
14917
  type: "button",
14902
14918
  onClick: () => {
14903
- je(!1), be?.();
14919
+ Ae(!1), ye?.();
14904
14920
  },
14905
14921
  style: {
14906
14922
  display: "flex",
@@ -14942,7 +14958,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14942
14958
  /* @__PURE__ */ _("button", {
14943
14959
  type: "button",
14944
14960
  onClick: () => {
14945
- je(!1), F?.();
14961
+ Ae(!1), I?.();
14946
14962
  },
14947
14963
  style: {
14948
14964
  display: "flex",
@@ -14977,7 +14993,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
14977
14993
  children: [/* @__PURE__ */ g("path", { d: "M12 5H5a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-7" }), /* @__PURE__ */ g("path", { d: "M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z" })]
14978
14994
  }), "Start new chat"]
14979
14995
  }),
14980
- Ce && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("div", { style: {
14996
+ Se && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("div", { style: {
14981
14997
  height: "1px",
14982
14998
  background: "rgba(255,255,255,0.07)",
14983
14999
  margin: "0 14px"
@@ -15017,14 +15033,14 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15017
15033
  children: /* @__PURE__ */ g("path", { d: "M12 8v4l3 3M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0z" })
15018
15034
  }), "Chat history"]
15019
15035
  })] }),
15020
- Ne && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("div", { style: {
15036
+ Me && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("div", { style: {
15021
15037
  height: "1px",
15022
15038
  background: "rgba(255,255,255,0.07)",
15023
15039
  margin: "0 14px"
15024
15040
  } }), /* @__PURE__ */ _("button", {
15025
15041
  type: "button",
15026
15042
  onClick: () => {
15027
- Ie(), je(!1);
15043
+ Fe(), Ae(!1);
15028
15044
  },
15029
15045
  style: {
15030
15046
  display: "flex",
@@ -15081,7 +15097,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15081
15097
  width: "34px",
15082
15098
  height: "19px",
15083
15099
  borderRadius: "999px",
15084
- background: Pe ? "#22c55e" : "rgba(255,255,255,0.2)",
15100
+ background: Ne ? "#22c55e" : "rgba(255,255,255,0.2)",
15085
15101
  position: "relative",
15086
15102
  flexShrink: 0,
15087
15103
  transition: "background 0.15s ease"
@@ -15089,7 +15105,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15089
15105
  children: /* @__PURE__ */ g("span", { style: {
15090
15106
  position: "absolute",
15091
15107
  top: "2px",
15092
- left: Pe ? "17px" : "2px",
15108
+ left: Ne ? "17px" : "2px",
15093
15109
  width: "15px",
15094
15110
  height: "15px",
15095
15111
  borderRadius: "50%",
@@ -15106,7 +15122,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15106
15122
  /* @__PURE__ */ _("button", {
15107
15123
  type: "button",
15108
15124
  onClick: () => {
15109
- je(!1), ye?.();
15125
+ Ae(!1), ve?.();
15110
15126
  },
15111
15127
  style: {
15112
15128
  display: "flex",
@@ -15165,23 +15181,23 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15165
15181
  ]
15166
15182
  }),
15167
15183
  /* @__PURE__ */ g(Hg, {
15168
- webRTCError: se,
15169
- micError: N,
15170
- setMicError: ce,
15171
- dismissCallError: P,
15184
+ webRTCError: oe,
15185
+ micError: se,
15186
+ setMicError: P,
15187
+ dismissCallError: F,
15172
15188
  isRateLimited: E,
15173
15189
  rateLimitMessage: D
15174
15190
  }),
15175
- _e && /* @__PURE__ */ g(a_, {
15191
+ ge && /* @__PURE__ */ g(a_, {
15176
15192
  agentName: v,
15177
15193
  agentHeadshot: y,
15178
15194
  fallbackAgentName: b,
15179
- callDurationSeconds: ge,
15180
- isCallMuted: fe,
15181
- formatCallDuration: he,
15182
- toggleCallMute: pe,
15183
- endWebRTCCall: me,
15184
- onExpand: ve,
15195
+ callDurationSeconds: he,
15196
+ isCallMuted: de,
15197
+ formatCallDuration: me,
15198
+ toggleCallMute: fe,
15199
+ endWebRTCCall: pe,
15200
+ onExpand: _e,
15185
15201
  primaryColor: n
15186
15202
  }),
15187
15203
  /* @__PURE__ */ _("div", {
@@ -15193,7 +15209,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15193
15209
  background: "transparent",
15194
15210
  position: "relative"
15195
15211
  },
15196
- children: [Le ? /* @__PURE__ */ _("div", {
15212
+ children: [Ie ? /* @__PURE__ */ _("div", {
15197
15213
  style: {
15198
15214
  position: "absolute",
15199
15215
  inset: 0,
@@ -15212,7 +15228,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15212
15228
  flexShrink: 0
15213
15229
  },
15214
15230
  children: /* @__PURE__ */ _("button", {
15215
- onClick: () => Re(!1),
15231
+ onClick: () => Le(!1),
15216
15232
  style: {
15217
15233
  background: "none",
15218
15234
  border: "none",
@@ -15246,7 +15262,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15246
15262
  overflowY: "auto",
15247
15263
  position: "relative"
15248
15264
  },
15249
- children: Be ? /* @__PURE__ */ g("div", {
15265
+ children: ze ? /* @__PURE__ */ g("div", {
15250
15266
  style: {
15251
15267
  padding: "40px 20px",
15252
15268
  textAlign: "center",
@@ -15254,7 +15270,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15254
15270
  fontSize: "14px"
15255
15271
  },
15256
15272
  children: "Loading past conversations..."
15257
- }) : R.length > 0 ? /* @__PURE__ */ g("div", { children: R.map((e) => /* @__PURE__ */ _("div", {
15273
+ }) : z.length > 0 ? /* @__PURE__ */ g("div", { children: z.map((e) => /* @__PURE__ */ _("div", {
15258
15274
  onClick: () => Ke(e),
15259
15275
  style: {
15260
15276
  padding: "16px 20px",
@@ -15306,18 +15322,18 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15306
15322
  children: "No previous chats found."
15307
15323
  })
15308
15324
  })]
15309
- }) : null, De ? /* @__PURE__ */ g(zg, {
15325
+ }) : null, Ee ? /* @__PURE__ */ g(zg, {
15310
15326
  chatHistory: l,
15311
15327
  isAiTyping: u,
15312
15328
  isLoading: T,
15313
15329
  isAgentTyping: d,
15314
- setReplyContext: M,
15315
- TypingDots: W_,
15330
+ setReplyContext: N,
15331
+ TypingDots: G_,
15316
15332
  primaryColor: n,
15317
15333
  agentHeadshot: y,
15318
15334
  agentDisplayName: v || b,
15319
- botAvatarNode: /* @__PURE__ */ g(U_, { orbColors: t })
15320
- }) : Te ? /* @__PURE__ */ _("div", {
15335
+ botAvatarNode: /* @__PURE__ */ g(W_, { orbColors: t })
15336
+ }) : we ? /* @__PURE__ */ _("div", {
15321
15337
  style: {
15322
15338
  flex: 1,
15323
15339
  display: "flex",
@@ -15357,7 +15373,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15357
15373
  padding: "28px 24px"
15358
15374
  },
15359
15375
  children: [
15360
- /* @__PURE__ */ g(z_, {
15376
+ /* @__PURE__ */ g(B_, {
15361
15377
  size: 94,
15362
15378
  orbColors: t
15363
15379
  }),
@@ -15407,7 +15423,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15407
15423
  ]
15408
15424
  })]
15409
15425
  }),
15410
- ae && /* @__PURE__ */ _("div", {
15426
+ ie && /* @__PURE__ */ _("div", {
15411
15427
  style: {
15412
15428
  margin: "0 16px 8px",
15413
15429
  padding: "9px 14px",
@@ -15453,13 +15469,13 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15453
15469
  setInput: S,
15454
15470
  onSubmit: C,
15455
15471
  isConversationEnded: w,
15456
- callUiActive: ke,
15457
- handleToggleVoice: be,
15472
+ callUiActive: Oe,
15473
+ handleToggleVoice: ye,
15458
15474
  showVoiceToggle: f === "agent",
15459
15475
  activeScreen: f,
15460
- inputDisabled: Oe,
15461
- replyContext: oe,
15462
- clearReplyContext: () => M(null),
15476
+ inputDisabled: De,
15477
+ replyContext: ae,
15478
+ clearReplyContext: () => N(null),
15463
15479
  onFileSelect: k,
15464
15480
  selectedFile: O,
15465
15481
  onRemoveSelectedFile: A,
@@ -15467,8 +15483,8 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15467
15483
  isUploadingAttachment: te,
15468
15484
  requiresEmail: ne,
15469
15485
  emailInput: j,
15470
- setEmailInput: re,
15471
- emailError: ie,
15486
+ setEmailInput: M,
15487
+ emailError: re,
15472
15488
  inputPlaceholder: e.inputPlaceholder
15473
15489
  })
15474
15490
  }),
@@ -15480,7 +15496,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15480
15496
  paddingBottom: "max(12px, env(safe-area-inset-bottom, 12px))",
15481
15497
  pointerEvents: "none"
15482
15498
  },
15483
- children: [L && /* @__PURE__ */ _("p", {
15499
+ children: [R && /* @__PURE__ */ _("p", {
15484
15500
  style: {
15485
15501
  margin: "0 0 4px",
15486
15502
  fontSize: "10px",
@@ -15493,7 +15509,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15493
15509
  "This conversation is recorded for quality assurance purposes.",
15494
15510
  " ",
15495
15511
  /* @__PURE__ */ g("a", {
15496
- href: L,
15512
+ href: R,
15497
15513
  target: "_blank",
15498
15514
  rel: "noopener noreferrer",
15499
15515
  style: {
@@ -15503,7 +15519,7 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15503
15519
  children: "See our privacy policy"
15504
15520
  })
15505
15521
  ]
15506
- }), I && /* @__PURE__ */ _("span", {
15522
+ }), L && /* @__PURE__ */ _("span", {
15507
15523
  style: {
15508
15524
  fontSize: "11px",
15509
15525
  color: "#9ca3af",
@@ -15522,34 +15538,34 @@ function G_({ copy: e, orbColors: t, primaryColor: n, chatBgGradient: r, logo: i
15522
15538
  ]
15523
15539
  });
15524
15540
  }
15525
- function K_() {
15526
- let { status: e, runtimeConfig: t, resolvedConfig: n, chatHistory: r, isOpen: i, activeScreen: a, isHumanHandled: s, agentName: l, agentHeadshot: u, visitorEmail: h, isAgentTyping: v, isAiTyping: y, isLoading: b, isRateLimited: x, rateLimitMessage: S, isConversationEnded: C, incomingCall: w, activeCallId: T, callConnectionState: E, callConnectedAt: D, isCallMuted: O, webRTCError: k, language: A, chatId: ee, historyRef: te, onMessageSync: ne, beaconSyncVoiceTranscript: j, sendMessage: re, uploadChatFile: ie, openWidget: ae, captureVisitorEmail: oe, setVoiceMode: M, endConversation: ce, startNewChat: P, acceptCall: le, rejectCall: ue, endWebRTCCall: de, toggleCallMute: fe, dismissCallError: pe, startTyping: me, stopTyping: he, updateTypingDraft: ge, getVisitorChatHistory: _e, resumeChat: ve, isSessionRestoring: ye, openToChatCounter: be, voiceEndCounter: xe } = kn();
15541
+ function q_() {
15542
+ let { status: e, runtimeConfig: t, resolvedConfig: n, chatHistory: r, isOpen: i, activeScreen: a, isHumanHandled: s, agentName: l, agentHeadshot: u, visitorEmail: h, isAgentTyping: v, isAiTyping: y, isLoading: b, isRateLimited: x, rateLimitMessage: S, isConversationEnded: C, incomingCall: w, activeCallId: T, callConnectionState: E, callConnectedAt: D, isCallMuted: O, webRTCError: k, language: A, chatId: ee, historyRef: te, onMessageSync: ne, beaconSyncVoiceTranscript: j, sendMessage: M, uploadChatFile: re, openWidget: ie, captureVisitorEmail: ae, setVoiceMode: N, endConversation: P, startNewChat: F, acceptCall: ce, rejectCall: le, endWebRTCCall: ue, toggleCallMute: de, dismissCallError: fe, startTyping: pe, stopTyping: me, updateTypingDraft: he, getVisitorChatHistory: ge, resumeChat: _e, isSessionRestoring: ve, openToChatCounter: ye, voiceEndCounter: be } = kn();
15527
15543
  c(() => {
15528
15544
  try {
15529
15545
  fr();
15530
15546
  } catch {}
15531
15547
  }, []), c(() => {
15532
- be && W !== "voice_mode" && W !== "text_chat" && W !== "call_screen" && (M?.(!1), et("text_chat"));
15533
- }, [be]);
15534
- let Se = t?.widgetSettings || {}, F = n?.widgetSettings || {}, I = {
15535
- ...Se.branding || {},
15536
- ...F.branding || {}
15537
- }, L = {
15538
- ...Se.theme || {},
15539
- ...F.theme || {}
15540
- }, Ce = {
15541
- ...Se.features || {},
15542
- ...F.features || {}
15543
- }, we = Ce.voice !== !1, Te = Array.isArray(L.orbColors) && L.orbColors.length > 0 ? L.orbColors : null, Ee = L.buttonColor || L.primaryColor || Te?.[0] || "#3B82F6", ke = {
15548
+ ye && W !== "voice_mode" && W !== "text_chat" && W !== "call_screen" && (N?.(!1), et("text_chat"));
15549
+ }, [ye]);
15550
+ let xe = t?.widgetSettings || {}, I = n?.widgetSettings || {}, L = {
15551
+ ...xe.branding || {},
15552
+ ...I.branding || {}
15553
+ }, R = {
15554
+ ...xe.theme || {},
15555
+ ...I.theme || {}
15556
+ }, Se = {
15557
+ ...xe.features || {},
15558
+ ...I.features || {}
15559
+ }, Ce = Se.voice !== !1, we = Array.isArray(R.orbColors) && R.orbColors.length > 0 ? R.orbColors : null, Te = R.buttonColor || R.primaryColor || we?.[0] || "#3B82F6", Oe = {
15544
15560
  small: 50,
15545
15561
  medium: 64,
15546
15562
  large: 80
15547
- }, Ae = ke[L.orbSize] || ke.small, Me = L.position || "bottom-right", Ne = I.fallbackAgentName || "Agent", Fe = N_(Te ?? L.chatBgColors), Ie = I.logo || I.logoUrl || null, Le = A || "en", Re = Se.recommendations?.[Le] || [], R = (F.recommendations?.[Le] ?? Re).filter((e) => String(e?.label ?? "").trim()).map((e, t) => ({
15563
+ }, ke = Oe[R.orbSize] || Oe.small, je = R.position || "bottom-right", Me = L.fallbackAgentName || "Agent", Pe = P_(we ?? R.chatBgColors), Fe = L.logo || L.logoUrl || null, Ie = A || "en", Le = xe.recommendations?.[Ie] || [], z = (I.recommendations?.[Ie] ?? Le).filter((e) => String(e?.label ?? "").trim()).map((e, t) => ({
15548
15564
  id: e.key || `qr-${t}`,
15549
15565
  label: e.label,
15550
15566
  message: e.label,
15551
15567
  text: e.label
15552
- })), ze = Array.isArray(I.quickChatOptions) && I.quickChatOptions.length > 0 ? I.quickChatOptions : R, Be = I.hideWatermark === !0 ? !1 : I.showPoweredBy !== !1, Ve = I.headerBgColor || null, z = L.bottomPosition == null ? "1.5rem" : `${L.bottomPosition}px`, B = I.privacyPolicyUrl || null, He = I.chatbotEnabled !== !1 && L.chatbotEnabled !== !1, [Ue, V] = m(() => typeof window < "u" ? window.location.pathname : "/");
15568
+ })), Re = Array.isArray(L.quickChatOptions) && L.quickChatOptions.length > 0 ? L.quickChatOptions : z, ze = L.hideWatermark === !0 ? !1 : L.showPoweredBy !== !1, Be = L.headerBgColor || null, Ve = R.bottomPosition == null ? "1.5rem" : `${R.bottomPosition}px`, B = L.privacyPolicyUrl || null, He = L.chatbotEnabled !== !1 && R.chatbotEnabled !== !1, [Ue, V] = m(() => typeof window < "u" ? window.location.pathname : "/");
15553
15569
  c(() => {
15554
15570
  if (typeof window > "u") return;
15555
15571
  let e = () => V(window.location.pathname), t = window.history.pushState.bind(window.history);
@@ -15561,24 +15577,24 @@ function K_() {
15561
15577
  }, []);
15562
15578
  let We = (() => {
15563
15579
  let e = {
15564
- ...Se.pageVisibility || {},
15565
- ...F.pageVisibility || {}
15580
+ ...xe.pageVisibility || {},
15581
+ ...I.pageVisibility || {}
15566
15582
  };
15567
15583
  return Array.isArray(e.allowedPaths) ? e.allowedPaths.filter(Boolean) : [];
15568
- })(), Ge = We.length === 0 || We.some((e) => e === "*" || e === "/*" ? !0 : e.endsWith("/*") ? Ue.startsWith(e.slice(0, -1)) : Ue.replace(/\/$/, "") === e.replace(/\/$/, "")), Ke = Se.greetings?.[A] || F.greetings?.[A] || I.introGreeting || (t?.websiteName && String(t.websiteName).trim() ? `Hello, I'm here to help you know more about ${String(t.websiteName).trim()}.` : "Hello, I'm here to help — what would you like to know?"), qe = {
15569
- entryPrompt: I.entryPrompt || "Do you want to explore in a new way?",
15570
- yesLabel: I.yesLabel || "Yes",
15571
- laterLabel: I.laterLabel || "Later",
15572
- connectionTitle: I.connectionTitle || "How would you like to connect?",
15573
- connectionSubtitle: I.connectionSubtitle || "",
15574
- voiceLabel: I.voiceLabel || "Voice",
15575
- textLabel: I.textLabel || "Text",
15576
- chatTitle: I.headerName || "Chat with FlowEngage",
15577
- hasCustomTitle: !!(I.headerName && String(I.headerName).trim()),
15584
+ })(), Ge = We.length === 0 || We.some((e) => e === "*" || e === "/*" ? !0 : e.endsWith("/*") ? Ue.startsWith(e.slice(0, -1)) : Ue.replace(/\/$/, "") === e.replace(/\/$/, "")), Ke = xe.greetings?.[A] || I.greetings?.[A] || L.introGreeting || (t?.websiteName && String(t.websiteName).trim() ? `Hello, I'm here to help you know more about ${String(t.websiteName).trim()}.` : "Hello, I'm here to help — what would you like to know?"), qe = {
15585
+ entryPrompt: L.entryPrompt || "Do you want to explore in a new way?",
15586
+ yesLabel: L.yesLabel || "Yes",
15587
+ laterLabel: L.laterLabel || "Later",
15588
+ connectionTitle: L.connectionTitle || "How would you like to connect?",
15589
+ connectionSubtitle: L.connectionSubtitle || "",
15590
+ voiceLabel: L.voiceLabel || "Voice",
15591
+ textLabel: L.textLabel || "Text",
15592
+ chatTitle: L.headerName || "Chat with FlowEngage",
15593
+ hasCustomTitle: !!(L.headerName && String(L.headerName).trim()),
15578
15594
  introGreeting: Ke,
15579
- inputPlaceholder: I.inputPlaceholder || "Type your message",
15580
- analysingLabel: I.analysingLabel || "analysing..."
15581
- }, Je = F.elevenLabsAgentId || t?.elevenLabsAgentId || null, Ye = t?.siteId || n?.siteId || null, Xe = t?.apiBaseUrl || "";
15595
+ inputPlaceholder: L.inputPlaceholder || "Type your message",
15596
+ analysingLabel: L.analysingLabel || "analysing..."
15597
+ }, Je = I.elevenLabsAgentId || t?.elevenLabsAgentId || null, Ye = t?.siteId || n?.siteId || null, Xe = t?.apiBaseUrl || "";
15582
15598
  c(() => {
15583
15599
  Qn(t?.siteType || null);
15584
15600
  }, [t?.siteType]);
@@ -15589,10 +15605,10 @@ function K_() {
15589
15605
  ]), H = u && String(u).trim() || t?.ownerProfileImageUrl && String(t.ownerProfileImageUrl).trim() || null, U = r.some((e) => e.sender === "user"), Qe = f(() => {
15590
15606
  let e = r.findIndex((e) => e.sender === "user");
15591
15607
  return e === -1 ? !1 : r.slice(e + 1).some((e) => e.sender === "bot" || e.sender === "ai" || e.sender === "agent");
15592
- }, [r]), $e = !!(F._dashboardLivePreview || Se._dashboardLivePreview), [W, et] = m(() => $e ? "text_chat" : "entry_prompt"), [tt, nt] = m(""), [rt, it] = m(null), [at, ot] = m(h || ""), [st, ct] = m(""), [G, lt] = m(!1), [ut, dt] = m(0), [ft, pt] = m(null), [mt, ht] = m(null), [gt, _t] = m(""), [vt, yt] = m(!1), [bt, xt] = m(!1), [St, Ct] = m(!1), wt = p(null), Tt = p(!1), Et = !h && U && Qe && W !== "voice_mode";
15608
+ }, [r]), $e = !!(I._dashboardLivePreview || xe._dashboardLivePreview), [W, et] = m(() => $e ? "text_chat" : "entry_prompt"), [tt, nt] = m(""), [rt, it] = m(null), [at, ot] = m(h || ""), [st, ct] = m(""), [G, lt] = m(!1), [ut, dt] = m(0), [ft, pt] = m(null), [mt, ht] = m(null), [gt, _t] = m(""), [vt, yt] = m(!1), [bt, xt] = m(!1), [St, Ct] = m(!1), wt = p(null), Tt = p(!1), Et = !h && U && Qe && W !== "voice_mode";
15593
15609
  d(() => {
15594
15610
  if (e !== "ready" || Tt.current) return;
15595
- if (Tt.current = !0, !we) {
15611
+ if (Tt.current = !0, !Ce) {
15596
15612
  et("minimized_orb");
15597
15613
  return;
15598
15614
  }
@@ -15600,13 +15616,13 @@ function K_() {
15600
15616
  try {
15601
15617
  t = wr().shouldResumeVoice;
15602
15618
  } catch {}
15603
- let n = je(), r = Ye ? De(Ye) : null, i = n || !!r?.transcript;
15619
+ let n = Ae(), r = Ye ? Ee(Ye) : null, i = n || !!r?.transcript;
15604
15620
  if (t) {
15605
- ae?.({ notifyChatInitiated: !0 }), M?.(!0), et("voice_mode");
15621
+ ie?.({ notifyChatInitiated: !0 }), N?.(!0), et("voice_mode");
15606
15622
  return;
15607
15623
  }
15608
- if (Pe()) {
15609
- ae?.({ notifyChatInitiated: !1 }), et("text_chat");
15624
+ if (Ne()) {
15625
+ ie?.({ notifyChatInitiated: !1 }), et("text_chat");
15610
15626
  return;
15611
15627
  }
15612
15628
  if (i) {
@@ -15614,13 +15630,13 @@ function K_() {
15614
15630
  et("minimized_orb");
15615
15631
  return;
15616
15632
  }
15617
- ae?.({ notifyChatInitiated: !0 }), M?.(!0), et("voice_mode");
15633
+ ie?.({ notifyChatInitiated: !0 }), N?.(!0), et("voice_mode");
15618
15634
  return;
15619
15635
  }
15620
15636
  if (Ye) try {
15621
- Oe(Ye);
15637
+ De(Ye);
15622
15638
  } catch {}
15623
- if (se(Ye)) {
15639
+ if (oe(Ye)) {
15624
15640
  et("minimized_orb");
15625
15641
  return;
15626
15642
  }
@@ -15678,7 +15694,7 @@ function K_() {
15678
15694
  hasIncomingCall: !!w?.callId,
15679
15695
  activeCallId: T,
15680
15696
  callConnectionState: E
15681
- }), wt.current = e, W === "voice_mode" && M?.(!1), ae?.(), jt());
15697
+ }), wt.current = e, W === "voice_mode" && N?.(!1), ie?.(), jt());
15682
15698
  }
15683
15699
  }, [
15684
15700
  T,
@@ -15686,8 +15702,8 @@ function K_() {
15686
15702
  jt,
15687
15703
  w?.callId,
15688
15704
  i,
15689
- ae,
15690
- M,
15705
+ ie,
15706
+ N,
15691
15707
  W
15692
15708
  ]), c(() => {
15693
15709
  !w && !T && W === "call_screen" && et("text_chat");
@@ -15699,16 +15715,16 @@ function K_() {
15699
15715
  !T && bt && xt(!1);
15700
15716
  }, [T, bt]), c(() => {
15701
15717
  if (!s || C) {
15702
- ge?.(""), he?.();
15718
+ he?.(""), me?.();
15703
15719
  return;
15704
15720
  }
15705
15721
  if (!tt.trim() || mt) {
15706
- ge?.("");
15707
- let e = window.setTimeout(() => he?.(), 100);
15722
+ he?.("");
15723
+ let e = window.setTimeout(() => me?.(), 100);
15708
15724
  return () => window.clearTimeout(e);
15709
15725
  }
15710
- me?.();
15711
- let e = window.setTimeout(() => ge?.(tt), 120), t = window.setTimeout(() => he?.(), 1200);
15726
+ pe?.();
15727
+ let e = window.setTimeout(() => he?.(tt), 120), t = window.setTimeout(() => me?.(), 1200);
15712
15728
  return () => {
15713
15729
  window.clearTimeout(e), window.clearTimeout(t);
15714
15730
  };
@@ -15717,9 +15733,9 @@ function K_() {
15717
15733
  mt,
15718
15734
  s,
15719
15735
  C,
15736
+ pe,
15720
15737
  me,
15721
- he,
15722
- ge
15738
+ he
15723
15739
  ]);
15724
15740
  let Nt = (e) => e ? {
15725
15741
  replyTo: e.messageId || e.id || null,
@@ -15733,7 +15749,7 @@ function K_() {
15733
15749
  ct("Please enter a valid email so we can continue helping you.");
15734
15750
  return;
15735
15751
  }
15736
- await oe(e), ct(""), lt(!0), setTimeout(() => lt(!1), 3e3);
15752
+ await ae(e), ct(""), lt(!0), setTimeout(() => lt(!1), 3e3);
15737
15753
  return;
15738
15754
  }
15739
15755
  let t = Nt(rt);
@@ -15741,8 +15757,8 @@ function K_() {
15741
15757
  if (mt) {
15742
15758
  try {
15743
15759
  yt(!0), _t("");
15744
- let e = await ie(mt), n = e?.data || e, r = tt.trim() || `Shared file: ${Fg(mt)}`;
15745
- nt(""), it(null), kt(), await re(r, "", t, {
15760
+ let e = await re(mt), n = e?.data || e, r = tt.trim() || `Shared file: ${Fg(mt)}`;
15761
+ nt(""), it(null), kt(), await M(r, "", t, {
15746
15762
  type: "file",
15747
15763
  metadata: {
15748
15764
  fileUrl: n?.fileUrl,
@@ -15759,20 +15775,20 @@ function K_() {
15759
15775
  return;
15760
15776
  }
15761
15777
  let n = tt.trim();
15762
- nt(""), it(null), await re(n, "", t);
15778
+ nt(""), it(null), await M(n, "", t);
15763
15779
  }, Ft = o(() => {
15764
- r.length !== 0 && P?.();
15765
- }, [r.length, P]), It = (e) => {
15780
+ r.length !== 0 && F?.();
15781
+ }, [r.length, F]), It = (e) => {
15766
15782
  let t = Math.floor(e / 60);
15767
15783
  return `${String(t).padStart(2, "0")}:${String(e % 60).padStart(2, "0")}`;
15768
15784
  }, Lt = o(async (e) => {
15769
15785
  if (C || b) return;
15770
15786
  let t = e.message || e.label || e.text || "";
15771
- t.trim() && await re(t.trim(), "");
15787
+ t.trim() && await M(t.trim(), "");
15772
15788
  }, [
15773
15789
  C,
15774
15790
  b,
15775
- re
15791
+ M
15776
15792
  ]), Rt = Dt && W === "entry_prompt" ? { inset: 0 } : Dt && W === "text_chat" ? {
15777
15793
  left: 0,
15778
15794
  right: 0,
@@ -15793,19 +15809,19 @@ function K_() {
15793
15809
  height: "min(640px, calc(100vh - 120px))",
15794
15810
  borderRadius: "22px",
15795
15811
  overflow: "hidden",
15796
- ...Me === "bottom-left" ? {
15812
+ ...je === "bottom-left" ? {
15797
15813
  left: "1.5rem",
15798
- bottom: z
15814
+ bottom: Ve
15799
15815
  } : {
15800
15816
  right: "1.5rem",
15801
- bottom: z
15817
+ bottom: Ve
15802
15818
  }
15803
- } : Me === "bottom-left" ? {
15819
+ } : je === "bottom-left" ? {
15804
15820
  left: "1.5rem",
15805
- bottom: z
15821
+ bottom: Ve
15806
15822
  } : {
15807
15823
  right: "1.5rem",
15808
- bottom: z
15824
+ bottom: Ve
15809
15825
  }, zt = o(() => {
15810
15826
  W !== "minimized_orb" && (Ct(!0), setTimeout(() => {
15811
15827
  et("minimized_orb"), Ct(!1), T && xt(!0);
@@ -15818,13 +15834,13 @@ function K_() {
15818
15834
  t.resume().catch(() => {}), setTimeout(() => t.close().catch(() => {}), 3e3);
15819
15835
  }
15820
15836
  } catch {}
15821
- ae({ notifyChatInitiated: !0 }), M?.(!0), et("voice_mode");
15837
+ ie({ notifyChatInitiated: !0 }), N?.(!0), et("voice_mode");
15822
15838
  }, Ht = () => {
15823
- ae({ notifyChatInitiated: !0 }), M?.(!1), et("text_chat");
15839
+ ie({ notifyChatInitiated: !0 }), N?.(!1), et("text_chat");
15824
15840
  }, Ut = () => {
15825
- M?.(!1), zt();
15841
+ N?.(!1), zt();
15826
15842
  };
15827
- return e !== "ready" || !He || Ce.chat === !1 || !Ge ? null : /* @__PURE__ */ _("div", {
15843
+ return e !== "ready" || !He || Se.chat === !1 || !Ge ? null : /* @__PURE__ */ _("div", {
15828
15844
  className: "flowengage-widget-root",
15829
15845
  style: {
15830
15846
  position: "fixed",
@@ -15834,15 +15850,15 @@ function K_() {
15834
15850
  onWheel: (e) => e.stopPropagation(),
15835
15851
  onTouchMove: (e) => e.stopPropagation(),
15836
15852
  children: [
15837
- W === "entry_prompt" && /* @__PURE__ */ g(B_, {
15853
+ W === "entry_prompt" && /* @__PURE__ */ g(V_, {
15838
15854
  copy: qe,
15839
- orbColors: Te,
15840
- primaryColor: Ee,
15855
+ orbColors: we,
15856
+ primaryColor: Te,
15841
15857
  onYes: () => {
15842
- N(Ye), Vt();
15858
+ se(Ye), Vt();
15843
15859
  },
15844
15860
  onLater: () => {
15845
- N(Ye), zt();
15861
+ se(Ye), zt();
15846
15862
  },
15847
15863
  isMobile: Dt,
15848
15864
  isClosing: St
@@ -15866,7 +15882,7 @@ function K_() {
15866
15882
  transformOrigin: "bottom right",
15867
15883
  display: "inline-flex",
15868
15884
  flexDirection: "column",
15869
- alignItems: Me === "bottom-left" ? "flex-start" : "flex-end",
15885
+ alignItems: je === "bottom-left" ? "flex-start" : "flex-end",
15870
15886
  gap: "10px"
15871
15887
  },
15872
15888
  children: [T && /* @__PURE__ */ _("button", {
@@ -15917,24 +15933,24 @@ function K_() {
15917
15933
  children: E === "connected" ? `${It(ut)} with ${Ze}` : `Tap to return to ${Ze}`
15918
15934
  })]
15919
15935
  })]
15920
- }), /* @__PURE__ */ g(z_, {
15921
- size: Ae,
15922
- orbColors: Te,
15923
- onClick: T ? jt : we ? Bt : Ht
15936
+ }), /* @__PURE__ */ g(B_, {
15937
+ size: ke,
15938
+ orbColors: we,
15939
+ onClick: T ? jt : Ce ? Bt : Ht
15924
15940
  })]
15925
15941
  }),
15926
- W === "connection_modal" && /* @__PURE__ */ g(V_, {
15942
+ W === "connection_modal" && /* @__PURE__ */ g(H_, {
15927
15943
  copy: qe,
15928
- orbColors: Te,
15929
- primaryColor: Ee,
15944
+ orbColors: we,
15945
+ primaryColor: Te,
15930
15946
  onVoice: Vt,
15931
15947
  onText: Ht,
15932
15948
  onClose: zt,
15933
15949
  isMobile: Dt,
15934
15950
  isClosing: St
15935
15951
  }),
15936
- W === "voice_mode" && /* @__PURE__ */ g(H_, {
15937
- orbColors: Te,
15952
+ W === "voice_mode" && /* @__PURE__ */ g(U_, {
15953
+ orbColors: we,
15938
15954
  onEnterChat: Ht,
15939
15955
  onEndChat: Ut,
15940
15956
  agentId: Je,
@@ -15944,17 +15960,17 @@ function K_() {
15944
15960
  historyRef: te,
15945
15961
  onMessageSync: ne,
15946
15962
  beaconSyncVoiceTranscript: j,
15947
- widgetPosition: Me,
15948
- voiceEndCounter: xe,
15963
+ widgetPosition: je,
15964
+ voiceEndCounter: be,
15949
15965
  websiteName: t?.websiteName,
15950
- voiceFirstMessage: Se.voiceFirstMessage || null,
15951
- captureVisitorEmail: oe,
15966
+ voiceFirstMessage: xe.voiceFirstMessage || null,
15967
+ captureVisitorEmail: ae,
15952
15968
  emailRequired: !h,
15953
- emailCaptureEnabled: Ce.emailCapture !== !1 && I.disableEmailCapture !== !0,
15954
- listeningLabel: I.voiceListeningLabel || "Listening...",
15955
- thinkingLabel: I.voiceThinkingLabel || "Thinking...",
15956
- enterChatModeLabel: I.voiceEnterChatLabel || "Enter Chat Mode",
15957
- endConversationLabel: I.voiceEndConversationLabel || "End Conversation"
15969
+ emailCaptureEnabled: Se.emailCapture !== !1 && L.disableEmailCapture !== !0,
15970
+ listeningLabel: L.voiceListeningLabel || "Listening...",
15971
+ thinkingLabel: L.voiceThinkingLabel || "Thinking...",
15972
+ enterChatModeLabel: L.voiceEnterChatLabel || "Enter Chat Mode",
15973
+ endConversationLabel: L.voiceEndConversationLabel || "End Conversation"
15958
15974
  }, "voice"),
15959
15975
  W === "call_screen" && /* @__PURE__ */ g(i_, {
15960
15976
  incomingCall: w,
@@ -15964,25 +15980,25 @@ function K_() {
15964
15980
  isCallMuted: O,
15965
15981
  agentName: Ze,
15966
15982
  agentHeadshot: H,
15967
- fallbackAgentName: Ne,
15968
- acceptCall: le,
15969
- rejectCall: ue,
15970
- endWebRTCCall: de,
15971
- toggleCallMute: fe,
15983
+ fallbackAgentName: Me,
15984
+ acceptCall: ce,
15985
+ rejectCall: le,
15986
+ endWebRTCCall: ue,
15987
+ toggleCallMute: de,
15972
15988
  formatCallDuration: It,
15973
15989
  onMinimize: Mt,
15974
- primaryColor: Ee,
15975
- orbColors: Te,
15990
+ primaryColor: Te,
15991
+ orbColors: we,
15976
15992
  chatHistory: r
15977
15993
  }),
15978
- W === "text_chat" && /* @__PURE__ */ g(G_, {
15994
+ W === "text_chat" && /* @__PURE__ */ g(K_, {
15979
15995
  isClosing: St,
15980
15996
  copy: qe,
15981
- orbColors: Te,
15982
- primaryColor: Ee,
15983
- chatBgGradient: Fe,
15984
- logo: Ie,
15985
- quickChatOptions: ze,
15997
+ orbColors: we,
15998
+ primaryColor: Te,
15999
+ chatBgGradient: Pe,
16000
+ logo: Fe,
16001
+ quickChatOptions: Re,
15986
16002
  onQuickChatSelect: Lt,
15987
16003
  isMobile: Dt,
15988
16004
  chatHistory: r,
@@ -15991,7 +16007,7 @@ function K_() {
15991
16007
  activeScreen: a,
15992
16008
  agentName: Ze,
15993
16009
  agentHeadshot: H,
15994
- fallbackAgentName: Ne,
16010
+ fallbackAgentName: Me,
15995
16011
  input: tt,
15996
16012
  setInput: nt,
15997
16013
  onSubmit: Pt,
@@ -16014,26 +16030,26 @@ function K_() {
16014
16030
  webRTCError: k,
16015
16031
  micError: ft,
16016
16032
  setMicError: pt,
16017
- dismissCallError: pe,
16033
+ dismissCallError: fe,
16018
16034
  activeCallId: T,
16019
16035
  isCallMuted: O,
16020
- toggleCallMute: fe,
16021
- endWebRTCCall: de,
16036
+ toggleCallMute: de,
16037
+ endWebRTCCall: ue,
16022
16038
  formatCallDuration: It,
16023
16039
  callDurationSeconds: ut,
16024
16040
  onCollapse: zt,
16025
16041
  onStartVoice: Vt,
16026
- voiceEnabled: we,
16042
+ voiceEnabled: Ce,
16027
16043
  onNewChat: Ft,
16028
16044
  onMinimize: Mt,
16029
16045
  onExpand: jt,
16030
16046
  isCallMinimized: !!T,
16031
- showPoweredBy: Be,
16047
+ showPoweredBy: ze,
16032
16048
  privacyPolicyUrl: B,
16033
- headerBgColor: Ve,
16034
- getVisitorChatHistory: _e,
16035
- resumeChat: ve,
16036
- isSessionRestoring: ye
16049
+ headerBgColor: Be,
16050
+ getVisitorChatHistory: ge,
16051
+ resumeChat: _e,
16052
+ isSessionRestoring: ve
16037
16053
  }),
16038
16054
  /* @__PURE__ */ g("style", { children: "\n /* Force any SVG (or img) inside LogoSlot to fill the container height\n regardless of whether the component forwards its style prop. */\n .fe-logo-slot svg,\n .fe-logo-slot img { height: 100%; width: auto; display: block; }\n\n @keyframes fe-orb-breathe { 0%,100%{transform:scale(1)} 50%{transform:scale(1.04)} }\n @keyframes fe-orb-breathe-subtle { 0%,100%{transform:scale(1)} 50%{transform:scale(1.025)} }\n @keyframes fe-orb-pulse { 0%{transform:scale(1);opacity:.65} 50%{transform:scale(1.28);opacity:.1} 100%{transform:scale(1);opacity:.65} }\n @keyframes fe-orb-glow { from{opacity:.35} to{opacity:.75} }\n @keyframes fe-orb-fade-in { from{opacity:0} to{opacity:1} }\n @keyframes fe-orb-slide-up { from{opacity:0;transform:translateY(18px)} to{opacity:1;transform:translateY(0)} }\n @keyframes fe-orb-slide-down { from{opacity:1;transform:translateY(0)} to{opacity:0;transform:translateY(24px)} }\n @keyframes fe-orb-bar-0 { from{height:6px} to{height:18px} }\n @keyframes fe-orb-bar-1 { from{height:10px} to{height:22px} }\n @keyframes fe-orb-bar-2 { from{height:14px} to{height:26px} }\n @keyframes fe-orb-bar-3 { from{height:8px} to{height:20px} }\n @keyframes fe-orb-bar-4 { from{height:6px} to{height:16px} }\n @keyframes fe-dot-bounce { 0%,80%,100%{transform:translateY(0);opacity:.5} 40%{transform:translateY(-5px);opacity:1} }\n " })
16039
16055
  ]
@@ -16041,7 +16057,7 @@ function K_() {
16041
16057
  }
16042
16058
  //#endregion
16043
16059
  //#region src/components/ErrorBoundary.jsx
16044
- var q_ = class extends e.Component {
16060
+ var J_ = class extends e.Component {
16045
16061
  constructor(e) {
16046
16062
  super(e), this.state = { hasError: !1 };
16047
16063
  }
@@ -16056,4 +16072,4 @@ var q_ = class extends e.Component {
16056
16072
  }
16057
16073
  };
16058
16074
  //#endregion
16059
- export { Zg as AnimatedOrb, q_ as ErrorBoundary, yi as FlowEngageProvider, K_ as FlowEngageWidget, kn as useFlowEngage };
16075
+ export { Zg as AnimatedOrb, J_ as ErrorBoundary, yi as FlowEngageProvider, q_ as FlowEngageWidget, kn as useFlowEngage };