@gengage/assistant-fe 0.4.19 → 0.4.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/api-paths-CReMDZWg.js +1250 -0
  2. package/dist/chat/components/ChoicePrompter.d.ts +2 -2
  3. package/dist/chat/runtime.d.ts +2 -1
  4. package/dist/chat-runtime.js +1 -1
  5. package/dist/chat.iife.js +17 -17
  6. package/dist/chat.js +1 -1
  7. package/dist/common/find-similar-payload.d.ts +3 -0
  8. package/dist/common/index.d.ts +1 -0
  9. package/dist/common/overlay.d.ts +2 -2
  10. package/dist/common/sdk-version.d.ts +3 -0
  11. package/dist/{common-Bpp43wr0.js → common-BM2ZsSLI.js} +2 -2
  12. package/dist/common.js +79 -77
  13. package/dist/{connection-warning-C7ehvQxx.js → connection-warning-C_4e7ahZ.js} +1 -1
  14. package/dist/{fastIntent-CINRmM8r.js → fastIntent-DMNzXOSI.js} +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +75 -73
  17. package/dist/native.iife.js +18 -18
  18. package/dist/qna-runtime.js +1 -1
  19. package/dist/qna.iife.js +22 -22
  20. package/dist/qna.js +1 -1
  21. package/dist/{runtime-B0hDHRlN.js → runtime-C51WykbJ.js} +13 -13
  22. package/dist/{runtime-DhdfOJEN.js → runtime-DBh8899B.js} +854 -847
  23. package/dist/{runtime-CLcYqzoA.js → runtime-bbMljGVG.js} +17 -17
  24. package/dist/simbut/index.d.ts +1 -1
  25. package/dist/simbut/types.d.ts +7 -7
  26. package/dist/{simbut-3kqLW3SM.js → simbut-CO1rLVM9.js} +19 -22
  27. package/dist/simbut.iife.js +9 -9
  28. package/dist/simbut.js +1 -1
  29. package/dist/simrel/components/GroupTabs.d.ts +1 -1
  30. package/dist/simrel/types.d.ts +3 -3
  31. package/dist/simrel-runtime.js +1 -1
  32. package/dist/{simrel-fQg2EIB8.js → simrel-zCDlCrqG.js} +1 -1
  33. package/dist/simrel.iife.js +7 -7
  34. package/dist/simrel.js +2 -2
  35. package/dist/{widget-base-bdJaGJYi.js → widget-base-Cf9ofZhh.js} +91 -83
  36. package/package.json +2 -1
  37. package/dist/api-paths-BX3Lea3A.js +0 -1213
