@gengage/assistant-fe 0.4.5 → 0.4.7

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 (63) hide show
  1. package/README.md +22 -2
  2. package/dist/api-paths-DR5bPNhi.js +1213 -0
  3. package/dist/assistant-fe.css +1 -1
  4. package/dist/chat/index.d.ts +1 -374
  5. package/dist/chat/runtime.d.ts +374 -0
  6. package/dist/chat-BRKK63lt.js +303 -0
  7. package/dist/chat-runtime.js +13 -0
  8. package/dist/chat.iife.js +8 -8
  9. package/dist/chat.js +11 -10
  10. package/dist/common/config-constants.d.ts +1 -0
  11. package/dist/common/config-schema.d.ts +0 -1
  12. package/dist/common/overlay.d.ts +8 -4
  13. package/dist/common/protocol-adapter.d.ts +1 -1
  14. package/dist/common/safe-html.d.ts +1 -1
  15. package/dist/common-c-awF96O.js +491 -0
  16. package/dist/common.js +78 -76
  17. package/dist/{connection-warning-n88bjkqL.js → connection-warning-ecZqpczd.js} +1 -1
  18. package/dist/context-DGz5F81j.js +532 -0
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.js +73 -68
  21. package/dist/locale-CfqNifrU.js +7 -0
  22. package/dist/native-webview-C_PmKnzm.js +273 -0
  23. package/dist/native.iife.js +28 -91
  24. package/dist/native.js +1 -1
  25. package/dist/overlay-DJ1ZRMfI.js +212 -0
  26. package/dist/overlay.d.ts +4 -0
  27. package/dist/overlay.js +10 -0
  28. package/dist/pill-launcher-DSEeJT9h.js +364 -0
  29. package/dist/qna/index.d.ts +1 -61
  30. package/dist/qna/runtime.d.ts +62 -0
  31. package/dist/qna/types.d.ts +14 -0
  32. package/dist/qna-BNvttR6s.js +40 -0
  33. package/dist/qna-runtime.js +8 -0
  34. package/dist/qna.css +1 -1
  35. package/dist/qna.iife.js +21 -21
  36. package/dist/qna.js +6 -5
  37. package/dist/{simrel-K2TGFi1r.js → runtime-BsZZ8zTg.js} +245 -293
  38. package/dist/{chat-B1lLKIxj.js → runtime-DNbjpTCh.js} +1643 -2297
  39. package/dist/runtime-SKDvc0Xc.js +660 -0
  40. package/dist/schemas-CLo8wCjs.js +3207 -0
  41. package/dist/simbut/index.d.ts +3 -1
  42. package/dist/simbut/types.d.ts +11 -0
  43. package/dist/simbut-Bw3vBFtW.js +109 -0
  44. package/dist/simbut.css +1 -1
  45. package/dist/simbut.iife.js +10 -10
  46. package/dist/simbut.js +1 -1
  47. package/dist/simrel/index.d.ts +3 -59
  48. package/dist/simrel/renderers/default.d.ts +40 -0
  49. package/dist/simrel/runtime.d.ts +59 -0
  50. package/dist/simrel-DJZ983BF.js +513 -0
  51. package/dist/simrel-runtime.js +8 -0
  52. package/dist/simrel.css +3 -0
  53. package/dist/simrel.iife.js +38 -38
  54. package/dist/simrel.js +8 -6
  55. package/dist/widget-base-2-B1Ch5I.js +578 -0
  56. package/package.json +22 -1
  57. package/dist/common-C5e2gLuG.js +0 -387
  58. package/dist/locale-MM0U5eeR.js +0 -1109
  59. package/dist/native-webview-niMtkiHX.js +0 -586
  60. package/dist/qna-C5Ok3wd0.js +0 -663
  61. package/dist/schemas-JpRGzRQT.js +0 -4419
  62. package/dist/simbut-Cb5RfaAp.js +0 -79
  63. /package/dist/{price-formatter-CR6VT5z4.js → price-formatter-xI3g9Cd4.js} +0 -0
@@ -4,8 +4,10 @@ import { GengageChat } from '../chat/index.js';
4
4
  import { SimButWidgetConfig } from './types.js';
5
5
  export declare class GengageSimBut extends BaseWidget<SimButWidgetConfig> {
6
6
  private _button;
7
+ private _inlineFrame;
7
8
  private _label;
8
9
  protected onInit(config: SimButWidgetConfig): Promise<void>;
10
+ private _createInlineCard;
9
11
  protected onUpdate(_context: Partial<PageContext>): void;
10
12
  hide(): void;
11
13
  show(): void;
@@ -17,4 +19,4 @@ export declare class GengageSimBut extends BaseWidget<SimButWidgetConfig> {
17
19
  setChat(chat: GengageChat | null): void;
18
20
  }
19
21
  export declare function createSimButWidget(): GengageSimBut;
20
- export type { SimButWidgetConfig, SimButI18n } from './types.js';
22
+ export type { SimButWidgetConfig, SimButI18n, SimButInlineCardConfig, SimButLayout } from './types.js';
@@ -3,12 +3,23 @@ import { GengageChat } from '../chat/index.js';
3
3
  export interface SimButI18n {
4
4
  findSimilarLabel: string;
5
5
  }
6
+ export type SimButLayout = 'overlay' | 'inline-card';
7
+ export interface SimButInlineCardConfig {
8
+ title?: string;
9
+ description?: string;
10
+ imageUrl?: string;
11
+ imageAlt?: string;
12
+ }
6
13
  export interface SimButWidgetConfig extends BaseWidgetConfig {
7
14
  /**
8
15
  * Ürün görselinin (veya onun `position: relative` saran kutusunun) DOM öğesi.
9
16
  * Düğme bu kutuya göre `absolute` konumlanır; akışta ekstra yer kaplamaz.
10
17
  */
11
18
  mountTarget: HTMLElement | string;
19
+ /** Visual layout. Defaults to the existing product-image overlay pill. */
20
+ layout?: SimButLayout;
21
+ /** Content used by `layout: 'inline-card'`. Ignored for overlay layout. */
22
+ inlineCard?: SimButInlineCardConfig;
12
23
  /**
13
24
  * Ürün SKU. Verilmezse `pageContext.sku` kullanılır (overlay güncellemeleriyle birlikte).
14
25
  */
@@ -0,0 +1,109 @@
1
+ import { t as m } from "./widget-base-2-B1Ch5I.js";
2
+ import { A as h, D as u, _ as f, j as p, v as b } from "./context-DGz5F81j.js";
3
+ import { t as _ } from "./locale-CfqNifrU.js";
4
+ var g = { findSimilarLabel: "Benzerlerini Bul" }, y = { findSimilarLabel: "Find Similar" };
5
+ function S(t, n) {
6
+ return n?.findSimilarLabel ? n.findSimilarLabel : (t ?? "tr").toLowerCase().startsWith("en") ? y.findSimilarLabel : g.findSimilarLabel;
7
+ }
8
+ function d(t) {
9
+ const n = typeof t.sku == "string" && t.sku.length > 0 ? t.sku : void 0, i = typeof t.pageContext?.sku == "string" && t.pageContext.sku.length > 0 ? t.pageContext.sku : void 0;
10
+ return n ?? i;
11
+ }
12
+ var C = class extends m {
13
+ constructor(...t) {
14
+ super(...t), this._button = null, this._inlineFrame = null, this._label = g.findSimilarLabel;
15
+ }
16
+ async onInit(t) {
17
+ this._label = S(t.locale, t.i18n);
18
+ const n = t.layout ?? "overlay";
19
+ this.root.classList.add("gengage-simbut-root"), this.root.classList.toggle("gengage-simbut-root--overlay", n === "overlay"), this.root.classList.toggle("gengage-simbut-root--inline-card", n === "inline-card"), n === "overlay" && window.getComputedStyle(this.root).position === "static" && (this.root.style.position = "relative");
20
+ const i = document.createElement("button");
21
+ i.type = "button", i.className = "gengage-chat-find-similar-pill", i.lang = _(t.locale), i.textContent = this._label, this._button = i;
22
+ const c = () => {
23
+ i.disabled = !(d(this.config) && (this.config.onFindSimilar || this.config.chat));
24
+ };
25
+ if (i.addEventListener("click", (l) => {
26
+ l.stopPropagation();
27
+ const s = d(this.config);
28
+ if (!s) return;
29
+ const o = this.config.imageUrl, a = typeof o == "string" && p(o) ? o : void 0;
30
+ if (u(this._label, "findSimilar"), f(s), this.config.onFindSimilar) {
31
+ this.config.onFindSimilar(a ? {
32
+ sku: s,
33
+ imageUrl: a
34
+ } : { sku: s });
35
+ return;
36
+ }
37
+ const r = this.config.chat;
38
+ if (!r) return;
39
+ const e = {
40
+ title: this._label,
41
+ type: "findSimilar",
42
+ payload: a ? {
43
+ sku: s,
44
+ image_url: a
45
+ } : { sku: s }
46
+ };
47
+ r.openWithAction(e, { sku: s });
48
+ }), n === "inline-card") {
49
+ const l = this._createInlineCard(t, i);
50
+ this._inlineFrame = l, this.root.appendChild(l);
51
+ } else this.root.appendChild(i);
52
+ c(), b("simbut");
53
+ }
54
+ _createInlineCard(t, n) {
55
+ const i = t.inlineCard, c = typeof i?.title == "string" ? i.title.trim() : "", l = typeof i?.description == "string" ? i.description.trim() : "", s = typeof i?.imageUrl == "string" ? i.imageUrl.trim() : "", o = document.createElement("section");
56
+ o.className = "gengage-simbut-inline-card", o.dataset.gengagePart = "simbut-inline-card";
57
+ const a = document.createElement("div");
58
+ if (a.className = "gengage-simbut-inline-copy", a.dataset.gengagePart = "simbut-inline-copy", c) {
59
+ const e = document.createElement("h4");
60
+ e.className = "gengage-simbut-inline-title", e.dataset.gengagePart = "simbut-inline-title", e.textContent = c, a.appendChild(e);
61
+ }
62
+ if (l) {
63
+ const e = document.createElement("p");
64
+ e.className = "gengage-simbut-inline-description", e.dataset.gengagePart = "simbut-inline-description", e.textContent = l, a.appendChild(e);
65
+ }
66
+ a.children.length > 0 && o.appendChild(a);
67
+ const r = document.createElement("div");
68
+ if (r.className = "gengage-simbut-inline-action", r.dataset.gengagePart = "simbut-inline-action", r.appendChild(n), o.appendChild(r), s && h(s)) {
69
+ const e = document.createElement("img");
70
+ e.className = "gengage-simbut-inline-image", e.dataset.gengagePart = "simbut-inline-image", e.src = s, e.alt = typeof i?.imageAlt == "string" ? i.imageAlt : "", e.loading = "lazy", e.addEventListener("error", () => {
71
+ e.style.display = "none";
72
+ }, { once: !0 }), o.appendChild(e);
73
+ }
74
+ return o;
75
+ }
76
+ onUpdate(t) {
77
+ if (!this._button) return;
78
+ const n = !!d(this.config) && (!!this.config.onFindSimilar || !!this.config.chat);
79
+ this._button.disabled = !n;
80
+ }
81
+ hide() {
82
+ this.isVisible && (this.isVisible = !1, this._inlineFrame && (this._inlineFrame.style.display = "none"), this._button && (this._button.style.display = "none"), this.onHide(), this.emit("hide"));
83
+ }
84
+ show() {
85
+ this.isVisible || (this.isVisible = !0, this._inlineFrame && (this._inlineFrame.style.display = ""), this._button && (this._button.style.display = ""), this.onShow(), this.emit("show"));
86
+ }
87
+ _cleanupRoot() {
88
+ }
89
+ onShow() {
90
+ }
91
+ onHide() {
92
+ }
93
+ onDestroy() {
94
+ this._inlineFrame?.remove(), this._inlineFrame = null, this._button?.remove(), this._button = null;
95
+ }
96
+ setChat(t) {
97
+ if (this.config.chat = t, this._button) {
98
+ const n = !!d(this.config) && (!!this.config.onFindSimilar || !!this.config.chat);
99
+ this._button.disabled = !n;
100
+ }
101
+ }
102
+ };
103
+ function k() {
104
+ return new C();
105
+ }
106
+ export {
107
+ k as n,
108
+ C as t
109
+ };
package/dist/simbut.css CHANGED
@@ -1 +1 @@
1
- :where(:root,.gengage-chat-root,.gengage-qna-container,.gengage-simrel-container,.gengage-simbut-root){--ds-neutral-0:#fff;--ds-neutral-25:#fcfcfd;--ds-neutral-50:#f6f7fb;--ds-neutral-100:#f3f4f6;--ds-neutral-200:#e5e7eb;--ds-neutral-300:#d0d5dd;--ds-neutral-500:#667085;--ds-neutral-600:#475467;--ds-neutral-700:#344054;--ds-neutral-900:#111827;--ds-radius-2:8px;--ds-radius-3:12px;--ds-radius-4:16px;--ds-radius-5:20px;--ds-radius-6:24px;--ds-radius-pill:999px;--ds-shadow-1:0 1px 2px #1018280a, 0 1px 3px #1018280f;--ds-shadow-2:0 4px 12px #10182814;--ds-shadow-3:0 10px 24px #1018281f;--client-primary:var(--gengage-primary-color,#b7102a);--client-primary-hover:var(--gengage-primary-hover,color-mix(in srgb, var(--client-primary) 88%, black 12%));--client-primary-active:var(--gengage-primary-active,color-mix(in srgb, var(--client-primary) 78%, black 22%));--client-primary-subtle:color-mix(in srgb, var(--client-primary) 12%, white);--client-primary-soft:color-mix(in srgb, var(--client-primary) 20%, white);--client-on-primary:var(--gengage-primary-foreground,#fff);--client-focus-ring:color-mix(in srgb, var(--client-primary) 32%, transparent);--ai-accent-start:#0b24d6;--ai-accent-end:#f768f2;--ai-accent-soft:linear-gradient(135deg, #0b24d614, #f768f214);--surface-page:var(--gengage-page-bg,var(--ds-neutral-50));--surface-shell:var(--gengage-shell-bg,#10131a);--surface-card:var(--gengage-background-color,var(--ds-neutral-0));--surface-card-muted:var(--gengage-surface-soft,#f8fafc);--surface-card-soft:var(--surface-card-muted);--surface-elevated:var(--gengage-surface-elevated,var(--ds-neutral-0));--surface-input:var(--gengage-input-bg,var(--ds-neutral-0));--surface-overlay:var(--gengage-overlay-bg,#10131a85);--text-primary:var(--gengage-foreground-color,var(--ds-neutral-900));--text-secondary:var(--gengage-text-secondary,#4b5563);--text-muted:var(--gengage-text-muted,#6b7280);--text-inverse:var(--gengage-text-inverse,#f9fafb);--border-subtle:var(--gengage-border-subtle,#1118270f);--border-default:var(--gengage-border-color,#1118271a);--border-strong:var(--gengage-border-strong,#1118272e);--shadow-1:var(--gengage-shadow-1,var(--ds-shadow-1));--shadow-2:var(--gengage-shadow-2,var(--ds-shadow-2));--shadow-3:var(--gengage-shadow-3,var(--ds-shadow-3));--radius-control:var(--gengage-control-radius,var(--ds-radius-3));--radius-card:var(--gengage-card-radius,var(--ds-radius-4));--radius-panel:var(--gengage-panel-radius,var(--ds-radius-6));--radius-pill:var(--gengage-pill-radius,var(--ds-radius-pill));--success:var(--gengage-success-color,#16a34a);--warning:var(--gengage-warning-color,#d97706);--error:var(--gengage-error-color,#dc2626);--info:var(--gengage-info-color,#2563eb);--rating:var(--gengage-rating-color,#f5b301);--gengage-primary:var(--client-primary);--gengage-primary-soft:var(--client-primary-soft);--gengage-primary-subtle:var(--client-primary-subtle);--gengage-text-color:var(--text-primary);--gengage-text-secondary:var(--text-secondary);--gengage-hover-color:var(--surface-card-soft);--ds-button-primary-bg:var(--client-primary);--ds-button-primary-bg-hover:var(--client-primary-hover);--ds-button-primary-bg-active:var(--client-primary-active);--ds-button-primary-fg:var(--client-on-primary);--ds-button-primary-border:color-mix(in srgb, var(--client-primary) 82%, black 18%);--ds-button-secondary-bg:var(--surface-card);--ds-button-secondary-bg-hover:var(--client-primary-subtle);--ds-button-secondary-fg:var(--client-primary);--ds-button-secondary-border:color-mix(in srgb, var(--client-primary) 26%, white);--ds-button-ghost-bg:var(--surface-card-muted);--ds-button-ghost-bg-hover:var(--ds-button-ghost-bg);--ds-button-ghost-fg:var(--text-primary);--ds-button-ghost-fg-hover:var(--client-primary);--ds-button-ghost-border:var(--border-default);--ds-button-ghost-border-hover:color-mix(in srgb, var(--client-primary) 18%, white);--ds-panel-bg:var(--surface-card);--ds-panel-border:var(--border-default);--ds-panel-shadow:var(--shadow-1);--ds-panel-radius:var(--radius-panel);--ds-header-bg:var(--surface-card);--ds-header-fg:var(--text-primary);--ds-header-muted:var(--text-muted);--ds-header-border:var(--border-default);--ds-card-bg:var(--surface-card);--ds-card-bg-soft:var(--surface-card-muted);--ds-card-border:var(--border-default);--ds-card-shadow:var(--shadow-1);--ds-card-shadow-hover:var(--shadow-2);--ds-card-radius:var(--radius-card);--ds-card-border-hover:color-mix(in srgb, var(--client-primary) 14%, var(--border-default));--ds-card-bg-hover:color-mix(in srgb, var(--client-primary) 2%, var(--surface-card));--ds-product-card-media-bg:var(--surface-card-muted);--ds-product-card-media-border:var(--border-subtle);--ds-input-bg:var(--surface-input);--ds-input-border:var(--border-default);--ds-input-radius:16px;--ds-input-focus-border:color-mix(in srgb, var(--client-primary) 28%, white);--ds-input-focus-ring:0 0 0 4px var(--client-focus-ring);--ds-input-highlight:inset 0 1px 0 #fff9;--ds-chip-bg:var(--surface-card);--ds-chip-border:var(--border-default);--ds-chip-fg:var(--text-secondary);--ds-chip-bg-hover:var(--surface-card-muted);--ds-chip-bg-active:color-mix(in srgb, var(--client-primary) 8%, white);--ds-chip-border-active:color-mix(in srgb, var(--client-primary) 30%, white);--ds-chip-fg-active:var(--client-primary);--ds-tab-bg:var(--surface-card);--ds-tab-bg-hover:var(--surface-card-muted);--ds-tab-bg-active:color-mix(in srgb, var(--client-primary) 8%, white);--ds-tab-border:var(--border-default);--ds-tab-border-active:color-mix(in srgb, var(--client-primary) 26%, white);--ds-tab-fg:var(--text-secondary);--ds-tab-fg-active:var(--client-primary);--ds-badge-brand-bg:color-mix(in srgb, var(--client-primary) 10%, white);--ds-badge-brand-border:color-mix(in srgb, var(--client-primary) 18%, white);--ds-badge-brand-fg:var(--client-primary);--ds-message-user-bg:color-mix(in srgb, var(--client-primary) 10%, white);--ds-message-user-fg:var(--text-primary);--ds-message-user-border:color-mix(in srgb, var(--client-primary) 18%, var(--border-default));--ds-message-user-shadow:none;--ds-message-assistant-bg:var(--surface-card-soft);--ds-message-assistant-fg:var(--text-primary);--ds-message-assistant-border:var(--border-default);--ds-message-assistant-shadow:none;--ds-message-active-outline:color-mix(in srgb, var(--client-primary) 68%, white);--ds-progress-card-border:var(--border-subtle);--ds-progress-mark-bg:color-mix(in srgb, var(--ai-accent-start) 8%, var(--surface-card));--ds-progress-mark-border:color-mix(in srgb, var(--ai-accent-start) 12%, var(--border-default));--ds-progress-scrollbar-thumb:color-mix(in srgb, var(--text-primary) 18%, transparent);--ds-toast-error-bg:color-mix(in srgb, var(--error) 5%, var(--surface-card));--ds-toast-error-border:color-mix(in srgb, var(--error) 18%, var(--border-default));--ds-toast-error-accent:var(--error);--ds-toast-error-fg:color-mix(in srgb, var(--error) 22%, var(--text-primary));--ds-toast-error-shadow:var(--shadow-3);--ds-comparison-table-bg:var(--surface-card);--ds-comparison-table-border:var(--border-default);--ds-comparison-table-header-bg:var(--surface-card-muted);--ds-comparison-table-header-fg:var(--text-muted);--ds-comparison-table-row-border:var(--border-subtle);--ds-comparison-table-winner-bg:color-mix(in srgb, var(--client-primary) 6%, white);--ds-comparison-table-winner-fg:var(--client-primary)}:where(.gds-panel){background:var(--ds-panel-bg);border:1px solid var(--ds-panel-border);border-radius:var(--ds-panel-radius);box-shadow:var(--ds-panel-shadow)}:where(.gengage-qna-panel,.gengage-chat-panel-topbar,.gengage-chat-chat-header,.gengage-chat-panel-ai-zone>.gengage-chat-ai-top-picks,.gengage-chat-grounding-review){border-color:var(--ds-panel-border)}:where(.gds-btn){border-radius:var(--radius-control);min-height:46px;font:inherit;cursor:pointer;border:0;outline:none;justify-content:center;align-items:center;gap:10px;padding:0 18px;font-weight:700;transition:box-shadow .15s,border-color .15s,background-color .15s,color .15s;display:inline-flex}:where(.gds-btn:hover){transform:none}:where(.gds-btn:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-btn:disabled){cursor:not-allowed;opacity:.56;box-shadow:none}:where(.gds-btn-primary){background:var(--ds-button-primary-bg);color:var(--ds-button-primary-fg);border:1px solid var(--ds-button-primary-border)}:where(.gds-btn-primary:hover){background:var(--ds-button-primary-bg-hover)}:where(.gds-btn-secondary){background:var(--ds-button-secondary-bg);color:var(--ds-button-secondary-fg);border:1px solid var(--ds-button-secondary-border)}:where(.gds-btn-secondary:hover){background:var(--ds-button-secondary-bg-hover)}:where(.gds-btn-ghost){background:var(--ds-button-ghost-bg);color:var(--ds-button-ghost-fg);border:1px solid var(--ds-button-ghost-border)}:where(.gds-btn-ghost:hover){background:var(--ds-button-ghost-bg-hover);border-color:var(--ds-button-ghost-border-hover);color:var(--ds-button-ghost-fg-hover)}:where(.gds-chip){border-radius:var(--radius-pill);border:1px solid var(--ds-chip-border);background:var(--ds-chip-bg);color:var(--ds-chip-fg);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex}:where(.gds-chip:hover){background:var(--ds-chip-bg-hover);border-color:color-mix(in srgb, var(--client-primary) 16%, var(--ds-chip-border))}:where(.gds-chip:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-chip-active){border-color:var(--ds-chip-border-active);background:var(--ds-chip-bg-active);color:var(--ds-chip-fg-active)}:where(.gds-badge){border-radius:var(--radius-pill);letter-spacing:.04em;align-items:center;min-height:28px;padding:0 10px;font-size:11px;font-weight:800;display:inline-flex}:where(.gds-badge-brand){background:var(--ds-badge-brand-bg);color:var(--ds-badge-brand-fg);border:1px solid var(--ds-badge-brand-border)}:where(.gds-shell-header){background:var(--ds-header-bg);color:var(--ds-header-fg);border-bottom:1px solid var(--ds-header-border);box-shadow:none;justify-content:space-between;align-items:center;gap:14px;padding:14px 16px;display:flex}:where(.gds-shell-header [data-gengage-part=chat-header-powered-by]){color:var(--ds-header-muted)}:where(.gds-icon-btn){border-radius:var(--radius-control);width:42px;min-width:42px;height:42px;min-height:42px;padding:0}:where(.gds-input-shell){border-radius:var(--ds-input-radius);border:1px solid var(--ds-input-border);background:var(--ds-input-bg);min-height:52px;box-shadow:var(--ds-input-highlight);align-items:center;gap:12px;padding:6px 6px 6px 14px;transition:border-color .15s,box-shadow .15s,background-color .15s;display:flex}:where(.gds-input-shell:focus-within){border-color:var(--ds-input-focus-border);box-shadow:var(--ds-input-focus-ring)}:where(.gds-tab){border-radius:var(--radius-pill);border:1px solid var(--ds-tab-border);background:var(--ds-tab-bg);color:var(--ds-tab-fg);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}:where(.gds-tab:hover){background:var(--ds-tab-bg-hover)}:where(.gds-tab:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-tab[aria-selected=true],.gds-tab.is-active){color:var(--ds-tab-fg-active);border-color:var(--ds-tab-border-active);background:var(--ds-tab-bg-active)}:where(.gds-toolbar){flex-wrap:wrap;align-items:center;gap:10px;display:flex}:where(.gds-toolbar-compact){gap:8px}:where(.gds-card){background:var(--ds-card-bg);border:1px solid var(--ds-card-border);border-radius:var(--ds-card-radius);box-shadow:var(--ds-card-shadow);transition:border-color .15s,box-shadow .15s,background-color .15s}:where(.gds-card-interactive),:where(.gds-clickable){cursor:pointer}:where(.gds-card-interactive:hover){background:var(--ds-card-bg-hover);border-color:var(--ds-card-border-hover);box-shadow:var(--ds-card-shadow-hover)}:where(.gds-card-soft){background:var(--ds-card-bg-soft)}:where(.gds-product-card){border-radius:16px}:where(.gds-evidence-card){background:var(--surface-card);border:1px solid var(--border-default);border-radius:var(--radius-control);box-shadow:var(--shadow-1)}:where(.gds-evidence-card-success){background:color-mix(in srgb, var(--success) 10%, white);border-color:color-mix(in srgb, var(--success) 22%, var(--border-default))}:where(.gds-evidence-card-danger){background:color-mix(in srgb, var(--error) 8%, white);border-color:color-mix(in srgb, var(--error) 20%, var(--border-default))}:where(.gds-evidence-card-warning){background:color-mix(in srgb, var(--warning) 10%, white);border-color:color-mix(in srgb, var(--warning) 22%, var(--border-default))}:where(.gds-message){border-radius:calc(var(--radius-control) + 4px);word-wrap:break-word;overflow-wrap:break-word;border:1px solid #0000;max-width:85%;padding:14px 16px;font-size:14px;font-weight:400;line-height:1.55;animation:.3s cubic-bezier(.2,.7,.2,1) gengage-chat-msg-in}:where(.gds-message-user){background:var(--ds-message-user-bg);color:var(--ds-message-user-fg);border-color:var(--ds-message-user-border);box-shadow:var(--ds-message-user-shadow);border-bottom-right-radius:6px;align-self:flex-end}:where(.gds-message-assistant){background:var(--ds-message-assistant-bg);color:var(--ds-message-assistant-fg);border-color:var(--ds-message-assistant-border);box-shadow:var(--ds-message-assistant-shadow);border-bottom-left-radius:6px;align-self:flex-start;min-width:120px}:where(.gds-message-active){outline:2px solid var(--ds-message-active-outline);outline-offset:-2px}:where(.gds-ai-card){background:var(--surface-card);border:1px solid var(--ds-progress-card-border);border-radius:20px;gap:16px;padding:18px;display:grid}:where(.gds-ai-mark){background:var(--ds-progress-mark-bg);width:42px;height:42px;color:var(--ai-accent-start);border:1px solid var(--ds-progress-mark-border);border-radius:14px;place-items:center;display:grid}:where(.gds-ai-loader-row){align-items:center;gap:12px;display:flex}:where(.gds-progress-loader){border:1px solid color-mix(in srgb, var(--ai-accent-start) 10%, var(--border-default));background:linear-gradient(110deg, var(--surface-card-soft) 8%, color-mix(in srgb, var(--ai-accent-start) 5%, var(--surface-card)) 18%, var(--surface-card-soft) 33%);width:fit-content;max-width:100%;color:var(--text-secondary);background-size:220% 100%;border-radius:14px;align-items:center;gap:10px;padding:8px 14px;animation:1.8s linear infinite gds-progress-shimmer;display:inline-flex}:where(.gds-progress-loader-chat){box-sizing:border-box;align-self:flex-start;width:100%;min-width:0;max-width:85%;display:flex}:where(.gds-progress-loader-chat) .gds-progress-label{overflow-wrap:anywhere;flex:auto;min-width:0}:where(.gds-progress-loader-panel){box-sizing:border-box;justify-content:flex-start;align-items:center;width:100%;min-width:0;max-width:100%;display:flex}:where(.gds-progress-loader-panel) .gds-progress-label{overflow-wrap:anywhere;flex:auto;min-width:0}:where(.gds-progress-label){min-width:0;color:var(--text-secondary);word-break:break-word;font-size:13px;line-height:1.5}:where(.gds-progress-dots){flex-shrink:0;align-items:center;gap:6px;display:inline-flex}:where(.gds-progress-dot){background:color-mix(in srgb, var(--ai-accent-start) 20%, var(--text-muted));border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite gds-progress-dot-pulse;display:inline-block}:where(.gds-progress-dot:nth-child(2)){animation-delay:.2s}:where(.gds-progress-dot:nth-child(3)){animation-delay:.4s}:where(.gds-ai-status){border-radius:calc(var(--radius-control) + 2px);border:1px solid var(--border-default);background:var(--surface-card-muted);max-width:85%;color:var(--text-secondary);border-bottom-left-radius:6px;align-self:flex-start;align-items:center;gap:8px;padding:10px 14px;display:flex}:where(.gds-ai-status-text){color:var(--text-secondary);font-size:13px;font-style:italic}:where(.gds-ai-dot-loader){align-items:center;gap:5px;display:inline-flex}:where(.gds-ai-dot-loader span){background:color-mix(in srgb, var(--ai-accent-start) 38%, var(--text-muted));border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite gds-progress-dot-pulse;display:inline-block}:where(.gds-ai-dot-loader span:nth-child(2)){animation-delay:.2s}:where(.gds-ai-dot-loader span:nth-child(3)){animation-delay:.4s}:where(.gds-ai-spinner){border:2.5px solid var(--border-default);border-top-color:var(--ai-accent-start);border-radius:50%;flex-shrink:0;width:26px;height:26px;animation:.72s linear infinite gds-spin}@keyframes gds-spin{to{transform:rotate(360deg)}}@keyframes gds-progress-shimmer{0%{background-position:200% 0}to{background-position:-20% 0}}@keyframes gds-progress-dot-pulse{0%,to{opacity:.45;transform:scale(.7)}50%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){:where(.gds-progress-loader){animation:none}:where(.gds-progress-dot){opacity:.85;animation:none;transform:scale(1)}:where(.gds-ai-spinner){animation:none}:where(.gds-ai-dot-loader span){opacity:.85;animation:none}}:where(.gds-menu){border-radius:var(--radius-card);border:1px solid var(--border-default);background:var(--surface-elevated);box-shadow:var(--shadow-3);padding:4px}:where(.gds-menu-option){border-radius:calc(var(--radius-control) - 4px);width:100%;color:var(--text-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:8px 10px;font-size:12px;font-weight:500;line-height:1.25;transition:background-color .15s,color .15s;display:flex}:where(.gds-menu-option:hover){background:var(--surface-card-muted)}:where(.gds-menu-option:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-menu-option-active){background:var(--client-primary-subtle);color:var(--client-primary);font-weight:600}:where(.gds-comparison-table){border-collapse:separate;border-spacing:0;border:1px solid var(--ds-comparison-table-border);background:var(--ds-comparison-table-bg);border-radius:20px;width:100%;overflow:hidden}:where(.gds-comparison-table th,.gds-comparison-table td){text-align:left;border-bottom:1px solid var(--ds-comparison-table-row-border);padding:14px 16px;font-size:13px}:where(.gds-comparison-table th){background:var(--ds-comparison-table-header-bg);text-transform:uppercase;letter-spacing:.08em;color:var(--ds-comparison-table-header-fg);font-size:11px}:where(.gds-comparison-table tr:last-child td){border-bottom:0}:where(.gds-comparison-table-winner-cell){background:var(--ds-comparison-table-winner-bg);color:var(--ds-comparison-table-winner-fg);font-weight:800}.gengage-simbut-root{box-sizing:border-box;pointer-events:none;font-family:var(--gengage-font-family,"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:var(--gengage-font-size,14px);margin:0;padding:0;overflow:visible}.gengage-simbut-root .gengage-chat-find-similar-pill{z-index:5;border:1px solid var(--ds-button-primary-border);border-radius:var(--radius-pill,var(--gengage-qna-pill-radius,999px));background:var(--ds-button-primary-bg);min-height:32px;color:var(--ds-button-primary-fg);letter-spacing:.01em;white-space:nowrap;cursor:pointer;opacity:1;pointer-events:auto;box-shadow:var(--shadow-1);justify-content:center;align-items:center;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:700;line-height:1.25;transition:filter .14s,transform .12s,opacity .2s,box-shadow .14s;display:inline-flex;position:absolute;top:8px;right:8px}.gengage-simbut-root .gengage-chat-find-similar-pill:not(:disabled):hover{background:var(--ds-button-primary-bg-hover);box-shadow:var(--shadow-2);transform:translateY(-1px)}.gengage-simbut-root .gengage-chat-find-similar-pill:not(:disabled):active{filter:brightness(.98);transform:translateY(0)scale(.988)}.gengage-simbut-root .gengage-chat-find-similar-pill:focus-visible{outline:2px solid var(--client-primary);outline-offset:2px}.gengage-simbut-root .gengage-chat-find-similar-pill:disabled{opacity:.5;cursor:not-allowed;filter:none;box-shadow:none;transform:none}
1
+ :where(:root,.gengage-chat-root,.gengage-qna-container,.gengage-simrel-container,.gengage-simbut-root){--ds-neutral-0:#fff;--ds-neutral-25:#fcfcfd;--ds-neutral-50:#f6f7fb;--ds-neutral-100:#f3f4f6;--ds-neutral-200:#e5e7eb;--ds-neutral-300:#d0d5dd;--ds-neutral-500:#667085;--ds-neutral-600:#475467;--ds-neutral-700:#344054;--ds-neutral-900:#111827;--ds-radius-2:8px;--ds-radius-3:12px;--ds-radius-4:16px;--ds-radius-5:20px;--ds-radius-6:24px;--ds-radius-pill:999px;--ds-shadow-1:0 1px 2px #1018280a, 0 1px 3px #1018280f;--ds-shadow-2:0 4px 12px #10182814;--ds-shadow-3:0 10px 24px #1018281f;--client-primary:var(--gengage-primary-color,#b7102a);--client-primary-hover:var(--gengage-primary-hover,color-mix(in srgb, var(--client-primary) 88%, black 12%));--client-primary-active:var(--gengage-primary-active,color-mix(in srgb, var(--client-primary) 78%, black 22%));--client-primary-subtle:color-mix(in srgb, var(--client-primary) 12%, white);--client-primary-soft:color-mix(in srgb, var(--client-primary) 20%, white);--client-on-primary:var(--gengage-primary-foreground,#fff);--client-focus-ring:color-mix(in srgb, var(--client-primary) 32%, transparent);--ai-accent-start:#0b24d6;--ai-accent-end:#f768f2;--ai-accent-soft:linear-gradient(135deg, #0b24d614, #f768f214);--surface-page:var(--gengage-page-bg,var(--ds-neutral-50));--surface-shell:var(--gengage-shell-bg,#10131a);--surface-card:var(--gengage-background-color,var(--ds-neutral-0));--surface-card-muted:var(--gengage-surface-soft,#f8fafc);--surface-card-soft:var(--surface-card-muted);--surface-elevated:var(--gengage-surface-elevated,var(--ds-neutral-0));--surface-input:var(--gengage-input-bg,var(--ds-neutral-0));--surface-overlay:var(--gengage-overlay-bg,#10131a85);--text-primary:var(--gengage-foreground-color,var(--ds-neutral-900));--text-secondary:var(--gengage-text-secondary,#4b5563);--text-muted:var(--gengage-text-muted,#6b7280);--text-inverse:var(--gengage-text-inverse,#f9fafb);--border-subtle:var(--gengage-border-subtle,#1118270f);--border-default:var(--gengage-border-color,#1118271a);--border-strong:var(--gengage-border-strong,#1118272e);--shadow-1:var(--gengage-shadow-1,var(--ds-shadow-1));--shadow-2:var(--gengage-shadow-2,var(--ds-shadow-2));--shadow-3:var(--gengage-shadow-3,var(--ds-shadow-3));--radius-control:var(--gengage-control-radius,var(--ds-radius-3));--radius-card:var(--gengage-card-radius,var(--ds-radius-4));--radius-panel:var(--gengage-panel-radius,var(--ds-radius-6));--radius-pill:var(--gengage-pill-radius,var(--ds-radius-pill));--success:var(--gengage-success-color,#16a34a);--warning:var(--gengage-warning-color,#d97706);--error:var(--gengage-error-color,#dc2626);--info:var(--gengage-info-color,#2563eb);--rating:var(--gengage-rating-color,#f5b301);--gengage-primary:var(--client-primary);--gengage-primary-soft:var(--client-primary-soft);--gengage-primary-subtle:var(--client-primary-subtle);--gengage-text-color:var(--text-primary);--gengage-text-secondary:var(--text-secondary);--gengage-hover-color:var(--surface-card-soft);--ds-button-primary-bg:var(--client-primary);--ds-button-primary-bg-hover:var(--client-primary-hover);--ds-button-primary-bg-active:var(--client-primary-active);--ds-button-primary-fg:var(--client-on-primary);--ds-button-primary-border:color-mix(in srgb, var(--client-primary) 82%, black 18%);--ds-button-secondary-bg:var(--surface-card);--ds-button-secondary-bg-hover:var(--client-primary-subtle);--ds-button-secondary-fg:var(--client-primary);--ds-button-secondary-border:color-mix(in srgb, var(--client-primary) 26%, white);--ds-button-ghost-bg:var(--surface-card-muted);--ds-button-ghost-bg-hover:var(--ds-button-ghost-bg);--ds-button-ghost-fg:var(--text-primary);--ds-button-ghost-fg-hover:var(--client-primary);--ds-button-ghost-border:var(--border-default);--ds-button-ghost-border-hover:color-mix(in srgb, var(--client-primary) 18%, white);--ds-panel-bg:var(--surface-card);--ds-panel-border:var(--border-default);--ds-panel-shadow:var(--shadow-1);--ds-panel-radius:var(--radius-panel);--ds-header-bg:var(--surface-card);--ds-header-fg:var(--text-primary);--ds-header-muted:var(--text-muted);--ds-header-border:var(--border-default);--ds-card-bg:var(--surface-card);--ds-card-bg-soft:var(--surface-card-muted);--ds-card-border:var(--border-default);--ds-card-shadow:var(--shadow-1);--ds-card-shadow-hover:var(--shadow-2);--ds-card-radius:var(--radius-card);--ds-card-border-hover:color-mix(in srgb, var(--client-primary) 14%, var(--border-default));--ds-card-bg-hover:color-mix(in srgb, var(--client-primary) 2%, var(--surface-card));--ds-product-card-media-bg:var(--surface-card-muted);--ds-product-card-media-border:var(--border-subtle);--ds-input-bg:var(--surface-input);--ds-input-border:var(--border-default);--ds-input-radius:16px;--ds-input-focus-border:color-mix(in srgb, var(--client-primary) 28%, white);--ds-input-focus-ring:0 0 0 4px var(--client-focus-ring);--ds-input-highlight:inset 0 1px 0 #fff9;--ds-chip-bg:var(--surface-card);--ds-chip-border:var(--border-default);--ds-chip-fg:var(--text-secondary);--ds-chip-bg-hover:var(--surface-card-muted);--ds-chip-bg-active:color-mix(in srgb, var(--client-primary) 8%, white);--ds-chip-border-active:color-mix(in srgb, var(--client-primary) 30%, white);--ds-chip-fg-active:var(--client-primary);--ds-tab-bg:var(--surface-card);--ds-tab-bg-hover:var(--surface-card-muted);--ds-tab-bg-active:color-mix(in srgb, var(--client-primary) 8%, white);--ds-tab-border:var(--border-default);--ds-tab-border-active:color-mix(in srgb, var(--client-primary) 26%, white);--ds-tab-fg:var(--text-secondary);--ds-tab-fg-active:var(--client-primary);--ds-badge-brand-bg:color-mix(in srgb, var(--client-primary) 10%, white);--ds-badge-brand-border:color-mix(in srgb, var(--client-primary) 18%, white);--ds-badge-brand-fg:var(--client-primary);--ds-message-user-bg:color-mix(in srgb, var(--client-primary) 10%, white);--ds-message-user-fg:var(--text-primary);--ds-message-user-border:color-mix(in srgb, var(--client-primary) 18%, var(--border-default));--ds-message-user-shadow:none;--ds-message-assistant-bg:var(--surface-card-soft);--ds-message-assistant-fg:var(--text-primary);--ds-message-assistant-border:var(--border-default);--ds-message-assistant-shadow:none;--ds-message-active-outline:color-mix(in srgb, var(--client-primary) 68%, white);--ds-progress-card-border:var(--border-subtle);--ds-progress-mark-bg:color-mix(in srgb, var(--ai-accent-start) 8%, var(--surface-card));--ds-progress-mark-border:color-mix(in srgb, var(--ai-accent-start) 12%, var(--border-default));--ds-progress-scrollbar-thumb:color-mix(in srgb, var(--text-primary) 18%, transparent);--ds-toast-error-bg:color-mix(in srgb, var(--error) 5%, var(--surface-card));--ds-toast-error-border:color-mix(in srgb, var(--error) 18%, var(--border-default));--ds-toast-error-accent:var(--error);--ds-toast-error-fg:color-mix(in srgb, var(--error) 22%, var(--text-primary));--ds-toast-error-shadow:var(--shadow-3);--ds-comparison-table-bg:var(--surface-card);--ds-comparison-table-border:var(--border-default);--ds-comparison-table-header-bg:var(--surface-card-muted);--ds-comparison-table-header-fg:var(--text-muted);--ds-comparison-table-row-border:var(--border-subtle);--ds-comparison-table-winner-bg:color-mix(in srgb, var(--client-primary) 6%, white);--ds-comparison-table-winner-fg:var(--client-primary)}:where(.gds-panel){background:var(--ds-panel-bg);border:1px solid var(--ds-panel-border);border-radius:var(--ds-panel-radius);box-shadow:var(--ds-panel-shadow)}:where(.gengage-qna-panel,.gengage-chat-panel-topbar,.gengage-chat-chat-header,.gengage-chat-panel-ai-zone>.gengage-chat-ai-top-picks,.gengage-chat-grounding-review){border-color:var(--ds-panel-border)}:where(.gds-btn){border-radius:var(--radius-control);min-height:46px;font:inherit;cursor:pointer;border:0;outline:none;justify-content:center;align-items:center;gap:10px;padding:0 18px;font-weight:700;transition:box-shadow .15s,border-color .15s,background-color .15s,color .15s;display:inline-flex}:where(.gds-btn:hover){transform:none}:where(.gds-btn:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-btn:disabled){cursor:not-allowed;opacity:.56;box-shadow:none}:where(.gds-btn-primary){background:var(--ds-button-primary-bg);color:var(--ds-button-primary-fg);border:1px solid var(--ds-button-primary-border)}:where(.gds-btn-primary:hover){background:var(--ds-button-primary-bg-hover)}:where(.gds-btn-secondary){background:var(--ds-button-secondary-bg);color:var(--ds-button-secondary-fg);border:1px solid var(--ds-button-secondary-border)}:where(.gds-btn-secondary:hover){background:var(--ds-button-secondary-bg-hover)}:where(.gds-btn-ghost){background:var(--ds-button-ghost-bg);color:var(--ds-button-ghost-fg);border:1px solid var(--ds-button-ghost-border)}:where(.gds-btn-ghost:hover){background:var(--ds-button-ghost-bg-hover);border-color:var(--ds-button-ghost-border-hover);color:var(--ds-button-ghost-fg-hover)}:where(.gds-chip){border-radius:var(--radius-pill);border:1px solid var(--ds-chip-border);background:var(--ds-chip-bg);color:var(--ds-chip-fg);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex}:where(.gds-chip:hover){background:var(--ds-chip-bg-hover);border-color:color-mix(in srgb, var(--client-primary) 16%, var(--ds-chip-border))}:where(.gds-chip:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-chip-active){border-color:var(--ds-chip-border-active);background:var(--ds-chip-bg-active);color:var(--ds-chip-fg-active)}:where(.gds-badge){border-radius:var(--radius-pill);letter-spacing:.04em;align-items:center;min-height:28px;padding:0 10px;font-size:11px;font-weight:800;display:inline-flex}:where(.gds-badge-brand){background:var(--ds-badge-brand-bg);color:var(--ds-badge-brand-fg);border:1px solid var(--ds-badge-brand-border)}:where(.gds-shell-header){background:var(--ds-header-bg);color:var(--ds-header-fg);border-bottom:1px solid var(--ds-header-border);box-shadow:none;justify-content:space-between;align-items:center;gap:14px;padding:14px 16px;display:flex}:where(.gds-shell-header [data-gengage-part=chat-header-powered-by]){color:var(--ds-header-muted)}:where(.gds-icon-btn){border-radius:var(--radius-control);width:42px;min-width:42px;height:42px;min-height:42px;padding:0}:where(.gds-input-shell){border-radius:var(--ds-input-radius);border:1px solid var(--ds-input-border);background:var(--ds-input-bg);min-height:52px;box-shadow:var(--ds-input-highlight);align-items:center;gap:12px;padding:6px 6px 6px 14px;transition:border-color .15s,box-shadow .15s,background-color .15s;display:flex}:where(.gds-input-shell:focus-within){border-color:var(--ds-input-focus-border);box-shadow:var(--ds-input-focus-ring)}:where(.gds-tab){border-radius:var(--radius-pill);border:1px solid var(--ds-tab-border);background:var(--ds-tab-bg);color:var(--ds-tab-fg);align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}:where(.gds-tab:hover){background:var(--ds-tab-bg-hover)}:where(.gds-tab:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-tab[aria-selected=true],.gds-tab.is-active){color:var(--ds-tab-fg-active);border-color:var(--ds-tab-border-active);background:var(--ds-tab-bg-active)}:where(.gds-toolbar){flex-wrap:wrap;align-items:center;gap:10px;display:flex}:where(.gds-toolbar-compact){gap:8px}:where(.gds-card){background:var(--ds-card-bg);border:1px solid var(--ds-card-border);border-radius:var(--ds-card-radius);box-shadow:var(--ds-card-shadow);transition:border-color .15s,box-shadow .15s,background-color .15s}:where(.gds-card-interactive),:where(.gds-clickable){cursor:pointer}:where(.gds-card-interactive:hover){background:var(--ds-card-bg-hover);border-color:var(--ds-card-border-hover);box-shadow:var(--ds-card-shadow-hover)}:where(.gds-card-soft){background:var(--ds-card-bg-soft)}:where(.gds-product-card){border-radius:16px}:where(.gds-evidence-card){background:var(--surface-card);border:1px solid var(--border-default);border-radius:var(--radius-control);box-shadow:var(--shadow-1)}:where(.gds-evidence-card-success){background:color-mix(in srgb, var(--success) 10%, white);border-color:color-mix(in srgb, var(--success) 22%, var(--border-default))}:where(.gds-evidence-card-danger){background:color-mix(in srgb, var(--error) 8%, white);border-color:color-mix(in srgb, var(--error) 20%, var(--border-default))}:where(.gds-evidence-card-warning){background:color-mix(in srgb, var(--warning) 10%, white);border-color:color-mix(in srgb, var(--warning) 22%, var(--border-default))}:where(.gds-message){border-radius:calc(var(--radius-control) + 4px);word-wrap:break-word;overflow-wrap:break-word;border:1px solid #0000;max-width:85%;padding:14px 16px;font-size:14px;font-weight:400;line-height:1.55;animation:.3s cubic-bezier(.2,.7,.2,1) gengage-chat-msg-in}:where(.gds-message-user){background:var(--ds-message-user-bg);color:var(--ds-message-user-fg);border-color:var(--ds-message-user-border);box-shadow:var(--ds-message-user-shadow);border-bottom-right-radius:6px;align-self:flex-end}:where(.gds-message-assistant){background:var(--ds-message-assistant-bg);color:var(--ds-message-assistant-fg);border-color:var(--ds-message-assistant-border);box-shadow:var(--ds-message-assistant-shadow);border-bottom-left-radius:6px;align-self:flex-start;min-width:120px}:where(.gds-message-active){outline:2px solid var(--ds-message-active-outline);outline-offset:-2px}:where(.gds-ai-card){background:var(--surface-card);border:1px solid var(--ds-progress-card-border);border-radius:20px;gap:16px;padding:18px;display:grid}:where(.gds-ai-mark){background:var(--ds-progress-mark-bg);width:42px;height:42px;color:var(--ai-accent-start);border:1px solid var(--ds-progress-mark-border);border-radius:14px;place-items:center;display:grid}:where(.gds-ai-loader-row){align-items:center;gap:12px;display:flex}:where(.gds-progress-loader){border:1px solid color-mix(in srgb, var(--ai-accent-start) 10%, var(--border-default));background:linear-gradient(110deg, var(--surface-card-soft) 8%, color-mix(in srgb, var(--ai-accent-start) 5%, var(--surface-card)) 18%, var(--surface-card-soft) 33%);width:fit-content;max-width:100%;color:var(--text-secondary);background-size:220% 100%;border-radius:14px;align-items:center;gap:10px;padding:8px 14px;animation:1.8s linear infinite gds-progress-shimmer;display:inline-flex}:where(.gds-progress-loader-chat){box-sizing:border-box;align-self:flex-start;width:100%;min-width:0;max-width:85%;display:flex}:where(.gds-progress-loader-chat) .gds-progress-label{overflow-wrap:anywhere;flex:auto;min-width:0}:where(.gds-progress-loader-panel){box-sizing:border-box;justify-content:flex-start;align-items:center;width:100%;min-width:0;max-width:100%;display:flex}:where(.gds-progress-loader-panel) .gds-progress-label{overflow-wrap:anywhere;flex:auto;min-width:0}:where(.gds-progress-label){min-width:0;color:var(--text-secondary);word-break:break-word;font-size:13px;line-height:1.5}:where(.gds-progress-dots){flex-shrink:0;align-items:center;gap:6px;display:inline-flex}:where(.gds-progress-dot){background:color-mix(in srgb, var(--ai-accent-start) 20%, var(--text-muted));border-radius:50%;width:8px;height:8px;animation:1.2s ease-in-out infinite gds-progress-dot-pulse;display:inline-block}:where(.gds-progress-dot:nth-child(2)){animation-delay:.2s}:where(.gds-progress-dot:nth-child(3)){animation-delay:.4s}:where(.gds-ai-status){border-radius:calc(var(--radius-control) + 2px);border:1px solid var(--border-default);background:var(--surface-card-muted);max-width:85%;color:var(--text-secondary);border-bottom-left-radius:6px;align-self:flex-start;align-items:center;gap:8px;padding:10px 14px;display:flex}:where(.gds-ai-status-text){color:var(--text-secondary);font-size:13px;font-style:italic}:where(.gds-ai-dot-loader){align-items:center;gap:5px;display:inline-flex}:where(.gds-ai-dot-loader span){background:color-mix(in srgb, var(--ai-accent-start) 38%, var(--text-muted));border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite gds-progress-dot-pulse;display:inline-block}:where(.gds-ai-dot-loader span:nth-child(2)){animation-delay:.2s}:where(.gds-ai-dot-loader span:nth-child(3)){animation-delay:.4s}:where(.gds-ai-spinner){border:2.5px solid var(--border-default);border-top-color:var(--ai-accent-start);border-radius:50%;flex-shrink:0;width:26px;height:26px;animation:.72s linear infinite gds-spin}@keyframes gds-spin{to{transform:rotate(360deg)}}@keyframes gds-progress-shimmer{0%{background-position:200% 0}to{background-position:-20% 0}}@keyframes gds-progress-dot-pulse{0%,to{opacity:.45;transform:scale(.7)}50%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){:where(.gds-progress-loader){animation:none}:where(.gds-progress-dot){opacity:.85;animation:none;transform:scale(1)}:where(.gds-ai-spinner){animation:none}:where(.gds-ai-dot-loader span){opacity:.85;animation:none}}:where(.gds-menu){border-radius:var(--radius-card);border:1px solid var(--border-default);background:var(--surface-elevated);box-shadow:var(--shadow-3);padding:4px}:where(.gds-menu-option){border-radius:calc(var(--radius-control) - 4px);width:100%;color:var(--text-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:8px 10px;font-size:12px;font-weight:500;line-height:1.25;transition:background-color .15s,color .15s;display:flex}:where(.gds-menu-option:hover){background:var(--surface-card-muted)}:where(.gds-menu-option:focus-visible){outline:2px solid var(--client-focus-ring);outline-offset:2px}:where(.gds-menu-option-active){background:var(--client-primary-subtle);color:var(--client-primary);font-weight:600}:where(.gds-comparison-table){border-collapse:separate;border-spacing:0;border:1px solid var(--ds-comparison-table-border);background:var(--ds-comparison-table-bg);border-radius:20px;width:100%;overflow:hidden}:where(.gds-comparison-table th,.gds-comparison-table td){text-align:left;border-bottom:1px solid var(--ds-comparison-table-row-border);padding:14px 16px;font-size:13px}:where(.gds-comparison-table th){background:var(--ds-comparison-table-header-bg);text-transform:uppercase;letter-spacing:.08em;color:var(--ds-comparison-table-header-fg);font-size:11px}:where(.gds-comparison-table tr:last-child td){border-bottom:0}:where(.gds-comparison-table-winner-cell){background:var(--ds-comparison-table-winner-bg);color:var(--ds-comparison-table-winner-fg);font-weight:800}.gengage-simbut-root{box-sizing:border-box;pointer-events:none;font-family:var(--gengage-font-family,"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);font-size:var(--gengage-font-size,14px);margin:0;padding:0;overflow:visible}.gengage-simbut-root .gengage-chat-find-similar-pill{z-index:5;border:1px solid var(--ds-button-primary-border);border-radius:var(--radius-pill,var(--gengage-qna-pill-radius,999px));background:var(--ds-button-primary-bg);min-height:32px;color:var(--ds-button-primary-fg);letter-spacing:.01em;white-space:nowrap;cursor:pointer;opacity:1;pointer-events:auto;box-shadow:var(--shadow-1);justify-content:center;align-items:center;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:700;line-height:1.25;transition:filter .14s,transform .12s,opacity .2s,box-shadow .14s;display:inline-flex;position:absolute;top:8px;right:8px}.gengage-simbut-root .gengage-chat-find-similar-pill:not(:disabled):hover{background:var(--ds-button-primary-bg-hover);box-shadow:var(--shadow-2);transform:translateY(-1px)}.gengage-simbut-root .gengage-chat-find-similar-pill:not(:disabled):active{filter:brightness(.98);transform:translateY(0)scale(.988)}.gengage-simbut-root .gengage-chat-find-similar-pill:focus-visible{outline:2px solid var(--client-primary);outline-offset:2px}.gengage-simbut-root .gengage-chat-find-similar-pill:disabled{opacity:.5;cursor:not-allowed;filter:none;box-shadow:none;transform:none}.gengage-simbut-root--inline-card{pointer-events:auto;width:100%;overflow:visible}.gengage-simbut-inline-card{box-sizing:border-box;align-items:start;gap:var(--gengage-simbut-inline-gap,16px);min-height:var(--gengage-simbut-inline-min-height,0);margin:var(--gengage-simbut-inline-margin,30px 0 0);padding:var(--gengage-simbut-inline-padding,20px 24px);border:var(--gengage-simbut-inline-border,0);border-radius:var(--gengage-simbut-inline-radius,6px);background:var(--gengage-simbut-inline-bg,#f6f6f6);color:var(--gengage-simbut-inline-color,var(--text-primary,#242424));pointer-events:auto;grid-template-columns:minmax(0,1fr) auto;display:grid;position:relative;overflow:visible}.gengage-simbut-inline-copy{min-width:0;padding-right:var(--gengage-simbut-inline-copy-padding-right,100px)}.gengage-simbut-inline-title{margin:var(--gengage-simbut-inline-title-margin,0 0 8px);color:var(--gengage-simbut-inline-title-color,var(--text-primary,#000));font-family:inherit;font-size:var(--gengage-simbut-inline-title-font-size,20px);font-weight:var(--gengage-simbut-inline-title-font-weight,700);line-height:var(--gengage-simbut-inline-title-line-height,1.25);letter-spacing:0}.gengage-simbut-inline-description{margin:var(--gengage-simbut-inline-description-margin,0);max-width:var(--gengage-simbut-inline-description-max-width,560px);color:var(--gengage-simbut-inline-description-color,var(--text-secondary,#4b5563));font-family:inherit;font-size:var(--gengage-simbut-inline-description-font-size,14px);font-weight:var(--gengage-simbut-inline-description-font-weight,400);line-height:var(--gengage-simbut-inline-description-line-height,1.45);letter-spacing:0}.gengage-simbut-inline-action{min-width:0;margin-top:var(--gengage-simbut-inline-action-margin-top,16px);grid-column:1}.gengage-simbut-inline-image{right:var(--gengage-simbut-inline-image-right,0);bottom:var(--gengage-simbut-inline-image-bottom,-5px);width:var(--gengage-simbut-inline-image-width,180px);max-width:var(--gengage-simbut-inline-image-max-width,42%);height:var(--gengage-simbut-inline-image-height,180px);object-fit:contain;pointer-events:none;position:absolute}.gengage-simbut-root--inline-card .gengage-chat-find-similar-pill{z-index:1;width:var(--gengage-simbut-inline-button-width,200px);max-width:100%;min-height:var(--gengage-simbut-inline-button-min-height,44px);padding:var(--gengage-simbut-inline-button-padding,0 20px);border:var(--gengage-simbut-inline-button-border,0);border-radius:var(--gengage-simbut-inline-button-radius,25px);background:var(--gengage-simbut-inline-button-bg,var(--ds-button-primary-bg));color:var(--gengage-simbut-inline-button-fg,var(--ds-button-primary-fg));font-size:var(--gengage-simbut-inline-button-font-size,12px);font-weight:var(--gengage-simbut-inline-button-font-weight,700);letter-spacing:0;box-shadow:var(--gengage-simbut-inline-button-shadow,none);position:static;inset:auto}.gengage-simbut-root--inline-card .gengage-chat-find-similar-pill:not(:disabled):hover{background:var(--gengage-simbut-inline-button-bg-hover,var(--ds-button-primary-bg-hover));box-shadow:var(--gengage-simbut-inline-button-shadow-hover,none)}@media (width<=1025px){.gengage-simbut-inline-card{padding:var(--gengage-simbut-inline-padding-compact,20px 18px)}.gengage-simbut-inline-copy{padding-right:var(--gengage-simbut-inline-copy-padding-right-compact,78px)}.gengage-simbut-inline-image{width:var(--gengage-simbut-inline-image-width-compact,140px);height:var(--gengage-simbut-inline-image-height-compact,140px)}.gengage-simbut-root--inline-card .gengage-chat-find-similar-pill{width:var(--gengage-simbut-inline-button-width-compact,150px)}}@media (prefers-reduced-motion:reduce){.gengage-simbut-inline-card,.gengage-simbut-root--inline-card .gengage-chat-find-similar-pill{transition:none!important;transform:none!important}}
@@ -1,15 +1,15 @@
1
- (function(f){Object.defineProperty(f,Symbol.toStringTag,{value:"Module"});function S(e,t){const i={event_name:"metering.summary",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,payload:{meter_key:t.meter_key,quantity:t.quantity,unit:t.unit}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}function C(e,t){const i={event_name:"checkout.start",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,widget:t.attribution_source,payload:{attribution_source:t.attribution_source,attribution_action_id:t.attribution_action_id,cart_value:t.cart_value,currency:t.currency,line_items:t.line_items}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}function k(e,t){const i={event_name:"checkout.complete",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,widget:t.attribution_source,payload:{attribution_source:t.attribution_source,attribution_action_id:t.attribution_action_id,cart_value:t.cart_value,currency:t.currency,line_items:t.line_items}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}var I=["http:","https:"];function T(e){if(e.startsWith("/")&&!e.startsWith("//"))return!0;try{const t=new URL(e);return I.includes(t.protocol)}catch{return!1}}function E(){return typeof window<"u"&&Array.isArray(window.dataLayer)}function h(e,t){const i={event:e,...t};E()&&window.dataLayer.push(i)}function L(e){h("gengage-on-init",{gengage_widget:e})}function M(e,t){h("gengage-suggested-question",{gengage_question_title:e,gengage_action_type:t})}function $(e){h("gengage-find-similars",{gengage_sku:e})}function m(e,t){const i=n=>{t(n.detail)};return window.addEventListener(e,i),()=>window.removeEventListener(e,i)}function R(){const e=window.__gengageSessionId??sessionStorage.getItem("gengage_session_id")??null??crypto.randomUUID();return window.__gengageSessionId=e,sessionStorage.setItem("gengage_session_id",e),window.gengage||(window.gengage={}),window.gengage.sessionId=e,e}function A(e){return{sessionId:e?.sessionId??R(),...e}}var b={"--gengage-chat-offset":"20px","--gengage-chat-launcher-size":"56px","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"1rem","--gengage-chat-header-height":"72px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"1200px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"12px","--gengage-simrel-card-radius":"0.75rem","--radius-control":"12px","--radius-card":"16px","--radius-panel":"24px","--radius-pill":"999px","--surface-card-muted":"#f8fafc","--text-secondary":"#4b5563","--text-muted":"#6b7280","--border-default":"rgba(17, 24, 39, 0.10)"};function U(e){return e?{...b,...e}:{...b}}var s={primaryColor:"#b7102a",primaryForeground:"#ffffff",backgroundColor:"#ffffff",foregroundColor:"#111827",borderRadius:"0.75rem",fontFamily:'"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",zIndex:"1000","--glov-chatbot-width":"420px","--glov-left-spacing":"260px","--chatbot-padding":"16px","--root-wrapper-background-color":"#f8f9fa","--root-wrapper-border-color":"#edeeef","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"1rem","--gengage-chat-header-height":"72px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"1200px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"0.75rem","--gengage-simrel-card-radius":"0.75rem","--client-primary":"#b7102a","--client-primary-hover":"color-mix(in srgb, #b7102a 88%, black 12%)","--client-primary-active":"color-mix(in srgb, #b7102a 78%, black 22%)","--client-primary-subtle":"color-mix(in srgb, #b7102a 12%, white)","--client-primary-soft":"color-mix(in srgb, #b7102a 20%, white)","--client-on-primary":"#ffffff","--client-focus-ring":"color-mix(in srgb, #b7102a 32%, transparent)","--surface-page":"#f6f7fb","--surface-shell":"#10131a","--surface-card":"#ffffff","--surface-card-muted":"#f8fafc","--surface-card-soft":"#f8fafc","--surface-elevated":"#ffffff","--surface-input":"#ffffff","--surface-overlay":"rgba(16, 19, 26, 0.52)","--text-primary":"#111827","--text-secondary":"#4b5563","--text-muted":"#6b7280","--text-inverse":"#f9fafb","--border-subtle":"rgba(17, 24, 39, 0.06)","--border-default":"rgba(17, 24, 39, 0.10)","--border-strong":"rgba(17, 24, 39, 0.18)","--shadow-1":"0 1px 2px rgba(16, 24, 40, 0.04), 0 1px 3px rgba(16, 24, 40, 0.06)","--shadow-2":"0 4px 12px rgba(16, 24, 40, 0.08)","--shadow-3":"0 10px 24px rgba(16, 24, 40, 0.12)","--radius-control":"12px","--radius-card":"16px","--radius-panel":"24px","--radius-pill":"999px","--success":"#16a34a","--warning":"#d97706","--error":"#dc2626","--info":"#2563eb","--rating":"#f5b301","--ai-accent-start":"#0b24d6","--ai-accent-end":"#f768f2","--ai-accent-soft":"linear-gradient(135deg, rgba(11, 36, 214, 0.08), rgba(247, 104, 242, 0.08))"},a="gengage-global-toast-root",_="gengage-global-toast-style",p="gengage-global-toast-root--visible",F=4200,B=1500,D=15e3,N=["--gengage-font-family","--surface-card","--text-primary","--text-muted","--border-default","--radius-card","--shadow-3","--error","--ds-toast-error-bg","--ds-toast-error-border","--ds-toast-error-accent","--ds-toast-error-fg","--ds-toast-error-shadow"],y=!1,d=null;function V(){y||typeof window>"u"||typeof document>"u"||(y=!0,m("gengage:global:error",e=>{O(e)}))}function O(e){if(typeof document>"u")return;const t=e.message.trim();if(!t)return;z();const i=H();G(i),i.innerHTML="";const n=document.createElement("section");n.className="gengage-global-toast gengage-global-toast--error",n.setAttribute("role","status"),n.setAttribute("aria-live","polite");const r=document.createElement("div");r.className="gengage-global-toast-title",r.textContent=q(e.source);const o=document.createElement("div");o.className="gengage-global-toast-message",o.textContent=t,n.appendChild(r),n.appendChild(o),i.appendChild(n),i.classList.add(p),d&&(clearTimeout(d),d=null),e.sticky!==!0&&(d=setTimeout(()=>{W()},P(e.durationMs)))}function W(){if(typeof document>"u")return;const e=document.getElementById(a);e&&(e.classList.remove(p),e.innerHTML="",d&&(clearTimeout(d),d=null))}function q(e){switch(e){case"chat":return"Chat warning";case"qna":return"QnA warning";case"simrel":return"Widget warning";default:return"Connection warning"}}function H(){const e=document.getElementById(a);if(e instanceof HTMLElement)return e;const t=document.createElement("div");return t.id=a,t.className="gengage-global-toast-root",document.body.appendChild(t),t}function G(e){if(typeof document>"u"||typeof window>"u")return;const t=document.querySelector(".gengage-chat-root, .gengage-qna-container, .gengage-simrel-container, .gengage-simbut-root");if(!t)return;const i=window.getComputedStyle(t);for(const n of N){const r=i.getPropertyValue(n).trim();r?e.style.setProperty(n,r):e.style.removeProperty(n)}}function P(e){return typeof e!="number"||!Number.isFinite(e)?F:Math.min(D,Math.max(B,Math.round(e)))}function z(){if(document.getElementById(_))return;const e=document.createElement("style");e.id=_;const t=s["--surface-card"]??s.backgroundColor??"#ffffff",i=s["--text-primary"]??s.foregroundColor??"#111827",n=s["--border-default"]??"rgba(17, 24, 39, 0.10)",r=s["--error"]??"#dc2626",o=s["--shadow-3"]??"0 10px 24px rgba(16, 24, 40, 0.12)",g=s["--radius-card"]??"16px",l=s["--text-muted"]??"#6b7280";e.textContent=`
2
- #${a} {
1
+ (function(m){Object.defineProperty(m,Symbol.toStringTag,{value:"Module"});function I(e,t){const i={event_name:"metering.summary",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,payload:{meter_key:t.meter_key,quantity:t.quantity,unit:t.unit}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}function k(e,t){const i={event_name:"checkout.start",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,widget:t.attribution_source,payload:{attribution_source:t.attribution_source,attribution_action_id:t.attribution_action_id,cart_value:t.cart_value,currency:t.currency,line_items:t.line_items}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}function T(e,t){const i={event_name:"checkout.complete",account_id:e.account_id,session_id:e.session_id,correlation_id:e.correlation_id,widget:t.attribution_source,payload:{attribution_source:t.attribution_source,attribution_action_id:t.attribution_action_id,cart_value:t.cart_value,currency:t.currency,line_items:t.line_items}};return e.view_id!==void 0&&(i.view_id=e.view_id),e.user_id!==void 0&&(i.user_id=e.user_id),e.page_type!==void 0&&(i.page_type=e.page_type),e.sku!==void 0&&(i.sku=e.sku),i}var _=["http:","https:"];function L(e){const t=e.trim();if(!t)return!1;if(t.startsWith("/")&&!t.startsWith("//"))return!0;try{return _.includes(new URL(t).protocol)}catch{return!1}}function F(e){if(e.startsWith("/")&&!e.startsWith("//"))return!0;try{const t=new URL(e);return _.includes(t.protocol)}catch{return!1}}function M(){return typeof window<"u"&&Array.isArray(window.dataLayer)}function p(e,t){const i={event:e,...t};M()&&window.dataLayer.push(i)}function U(e){p("gengage-on-init",{gengage_widget:e})}function $(e,t){p("gengage-suggested-question",{gengage_question_title:e,gengage_action_type:t})}function N(e){p("gengage-find-similars",{gengage_sku:e})}function y(e,t){const i=n=>{t(n.detail)};return window.addEventListener(e,i),()=>window.removeEventListener(e,i)}function R(){const e=window.__gengageSessionId??sessionStorage.getItem("gengage_session_id")??null??crypto.randomUUID();return window.__gengageSessionId=e,sessionStorage.setItem("gengage_session_id",e),window.gengage||(window.gengage={}),window.gengage.sessionId=e,e}function A(e){return{sessionId:e?.sessionId??R(),...e}}var v={"--gengage-chat-offset":"20px","--gengage-chat-launcher-size":"56px","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"1rem","--gengage-chat-header-height":"72px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"1200px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"12px","--gengage-simrel-card-radius":"0.75rem","--radius-control":"12px","--radius-card":"16px","--radius-panel":"24px","--radius-pill":"999px","--surface-card-muted":"#f8fafc","--text-secondary":"#4b5563","--text-muted":"#6b7280","--border-default":"rgba(17, 24, 39, 0.10)"};function B(e){return e?{...v,...e}:{...v}}var d={primaryColor:"#b7102a",primaryForeground:"#ffffff",backgroundColor:"#ffffff",foregroundColor:"#111827",borderRadius:"0.75rem",fontFamily:'"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",zIndex:"1000","--glov-chatbot-width":"420px","--glov-left-spacing":"260px","--chatbot-padding":"16px","--root-wrapper-background-color":"#f8f9fa","--root-wrapper-border-color":"#edeeef","--gengage-chat-width":"400px","--gengage-chat-shell-radius":"1rem","--gengage-chat-header-height":"72px","--gengage-chat-conversation-width":"396px","--gengage-chat-panel-min-width":"320px","--gengage-chat-panel-max-width":"1200px","--gengage-chat-input-height":"48px","--gengage-qna-pill-radius":"999px","--gengage-qna-input-radius":"0.75rem","--gengage-simrel-card-radius":"0.75rem","--client-primary":"#b7102a","--client-primary-hover":"color-mix(in srgb, #b7102a 88%, black 12%)","--client-primary-active":"color-mix(in srgb, #b7102a 78%, black 22%)","--client-primary-subtle":"color-mix(in srgb, #b7102a 12%, white)","--client-primary-soft":"color-mix(in srgb, #b7102a 20%, white)","--client-on-primary":"#ffffff","--client-focus-ring":"color-mix(in srgb, #b7102a 32%, transparent)","--surface-page":"#f6f7fb","--surface-shell":"#10131a","--surface-card":"#ffffff","--surface-card-muted":"#f8fafc","--surface-card-soft":"#f8fafc","--surface-elevated":"#ffffff","--surface-input":"#ffffff","--surface-overlay":"rgba(16, 19, 26, 0.52)","--text-primary":"#111827","--text-secondary":"#4b5563","--text-muted":"#6b7280","--text-inverse":"#f9fafb","--border-subtle":"rgba(17, 24, 39, 0.06)","--border-default":"rgba(17, 24, 39, 0.10)","--border-strong":"rgba(17, 24, 39, 0.18)","--shadow-1":"0 1px 2px rgba(16, 24, 40, 0.04), 0 1px 3px rgba(16, 24, 40, 0.06)","--shadow-2":"0 4px 12px rgba(16, 24, 40, 0.08)","--shadow-3":"0 10px 24px rgba(16, 24, 40, 0.12)","--radius-control":"12px","--radius-card":"16px","--radius-panel":"24px","--radius-pill":"999px","--success":"#16a34a","--warning":"#d97706","--error":"#dc2626","--info":"#2563eb","--rating":"#f5b301","--ai-accent-start":"#0b24d6","--ai-accent-end":"#f768f2","--ai-accent-soft":"linear-gradient(135deg, rgba(11, 36, 214, 0.08), rgba(247, 104, 242, 0.08))"},l="gengage-global-toast-root",w="gengage-global-toast-style",b="gengage-global-toast-root--visible",D=4200,W=1500,P=15e3,V=["--gengage-font-family","--surface-card","--text-primary","--text-muted","--border-default","--radius-card","--shadow-3","--error","--ds-toast-error-bg","--ds-toast-error-border","--ds-toast-error-accent","--ds-toast-error-fg","--ds-toast-error-shadow"],x=!1,c=null;function O(){x||typeof window>"u"||typeof document>"u"||(x=!0,y("gengage:global:error",e=>{q(e)}))}function q(e){if(typeof document>"u")return;const t=e.message.trim();if(!t)return;J();const i=z();Y(i),i.innerHTML="";const n=document.createElement("section");n.className="gengage-global-toast gengage-global-toast--error",n.setAttribute("role","status"),n.setAttribute("aria-live","polite");const r=document.createElement("div");r.className="gengage-global-toast-title",r.textContent=G(e.source);const a=document.createElement("div");a.className="gengage-global-toast-message",a.textContent=t,n.appendChild(r),n.appendChild(a),i.appendChild(n),i.classList.add(b),c&&(clearTimeout(c),c=null),e.sticky!==!0&&(c=setTimeout(()=>{H()},j(e.durationMs)))}function H(){if(typeof document>"u")return;const e=document.getElementById(l);e&&(e.classList.remove(b),e.innerHTML="",c&&(clearTimeout(c),c=null))}function G(e){switch(e){case"chat":return"Chat warning";case"qna":return"QnA warning";case"simrel":return"Widget warning";default:return"Connection warning"}}function z(){const e=document.getElementById(l);if(e instanceof HTMLElement)return e;const t=document.createElement("div");return t.id=l,t.className="gengage-global-toast-root",document.body.appendChild(t),t}function Y(e){if(typeof document>"u"||typeof window>"u")return;const t=document.querySelector(".gengage-chat-root, .gengage-qna-container, .gengage-simrel-container, .gengage-simbut-root");if(!t)return;const i=window.getComputedStyle(t);for(const n of V){const r=i.getPropertyValue(n).trim();r?e.style.setProperty(n,r):e.style.removeProperty(n)}}function j(e){return typeof e!="number"||!Number.isFinite(e)?D:Math.min(P,Math.max(W,Math.round(e)))}function J(){if(document.getElementById(w))return;const e=document.createElement("style");e.id=w;const t=d["--surface-card"]??d.backgroundColor??"#ffffff",i=d["--text-primary"]??d.foregroundColor??"#111827",n=d["--border-default"]??"rgba(17, 24, 39, 0.10)",r=d["--error"]??"#dc2626",a=d["--shadow-3"]??"0 10px 24px rgba(16, 24, 40, 0.12)",g=d["--radius-card"]??"16px",o=d["--text-muted"]??"#6b7280";e.textContent=`
2
+ #${l} {
3
3
  position: fixed;
4
4
  top: 16px;
5
5
  right: 16px;
6
6
  z-index: 2147483646;
7
7
  pointer-events: none;
8
8
  }
9
- #${a}.${p} {
9
+ #${l}.${b} {
10
10
  pointer-events: auto;
11
11
  }
12
- #${a} .gengage-global-toast {
12
+ #${l} .gengage-global-toast {
13
13
  min-width: 260px;
14
14
  max-width: min(92vw, 420px);
15
15
  border-radius: var(--radius-card, ${g});
@@ -17,20 +17,20 @@
17
17
  border-left: 4px solid var(--ds-toast-error-accent, var(--error, ${r}));
18
18
  background: var(--ds-toast-error-bg, color-mix(in srgb, var(--error, ${r}) 5%, var(--surface-card, ${t})));
19
19
  color: var(--ds-toast-error-fg, color-mix(in srgb, var(--error, ${r}) 22%, var(--text-primary, ${i})));
20
- box-shadow: var(--ds-toast-error-shadow, var(--shadow-3, ${o}));
20
+ box-shadow: var(--ds-toast-error-shadow, var(--shadow-3, ${a}));
21
21
  padding: 10px 12px;
22
- font-family: var(--gengage-font-family, ${JSON.stringify(s.fontFamily??'-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif')});
22
+ font-family: var(--gengage-font-family, ${JSON.stringify(d.fontFamily??'-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif')});
23
23
  font-size: 13px;
24
24
  line-height: 1.4;
25
25
  animation: gengage-global-toast-in 180ms ease-out forwards;
26
26
  }
27
- #${a} .gengage-global-toast-title {
27
+ #${l} .gengage-global-toast-title {
28
28
  margin: 0 0 4px;
29
29
  font-size: 12px;
30
30
  font-weight: 700;
31
- color: var(--text-muted, ${l});
31
+ color: var(--text-muted, ${o});
32
32
  }
33
- #${a} .gengage-global-toast-message {
33
+ #${l} .gengage-global-toast-message {
34
34
  margin: 0;
35
35
  font-weight: 500;
36
36
  }
@@ -44,4 +44,4 @@
44
44
  transform: translateY(0);
45
45
  }
46
46
  }
47
- `,document.head.appendChild(e)}var c=null;function Y(){if(c!==null)return c;try{c=localStorage.getItem("gengage:debug")==="1"}catch{c=!1}return c}function v(e,t,i){if(!Y())return;const n=[`[gengage:${e}]`,t];i!==void 0&&n.push(i),console.debug(...n)}var j=class{constructor(){this.isVisible=!1,this.isInitialised=!1,this._handlers=new Map,this._cleanups=[],this._ownsRoot=!1,this._destroying=!1}async init(e){if(this.isInitialised){console.warn("[gengage] Widget already initialised. Call update() instead.");return}const t=U(e.theme);this.config={...e,theme:t,session:A(e.session)},this.root=this._resolveMount(e.mountTarget),this._applyTheme(t),V();const i=m("gengage:context:update",n=>this.update(n));this._cleanups.push(i),v("lifecycle",`${this.constructor.name}.init`,{accountId:e.accountId,sku:e.pageContext?.sku});try{await this.onInit(this.config)}catch(n){throw this.destroy(),n}this._destroying||(this.isInitialised=!0,v("lifecycle",`${this.constructor.name} ready`),this.emit("ready"))}update(e){this.isInitialised&&(this.config.pageContext?this.config={...this.config,pageContext:{...this.config.pageContext,...e}}:e.pageType!==void 0&&(this.config={...this.config,pageContext:e}),this.onUpdate(e),this.emit("context-update",this.config.pageContext))}show(){this.isVisible||(this.isVisible=!0,this.root.style.display="",this.onShow(),this.emit("show"))}hide(){this.isVisible&&(this.isVisible=!1,this.root.style.display="none",this.onHide(),this.emit("hide"))}destroy(){this._destroying||(this._destroying=!0,this.emit("destroy"),this._cleanups.forEach(e=>e()),this._cleanups.length=0,this._handlers.clear(),this.onDestroy(),this.config.analyticsClient?.destroy(),this._cleanupRoot(),this.isInitialised=!1)}_cleanupRoot(){this._ownsRoot?this.root.remove():this.root.innerHTML=""}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),()=>this._handlers.get(e)?.delete(t)}trackCheckout(e,t){const i=e==="start"?C:k;this.track(i(this.analyticsContext(),t))}flushMeteringSummary(e){this.track(S(this.analyticsContext(),e))}emit(e,...t){this._handlers.get(e)?.forEach(i=>i(...t))}addCleanup(e){this._cleanups.push(e)}track(e){this.config.analyticsClient?.track(e)}analyticsContext(){const e={account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??""};return this.config.session?.viewId!==void 0&&(e.view_id=this.config.session.viewId),this.config.session?.userId!==void 0&&(e.user_id=this.config.session.userId),this.config.pageContext?.pageType!==void 0&&(e.page_type=this.config.pageContext.pageType),this.config.pageContext?.sku!==void 0&&(e.sku=this.config.pageContext.sku),this.config.session?.abTestVariant!==void 0&&(e.ab_test_variant=this.config.session.abTestVariant),this.config.session?.abTestExperimentId!==void 0&&(e.ab_test_experiment_id=this.config.session.abTestExperimentId),e}_resolveMount(e){if(e instanceof HTMLElement)return e;if(typeof e=="string"){const i=document.querySelector(e);if(!i)throw new Error(`[gengage] Mount target not found: "${e}"`);return i}const t=document.createElement("div");return t.dataset.gengageWidget=this.constructor.name.toLowerCase(),document.body.insertBefore(t,document.body.firstChild),this._ownsRoot=!0,t}_applyTheme(e){if(e){for(const[t,i]of Object.entries(e))if(i!==void 0){const n=t.startsWith("--")?t:`--gengage-${J(t)}`;this.root.style.setProperty(n,i)}}}};function J(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function K(e){const t=e?.trim();return t||"tr"}var w={findSimilarLabel:"Benzerlerini Bul"},Q={findSimilarLabel:"Find Similar"};function X(e,t){return t?.findSimilarLabel?t.findSimilarLabel:(e??"tr").toLowerCase().startsWith("en")?Q.findSimilarLabel:w.findSimilarLabel}function u(e){const t=typeof e.sku=="string"&&e.sku.length>0?e.sku:void 0,i=typeof e.pageContext?.sku=="string"&&e.pageContext.sku.length>0?e.pageContext.sku:void 0;return t??i}var x=class extends j{constructor(...e){super(...e),this._button=null,this._label=w.findSimilarLabel}async onInit(e){this._label=X(e.locale,e.i18n),this.root.classList.add("gengage-simbut-root"),window.getComputedStyle(this.root).position==="static"&&(this.root.style.position="relative");const t=document.createElement("button");t.type="button",t.className="gengage-chat-find-similar-pill",t.lang=K(e.locale),t.textContent=this._label,this._button=t;const i=()=>{t.disabled=!(u(this.config)&&(this.config.onFindSimilar||this.config.chat))};t.addEventListener("click",n=>{n.stopPropagation();const r=u(this.config);if(!r)return;const o=this.config.imageUrl,g=typeof o=="string"&&T(o)?o:void 0;if(M(this._label,"findSimilar"),$(r),this.config.onFindSimilar){this.config.onFindSimilar(g?{sku:r,imageUrl:g}:{sku:r});return}const l=this.config.chat;if(!l)return;const ee={title:this._label,type:"findSimilar",payload:g?{sku:r,image_url:g}:{sku:r}};l.openWithAction(ee,{sku:r})}),this.root.appendChild(t),i(),L("simbut")}onUpdate(e){if(!this._button)return;const t=!!u(this.config)&&(!!this.config.onFindSimilar||!!this.config.chat);this._button.disabled=!t}hide(){this.isVisible&&(this.isVisible=!1,this._button&&(this._button.style.display="none"),this.onHide(),this.emit("hide"))}show(){this.isVisible||(this.isVisible=!0,this._button&&(this._button.style.display=""),this.onShow(),this.emit("show"))}_cleanupRoot(){}onShow(){}onHide(){}onDestroy(){this._button?.remove(),this._button=null}setChat(e){if(this.config.chat=e,this._button){const t=!!u(this.config)&&(!!this.config.onFindSimilar||!!this.config.chat);this._button.disabled=!t}}};function Z(){return new x}f.GengageSimBut=x,f.createSimButWidget=Z})(this.Gengage=this.Gengage||{});
47
+ `,document.head.appendChild(e)}var f=null;function K(){if(f!==null)return f;try{f=localStorage.getItem("gengage:debug")==="1"}catch{f=!1}return f}function S(e,t,i){if(!K())return;const n=[`[gengage:${e}]`,t];i!==void 0&&n.push(i),console.debug(...n)}var Q=class{constructor(){this.isVisible=!1,this.isInitialised=!1,this._handlers=new Map,this._cleanups=[],this._ownsRoot=!1,this._destroying=!1}async init(e){if(this.isInitialised){console.warn("[gengage] Widget already initialised. Call update() instead.");return}const t=B(e.theme);this.config={...e,theme:t,session:A(e.session)},this.root=this._resolveMount(e.mountTarget),this._applyTheme(t),O();const i=y("gengage:context:update",n=>this.update(n));this._cleanups.push(i),S("lifecycle",`${this.constructor.name}.init`,{accountId:e.accountId,sku:e.pageContext?.sku});try{await this.onInit(this.config)}catch(n){throw this.destroy(),n}this._destroying||(this.isInitialised=!0,S("lifecycle",`${this.constructor.name} ready`),this.emit("ready"))}update(e){this.isInitialised&&(this.config.pageContext?this.config={...this.config,pageContext:{...this.config.pageContext,...e}}:e.pageType!==void 0&&(this.config={...this.config,pageContext:e}),this.onUpdate(e),this.emit("context-update",this.config.pageContext))}show(){this.isVisible||(this.isVisible=!0,this.root.style.display="",this.onShow(),this.emit("show"))}hide(){this.isVisible&&(this.isVisible=!1,this.root.style.display="none",this.onHide(),this.emit("hide"))}destroy(){this._destroying||(this._destroying=!0,this.emit("destroy"),this._cleanups.forEach(e=>e()),this._cleanups.length=0,this._handlers.clear(),this.onDestroy(),this.config.analyticsClient?.destroy(),this._cleanupRoot(),this.isInitialised=!1)}_cleanupRoot(){this._ownsRoot?this.root.remove():this.root.innerHTML=""}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),()=>this._handlers.get(e)?.delete(t)}trackCheckout(e,t){const i=e==="start"?k:T;this.track(i(this.analyticsContext(),t))}flushMeteringSummary(e){this.track(I(this.analyticsContext(),e))}emit(e,...t){this._handlers.get(e)?.forEach(i=>i(...t))}addCleanup(e){this._cleanups.push(e)}track(e){this.config.analyticsClient?.track(e)}analyticsContext(){const e={account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??""};return this.config.session?.viewId!==void 0&&(e.view_id=this.config.session.viewId),this.config.session?.userId!==void 0&&(e.user_id=this.config.session.userId),this.config.pageContext?.pageType!==void 0&&(e.page_type=this.config.pageContext.pageType),this.config.pageContext?.sku!==void 0&&(e.sku=this.config.pageContext.sku),this.config.session?.abTestVariant!==void 0&&(e.ab_test_variant=this.config.session.abTestVariant),this.config.session?.abTestExperimentId!==void 0&&(e.ab_test_experiment_id=this.config.session.abTestExperimentId),e}_resolveMount(e){if(e instanceof HTMLElement)return e;if(typeof e=="string"){const i=document.querySelector(e);if(!i)throw new Error(`[gengage] Mount target not found: "${e}"`);return i}const t=document.createElement("div");return t.dataset.gengageWidget=this.constructor.name.toLowerCase(),document.body.insertBefore(t,document.body.firstChild),this._ownsRoot=!0,t}_applyTheme(e){if(e){for(const[t,i]of Object.entries(e))if(i!==void 0){const n=t.startsWith("--")?t:`--gengage-${X(t)}`;this.root.style.setProperty(n,i)}}}};function X(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function Z(e){const t=e?.trim();return t||"tr"}var C={findSimilarLabel:"Benzerlerini Bul"},ee={findSimilarLabel:"Find Similar"};function te(e,t){return t?.findSimilarLabel?t.findSimilarLabel:(e??"tr").toLowerCase().startsWith("en")?ee.findSimilarLabel:C.findSimilarLabel}function h(e){const t=typeof e.sku=="string"&&e.sku.length>0?e.sku:void 0,i=typeof e.pageContext?.sku=="string"&&e.pageContext.sku.length>0?e.pageContext.sku:void 0;return t??i}var E=class extends Q{constructor(...e){super(...e),this._button=null,this._inlineFrame=null,this._label=C.findSimilarLabel}async onInit(e){this._label=te(e.locale,e.i18n);const t=e.layout??"overlay";this.root.classList.add("gengage-simbut-root"),this.root.classList.toggle("gengage-simbut-root--overlay",t==="overlay"),this.root.classList.toggle("gengage-simbut-root--inline-card",t==="inline-card"),t==="overlay"&&window.getComputedStyle(this.root).position==="static"&&(this.root.style.position="relative");const i=document.createElement("button");i.type="button",i.className="gengage-chat-find-similar-pill",i.lang=Z(e.locale),i.textContent=this._label,this._button=i;const n=()=>{i.disabled=!(h(this.config)&&(this.config.onFindSimilar||this.config.chat))};if(i.addEventListener("click",r=>{r.stopPropagation();const a=h(this.config);if(!a)return;const g=this.config.imageUrl,o=typeof g=="string"&&F(g)?g:void 0;if($(this._label,"findSimilar"),N(a),this.config.onFindSimilar){this.config.onFindSimilar(o?{sku:a,imageUrl:o}:{sku:a});return}const u=this.config.chat;if(!u)return;const s={title:this._label,type:"findSimilar",payload:o?{sku:a,image_url:o}:{sku:a}};u.openWithAction(s,{sku:a})}),t==="inline-card"){const r=this._createInlineCard(e,i);this._inlineFrame=r,this.root.appendChild(r)}else this.root.appendChild(i);n(),U("simbut")}_createInlineCard(e,t){const i=e.inlineCard,n=typeof i?.title=="string"?i.title.trim():"",r=typeof i?.description=="string"?i.description.trim():"",a=typeof i?.imageUrl=="string"?i.imageUrl.trim():"",g=document.createElement("section");g.className="gengage-simbut-inline-card",g.dataset.gengagePart="simbut-inline-card";const o=document.createElement("div");if(o.className="gengage-simbut-inline-copy",o.dataset.gengagePart="simbut-inline-copy",n){const s=document.createElement("h4");s.className="gengage-simbut-inline-title",s.dataset.gengagePart="simbut-inline-title",s.textContent=n,o.appendChild(s)}if(r){const s=document.createElement("p");s.className="gengage-simbut-inline-description",s.dataset.gengagePart="simbut-inline-description",s.textContent=r,o.appendChild(s)}o.children.length>0&&g.appendChild(o);const u=document.createElement("div");if(u.className="gengage-simbut-inline-action",u.dataset.gengagePart="simbut-inline-action",u.appendChild(t),g.appendChild(u),a&&L(a)){const s=document.createElement("img");s.className="gengage-simbut-inline-image",s.dataset.gengagePart="simbut-inline-image",s.src=a,s.alt=typeof i?.imageAlt=="string"?i.imageAlt:"",s.loading="lazy",s.addEventListener("error",()=>{s.style.display="none"},{once:!0}),g.appendChild(s)}return g}onUpdate(e){if(!this._button)return;const t=!!h(this.config)&&(!!this.config.onFindSimilar||!!this.config.chat);this._button.disabled=!t}hide(){this.isVisible&&(this.isVisible=!1,this._inlineFrame&&(this._inlineFrame.style.display="none"),this._button&&(this._button.style.display="none"),this.onHide(),this.emit("hide"))}show(){this.isVisible||(this.isVisible=!0,this._inlineFrame&&(this._inlineFrame.style.display=""),this._button&&(this._button.style.display=""),this.onShow(),this.emit("show"))}_cleanupRoot(){}onShow(){}onHide(){}onDestroy(){this._inlineFrame?.remove(),this._inlineFrame=null,this._button?.remove(),this._button=null}setChat(e){if(this.config.chat=e,this._button){const t=!!h(this.config)&&(!!this.config.onFindSimilar||!!this.config.chat);this._button.disabled=!t}}};function ie(){return new E}m.GengageSimBut=E,m.createSimButWidget=ie})(this.Gengage=this.Gengage||{});
package/dist/simbut.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as e, t as a } from "./simbut-Cb5RfaAp.js";
1
+ import { n as e, t as a } from "./simbut-Bw3vBFtW.js";
2
2
  export {
3
3
  a as GengageSimBut,
4
4
  e as createSimButWidget
@@ -1,61 +1,5 @@
1
- import { PageContext } from '../common/types.js';
2
- import { NormalizedProduct } from '../common/protocol-adapter.js';
3
- import { BaseWidget } from '../common/widget-base.js';
4
- import { SimRelWidgetConfig } from './types.js';
5
- /**
6
- * Similar / related products widget for product pages.
7
- * Fetches AI-powered product recommendations and renders them as a scrollable grid.
8
- *
9
- * @example
10
- * ```ts
11
- * import { GengageSimRel, bootstrapSession } from '@gengage/assistant-fe';
12
- *
13
- * const simrel = new GengageSimRel();
14
- * await simrel.init({
15
- * accountId: 'mystore',
16
- * middlewareUrl: '<backend service location provided for your Gengage account>',
17
- * sku: '12345',
18
- * mountTarget: '#similar-products',
19
- * session: { sessionId: bootstrapSession() },
20
- * onAddToCart: ({ sku, quantity }) => cart.add(sku, quantity),
21
- * });
22
- * ```
23
- */
24
- export declare class GengageSimRel extends BaseWidget<SimRelWidgetConfig> {
25
- private _abortController;
26
- private _contentEl;
27
- private _lastSku;
28
- /** Number of products returned from the last successful fetch. Used to allow
29
- * retry when the same SKU previously produced an empty result set. */
30
- private _lastResultCount;
31
- private _i18n;
32
- protected onInit(config: SimRelWidgetConfig): Promise<void>;
33
- protected onUpdate(context: Partial<PageContext>): void;
34
- protected onShow(): void;
35
- protected onHide(): void;
36
- protected onDestroy(): void;
37
- _handleProductClick(product: NormalizedProduct): void;
38
- _handleAddToCart(params: {
39
- sku: string;
40
- quantity: number;
41
- cartCode: string;
42
- }): void;
43
- private _abort;
44
- private _isSuperseded;
45
- private _emitSimilarProductsImpression;
46
- private _resolveRequestTimeoutMs;
47
- private _fetchAndRender;
48
- private _clampGridColumns;
49
- private _resolveI18n;
50
- private _resolveUISpecRegistry;
51
- private _buildRenderContext;
52
- private _renderUISpec;
53
- private _buildProductsSpec;
54
- private _buildGroupsSpec;
55
- }
56
- export declare function createSimRelWidget(): GengageSimRel;
57
- export type { SimRelWidgetConfig, SimilarProduct, SimRelUIComponents, SimRelI18n, SimRelUISpecRenderContext, SimRelRendererConfig, } from './types.js';
58
- export { renderSimRelUISpec, createDefaultSimRelUISpecRegistry, defaultSimRelUnknownUISpecRenderer, } from './components/renderUISpec.js';
59
- export type { SimRelUISpecRegistry } from './components/renderUISpec.js';
1
+ export * from './runtime.js';
2
+ export { createSimRelRenderer } from './renderers/default.js';
3
+ export type { SimRelFieldPath, SimRelRendererFields, SimRelRendererLabels, SimRelRendererMedia, SimRelRendererOptions, } from './renderers/default.js';
60
4
  export { simRelCatalog } from './catalog.js';
61
5
  export type { SimRelCatalog, SimRelComponentName } from './catalog.js';
@@ -0,0 +1,40 @@
1
+ import { PriceFormatConfig } from '../../common/price-formatter.js';
2
+ import { SimilarProduct, SimRelRendererConfig } from '../types.js';
3
+ export type SimRelFieldPath = string | readonly string[];
4
+ export interface SimRelRendererLabels {
5
+ cta?: string;
6
+ productInfo?: string;
7
+ customBadgeAlt?: string;
8
+ review?: (count: number) => string;
9
+ imageDot?: (index: number) => string;
10
+ previousPromotion?: string;
11
+ nextPromotion?: string;
12
+ specialPriceBadgeAlt?: string;
13
+ }
14
+ export interface SimRelRendererFields {
15
+ images?: SimRelFieldPath[];
16
+ subtitle?: SimRelFieldPath[];
17
+ promotions?: SimRelFieldPath[];
18
+ warranties?: SimRelFieldPath[];
19
+ productInfoUrl?: SimRelFieldPath[];
20
+ discountReason?: SimRelFieldPath[];
21
+ specialPrice?: SimRelFieldPath[];
22
+ customBadgeFacets?: SimRelFieldPath[];
23
+ customBadgeText?: SimRelFieldPath[];
24
+ customBadgeImageUrl?: SimRelFieldPath[];
25
+ }
26
+ export interface SimRelRendererMedia {
27
+ promotionIconUrl?: string;
28
+ specialPriceBadgeUrl?: string;
29
+ imageUrlTransform?: (url: string, product: SimilarProduct) => string;
30
+ customBadgeImageUrl?: (product: SimilarProduct, labelText: string) => string | null | undefined;
31
+ }
32
+ export interface SimRelRendererOptions {
33
+ labels?: SimRelRendererLabels;
34
+ fields?: SimRelRendererFields;
35
+ media?: SimRelRendererMedia;
36
+ warrantyPromotionPattern?: RegExp;
37
+ specialPricePattern?: RegExp;
38
+ pricing?: PriceFormatConfig | undefined;
39
+ }
40
+ export declare function createSimRelRenderer(options?: SimRelRendererOptions): SimRelRendererConfig;
@@ -0,0 +1,59 @@
1
+ import { PageContext } from '../common/types.js';
2
+ import { NormalizedProduct } from '../common/protocol-adapter.js';
3
+ import { BaseWidget } from '../common/widget-base.js';
4
+ import { SimRelWidgetConfig } from './types.js';
5
+ /**
6
+ * Similar / related products widget for product pages.
7
+ * Fetches AI-powered product recommendations and renders them as a scrollable grid.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { GengageSimRel, bootstrapSession } from '@gengage/assistant-fe';
12
+ *
13
+ * const simrel = new GengageSimRel();
14
+ * await simrel.init({
15
+ * accountId: 'mystore',
16
+ * middlewareUrl: '<backend service location provided for your Gengage account>',
17
+ * sku: '12345',
18
+ * mountTarget: '#similar-products',
19
+ * session: { sessionId: bootstrapSession() },
20
+ * onAddToCart: ({ sku, quantity }) => cart.add(sku, quantity),
21
+ * });
22
+ * ```
23
+ */
24
+ export declare class GengageSimRel extends BaseWidget<SimRelWidgetConfig> {
25
+ private _abortController;
26
+ private _contentEl;
27
+ private _lastSku;
28
+ /** Number of products returned from the last successful fetch. Used to allow
29
+ * retry when the same SKU previously produced an empty result set. */
30
+ private _lastResultCount;
31
+ private _i18n;
32
+ protected onInit(config: SimRelWidgetConfig): Promise<void>;
33
+ protected onUpdate(context: Partial<PageContext>): void;
34
+ protected onShow(): void;
35
+ protected onHide(): void;
36
+ protected onDestroy(): void;
37
+ _handleProductClick(product: NormalizedProduct): void;
38
+ _handleAddToCart(params: {
39
+ sku: string;
40
+ quantity: number;
41
+ cartCode: string;
42
+ }): void;
43
+ private _abort;
44
+ private _isSuperseded;
45
+ private _emitSimilarProductsImpression;
46
+ private _resolveRequestTimeoutMs;
47
+ private _fetchAndRender;
48
+ private _clampGridColumns;
49
+ private _resolveI18n;
50
+ private _resolveUISpecRegistry;
51
+ private _buildRenderContext;
52
+ private _renderUISpec;
53
+ private _buildProductsSpec;
54
+ private _buildGroupsSpec;
55
+ }
56
+ export declare function createSimRelWidget(): GengageSimRel;
57
+ export type { SimRelWidgetConfig, SimilarProduct, SimRelUIComponents, SimRelI18n, SimRelUISpecRenderContext, SimRelRendererConfig, } from './types.js';
58
+ export { renderSimRelUISpec, createDefaultSimRelUISpecRegistry, defaultSimRelUnknownUISpecRenderer, } from './components/renderUISpec.js';
59
+ export type { SimRelUISpecRegistry } from './components/renderUISpec.js';