@@ -1,1213 +0,0 @@
1
- import { n as D } from "./widget-base-bdJaGJYi.js";
2
- var q = ({ element: e, renderElement: t }) => {
3
- if (!e.children || e.children.length === 0) return null;
4
- const r = document.createElement("div");
5
- for (const n of e.children) {
6
- const o = t(n);
7
- o && r.appendChild(o);
8
- }
9
- return r;
10
- };
11
- function De(e) {
12
- const t = document.createElement("div");
13
- if (t.className = e.containerClassName, !e.spec.elements[e.spec.root]) return t;
14
- const r = e.unknownRenderer ?? q, n = (i) => {
15
- const s = e.spec.elements[i];
16
- if (!s) return null;
17
- const c = e.registry[s.type];
18
- return c ? c({
19
- elementId: i,
20
- element: s,
21
- spec: e.spec,
22
- context: e.context,
23
- renderElement: n
24
- }) : r({
25
- elementId: i,
26
- element: s,
27
- spec: e.spec,
28
- context: e.context,
29
- renderElement: n
30
- });
31
- }, o = n(e.spec.root);
32
- return o && t.appendChild(o), t;
33
- }
34
- function qe(e, t) {
35
- if (!t) return e;
36
- const r = { ...e };
37
- for (const [n, o] of Object.entries(t))
38
- o && (r[n] = o);
39
- return r;
40
- }
41
- function v(e) {
42
- return typeof e == "object" && e !== null && typeof e.type == "string";
43
- }
44
- function O(e) {
45
- const t = [];
46
- let r = 0, n = !1, o = !1, i = 0;
47
- for (let s = 0; s < e.length; s++) {
48
- const c = e[s];
49
- if (o) {
50
- o = !1;
51
- continue;
52
- }
53
- if (c === "\\" && n) {
54
- o = !0;
55
- continue;
56
- }
57
- if (c === '"') {
58
- n = !n;
59
- continue;
60
- }
61
- n || (c === "{" && r++, c === "}" && (r--, r === 0 && (t.push(e.slice(i, s + 1)), i = s + 1)));
62
- }
63
- return t.length > 0 ? t : [e];
64
- }
65
- function T(e, t) {
66
- const r = e.trim();
67
- if (!r || r.startsWith(":")) return !1;
68
- const n = r.startsWith("data: ") ? r.slice(6) : r;
69
- if (n === "[DONE]")
70
- return t.onDone?.(), !0;
71
- try {
72
- const o = JSON.parse(n);
73
- return v(o) ? (D("stream", `event: ${o.type}`, o), t.onEvent(o), o.type === "done" ? (t.onDone?.(), !0) : !1) : !1;
74
- } catch {
75
- const o = O(n);
76
- if (o.length > 1) {
77
- for (const i of o) try {
78
- const s = JSON.parse(i);
79
- if (!v(s)) continue;
80
- if (t.onEvent(s), s.type === "done")
81
- return t.onDone?.(), !0;
82
- } catch {
83
- }
84
- return !1;
85
- }
86
- return !1;
87
- }
88
- }
89
- async function H(e, t) {
90
- if (!e.ok) {
91
- t.onError?.(/* @__PURE__ */ new Error(`HTTP ${e.status}: ${e.statusText}`));
92
- return;
93
- }
94
- if (!e.body) {
95
- t.onError?.(/* @__PURE__ */ new Error("Response body is null — streaming not supported"));
96
- return;
97
- }
98
- const r = e.body.getReader(), n = new TextDecoder("utf-8");
99
- let o = "";
100
- const i = t.idleTimeoutMs ?? 6e4, s = /* @__PURE__ */ Symbol("idle-timeout");
101
- let c = !1;
102
- try {
103
- for (; ; ) {
104
- const a = r.read();
105
- let g;
106
- const m = await (i > 0 ? Promise.race([a.then((l) => (clearTimeout(g), l)), new Promise((l) => {
107
- g = setTimeout(() => l(s), i);
108
- })]) : a);
109
- if (m === s) {
110
- c = !0, await r.cancel();
111
- break;
112
- }
113
- const { done: u, value: y } = m;
114
- if (u) break;
115
- o += n.decode(y, { stream: !0 });
116
- const p = o.split(`
117
- `);
118
- o = p.pop() ?? "";
119
- for (const l of p) if (T(l, t)) return;
120
- }
121
- if (o.trim() && T(o, t))
122
- return;
123
- } catch (a) {
124
- if (a instanceof DOMException && a.name === "AbortError") return;
125
- t.onError?.(a instanceof Error ? a : new Error(String(a)));
126
- } finally {
127
- c || r.releaseLock();
128
- }
129
- t.onDone?.();
130
- }
131
- function Oe(e, t, r) {
132
- const n = new AbortController(), o = r.signal ? U([r.signal, n.signal]) : n.signal;
133
- return fetch(e, {
134
- method: "POST",
135
- headers: {
136
- "Content-Type": "application/json",
137
- ...r.headers
138
- },
139
- body: JSON.stringify(t),
140
- signal: o
141
- }).then((i) => H(i, {
142
- ...r,
143
- signal: o
144
- })).catch((i) => {
145
- i instanceof DOMException && i.name === "AbortError" || r.onError?.(i instanceof Error ? i : new Error(String(i)));
146
- }), n;
147
- }
148
- function U(e) {
149
- const t = new AbortController(), r = [];
150
- for (const n of e) {
151
- if (n.aborted)
152
- return t.abort(n.reason), t.signal;
153
- const o = () => t.abort(n.reason);
154
- n.addEventListener("abort", o, { once: !0 }), r.push(() => n.removeEventListener("abort", o));
155
- }
156
- return t.signal.addEventListener("abort", () => {
157
- for (const n of r) n();
158
- }, { once: !0 }), t.signal;
159
- }
160
- var E = 3, z = (e, t) => {
161
- const r = e.replace(/\s+/g, " ").trim().replace(/^[,.;:!?•-]+|[,.;:!?•-]+$/g, "");
162
- if (!r) return "";
163
- const n = t?.stripLeadingStopWords ? r.replace(/^(?:daha|için)\s+/i, "").trim() : r;
164
- return n ? n.split(/\s+/).slice(0, 3).join(" ").trim() : "";
165
- }, x = (e, t) => e ? e.split(/[•,;:/()]|(?:\sve\s)|(?:\sand\s)|(?:\sile\s)|(?:\sfor\s)|(?:\swith\s)/i).map((r) => z(r, t)).filter(Boolean) : [];
166
- function G(e) {
167
- const t = (e.display_keywords ?? []).flatMap((o) => x(o, { stripLeadingStopWords: !0 })), r = t.filter((o, i) => t.indexOf(o) === i);
168
- if (r.length > 0) return r.slice(0, E);
169
- const n = [...x(e.chosen_attribute, { stripLeadingStopWords: !0 }), ...x(e.short_name)];
170
- return n.filter((o, i) => n.indexOf(o) === i).slice(0, E);
171
- }
172
- function j(e) {
173
- return G(e).join(" • ");
174
- }
175
- var M = ["beauty_consulting", "watch_expert"];
176
- function $(e) {
177
- return typeof e == "string" && M.includes(e);
178
- }
179
- function He(e) {
180
- if (typeof e.type != "string") return null;
181
- if (B(e)) return e;
182
- const t = e;
183
- switch (t.type) {
184
- case "outputText":
185
- return K(t);
186
- case "suggestedActions":
187
- return W(t);
188
- case "productList":
189
- return V(t);
190
- case "productDetails":
191
- return F(t);
192
- case "productDetailsSimilars":
193
- return Q(t);
194
- case "comparisonTable":
195
- return J(t);
196
- case "context":
197
- return ee(t);
198
- case "chatStreamEnd":
199
- return te();
200
- case "loading":
201
- return oe(t);
202
- case "panelLoading":
203
- return re(t);
204
- case "similarLoading":
205
- return ne(t);
206
- case "redirect":
207
- return ie(t);
208
- case "error":
209
- return se(t);
210
- case "dummy":
211
- return ae(t);
212
- case "launcherAction":
213
- return ce(t);
214
- case "text":
215
- return P(t);
216
- case "productItem":
217
- return de(t);
218
- case "text_image":
219
- return I(t);
220
- case "quick_qna":
221
- return N(t);
222
- case "reviewHighlights":
223
- return ue(t);
224
- case "aiProductSuggestions":
225
- return fe(t);
226
- case "aiProductGroupings":
227
- return ye(t);
228
- case "aiSuggestedSearches":
229
- return me(t);
230
- case "prosAndCons":
231
- return le(t);
232
- case "getGroundingReview":
233
- return ge(t);
234
- case "voice":
235
- return he(t);
236
- case "visitorDataResponse":
237
- return pe(t);
238
- case "productListPreview":
239
- return _e();
240
- case "groupList":
241
- return ke(t);
242
- case "formGetInfo":
243
- case "formTestDrive":
244
- case "formServiceRequest":
245
- case "launchFormPage":
246
- return be(t);
247
- case "launcherContent":
248
- return Se(t);
249
- case "handoff":
250
- return we(t);
251
- case "uiSpec":
252
- return Ie(t);
253
- default:
254
- return null;
255
- }
256
- }
257
- function B(e) {
258
- const t = e.type;
259
- if (typeof t != "string") return !1;
260
- switch (t) {
261
- case "metadata":
262
- return typeof e.sessionId == "string" && typeof e.model == "string";
263
- case "text_chunk":
264
- return typeof e.content == "string";
265
- case "ui_spec": {
266
- const r = e.widget;
267
- if (r !== "chat" && r !== "qna" && r !== "simrel") return !1;
268
- const n = k(e.spec);
269
- return n ? typeof n.root == "string" && k(n.elements) !== null : !1;
270
- }
271
- case "action": {
272
- const r = k(e.action);
273
- return r !== null && typeof r.kind == "string";
274
- }
275
- case "error":
276
- return typeof e.code == "string" && typeof e.message == "string";
277
- case "done":
278
- return !0;
279
- default:
280
- return !1;
281
- }
282
- }
283
- function K(e) {
284
- const t = d(e.payload.text, e.payload.plain_text) ?? "", r = d(e.payload.plain_text, e.payload.text) ?? t;
285
- if (e.payload.is_error) return {
286
- type: "error",
287
- code: "BACKEND_ERROR",
288
- message: r || "Backend returned an error"
289
- };
290
- const n = {
291
- type: "text_chunk",
292
- content: t,
293
- final: !0
294
- }, o = e.payload.product_mentions;
295
- Array.isArray(o) && o.length > 0 && (n.productMentions = o.filter((a) => typeof a == "object" && a !== null && typeof a.sku == "string" && typeof a.short_name == "string"));
296
- const i = e.payload.sku_to_product_item;
297
- i && typeof i == "object" && !Array.isArray(i) && (n.skuToProductItem = i);
298
- const s = e.payload.conversation_mode;
299
- typeof s == "string" && s && (n.conversationMode = s);
300
- const c = e.payload.render_hint;
301
- return typeof c == "string" && c && (n.renderHint = c), e.payload.kvkk === !0 && (n.kvkk = !0), n;
302
- }
303
- function W(e) {
304
- return R((e.payload.actions ?? []).map((t) => {
305
- const r = d(t.title) ?? "", n = b(t.requestDetails, r), o = n ? {
306
- label: r,
307
- action: n
308
- } : null;
309
- return o ? (typeof t.icon == "string" && (o.icon = t.icon), typeof t.image == "string" && (o.image = t.image), o) : null;
310
- }).filter(A), "chat");
311
- }
312
- function V(e) {
313
- const t = (Array.isArray(e.payload.style_variations) ? e.payload.style_variations : []).map((s) => {
314
- const c = d(s.style_label);
315
- if (!c) return null;
316
- const a = d(s.style_mood), g = d(s.image_url ?? void 0), m = (Array.isArray(s.product_list) ? s.product_list : []).map((y) => {
317
- const p = k(y);
318
- return p ? C(k(p.product_detail) ?? k(p.product) ?? p) : null;
319
- }).filter(A), u = Array.isArray(s.recommendation_groups) ? s.recommendation_groups.map((y) => ({
320
- label: d(y.label) ?? "",
321
- reason: d(y.reason) ?? "",
322
- skus: Array.isArray(y.skus) ? y.skus.filter((p) => typeof p == "string" && p.trim().length > 0) : []
323
- })) : [];
324
- return {
325
- style_label: c,
326
- style_mood: a ?? "",
327
- ...g ? { image_url: g } : {},
328
- ...typeof s.status == "string" ? { status: s.status } : {},
329
- product_list: m,
330
- recommendation_groups: u
331
- };
332
- }).filter(A), r = e.payload.product_list ?? [], n = $(e.payload.source) && t.length > 0 ? t[0].product_list : null, o = n ? Ae(n, "chat") : L(r, "chat");
333
- o.panelHint = "panel";
334
- const i = o.spec.elements[o.spec.root];
335
- if (i) {
336
- const s = {};
337
- typeof e.payload.offset == "number" && (s.offset = e.payload.offset), typeof e.payload.end_of_list == "boolean" && (s.endOfList = e.payload.end_of_list), typeof e.payload.title == "string" && (s.panelTitle = e.payload.title), typeof e.payload.source == "string" && (s.source = e.payload.source), t.length > 0 && (s.styleVariations = t), e.payload.replace_panel === !0 && (s.replacePanel = !0), (e.payload.ranking_state === "pending" || e.payload.ranking_state === "final") && (s.rankingState = e.payload.ranking_state);
338
- const c = e.payload.sequence_id ?? e.payload.search_id;
339
- typeof c == "string" && c.length > 0 && (s.sequenceId = c), Object.keys(s).length > 0 && (i.props = {
340
- ...i.props,
341
- ...s
342
- });
343
- }
344
- return o;
345
- }
346
- function F(e) {
347
- const t = e.payload.productDetails;
348
- if (!t) return Pe("chat");
349
- const r = w(t);
350
- return {
351
- type: "ui_spec",
352
- widget: "chat",
353
- spec: {
354
- root: "root",
355
- elements: { root: {
356
- type: "ProductDetailsPanel",
357
- props: { product: {
358
- ...t,
359
- ...r
360
- } }
361
- } }
362
- },
363
- panelHint: "panel"
364
- };
365
- }
366
- function Q(e) {
367
- const t = L(e.payload.similarProducts ?? [], "chat"), r = t.spec.elements[t.spec.root];
368
- return r && (r.props = {
369
- ...r.props,
370
- similarsAppend: !0
371
- }), {
372
- ...t,
373
- panelHint: "panel"
374
- };
375
- }
376
- function J(e) {
377
- const t = e.payload.multiple_product_details ?? [], r = e.payload, n = {
378
- key_differences: r.key_differences,
379
- recommended_choice: r.recommended_choice,
380
- recommended_choice_sku: r.recommended_choice_sku,
381
- special_considerations: r.special_considerations,
382
- criteria_view: r.criteria_view,
383
- criteria_view_short: r.criteria_view_short,
384
- compared_field_names: r.compared_field_names,
385
- winner_product: r.winner_product,
386
- winner_hits: r.winner_hits,
387
- ...e.payload.product_comparison_framework ?? {}
388
- }, o = e.payload.table, i = e.payload.features_list, s = [];
389
- for (const _ of t) {
390
- const h = w(_);
391
- s.push(h);
392
- }
393
- const c = Y(o, s, n, i);
394
- let a;
395
- n?.recommended_choice_sku ? a = n.recommended_choice_sku : n?.winner_product && n.winner_product.length > 0 && (a = n.winner_product[0]?.product_detail?.sku ?? n.winner_product[0]?.sku);
396
- const g = a ? s.find((_) => _.sku === a) ?? s[0] : s[0], m = [];
397
- if (Array.isArray(n?.key_differences))
398
- for (const _ of n.key_differences) typeof _ == "string" && m.push(_);
399
- const u = Te(n?.special_considerations), y = n?.recommended_choice, p = n?.winner_hits, l = {};
400
- for (const _ of s) {
401
- const h = _.sku;
402
- h && (l[h] = {
403
- title: _.name ?? h,
404
- type: "launchSingleProduct",
405
- payload: { sku: h }
406
- });
407
- }
408
- const f = {
409
- products: s,
410
- attributes: c,
411
- highlights: m,
412
- productActions: l
413
- };
414
- return g && (f.recommended = g), u.length > 0 && (f.specialCases = u), y && (f.recommendedText = y), p && (f.winnerHits = p), typeof n?.key_differences == "string" && (f.keyDifferencesHtml = n.key_differences), n?.special_considerations && (f.specialConsiderations = n.special_considerations), {
415
- type: "ui_spec",
416
- widget: "chat",
417
- spec: {
418
- root: "root",
419
- elements: { root: {
420
- type: "ComparisonTable",
421
- props: f
422
- } }
423
- },
424
- panelHint: "panel"
425
- };
426
- }
427
- function Y(e, t, r, n) {
428
- if (!e) return [];
429
- const o = Object.entries(e);
430
- if (o.length === 0) return [];
431
- const i = o[0]?.[1];
432
- if (Array.isArray(i)) {
433
- const u = r.criteria_view ?? r.criteria_view_short ?? {}, y = r.compared_field_names ?? Object.keys(e), p = [];
434
- for (const l of y) {
435
- const f = e[l];
436
- if (!f || !Array.isArray(f)) continue;
437
- const _ = u[l] ?? l;
438
- p.push({
439
- label: _,
440
- values: f.map((h) => typeof h == "string" ? h : String(h ?? ""))
441
- });
442
- }
443
- return p;
444
- }
445
- const s = e, c = t.map((u) => String(u.sku ?? "")).filter((u) => u.length > 0), a = r.criteria_view ?? r.criteria_view_short ?? {}, g = (n && n.length > 0 ? n : r.compared_field_names && r.compared_field_names.length > 0 ? r.compared_field_names : X(s)).filter((u) => u !== "name" && u !== "name_short" && !u.endsWith("_short")), m = [];
446
- for (const u of g) {
447
- const y = c.map((l) => {
448
- const f = s[l];
449
- if (!f || typeof f != "object") return "";
450
- const _ = f[`${u}_short`], h = f[u];
451
- return Z(_ ?? h);
452
- });
453
- if (y.every((l) => l.length === 0)) continue;
454
- const p = a[u] ?? u;
455
- m.push({
456
- label: p,
457
- values: y
458
- });
459
- }
460
- return m;
461
- }
462
- function X(e) {
463
- const t = [], r = /* @__PURE__ */ new Set();
464
- for (const n of Object.values(e))
465
- if (!(!n || typeof n != "object"))
466
- for (const o of Object.keys(n))
467
- r.has(o) || (r.add(o), t.push(o));
468
- return t;
469
- }
470
- function Z(e) {
471
- return typeof e == "string" ? e : typeof e == "number" || typeof e == "boolean" ? String(e) : "";
472
- }
473
- function ee(e) {
474
- return {
475
- type: "metadata",
476
- sessionId: "",
477
- model: "",
478
- meta: {
479
- panel: e.payload.panel,
480
- messages: e.payload.messages,
481
- message_id: e.payload.message_id
482
- }
483
- };
484
- }
485
- function te() {
486
- return { type: "done" };
487
- }
488
- function oe(e) {
489
- return {
490
- type: "metadata",
491
- sessionId: "",
492
- model: "",
493
- meta: {
494
- loading: !0,
495
- loadingText: e.payload.text,
496
- thinkingMessages: e.payload.thinking_messages,
497
- dynamicLoading: e.payload.is_dynamic === !0
498
- }
499
- };
500
- }
501
- function re(e) {
502
- return {
503
- type: "metadata",
504
- sessionId: "",
505
- model: "",
506
- meta: {
507
- loading: !0,
508
- panelLoading: !0,
509
- panelPendingType: e.payload?.pending_type,
510
- loadingText: e.payload?.text
511
- }
512
- };
513
- }
514
- function ne(e) {
515
- return {
516
- type: "metadata",
517
- sessionId: "",
518
- model: "",
519
- meta: {
520
- loading: !0,
521
- similarPanelLoading: !0,
522
- panelPendingType: e.payload?.pending_type,
523
- loadingText: e.payload?.text
524
- }
525
- };
526
- }
527
- function ie(e) {
528
- const t = d(e.payload.url);
529
- return t ? {
530
- type: "action",
531
- action: {
532
- kind: "navigate",
533
- url: t,
534
- newTab: e.payload.new_tab === !0
535
- }
536
- } : {
537
- type: "metadata",
538
- sessionId: "",
539
- model: "",
540
- meta: {
541
- redirect: e.payload,
542
- redirectTarget: d(e.payload.to)
543
- }
544
- };
545
- }
546
- function se(e) {
547
- return {
548
- type: "error",
549
- code: "BACKEND_ERROR",
550
- message: d(e.payload?.text, e.payload?.message, e.payload?.error) ?? "Backend returned an error"
551
- };
552
- }
553
- function ae(e) {
554
- return {
555
- type: "metadata",
556
- sessionId: "",
557
- model: "",
558
- meta: { noop: !0 }
559
- };
560
- }
561
- function ce(e) {
562
- const t = e.payload ?? {};
563
- if (Array.isArray(t.action_list)) {
564
- const o = { action_list: t.action_list }, i = typeof t.type == "string" ? t.type : void 0, s = typeof t.theme == "string" ? t.theme : void 0;
565
- return i !== void 0 && (o.type = i), s !== void 0 && (o.theme = s), N({
566
- type: "quick_qna",
567
- payload: o
568
- });
569
- }
570
- const r = k(t.action);
571
- if (r) {
572
- const o = { action: r }, i = typeof t.text == "string" ? t.text : void 0, s = typeof t.image_url == "string" ? t.image_url : void 0, c = typeof t.theme == "string" ? t.theme : void 0;
573
- return i !== void 0 && (o.text = i), s !== void 0 && (o.image_url = s), c !== void 0 && (o.theme = c), I({
574
- type: "text_image",
575
- payload: o
576
- });
577
- }
578
- const n = typeof t.text == "string" ? t.text : "";
579
- if (n) {
580
- const o = { text: n }, i = typeof t.type == "string" ? t.type : void 0, s = typeof t.theme == "string" ? t.theme : void 0, c = k(t.payload) ?? void 0;
581
- return i !== void 0 && (o.type = i), c !== void 0 && (o.payload = c), s !== void 0 && (o.theme = s), P({
582
- type: "text",
583
- payload: o
584
- });
585
- }
586
- return {
587
- type: "metadata",
588
- sessionId: "",
589
- model: "",
590
- meta: { launcherAction: t }
591
- };
592
- }
593
- function P(e) {
594
- const t = { text: d(e.payload.text) ?? "" };
595
- return typeof e.payload.theme == "string" && (t.theme = e.payload.theme), e.payload.payload !== void 0 && (t.payload = e.payload.payload), {
596
- type: "ui_spec",
597
- widget: "qna",
598
- spec: {
599
- root: "root",
600
- elements: { root: {
601
- type: "QuestionHeading",
602
- props: t
603
- } }
604
- }
605
- };
606
- }
607
- function de(e) {
608
- return xe(e.payload, "qna");
609
- }
610
- function I(e) {
611
- const t = d(e.payload.text) ?? "", r = b(e.payload.action, t);
612
- if (r) {
613
- const o = {
614
- label: t || r.title,
615
- action: r
616
- };
617
- return typeof e.payload.image_url == "string" && (o.image = e.payload.image_url), typeof e.payload.theme == "string" && (o.theme = e.payload.theme), {
618
- type: "ui_spec",
619
- widget: "qna",
620
- spec: {
621
- root: "root",
622
- elements: { root: {
623
- type: "ActionButton",
624
- props: o
625
- } }
626
- }
627
- };
628
- }
629
- const n = { text: t };
630
- return typeof e.payload.theme == "string" && (n.theme = e.payload.theme), P({
631
- type: "text",
632
- payload: n
633
- });
634
- }
635
- function N(e) {
636
- return R((e.payload.action_list ?? []).map((t) => {
637
- const r = d(t.title) ?? "", n = b(t.requestDetails, r), o = n ? {
638
- label: r,
639
- action: n
640
- } : null;
641
- return o ? (typeof t.icon == "string" && (o.icon = t.icon), typeof t.image == "string" && (o.image = t.image), o) : null;
642
- }).filter(A), "qna");
643
- }
644
- function ue(e) {
645
- const t = { reviews: (e.payload.reviews ?? []).map((r) => {
646
- const n = {};
647
- return typeof r.review_class == "string" && (n.review_class = r.review_class), typeof r.review_text == "string" && (n.review_text = r.review_text), (typeof r.review_rating == "string" || typeof r.review_rating == "number") && (n.review_rating = r.review_rating), typeof r.review_tag == "string" && (n.review_tag = r.review_tag), n;
648
- }) };
649
- return typeof e.payload.sku == "string" && (t.sku = e.payload.sku), {
650
- type: "ui_spec",
651
- widget: "chat",
652
- spec: {
653
- root: "root",
654
- elements: { root: {
655
- type: "ReviewHighlights",
656
- props: t
657
- } }
658
- }
659
- };
660
- }
661
- function le(e) {
662
- const t = {};
663
- return Array.isArray(e.payload.pros) && (t.pros = e.payload.pros), Array.isArray(e.payload.cons) && (t.cons = e.payload.cons), typeof e.payload.product_name == "string" && (t.productName = e.payload.product_name), {
664
- type: "ui_spec",
665
- widget: "chat",
666
- spec: {
667
- root: "root",
668
- elements: { root: {
669
- type: "ProsAndCons",
670
- props: t
671
- } }
672
- }
673
- };
674
- }
675
- function pe(e) {
676
- return {
677
- type: "metadata",
678
- sessionId: "",
679
- model: "",
680
- meta: { visitorDataResponse: e.payload }
681
- };
682
- }
683
- function fe(e) {
684
- const t = e.payload.product_suggestions ?? [], r = [];
685
- for (let n = 0; n < t.length; n++) {
686
- const o = t[n];
687
- if (!o) continue;
688
- const i = Ce(o);
689
- if (!i) continue;
690
- const s = { product: i }, c = b(o.requestDetails, i.name);
691
- c && (s.action = c), typeof o.role == "string" && (s.role = o.role), typeof o.reason == "string" && (s.reason = o.reason), typeof o.review_highlight == "string" && (s.reviewHighlight = o.review_highlight), Array.isArray(o.labels) && (s.labels = o.labels), typeof o.expert_quality_score == "number" && (s.expertQualityScore = o.expert_quality_score), r.push(s);
692
- }
693
- return r.length === 0 ? {
694
- type: "metadata",
695
- sessionId: "",
696
- model: "",
697
- meta: { aiProductSuggestions: e.payload.product_suggestions ?? [] }
698
- } : {
699
- type: "ui_spec",
700
- widget: "chat",
701
- spec: {
702
- root: "root",
703
- elements: { root: {
704
- type: "AITopPicks",
705
- props: { suggestions: r }
706
- } }
707
- }
708
- };
709
- }
710
- function ye(e) {
711
- const t = e.payload.product_groupings ?? [], r = [], n = [];
712
- for (let o = 0; o < t.length; o++) {
713
- const i = t[o];
714
- if (!i) continue;
715
- const s = d(i.name) ?? "", c = d(i.sku, i.repr_sku), a = d(i.image, i.repr_image), g = c !== void 0 ? {
716
- type: "findSimilar",
717
- payload: { sku: c }
718
- } : void 0, m = b(i.requestDetails ?? g, s), u = (Array.isArray(i.group_products) ? i.group_products : []).map((l) => {
719
- const f = k(l);
720
- return f ? C(f) : null;
721
- }).filter(A), y = a ?? d(...u.map((l) => l.imageUrl));
722
- if (s && u.length > 0) {
723
- const l = {
724
- groupName: s,
725
- products: u
726
- };
727
- y && (l.image = y), r.push(l);
728
- }
729
- if (!m) continue;
730
- const p = {
731
- name: s,
732
- action: m
733
- };
734
- if (Array.isArray(i.labels)) {
735
- const l = i.labels.filter((f) => typeof f == "string");
736
- l.length > 0 && (p.labels = l);
737
- }
738
- a !== void 0 && (p.image = a), n.push(p);
739
- }
740
- return r.length > 0 ? {
741
- type: "ui_spec",
742
- widget: "chat",
743
- spec: {
744
- root: "root",
745
- elements: { root: {
746
- type: "CategoriesContainer",
747
- props: { groups: r }
748
- } }
749
- },
750
- panelHint: "panel"
751
- } : n.length === 0 ? {
752
- type: "metadata",
753
- sessionId: "",
754
- model: "",
755
- meta: { aiProductGroupings: e.payload.product_groupings ?? [] }
756
- } : {
757
- type: "ui_spec",
758
- widget: "chat",
759
- spec: {
760
- root: "root",
761
- elements: { root: {
762
- type: "AIGroupingCards",
763
- props: { entries: n }
764
- } }
765
- }
766
- };
767
- }
768
- function me(e) {
769
- const t = e.payload.suggested_searches ?? [], r = [];
770
- for (let n = 0; n < t.length; n++) {
771
- const o = t[n];
772
- if (!o) continue;
773
- const i = d(o.short_name, o.chosen_attribute, o.detailed_user_message) ?? `Search ${n + 1}`, s = {}, c = d(o.detailed_user_message);
774
- c && (s.text = c);
775
- const a = k(k(o.requestDetails)?.payload), g = a?.group_skus;
776
- o.group_skus && Array.isArray(o.group_skus) ? s.group_skus = o.group_skus : Array.isArray(g) && (s.group_skus = g.filter((h) => typeof h == "string"));
777
- const m = d(o.sku, o.representative_product_sku, a?.sku);
778
- m && (s.sku = m), s.is_suggested_text = 1;
779
- const u = {
780
- type: "inputText",
781
- payload: s
782
- }, y = b(o.requestDetails, i), p = y?.type === "findSimilar" && typeof s.text == "string" ? b(u, i) : y ?? b(u, i);
783
- if (!p) continue;
784
- const l = {
785
- shortName: i,
786
- action: p
787
- }, f = d(o.detailed_user_message);
788
- f && f !== i && (l.detailedMessage = f);
789
- const _ = j(o);
790
- _ && _ !== i && _ !== (f ?? "") && (l.whyDifferent = _), typeof o.image == "string" && (l.image = o.image), r.push(l);
791
- }
792
- return r.length === 0 ? {
793
- type: "metadata",
794
- sessionId: "",
795
- model: "",
796
- meta: { aiSuggestedSearches: e.payload.suggested_searches ?? [] }
797
- } : {
798
- type: "ui_spec",
799
- widget: "chat",
800
- spec: {
801
- root: "root",
802
- elements: { root: {
803
- type: "AISuggestedSearchCards",
804
- props: { entries: r }
805
- } }
806
- }
807
- };
808
- }
809
- function ge(e) {
810
- const t = e.payload, r = b(t.requestDetails ?? t.request_details, d(t.review_count, t.reviewCount, t.text, t.title) ?? "Show product reviews");
811
- if (!r) return {
812
- type: "metadata",
813
- sessionId: "",
814
- model: "",
815
- meta: { groundingReview: t }
816
- };
817
- const n = { action: r };
818
- return t.title && (n.title = t.title), t.text && (n.text = t.text), t.review_count ? n.reviewCount = t.review_count : typeof t.reviewCount == "string" && t.reviewCount.trim() && (n.reviewCount = t.reviewCount), {
819
- type: "ui_spec",
820
- widget: "chat",
821
- spec: {
822
- root: "root",
823
- elements: { root: {
824
- type: "GroundingReviewCard",
825
- props: n
826
- } }
827
- }
828
- };
829
- }
830
- function _e() {
831
- return {
832
- type: "metadata",
833
- sessionId: "",
834
- model: "",
835
- meta: { analyzeAnimation: !0 }
836
- };
837
- }
838
- function he(e) {
839
- return {
840
- type: "metadata",
841
- sessionId: "",
842
- model: "",
843
- meta: { voice: e.payload }
844
- };
845
- }
846
- function ke(e) {
847
- const t = e.payload.group_list ?? [], r = [];
848
- for (const o of t) {
849
- const i = o.group_name ?? "", s = (o.product_list ?? []).map(w);
850
- r.push({
851
- groupName: i,
852
- products: s
853
- });
854
- }
855
- const n = [];
856
- for (const o of e.payload.filter_tags ?? []) {
857
- const i = o.title ?? "";
858
- if (!i) continue;
859
- const s = b(o.requestDetails, i), c = { title: i };
860
- s && (c.action = s), n.push(c);
861
- }
862
- return {
863
- type: "ui_spec",
864
- widget: "chat",
865
- spec: {
866
- root: "root",
867
- elements: { root: {
868
- type: "CategoriesContainer",
869
- props: {
870
- groups: r,
871
- filterTags: n
872
- }
873
- } }
874
- },
875
- panelHint: "panel"
876
- };
877
- }
878
- function be(e) {
879
- return {
880
- type: "metadata",
881
- sessionId: "",
882
- model: "",
883
- meta: {
884
- formType: e.type,
885
- formPayload: e.payload ?? {}
886
- }
887
- };
888
- }
889
- function we(e) {
890
- const t = {};
891
- return typeof e.payload?.summary == "string" && (t.summary = e.payload.summary), Array.isArray(e.payload?.products_discussed) && (t.products_discussed = e.payload.products_discussed), typeof e.payload?.user_sentiment == "string" && (t.user_sentiment = e.payload.user_sentiment), {
892
- type: "ui_spec",
893
- widget: "chat",
894
- spec: {
895
- root: "root",
896
- elements: { root: {
897
- type: "HandoffNotice",
898
- props: t
899
- } }
900
- }
901
- };
902
- }
903
- function Se(e) {
904
- return {
905
- type: "metadata",
906
- sessionId: "",
907
- model: "",
908
- meta: { launcherContent: e.payload ?? {} }
909
- };
910
- }
911
- function R(e, t) {
912
- const r = {}, n = [];
913
- for (let o = 0; o < e.length; o++) {
914
- const i = e[o];
915
- if (!i) continue;
916
- const s = `action-${o}`;
917
- n.push(s);
918
- const c = {
919
- label: i.label,
920
- action: i.action
921
- };
922
- i.icon !== void 0 && (c.icon = i.icon), i.image !== void 0 && (c.image = i.image), i.description !== void 0 && (c.description = i.description), r[s] = {
923
- type: "ActionButton",
924
- props: c
925
- };
926
- }
927
- return r.root = {
928
- type: "ActionButtons",
929
- props: { buttons: e.map((o) => {
930
- const i = {
931
- label: o.label,
932
- action: o.action
933
- };
934
- return o.image !== void 0 && (i.image = o.image), o.description !== void 0 && (i.description = o.description), o.icon !== void 0 && (i.icon = o.icon), i;
935
- }) },
936
- children: n
937
- }, {
938
- type: "ui_spec",
939
- widget: t,
940
- spec: {
941
- root: "root",
942
- elements: r
943
- }
944
- };
945
- }
946
- function L(e, t) {
947
- const r = {}, n = [];
948
- for (let o = 0; o < e.length; o++) {
949
- const i = e[o];
950
- if (!i) continue;
951
- const s = w(i), c = `product-${o}`;
952
- n.push(c);
953
- const a = {
954
- product: s,
955
- index: o
956
- };
957
- s.sku && (a.action = {
958
- title: s.name,
959
- type: "launchSingleProduct",
960
- payload: { sku: s.sku }
961
- }), r[c] = {
962
- type: "ProductCard",
963
- props: a
964
- };
965
- }
966
- return r.root = {
967
- type: "ProductGrid",
968
- props: { layout: "grid" },
969
- children: n
970
- }, {
971
- type: "ui_spec",
972
- widget: t,
973
- spec: {
974
- root: "root",
975
- elements: r
976
- }
977
- };
978
- }
979
- function Ae(e, t) {
980
- const r = {}, n = [];
981
- for (let o = 0; o < e.length; o++) {
982
- const i = e[o];
983
- if (!i) continue;
984
- const s = `product-${o}`;
985
- n.push(s);
986
- const c = {
987
- product: i,
988
- index: o
989
- }, a = i.sku;
990
- a && (c.action = {
991
- title: i.name ?? "",
992
- type: "launchSingleProduct",
993
- payload: { sku: a }
994
- }), r[s] = {
995
- type: "ProductCard",
996
- props: c
997
- };
998
- }
999
- return r.root = {
1000
- type: "ProductGrid",
1001
- props: { layout: "grid" },
1002
- children: n
1003
- }, {
1004
- type: "ui_spec",
1005
- widget: t,
1006
- spec: {
1007
- root: "root",
1008
- elements: r
1009
- }
1010
- };
1011
- }
1012
- function xe(e, t) {
1013
- return {
1014
- type: "ui_spec",
1015
- widget: t,
1016
- spec: {
1017
- root: "root",
1018
- elements: { root: {
1019
- type: "ProductCard",
1020
- props: {
1021
- product: w(e),
1022
- index: 0
1023
- }
1024
- } }
1025
- }
1026
- };
1027
- }
1028
- function Pe(e) {
1029
- return {
1030
- type: "ui_spec",
1031
- widget: e,
1032
- spec: {
1033
- root: "root",
1034
- elements: { root: {
1035
- type: "ActionButtons",
1036
- props: { buttons: [] },
1037
- children: []
1038
- } }
1039
- }
1040
- };
1041
- }
1042
- function Ce(e) {
1043
- const t = d(e.sku), r = d(e.short_name), n = { ...k(e.product_item) ?? e }, o = d(e.discount_reason, e.discountReason);
1044
- return o && !d(n.discount_reason, n.discountReason) && (n.discount_reason = o), C(n, t, r);
1045
- }
1046
- function C(e, t, r) {
1047
- const n = d(e.sku, t), o = d(e.name, r);
1048
- if (!n || !o) return null;
1049
- const i = {
1050
- sku: n,
1051
- name: o
1052
- }, s = d(e.brand);
1053
- s && (i.brand = s);
1054
- const c = d(e.url);
1055
- c && (i.url = c);
1056
- const a = ve(e.images);
1057
- if (a.length > 0) i.images = a;
1058
- else {
1059
- const f = d(e.image, e.image_url, e.imageUrl);
1060
- f && (i.images = [f]);
1061
- }
1062
- const g = S(e.price_discounted);
1063
- g !== void 0 && (i.price_discounted = g);
1064
- const m = S(e.price);
1065
- m !== void 0 && (i.price = m);
1066
- const u = S(e.rating);
1067
- u !== void 0 && (i.rating = u);
1068
- const y = S(e.review_count) ?? S(e.reviewCount);
1069
- y !== void 0 && (i.review_count = y);
1070
- const p = d(e.cart_code, e.cartCode);
1071
- p && (i.cart_code = p), typeof e.in_stock == "boolean" && (i.in_stock = e.in_stock), typeof e.inStock == "boolean" && (i.in_stock = e.inStock);
1072
- const l = d(e.discount_reason, e.discountReason);
1073
- return l && (i.discount_reason = l), w(i);
1074
- }
1075
- function b(e, t) {
1076
- const r = k(e);
1077
- if (!r) return null;
1078
- const n = r.type;
1079
- if (typeof n != "string" || n.length === 0) return null;
1080
- const o = {
1081
- title: t || n,
1082
- type: n
1083
- };
1084
- return r.payload !== void 0 && (o.payload = r.payload), o;
1085
- }
1086
- function k(e) {
1087
- return !e || typeof e != "object" || Array.isArray(e) ? null : e;
1088
- }
1089
- function d(...e) {
1090
- for (const t of e) if (typeof t == "string") {
1091
- const r = t.trim();
1092
- if (r.length > 0) return r;
1093
- }
1094
- }
1095
- function ve(e) {
1096
- return Array.isArray(e) ? e.filter((t) => typeof t == "string" && t.length > 0) : [];
1097
- }
1098
- function Te(e) {
1099
- if (typeof e == "string") {
1100
- const t = e.trim();
1101
- return t ? [t] : [];
1102
- }
1103
- return Array.isArray(e) ? e.filter((t) => typeof t == "string").map((t) => t.trim()).filter((t) => t.length > 0) : [];
1104
- }
1105
- function S(e) {
1106
- if (typeof e == "number" && Number.isFinite(e)) return e;
1107
- if (typeof e == "string") {
1108
- let t;
1109
- e.includes(".") && e.includes(",") ? t = e.replace(/\./g, "").replace(",", ".") : t = e.replace(",", ".");
1110
- const r = Number(t);
1111
- if (Number.isFinite(r)) return r;
1112
- }
1113
- }
1114
- function A(e) {
1115
- return e != null;
1116
- }
1117
- var Ee = /* @__PURE__ */ new Set([
1118
- "sku",
1119
- "name",
1120
- "brand",
1121
- "images",
1122
- "price",
1123
- "price_discounted",
1124
- "price_discount_rate",
1125
- "price_currency",
1126
- "discount_reason",
1127
- "url",
1128
- "rating",
1129
- "review_count",
1130
- "cart_code",
1131
- "in_stock",
1132
- "description",
1133
- "description_html",
1134
- "features",
1135
- "specifications",
1136
- "short_name",
1137
- "category_ids",
1138
- "category_names",
1139
- "variants",
1140
- "facet_hits",
1141
- "promotions"
1142
- ]);
1143
- function w(e) {
1144
- const t = e.price_discounted != null && e.price_discounted > 0, r = t ? e.price_discounted : e.price, n = t && e.price != null ? e.price : void 0;
1145
- let o;
1146
- n != null && r != null && n > 0 ? o = Math.round((n - r) / n * 100) : e.price_discount_rate != null && e.price_discount_rate > 0 && (o = e.price_discount_rate);
1147
- const i = d(e.brand), s = d(e.name) ?? e.sku, c = i && !s.toLowerCase().startsWith(i.toLowerCase()) ? `${i} ${s}` : s, a = {
1148
- sku: e.sku,
1149
- name: c,
1150
- url: d(e.url) ?? ""
1151
- }, g = e.images?.[0];
1152
- g && (a.imageUrl = g), e.images && e.images.length > 1 && (a.images = e.images), r != null && r > 0 && (a.price = String(r)), n != null && n > 0 && (a.originalPrice = String(n)), o !== void 0 && (a.discountPercent = o), i !== void 0 && (a.brand = i), e.rating !== void 0 && (a.rating = e.rating), e.review_count !== void 0 && (a.reviewCount = e.review_count), e.cart_code !== void 0 && (a.cartCode = e.cart_code), e.in_stock !== void 0 && (a.inStock = e.in_stock), e.variants && e.variants.length > 0 && (a.variants = e.variants), e.discount_reason !== void 0 && (a.discountReason = e.discount_reason), e.promotions && e.promotions.length > 0 && (a.promotions = e.promotions), e.description !== void 0 && (a.description = e.description), e.description_html !== void 0 && (a.descriptionHtml = e.description_html), e.features && e.features.length > 0 && (a.features = e.features), e.specifications !== void 0 && (a.specifications = e.specifications), e.facet_hits && (a.facetHits = e.facet_hits), e.category_names && e.category_names.length > 0 && (a.categoryNames = e.category_names), e.short_name !== void 0 && (a.shortName = e.short_name);
1153
- const m = e, u = {};
1154
- let y = !1;
1155
- for (const p of Object.keys(m)) Ee.has(p) || (u[p] = m[p], y = !0);
1156
- return y && (a.extras = u), a;
1157
- }
1158
- function Ue(e) {
1159
- return e.results.map(w);
1160
- }
1161
- function ze(e) {
1162
- return e.product_groupings.map((t) => {
1163
- const r = {
1164
- name: t.name,
1165
- products: (t.group_products ?? []).map(w)
1166
- };
1167
- return t.highlight !== void 0 && (r.highlight = t.highlight), r;
1168
- });
1169
- }
1170
- function Ie(e) {
1171
- const t = e.payload.type, { type: r, ...n } = e.payload;
1172
- return {
1173
- type: "ui_spec",
1174
- widget: "chat",
1175
- spec: {
1176
- root: "root",
1177
- elements: { root: {
1178
- type: t,
1179
- props: n
1180
- } }
1181
- }
1182
- };
1183
- }
1184
- var Ne = {
1185
- process_action: "/process_action",
1186
- launcher_action: "/launcher_action",
1187
- similar_products: "/similar_products",
1188
- product_groupings: "/product_groupings"
1189
- };
1190
- function Re(e) {
1191
- if (e === void 0) throw new Error("[gengage] middlewareUrl is required. Pass your Gengage backend URL in widget config.");
1192
- const t = e.trim();
1193
- return t === "" ? "" : t.replace(/\/+$/, "");
1194
- }
1195
- function Ge(e, t) {
1196
- return `${Re(t?.middlewareUrl)}/chat${Ne[e]}`;
1197
- }
1198
- export {
1199
- Ue as a,
1200
- G as c,
1201
- Oe as d,
1202
- qe as f,
1203
- ze as i,
1204
- j as l,
1205
- De as m,
1206
- Re as n,
1207
- w as o,
1208
- q as p,
1209
- He as r,
1210
- $ as s,
1211
- Ge as t,
1212
- H as u
1213
- };