@gengage/assistant-fe 0.1.0

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 (200) hide show
  1. package/LICENSE +61 -0
  2. package/README.md +232 -0
  3. package/dist/assistant-fe.css +1 -0
  4. package/dist/chat/api.d.ts +87 -0
  5. package/dist/chat/api.d.ts.map +1 -0
  6. package/dist/chat/attachment-utils.d.ts +10 -0
  7. package/dist/chat/attachment-utils.d.ts.map +1 -0
  8. package/dist/chat/catalog.d.ts +1114 -0
  9. package/dist/chat/catalog.d.ts.map +1 -0
  10. package/dist/chat/components/AIGroupingCards.d.ts +4 -0
  11. package/dist/chat/components/AIGroupingCards.d.ts.map +1 -0
  12. package/dist/chat/components/AISuggestedSearchCards.d.ts +4 -0
  13. package/dist/chat/components/AISuggestedSearchCards.d.ts.map +1 -0
  14. package/dist/chat/components/AITopPicks.d.ts +4 -0
  15. package/dist/chat/components/AITopPicks.d.ts.map +1 -0
  16. package/dist/chat/components/CategoriesContainer.d.ts +4 -0
  17. package/dist/chat/components/CategoriesContainer.d.ts.map +1 -0
  18. package/dist/chat/components/ChatDrawer.d.ts +140 -0
  19. package/dist/chat/components/ChatDrawer.d.ts.map +1 -0
  20. package/dist/chat/components/ChoicePrompter.d.ts +16 -0
  21. package/dist/chat/components/ChoicePrompter.d.ts.map +1 -0
  22. package/dist/chat/components/ComparisonTable.d.ts +47 -0
  23. package/dist/chat/components/ComparisonTable.d.ts.map +1 -0
  24. package/dist/chat/components/FloatingComparisonButton.d.ts +11 -0
  25. package/dist/chat/components/FloatingComparisonButton.d.ts.map +1 -0
  26. package/dist/chat/components/GroundingReviewCard.d.ts +4 -0
  27. package/dist/chat/components/GroundingReviewCard.d.ts.map +1 -0
  28. package/dist/chat/components/KvkkBanner.d.ts +6 -0
  29. package/dist/chat/components/KvkkBanner.d.ts.map +1 -0
  30. package/dist/chat/components/Launcher.d.ts +25 -0
  31. package/dist/chat/components/Launcher.d.ts.map +1 -0
  32. package/dist/chat/components/PanelTopBar.d.ts +20 -0
  33. package/dist/chat/components/PanelTopBar.d.ts.map +1 -0
  34. package/dist/chat/components/ProactivePopup.d.ts +11 -0
  35. package/dist/chat/components/ProactivePopup.d.ts.map +1 -0
  36. package/dist/chat/components/ProsAndCons.d.ts +9 -0
  37. package/dist/chat/components/ProsAndCons.d.ts.map +1 -0
  38. package/dist/chat/components/ReviewHighlights.d.ts +3 -0
  39. package/dist/chat/components/ReviewHighlights.d.ts.map +1 -0
  40. package/dist/chat/components/ThumbnailsColumn.d.ts +23 -0
  41. package/dist/chat/components/ThumbnailsColumn.d.ts.map +1 -0
  42. package/dist/chat/components/actionClassifier.d.ts +13 -0
  43. package/dist/chat/components/actionClassifier.d.ts.map +1 -0
  44. package/dist/chat/components/productMentionLinker.d.ts +26 -0
  45. package/dist/chat/components/productMentionLinker.d.ts.map +1 -0
  46. package/dist/chat/components/renderUISpec.d.ts +15 -0
  47. package/dist/chat/components/renderUISpec.d.ts.map +1 -0
  48. package/dist/chat/components/typewriter.d.ts +25 -0
  49. package/dist/chat/components/typewriter.d.ts.map +1 -0
  50. package/dist/chat/extendedModeManager.d.ts +33 -0
  51. package/dist/chat/extendedModeManager.d.ts.map +1 -0
  52. package/dist/chat/index.d.ts +192 -0
  53. package/dist/chat/index.d.ts.map +1 -0
  54. package/dist/chat/locales/en.d.ts +3 -0
  55. package/dist/chat/locales/en.d.ts.map +1 -0
  56. package/dist/chat/locales/index.d.ts +6 -0
  57. package/dist/chat/locales/index.d.ts.map +1 -0
  58. package/dist/chat/locales/tr.d.ts +3 -0
  59. package/dist/chat/locales/tr.d.ts.map +1 -0
  60. package/dist/chat/types.d.ts +212 -0
  61. package/dist/chat/types.d.ts.map +1 -0
  62. package/dist/chat.cjs +2 -0
  63. package/dist/chat.cjs.map +1 -0
  64. package/dist/chat.iife.js +59 -0
  65. package/dist/chat.iife.js.map +1 -0
  66. package/dist/chat.js +11 -0
  67. package/dist/chat.js.map +1 -0
  68. package/dist/common/action-router.d.ts +30 -0
  69. package/dist/common/action-router.d.ts.map +1 -0
  70. package/dist/common/activity-tracker.d.ts +38 -0
  71. package/dist/common/activity-tracker.d.ts.map +1 -0
  72. package/dist/common/analytics-events.d.ts +90 -0
  73. package/dist/common/analytics-events.d.ts.map +1 -0
  74. package/dist/common/analytics.d.ts +58 -0
  75. package/dist/common/analytics.d.ts.map +1 -0
  76. package/dist/common/api-paths.d.ts +14 -0
  77. package/dist/common/api-paths.d.ts.map +1 -0
  78. package/dist/common/client.d.ts +20 -0
  79. package/dist/common/client.d.ts.map +1 -0
  80. package/dist/common/communication-bridge.d.ts +51 -0
  81. package/dist/common/communication-bridge.d.ts.map +1 -0
  82. package/dist/common/config-schema.d.ts +241 -0
  83. package/dist/common/config-schema.d.ts.map +1 -0
  84. package/dist/common/context.d.ts +28 -0
  85. package/dist/common/context.d.ts.map +1 -0
  86. package/dist/common/customization-factories.d.ts +63 -0
  87. package/dist/common/customization-factories.d.ts.map +1 -0
  88. package/dist/common/events.d.ts +47 -0
  89. package/dist/common/events.d.ts.map +1 -0
  90. package/dist/common/global-error-toast.d.ts +6 -0
  91. package/dist/common/global-error-toast.d.ts.map +1 -0
  92. package/dist/common/index.d.ts +36 -0
  93. package/dist/common/index.d.ts.map +1 -0
  94. package/dist/common/indexed-db.d.ts +74 -0
  95. package/dist/common/indexed-db.d.ts.map +1 -0
  96. package/dist/common/overlay.d.ts +64 -0
  97. package/dist/common/overlay.d.ts.map +1 -0
  98. package/dist/common/preflight.d.ts +12 -0
  99. package/dist/common/preflight.d.ts.map +1 -0
  100. package/dist/common/renderer/dom.d.ts +4 -0
  101. package/dist/common/renderer/dom.d.ts.map +1 -0
  102. package/dist/common/renderer/index.d.ts +5 -0
  103. package/dist/common/renderer/index.d.ts.map +1 -0
  104. package/dist/common/renderer/overrides.d.ts +24 -0
  105. package/dist/common/renderer/overrides.d.ts.map +1 -0
  106. package/dist/common/renderer/registry.d.ts +3 -0
  107. package/dist/common/renderer/registry.d.ts.map +1 -0
  108. package/dist/common/renderer/types.d.ts +20 -0
  109. package/dist/common/renderer/types.d.ts.map +1 -0
  110. package/dist/common/safe-html.d.ts +19 -0
  111. package/dist/common/safe-html.d.ts.map +1 -0
  112. package/dist/common/streaming.d.ts +32 -0
  113. package/dist/common/streaming.d.ts.map +1 -0
  114. package/dist/common/theme-utils.d.ts +16 -0
  115. package/dist/common/theme-utils.d.ts.map +1 -0
  116. package/dist/common/types.d.ts +298 -0
  117. package/dist/common/types.d.ts.map +1 -0
  118. package/dist/common/ui-theme.d.ts +10 -0
  119. package/dist/common/ui-theme.d.ts.map +1 -0
  120. package/dist/common/uuidv7.d.ts +8 -0
  121. package/dist/common/uuidv7.d.ts.map +1 -0
  122. package/dist/common/v1-protocol-adapter.d.ts +66 -0
  123. package/dist/common/v1-protocol-adapter.d.ts.map +1 -0
  124. package/dist/common/widget-base.d.ts +75 -0
  125. package/dist/common/widget-base.d.ts.map +1 -0
  126. package/dist/common.cjs +2 -0
  127. package/dist/common.cjs.map +1 -0
  128. package/dist/common.js +584 -0
  129. package/dist/common.js.map +1 -0
  130. package/dist/index-CFA70IGF.js +3626 -0
  131. package/dist/index-CFA70IGF.js.map +1 -0
  132. package/dist/index-Dfl89zpe.cjs +13 -0
  133. package/dist/index-Dfl89zpe.cjs.map +1 -0
  134. package/dist/index.cjs +2 -0
  135. package/dist/index.cjs.map +1 -0
  136. package/dist/index.d.ts +24 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +59 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/qna/api.d.ts +22 -0
  141. package/dist/qna/api.d.ts.map +1 -0
  142. package/dist/qna/catalog.d.ts +140 -0
  143. package/dist/qna/catalog.d.ts.map +1 -0
  144. package/dist/qna/components/ButtonRow.d.ts +16 -0
  145. package/dist/qna/components/ButtonRow.d.ts.map +1 -0
  146. package/dist/qna/components/TextInput.d.ts +12 -0
  147. package/dist/qna/components/TextInput.d.ts.map +1 -0
  148. package/dist/qna/components/renderUISpec.d.ts +8 -0
  149. package/dist/qna/components/renderUISpec.d.ts.map +1 -0
  150. package/dist/qna/index.d.ts +34 -0
  151. package/dist/qna/index.d.ts.map +1 -0
  152. package/dist/qna/locales/en.d.ts +3 -0
  153. package/dist/qna/locales/en.d.ts.map +1 -0
  154. package/dist/qna/locales/index.d.ts +6 -0
  155. package/dist/qna/locales/index.d.ts.map +1 -0
  156. package/dist/qna/locales/tr.d.ts +3 -0
  157. package/dist/qna/locales/tr.d.ts.map +1 -0
  158. package/dist/qna/types.d.ts +62 -0
  159. package/dist/qna/types.d.ts.map +1 -0
  160. package/dist/qna.cjs +2 -0
  161. package/dist/qna.cjs.map +1 -0
  162. package/dist/qna.css +1 -0
  163. package/dist/qna.iife.js +48 -0
  164. package/dist/qna.iife.js.map +1 -0
  165. package/dist/qna.js +435 -0
  166. package/dist/qna.js.map +1 -0
  167. package/dist/simrel/api.d.ts +26 -0
  168. package/dist/simrel/api.d.ts.map +1 -0
  169. package/dist/simrel/catalog.d.ts +319 -0
  170. package/dist/simrel/catalog.d.ts.map +1 -0
  171. package/dist/simrel/components/GroupTabs.d.ts +17 -0
  172. package/dist/simrel/components/GroupTabs.d.ts.map +1 -0
  173. package/dist/simrel/components/ProductCard.d.ts +17 -0
  174. package/dist/simrel/components/ProductCard.d.ts.map +1 -0
  175. package/dist/simrel/components/ProductGrid.d.ts +17 -0
  176. package/dist/simrel/components/ProductGrid.d.ts.map +1 -0
  177. package/dist/simrel/components/renderUISpec.d.ts +8 -0
  178. package/dist/simrel/components/renderUISpec.d.ts.map +1 -0
  179. package/dist/simrel/index.d.ts +36 -0
  180. package/dist/simrel/index.d.ts.map +1 -0
  181. package/dist/simrel/locales/en.d.ts +3 -0
  182. package/dist/simrel/locales/en.d.ts.map +1 -0
  183. package/dist/simrel/locales/index.d.ts +6 -0
  184. package/dist/simrel/locales/index.d.ts.map +1 -0
  185. package/dist/simrel/locales/tr.d.ts +3 -0
  186. package/dist/simrel/locales/tr.d.ts.map +1 -0
  187. package/dist/simrel/types.d.ts +111 -0
  188. package/dist/simrel/types.d.ts.map +1 -0
  189. package/dist/simrel.cjs +2 -0
  190. package/dist/simrel.cjs.map +1 -0
  191. package/dist/simrel.css +1 -0
  192. package/dist/simrel.iife.js +48 -0
  193. package/dist/simrel.iife.js.map +1 -0
  194. package/dist/simrel.js +620 -0
  195. package/dist/simrel.js.map +1 -0
  196. package/dist/types-CeON7iBO.cjs +48 -0
  197. package/dist/types-CeON7iBO.cjs.map +1 -0
  198. package/dist/types-yxW8WA7u.js +4132 -0
  199. package/dist/types-yxW8WA7u.js.map +1 -0
  200. package/package.json +100 -0
@@ -0,0 +1,319 @@
1
+ import { z } from 'zod';
2
+ export declare const ProductGridSchema: z.ZodObject<{
3
+ layout: z.ZodOptional<z.ZodEnum<["grid", "carousel"]>>;
4
+ columns: z.ZodOptional<z.ZodNumber>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ layout?: "grid" | "carousel" | undefined;
7
+ columns?: number | undefined;
8
+ }, {
9
+ layout?: "grid" | "carousel" | undefined;
10
+ columns?: number | undefined;
11
+ }>;
12
+ export declare const ProductCardSchema: z.ZodObject<{
13
+ product: z.ZodObject<{
14
+ sku: z.ZodString;
15
+ name: z.ZodString;
16
+ imageUrl: z.ZodOptional<z.ZodString>;
17
+ price: z.ZodOptional<z.ZodString>;
18
+ originalPrice: z.ZodOptional<z.ZodString>;
19
+ discountPercent: z.ZodOptional<z.ZodNumber>;
20
+ url: z.ZodString;
21
+ brand: z.ZodOptional<z.ZodString>;
22
+ rating: z.ZodOptional<z.ZodNumber>;
23
+ reviewCount: z.ZodOptional<z.ZodNumber>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ sku: string;
26
+ url: string;
27
+ name: string;
28
+ price?: string | undefined;
29
+ reviewCount?: number | undefined;
30
+ brand?: string | undefined;
31
+ imageUrl?: string | undefined;
32
+ rating?: number | undefined;
33
+ originalPrice?: string | undefined;
34
+ discountPercent?: number | undefined;
35
+ }, {
36
+ sku: string;
37
+ url: string;
38
+ name: string;
39
+ price?: string | undefined;
40
+ reviewCount?: number | undefined;
41
+ brand?: string | undefined;
42
+ imageUrl?: string | undefined;
43
+ rating?: number | undefined;
44
+ originalPrice?: string | undefined;
45
+ discountPercent?: number | undefined;
46
+ }>;
47
+ index: z.ZodNumber;
48
+ discountType: z.ZodOptional<z.ZodEnum<["strike-through", "badge"]>>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ product: {
51
+ sku: string;
52
+ url: string;
53
+ name: string;
54
+ price?: string | undefined;
55
+ reviewCount?: number | undefined;
56
+ brand?: string | undefined;
57
+ imageUrl?: string | undefined;
58
+ rating?: number | undefined;
59
+ originalPrice?: string | undefined;
60
+ discountPercent?: number | undefined;
61
+ };
62
+ index: number;
63
+ discountType?: "strike-through" | "badge" | undefined;
64
+ }, {
65
+ product: {
66
+ sku: string;
67
+ url: string;
68
+ name: string;
69
+ price?: string | undefined;
70
+ reviewCount?: number | undefined;
71
+ brand?: string | undefined;
72
+ imageUrl?: string | undefined;
73
+ rating?: number | undefined;
74
+ originalPrice?: string | undefined;
75
+ discountPercent?: number | undefined;
76
+ };
77
+ index: number;
78
+ discountType?: "strike-through" | "badge" | undefined;
79
+ }>;
80
+ export declare const AddToCartButtonSchema: z.ZodObject<{
81
+ sku: z.ZodString;
82
+ label: z.ZodOptional<z.ZodString>;
83
+ cartCode: z.ZodString;
84
+ }, "strip", z.ZodTypeAny, {
85
+ sku: string;
86
+ cartCode: string;
87
+ label?: string | undefined;
88
+ }, {
89
+ sku: string;
90
+ cartCode: string;
91
+ label?: string | undefined;
92
+ }>;
93
+ export declare const QuickActionsSchema: z.ZodObject<{
94
+ actions: z.ZodArray<z.ZodObject<{
95
+ label: z.ZodString;
96
+ action: z.ZodObject<{
97
+ title: z.ZodString;
98
+ type: z.ZodString;
99
+ payload: z.ZodOptional<z.ZodUnknown>;
100
+ }, "strip", z.ZodTypeAny, {
101
+ type: string;
102
+ title: string;
103
+ payload?: unknown;
104
+ }, {
105
+ type: string;
106
+ title: string;
107
+ payload?: unknown;
108
+ }>;
109
+ }, "strip", z.ZodTypeAny, {
110
+ label: string;
111
+ action: {
112
+ type: string;
113
+ title: string;
114
+ payload?: unknown;
115
+ };
116
+ }, {
117
+ label: string;
118
+ action: {
119
+ type: string;
120
+ title: string;
121
+ payload?: unknown;
122
+ };
123
+ }>, "many">;
124
+ }, "strip", z.ZodTypeAny, {
125
+ actions: {
126
+ label: string;
127
+ action: {
128
+ type: string;
129
+ title: string;
130
+ payload?: unknown;
131
+ };
132
+ }[];
133
+ }, {
134
+ actions: {
135
+ label: string;
136
+ action: {
137
+ type: string;
138
+ title: string;
139
+ payload?: unknown;
140
+ };
141
+ }[];
142
+ }>;
143
+ export declare const EmptyStateSchema: z.ZodObject<{
144
+ message: z.ZodOptional<z.ZodString>;
145
+ }, "strip", z.ZodTypeAny, {
146
+ message?: string | undefined;
147
+ }, {
148
+ message?: string | undefined;
149
+ }>;
150
+ export declare const simRelCatalog: {
151
+ readonly components: {
152
+ readonly ProductGrid: {
153
+ readonly schema: z.ZodObject<{
154
+ layout: z.ZodOptional<z.ZodEnum<["grid", "carousel"]>>;
155
+ columns: z.ZodOptional<z.ZodNumber>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ layout?: "grid" | "carousel" | undefined;
158
+ columns?: number | undefined;
159
+ }, {
160
+ layout?: "grid" | "carousel" | undefined;
161
+ columns?: number | undefined;
162
+ }>;
163
+ readonly description: "Outer grid or carousel container for similar products.";
164
+ };
165
+ readonly ProductCard: {
166
+ readonly schema: z.ZodObject<{
167
+ product: z.ZodObject<{
168
+ sku: z.ZodString;
169
+ name: z.ZodString;
170
+ imageUrl: z.ZodOptional<z.ZodString>;
171
+ price: z.ZodOptional<z.ZodString>;
172
+ originalPrice: z.ZodOptional<z.ZodString>;
173
+ discountPercent: z.ZodOptional<z.ZodNumber>;
174
+ url: z.ZodString;
175
+ brand: z.ZodOptional<z.ZodString>;
176
+ rating: z.ZodOptional<z.ZodNumber>;
177
+ reviewCount: z.ZodOptional<z.ZodNumber>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ sku: string;
180
+ url: string;
181
+ name: string;
182
+ price?: string | undefined;
183
+ reviewCount?: number | undefined;
184
+ brand?: string | undefined;
185
+ imageUrl?: string | undefined;
186
+ rating?: number | undefined;
187
+ originalPrice?: string | undefined;
188
+ discountPercent?: number | undefined;
189
+ }, {
190
+ sku: string;
191
+ url: string;
192
+ name: string;
193
+ price?: string | undefined;
194
+ reviewCount?: number | undefined;
195
+ brand?: string | undefined;
196
+ imageUrl?: string | undefined;
197
+ rating?: number | undefined;
198
+ originalPrice?: string | undefined;
199
+ discountPercent?: number | undefined;
200
+ }>;
201
+ index: z.ZodNumber;
202
+ discountType: z.ZodOptional<z.ZodEnum<["strike-through", "badge"]>>;
203
+ }, "strip", z.ZodTypeAny, {
204
+ product: {
205
+ sku: string;
206
+ url: string;
207
+ name: string;
208
+ price?: string | undefined;
209
+ reviewCount?: number | undefined;
210
+ brand?: string | undefined;
211
+ imageUrl?: string | undefined;
212
+ rating?: number | undefined;
213
+ originalPrice?: string | undefined;
214
+ discountPercent?: number | undefined;
215
+ };
216
+ index: number;
217
+ discountType?: "strike-through" | "badge" | undefined;
218
+ }, {
219
+ product: {
220
+ sku: string;
221
+ url: string;
222
+ name: string;
223
+ price?: string | undefined;
224
+ reviewCount?: number | undefined;
225
+ brand?: string | undefined;
226
+ imageUrl?: string | undefined;
227
+ rating?: number | undefined;
228
+ originalPrice?: string | undefined;
229
+ discountPercent?: number | undefined;
230
+ };
231
+ index: number;
232
+ discountType?: "strike-through" | "badge" | undefined;
233
+ }>;
234
+ readonly description: "A single product card with image, title, price, and actions.";
235
+ };
236
+ readonly AddToCartButton: {
237
+ readonly schema: z.ZodObject<{
238
+ sku: z.ZodString;
239
+ label: z.ZodOptional<z.ZodString>;
240
+ cartCode: z.ZodString;
241
+ }, "strip", z.ZodTypeAny, {
242
+ sku: string;
243
+ cartCode: string;
244
+ label?: string | undefined;
245
+ }, {
246
+ sku: string;
247
+ cartCode: string;
248
+ label?: string | undefined;
249
+ }>;
250
+ readonly description: "Add-to-cart CTA rendered inside or below a product card.";
251
+ };
252
+ readonly QuickActions: {
253
+ readonly schema: z.ZodObject<{
254
+ actions: z.ZodArray<z.ZodObject<{
255
+ label: z.ZodString;
256
+ action: z.ZodObject<{
257
+ title: z.ZodString;
258
+ type: z.ZodString;
259
+ payload: z.ZodOptional<z.ZodUnknown>;
260
+ }, "strip", z.ZodTypeAny, {
261
+ type: string;
262
+ title: string;
263
+ payload?: unknown;
264
+ }, {
265
+ type: string;
266
+ title: string;
267
+ payload?: unknown;
268
+ }>;
269
+ }, "strip", z.ZodTypeAny, {
270
+ label: string;
271
+ action: {
272
+ type: string;
273
+ title: string;
274
+ payload?: unknown;
275
+ };
276
+ }, {
277
+ label: string;
278
+ action: {
279
+ type: string;
280
+ title: string;
281
+ payload?: unknown;
282
+ };
283
+ }>, "many">;
284
+ }, "strip", z.ZodTypeAny, {
285
+ actions: {
286
+ label: string;
287
+ action: {
288
+ type: string;
289
+ title: string;
290
+ payload?: unknown;
291
+ };
292
+ }[];
293
+ }, {
294
+ actions: {
295
+ label: string;
296
+ action: {
297
+ type: string;
298
+ title: string;
299
+ payload?: unknown;
300
+ };
301
+ }[];
302
+ }>;
303
+ readonly description: "A row of quick-action buttons below product info.";
304
+ };
305
+ readonly EmptyState: {
306
+ readonly schema: z.ZodObject<{
307
+ message: z.ZodOptional<z.ZodString>;
308
+ }, "strip", z.ZodTypeAny, {
309
+ message?: string | undefined;
310
+ }, {
311
+ message?: string | undefined;
312
+ }>;
313
+ readonly description: "Empty state shown when no similar products are available.";
314
+ };
315
+ };
316
+ };
317
+ export type SimRelCatalog = typeof simRelCatalog;
318
+ export type SimRelComponentName = keyof SimRelCatalog['components'];
319
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/simrel/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AACjD,MAAM,MAAM,mBAAmB,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
2
+ import { ProductGroup } from '../api.js';
3
+ import { SimRelI18n } from '../types.js';
4
+ export interface GroupTabsOptions {
5
+ groups: ProductGroup[];
6
+ discountType?: 'strike-through' | 'badge';
7
+ onClick: (product: NormalizedProduct) => void;
8
+ onAddToCart: (params: {
9
+ sku: string;
10
+ quantity: number;
11
+ cartCode: string;
12
+ }) => void;
13
+ renderCard?: (product: NormalizedProduct, index: number) => string;
14
+ i18n?: SimRelI18n;
15
+ }
16
+ export declare function renderGroupTabs(options: GroupTabsOptions): HTMLElement;
17
+ //# sourceMappingURL=GroupTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupTabs.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/GroupTabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CA2EtE"}
@@ -0,0 +1,17 @@
1
+ import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
2
+ import { SimRelI18n } from '../types.js';
3
+ export interface ProductCardOptions {
4
+ product: NormalizedProduct;
5
+ index: number;
6
+ discountType?: 'strike-through' | 'badge';
7
+ onClick: (product: NormalizedProduct) => void;
8
+ onAddToCart: (params: {
9
+ sku: string;
10
+ quantity: number;
11
+ cartCode: string;
12
+ }) => void;
13
+ renderCard?: (product: NormalizedProduct, index: number) => string;
14
+ i18n?: SimRelI18n;
15
+ }
16
+ export declare function renderProductCard(options: ProductCardOptions): HTMLElement;
17
+ //# sourceMappingURL=ProductCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductCard.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/ProductCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAwH1E"}
@@ -0,0 +1,17 @@
1
+ import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
2
+ import { SimRelI18n } from '../types.js';
3
+ export interface ProductGridOptions {
4
+ products: NormalizedProduct[];
5
+ columns?: number;
6
+ discountType?: 'strike-through' | 'badge';
7
+ onClick: (product: NormalizedProduct) => void;
8
+ onAddToCart: (params: {
9
+ sku: string;
10
+ quantity: number;
11
+ cartCode: string;
12
+ }) => void;
13
+ renderCard?: (product: NormalizedProduct, index: number) => string;
14
+ i18n?: SimRelI18n;
15
+ }
16
+ export declare function renderProductGrid(options: ProductGridOptions): HTMLElement;
17
+ //# sourceMappingURL=ProductGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductGrid.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/ProductGrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAiC1E"}
@@ -0,0 +1,8 @@
1
+ import { UISpecDomRegistry, UISpecDomUnknownRenderer } from '../../common/renderer/index.js';
2
+ import { UISpec } from '../../common/types.js';
3
+ import { SimRelUISpecRenderContext } from '../types.js';
4
+ export type SimRelUISpecRegistry = UISpecDomRegistry<SimRelUISpecRenderContext>;
5
+ export declare const defaultSimRelUnknownUISpecRenderer: UISpecDomUnknownRenderer<SimRelUISpecRenderContext>;
6
+ export declare function createDefaultSimRelUISpecRegistry(): SimRelUISpecRegistry;
7
+ export declare function renderSimRelUISpec(spec: UISpec, context: SimRelUISpecRenderContext, registry?: SimRelUISpecRegistry, unknownRenderer?: UISpecDomUnknownRenderer<SimRelUISpecRenderContext>): HTMLElement;
8
+ //# sourceMappingURL=renderUISpec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderUISpec.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/renderUISpec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,yBAAyB,EAAkB,MAAM,aAAa,CAAC;AAK7E,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;AA4LhF,eAAO,MAAM,kCAAkC,EAAE,wBAAwB,CAAC,yBAAyB,CAgBlG,CAAC;AAEF,wBAAgB,iCAAiC,IAAI,oBAAoB,CAExE;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,yBAAyB,EAClC,QAAQ,uBAAkC,EAC1C,eAAe,GAAE,wBAAwB,CAAC,yBAAyB,CAAsC,GACxG,WAAW,CAQb"}
@@ -0,0 +1,36 @@
1
+ import { PageContext } from '../common/types.js';
2
+ import { NormalizedProduct } from '../common/v1-protocol-adapter.js';
3
+ import { BaseWidget } from '../common/widget-base.js';
4
+ import { SimRelWidgetConfig } from './types.js';
5
+ export declare class GengageSimRel extends BaseWidget<SimRelWidgetConfig> {
6
+ private _abortController;
7
+ private _contentEl;
8
+ private _lastSku;
9
+ private _i18n;
10
+ protected onInit(config: SimRelWidgetConfig): Promise<void>;
11
+ protected onUpdate(context: Partial<PageContext>): void;
12
+ protected onShow(): void;
13
+ protected onHide(): void;
14
+ protected onDestroy(): void;
15
+ _handleProductClick(product: NormalizedProduct): void;
16
+ _handleAddToCart(params: {
17
+ sku: string;
18
+ quantity: number;
19
+ cartCode: string;
20
+ }): void;
21
+ private _abort;
22
+ private _fetchAndRender;
23
+ private _resolveI18n;
24
+ private _resolveUISpecRegistry;
25
+ private _buildRenderContext;
26
+ private _renderUISpec;
27
+ private _buildProductsSpec;
28
+ private _buildGroupsSpec;
29
+ }
30
+ export declare function createSimRelWidget(): GengageSimRel;
31
+ export type { SimRelWidgetConfig, SimilarProduct, SimRelUIComponents, SimRelI18n, SimRelUISpecRenderContext, SimRelRendererConfig, } from './types.js';
32
+ export { renderSimRelUISpec, createDefaultSimRelUISpecRegistry, defaultSimRelUnknownUISpecRenderer, } from './components/renderUISpec.js';
33
+ export type { SimRelUISpecRegistry } from './components/renderUISpec.js';
34
+ export { simRelCatalog } from './catalog.js';
35
+ export type { SimRelCatalog, SimRelComponentName } from './catalog.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simrel/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAI1E,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAgBtD,OAAO,KAAK,EAAE,kBAAkB,EAAyD,MAAM,YAAY,CAAC;AAG5G,OAAO,yBAAyB,CAAC;AAEjC,qBAAa,aAAc,SAAQ,UAAU,CAAC,kBAAkB,CAAC;IAC/D,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,KAAK,CAA8B;cAE3B,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAOvD,SAAS,CAAC,MAAM,IAAI,IAAI;IAUxB,SAAS,CAAC,MAAM,IAAI,IAAI;IAIxB,SAAS,CAAC,SAAS,IAAI,IAAI;IAY3B,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IA4BrD,gBAAgB,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoBnF,OAAO,CAAC,MAAM;YAKA,eAAe;IA2H7B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,gBAAgB;CAiBzB;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAElD;AAED,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { SimRelI18n } from '../types.js';
2
+ export declare const SIMREL_I18N_EN: SimRelI18n;
3
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/simrel/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,UAK5B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { SimRelI18n } from '../types.js';
2
+ import { SIMREL_I18N_TR } from './tr.js';
3
+ import { SIMREL_I18N_EN } from './en.js';
4
+ export declare function resolveSimRelLocale(locale?: string): SimRelI18n;
5
+ export { SIMREL_I18N_TR, SIMREL_I18N_EN };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/simrel/locales/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAOzC,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAO/D;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { SimRelI18n } from '../types.js';
2
+ export declare const SIMREL_I18N_TR: SimRelI18n;
3
+ //# sourceMappingURL=tr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../src/simrel/locales/tr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,UAK5B,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { BaseWidgetConfig, ActionPayload } from '../common/types.js';
2
+ import { UISpecRendererOverrides } from '../common/renderer/index.js';
3
+ export interface SimRelWidgetConfig extends BaseWidgetConfig {
4
+ /** Product SKU to find similar items for. Required. */
5
+ sku: string;
6
+ /** Where to render the product grid. Required. */
7
+ mountTarget: HTMLElement | string;
8
+ /** Called when "Add to cart" is tapped on a product card. */
9
+ onAddToCart?: (params: {
10
+ sku: string;
11
+ quantity: number;
12
+ cartCode: string;
13
+ }) => void;
14
+ /**
15
+ * Called when the user taps a product card (navigation intent).
16
+ * Return false to prevent the widget's default navigation.
17
+ */
18
+ onProductClick?: (product: SimilarProduct) => boolean | void;
19
+ /**
20
+ * Called just before navigating to a product page.
21
+ * Use to call window.gengage.chat.saveSession() for cross-page session continuity.
22
+ */
23
+ onProductNavigate?: (url: string, sku: string, sessionId: string | null) => void;
24
+ /** Forwarded to your analytics layer. */
25
+ onAnalyticsEvent?: (event: string, data: Record<string, unknown>) => void;
26
+ /**
27
+ * Override the default product card template.
28
+ *
29
+ * ⚠️ XSS WARNING: This function returns a raw HTML string injected into the DOM.
30
+ * You MUST sanitize any user-controlled data (e.g. product names from the API)
31
+ * using DOMPurify or a similar library before returning.
32
+ *
33
+ * Glov/Gengage accepts no responsibility for XSS vulnerabilities introduced
34
+ * by unsafe renderCard implementations.
35
+ */
36
+ renderCard?: (product: SimilarProduct, index: number) => string;
37
+ /** Show the first slot as a "special" card (e.g. a promo or bundle). */
38
+ useSpecialCard?: boolean;
39
+ renderSpecialCard?: (product: SimilarProduct) => string | null;
40
+ discountType?: 'strike-through' | 'badge';
41
+ domain?: string;
42
+ /** Locale key for SDK defaults (for example 'tr', 'en'). */
43
+ locale?: string;
44
+ i18n?: Partial<SimRelI18n>;
45
+ renderer?: SimRelRendererConfig;
46
+ }
47
+ export interface SimilarProduct {
48
+ sku: string;
49
+ name: string;
50
+ imageUrl?: string;
51
+ price?: string;
52
+ originalPrice?: string;
53
+ discountPercent?: number;
54
+ url: string;
55
+ brand?: string;
56
+ rating?: number;
57
+ reviewCount?: number;
58
+ cartCode?: string;
59
+ inStock?: boolean;
60
+ }
61
+ export interface SimRelI18n {
62
+ similarProductsAriaLabel: string;
63
+ emptyStateMessage: string;
64
+ addToCartButton: string;
65
+ priceSuffix: string;
66
+ }
67
+ export interface SimRelUISpecRenderContext {
68
+ onClick: (product: SimilarProduct) => void;
69
+ onAddToCart: (params: {
70
+ sku: string;
71
+ quantity: number;
72
+ cartCode: string;
73
+ }) => void;
74
+ onAction?: (action: ActionPayload) => void;
75
+ discountType?: 'strike-through' | 'badge';
76
+ renderCard?: (product: SimilarProduct, index: number) => string;
77
+ i18n: SimRelI18n;
78
+ }
79
+ export type SimRelRendererConfig = UISpecRendererOverrides<SimRelUISpecRenderContext>;
80
+ export interface SimRelUIComponents {
81
+ /** The outer grid/carousel container. */
82
+ ProductGrid: {
83
+ layout?: 'grid' | 'carousel';
84
+ columns?: number;
85
+ };
86
+ /** A single product card in the grid. */
87
+ ProductCard: {
88
+ product: SimilarProduct;
89
+ index: number;
90
+ discountType?: 'strike-through' | 'badge';
91
+ };
92
+ /** Add-to-cart button inside a card. */
93
+ AddToCartButton: {
94
+ sku: string;
95
+ label?: string;
96
+ /** Cart code / variant identifier. */
97
+ cartCode: string;
98
+ };
99
+ /** A "quick action" row of buttons below the product info. */
100
+ QuickActions: {
101
+ actions: Array<{
102
+ label: string;
103
+ action: ActionPayload;
104
+ }>;
105
+ };
106
+ /** Empty state shown when no similar products are found. */
107
+ EmptyState: {
108
+ message?: string;
109
+ };
110
+ }
111
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/simrel/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./types-CeON7iBO.cjs");function v(n){const e=n.headers.get("Content-Type")??"";return e.includes("application/x-ndjson")||e.includes("text/event-stream")}async function w(n,e){const t=[],r={onEvent:i=>{const o=a.adaptV1Event(i);if(!(!o||o.type!=="ui_spec")){for(const s of Object.values(o.spec.elements))if(s.type==="ProductCard"&&s.props){const c=s.props.product??s.props;typeof c.sku=="string"&&typeof c.name=="string"&&t.push(c)}}}};return e!==void 0&&(r.signal=e),await a.consumeStream(n,r),t}async function R(n,e,t){const r=a.buildChatEndpointUrl("similar_products",e),i={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)};t!==void 0&&(i.signal=t);const o=await fetch(r,i);if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);if(v(o))return w(o,t);const s=await o.text();return s?a.normalizeSimilarProductsResponse(JSON.parse(s)):[]}async function N(n,e){const t=[];let r=null;const i={onEvent:o=>{const s=a.adaptV1Event(o);if(s){if(s.type==="metadata"&&s.meta){const c=s.meta.group_name;if(typeof c=="string"){r={name:c,products:[]};const l=s.meta.highlight;typeof l=="string"&&(r.highlight=l),t.push(r)}}if(s.type==="ui_spec"&&r){for(const c of Object.values(s.spec.elements))if(c.type==="ProductCard"&&c.props){const l=c.props.product??c.props;typeof l.sku=="string"&&typeof l.name=="string"&&r.products.push(l)}}}}};return e!==void 0&&(i.signal=e),await a.consumeStream(n,i),t}async function I(n,e,t){const r=a.buildChatEndpointUrl("product_groupings",e),i={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)};t!==void 0&&(i.signal=t);const o=await fetch(r,i);if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);if(v(o))return N(o,t);const s=await o.text();return s?a.normalizeProductGroupingsResponse(JSON.parse(s)):[]}function E(n){const{product:e,index:t,discountType:r,onClick:i,onAddToCart:o,renderCard:s}=n,c=n.i18n,l=c?.priceSuffix??" TL";if(s){const d=document.createElement("div");return d.className="gengage-simrel-card gengage-simrel-card--custom",d.innerHTML=s(e,t),d.addEventListener("click",f=>{f.target.closest(".gengage-simrel-atc")||i(e)}),d}const u=document.createElement("article");u.className="gengage-simrel-card",u.setAttribute("role","listitem"),u.dataset.sku=e.sku;const p=document.createElement("div");if(p.className="gengage-simrel-card-image",e.imageUrl){const d=document.createElement("img");d.src=e.imageUrl,d.alt=e.name,d.loading="lazy",p.appendChild(d)}if(r==="badge"&&e.discountPercent&&e.discountPercent>0){const d=document.createElement("span");d.className="gengage-simrel-badge",d.textContent=`%${e.discountPercent}`,p.appendChild(d)}u.appendChild(p);const g=document.createElement("div");if(g.className="gengage-simrel-card-info",e.brand){const d=document.createElement("div");d.className="gengage-simrel-card-brand",d.textContent=e.brand,g.appendChild(d)}const m=document.createElement("div");if(m.className="gengage-simrel-card-name",m.textContent=e.name,g.appendChild(m),e.rating!=null&&e.rating>0){const d=document.createElement("div");d.className="gengage-simrel-card-rating";const f="★".repeat(Math.round(e.rating))+"☆".repeat(5-Math.round(e.rating));if(d.textContent=f,e.reviewCount!=null){const y=document.createElement("span");y.className="gengage-simrel-card-review-count",y.textContent=` (${e.reviewCount})`,d.appendChild(y)}g.appendChild(d)}const h=document.createElement("div");if(h.className="gengage-simrel-card-price",e.originalPrice&&e.originalPrice!==e.price&&(r==="strike-through"||!r)){const d=document.createElement("span");d.className="gengage-simrel-card-price-original",d.textContent=e.originalPrice+l,h.appendChild(d)}if(e.price){const d=document.createElement("span");d.className="gengage-simrel-card-price-current",d.textContent=e.price+l,h.appendChild(d)}if(g.appendChild(h),u.appendChild(g),e.cartCode){const d=document.createElement("button");d.className="gengage-simrel-atc",d.type="button",d.textContent=c?.addToCartButton??"Sepete Ekle",d.addEventListener("click",f=>{f.stopPropagation(),o({sku:e.sku,quantity:1,cartCode:e.cartCode})}),u.appendChild(d)}return u.addEventListener("click",d=>{d.target.closest(".gengage-simrel-atc")||i(e)}),u}function b(n){const e=document.createElement("div");e.className="gengage-simrel-grid",e.setAttribute("role","list"),e.setAttribute("aria-label",n.i18n?.similarProductsAriaLabel??"Similar products"),n.columns&&e.style.setProperty("--gengage-simrel-columns",String(n.columns));for(let t=0;t<n.products.length;t++){const i={product:n.products[t],index:t,onClick:n.onClick,onAddToCart:n.onAddToCart};n.i18n!==void 0&&(i.i18n=n.i18n),n.discountType!==void 0&&(i.discountType=n.discountType),n.renderCard!==void 0&&(i.renderCard=n.renderCard);const o=E(i);e.appendChild(o)}if(n.products.length===0){const t=document.createElement("div");t.className="gengage-simrel-empty",t.textContent=n.i18n?.emptyStateMessage??"Benzer ürün bulunamadı.",e.appendChild(t)}return e}function U(n){const e=document.createElement("div");if(e.className="gengage-simrel-groups",n.groups.length===0){const c=document.createElement("div");return c.className="gengage-simrel-empty",c.textContent=n.i18n?.emptyStateMessage??"Benzer ürün bulunamadı.",e.appendChild(c),e}const t=document.createElement("div");t.className="gengage-simrel-tabs",t.setAttribute("role","tablist");const r=document.createElement("div");r.className="gengage-simrel-tab-content";for(let c=0;c<n.groups.length;c++){const l=n.groups[c],u=document.createElement("button");u.className="gengage-simrel-tab",u.type="button",u.textContent=l.name,u.setAttribute("role","tab"),u.setAttribute("aria-selected",c===0?"true":"false"),c===0&&u.classList.add("gengage-simrel-tab--active"),u.addEventListener("click",()=>{const p=t.querySelector(".gengage-simrel-tab--active");p?.classList.remove("gengage-simrel-tab--active"),p?.setAttribute("aria-selected","false"),u.classList.add("gengage-simrel-tab--active"),u.setAttribute("aria-selected","true"),r.innerHTML="";const g={products:l.products,onClick:n.onClick,onAddToCart:n.onAddToCart};n.i18n!==void 0&&(g.i18n=n.i18n),n.discountType!==void 0&&(g.discountType=n.discountType),n.renderCard!==void 0&&(g.renderCard=n.renderCard);const m=b(g);r.appendChild(m)}),t.appendChild(u)}e.appendChild(t);const o={products:n.groups[0].products,onClick:n.onClick,onAddToCart:n.onAddToCart};n.i18n!==void 0&&(o.i18n=n.i18n),n.discountType!==void 0&&(o.discountType=n.discountType),n.renderCard!==void 0&&(o.renderCard=n.renderCard);const s=b(o);return r.appendChild(s),e.appendChild(r),e}function T(n){if(!n||typeof n!="object")return null;const e=n;if(typeof e.sku!="string"||typeof e.name!="string"||typeof e.url!="string")return null;const t={sku:e.sku,name:e.name,url:e.url},r=e.imageUrl;typeof r=="string"&&(t.imageUrl=r);const i=e.price;typeof i=="string"&&(t.price=i);const o=e.originalPrice;typeof o=="string"&&(t.originalPrice=o);const s=e.discountPercent;typeof s=="number"&&(t.discountPercent=s);const c=e.brand;typeof c=="string"&&(t.brand=c);const l=e.rating;typeof l=="number"&&(t.rating=l);const u=e.reviewCount;typeof u=="number"&&(t.reviewCount=u);const p=e.cartCode;typeof p=="string"&&(t.cartCode=p);const g=e.inStock;return typeof g=="boolean"&&(t.inStock=g),t}function x(n){if(!n||typeof n!="object")return null;const e=n,t=e.title,r=e.type;if(typeof t!="string"||typeof r!="string")return null;const i={title:t,type:r};return e.payload!==void 0&&(i.payload=e.payload),i}const _={ProductGrid:({element:n,renderElement:e})=>{const t=document.createElement("div");t.className="gengage-simrel-grid",t.setAttribute("role","list");const r=n.props?.columns;typeof r=="number"&&Number.isFinite(r)&&r>0&&t.style.setProperty("--gengage-simrel-columns",String(r));for(const i of n.children??[]){const o=e(i);o&&t.appendChild(o)}if(t.children.length===0){const i=document.createElement("div");i.className="gengage-simrel-empty",i.textContent="Benzer ürün bulunamadı.",t.appendChild(i)}return t},ProductCard:({element:n,context:e})=>{const t=n.props?.product??n.props,r=T(t);if(!r)return null;const i=n.props?.index,o=typeof i=="number"&&Number.isFinite(i)?i:0,s=n.props?.discountType,c=s==="strike-through"||s==="badge"?s:e.discountType,l={product:r,index:o,onClick:e.onClick,onAddToCart:e.onAddToCart,i18n:e.i18n};return c!==void 0&&(l.discountType=c),e.renderCard!==void 0&&(l.renderCard=e.renderCard),E(l)},GroupTabs:({element:n,context:e})=>{const t=n.props?.groups;if(!Array.isArray(t))return null;const r=[];for(const o of t){if(!o||typeof o!="object")continue;const s=o;if(typeof s.name!="string")continue;const c=[];if(Array.isArray(s.products))for(const u of s.products){const p=T(u);p&&c.push(p)}const l={name:s.name,products:c};typeof s.highlight=="string"&&(l.highlight=s.highlight),r.push(l)}const i={groups:r,onClick:e.onClick,onAddToCart:e.onAddToCart,i18n:e.i18n};return e.discountType!==void 0&&(i.discountType=e.discountType),e.renderCard!==void 0&&(i.renderCard=e.renderCard),U(i)},EmptyState:({element:n,context:e})=>{const t=document.createElement("div");t.className="gengage-simrel-empty";const r=n.props?.message;return t.textContent=typeof r=="string"?r:e.i18n.emptyStateMessage,t},AddToCartButton:({element:n,context:e})=>{const t=n.props?.sku,r=n.props?.cartCode;if(typeof t!="string"||typeof r!="string")return null;const i=document.createElement("button");i.className="gengage-simrel-atc",i.type="button";const o=n.props?.label;return i.textContent=typeof o=="string"?o:e.i18n.addToCartButton,i.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation(),e.onAddToCart({sku:t,quantity:1,cartCode:r})}),i},QuickActions:({element:n,context:e})=>{const t=document.createElement("div");t.className="gengage-simrel-quick-actions";const r=n.props?.actions;if(!Array.isArray(r)||!e.onAction)return t;for(const i of r){if(!i||typeof i!="object")continue;const o=i,s=o.label,c=x(o.action);if(typeof s!="string"||!c)continue;const l=document.createElement("button");l.className="gengage-simrel-quick-action",l.type="button",l.textContent=s,l.addEventListener("click",u=>{u.preventDefault(),u.stopPropagation(),e.onAction?.(c)}),t.appendChild(l)}return t}},C=({element:n,renderElement:e})=>{if(!n.children||n.children.length===0)return null;const t=document.createElement("div");for(const r of n.children){const i=e(r);i&&t.appendChild(i)}return t};function S(){return{..._}}function k(n,e,t=_,r=C){return a.renderUISpecWithRegistry({spec:n,context:e,registry:t,containerClassName:"gengage-simrel-uispec",unknownRenderer:r})}const P={similarProductsAriaLabel:"Benzer ürünler",emptyStateMessage:"Benzer ürün bulunamadı.",addToCartButton:"Sepete Ekle",priceSuffix:" TL"},L={similarProductsAriaLabel:"Similar products",emptyStateMessage:"No similar products found.",addToCartButton:"Add to cart",priceSuffix:""};function G(n){return n?n.toLowerCase().split("-")[0]??"tr":"tr"}function j(n){return G(n)==="en"?L:P}const M=a.objectType({sku:a.stringType(),name:a.stringType(),imageUrl:a.stringType().url().optional(),price:a.stringType().optional(),originalPrice:a.stringType().optional(),discountPercent:a.numberType().optional(),url:a.stringType().url(),brand:a.stringType().optional(),rating:a.numberType().min(0).max(5).optional(),reviewCount:a.numberType().int().nonnegative().optional()}),O=a.objectType({layout:a.enumType(["grid","carousel"]).optional(),columns:a.numberType().int().positive().optional()}),B=a.objectType({product:M,index:a.numberType().int().nonnegative(),discountType:a.enumType(["strike-through","badge"]).optional()}),q=a.objectType({sku:a.stringType(),label:a.stringType().optional(),cartCode:a.stringType()}),D=a.objectType({actions:a.arrayType(a.objectType({label:a.stringType(),action:a.objectType({title:a.stringType(),type:a.stringType(),payload:a.unknownType().optional()})}))}),z=a.objectType({message:a.stringType().optional()}),H={components:{ProductGrid:{schema:O,description:"Outer grid or carousel container for similar products."},ProductCard:{schema:B,description:"A single product card with image, title, price, and actions."},AddToCartButton:{schema:q,description:"Add-to-cart CTA rendered inside or below a product card."},QuickActions:{schema:D,description:"A row of quick-action buttons below product info."},EmptyState:{schema:z,description:"Empty state shown when no similar products are available."}}};class A extends a.BaseWidget{constructor(){super(...arguments),this._abortController=null,this._contentEl=null,this._i18n=P}async onInit(e){this._i18n=this._resolveI18n(e),this._contentEl=document.createElement("div"),this._contentEl.className="gengage-simrel-container",this.root.appendChild(this._contentEl),this._lastSku=e.sku,await this._fetchAndRender(e.sku),this.isVisible=!0}onUpdate(e){const t=e.sku;!t||t===this._lastSku||(this._lastSku=t,this._fetchAndRender(t))}onShow(){this._contentEl&&(this._contentEl.style.opacity="0",this._contentEl.style.transition="opacity 0.3s ease-in",requestAnimationFrame(()=>{this._contentEl&&(this._contentEl.style.opacity="1")}))}onHide(){}onDestroy(){this._abort(),this._contentEl&&(this._contentEl.remove(),this._contentEl=null)}_handleProductClick(e){const t={sku:e.sku,name:e.name,url:e.url};if(e.imageUrl!==void 0&&(t.imageUrl=e.imageUrl),e.price!==void 0&&(t.price=e.price),e.originalPrice!==void 0&&(t.originalPrice=e.originalPrice),e.discountPercent!==void 0&&(t.discountPercent=e.discountPercent),e.brand!==void 0&&(t.brand=e.brand),e.rating!==void 0&&(t.rating=e.rating),e.reviewCount!==void 0&&(t.reviewCount=e.reviewCount),e.cartCode!==void 0&&(t.cartCode=e.cartCode),e.inStock!==void 0&&(t.inStock=e.inStock),this.config.onProductClick?.(t)===!1)return;const r=this.config.session?.sessionId??null;a.dispatch("gengage:similar:product-click",{sku:e.sku,url:e.url,sessionId:r}),this.config.onProductNavigate?.(e.url,e.sku,r)}_handleAddToCart(e){this.config.onAddToCart?.(e),a.dispatch("gengage:similar:add-to-cart",e),this.track(a.basketAddEvent(this.analyticsContext(),{attribution_source:"simrel",attribution_action_id:crypto.randomUUID(),cart_value:0,currency:"TRY",line_items:e.quantity,sku:e.sku}))}_abort(){this._abortController?.abort(),this._abortController=null}async _fetchAndRender(e){if(this._abort(),this._abortController=new AbortController,!this._contentEl)return;this._contentEl.innerHTML="";const t=document.createElement("div");t.className="gengage-simrel-loading";const r=document.createElement("div");r.className="gengage-simrel-spinner",t.appendChild(r),this._contentEl.appendChild(t);const i={middlewareUrl:this.config.middlewareUrl},o=crypto.randomUUID(),s=Date.now();this.track(a.streamStartEvent(this.analyticsContext(),{endpoint:"similar_products",request_id:o,widget:"simrel"}));try{const c={account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",sku:e};this.config.domain!==void 0&&(c.domain=this.config.domain);const l=await R(c,i,this._abortController.signal);if(!this._contentEl)return;if(this._contentEl.innerHTML="",l.length>0)try{const u=l.map(g=>g.sku),p=await I({account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",skus:u},i,this._abortController.signal);if(p.length>0&&this._contentEl){const g=this._buildGroupsSpec(p),m=this._renderUISpec(g);this._contentEl.appendChild(m);return}}catch{}if(this._contentEl){const u=this._buildProductsSpec(l),p=this._renderUISpec(u);this._contentEl.appendChild(p)}this.track(a.streamDoneEvent(this.analyticsContext(),{request_id:o,latency_ms:Date.now()-s,chunk_count:l.length,widget:"simrel"})),this.track(a.widgetHistorySnapshotEvent(this.analyticsContext(),{message_count:l.length,history_ref:o,redaction_level:"none",widget:"simrel"}))}catch(c){if(c instanceof DOMException&&c.name==="AbortError")return;a.dispatch("gengage:global:error",{source:"simrel",code:"FETCH_ERROR",message:a.getGlobalErrorMessage(this.config.locale)}),this.track(a.streamErrorEvent(this.analyticsContext(),{request_id:o,error_code:"FETCH_ERROR",error_message:c instanceof Error?c.message:String(c),widget:"simrel"})),this._contentEl&&(this._contentEl.innerHTML="",this._contentEl.style.display="none")}}_resolveI18n(e){return{...j(e.locale),...e.i18n}}_resolveUISpecRegistry(){const e=S();return a.mergeUISpecRegistry(e,this.config.renderer?.registry)}_buildRenderContext(){const e=this.config.renderCard,t={onClick:r=>this._handleProductClick(r),onAddToCart:r=>this._handleAddToCart(r),i18n:this._i18n};return this.config.discountType!==void 0&&(t.discountType=this.config.discountType),e!==void 0&&(t.renderCard=e),t}_renderUISpec(e){const t=this._resolveUISpecRegistry(),r=this._buildRenderContext(),i=this.config.renderer?.unknownRenderer??C,o=(l,u)=>k(l,u,t,i),s=this.config.renderer?.renderUISpec;return s?s(e,r,{registry:t,unknownRenderer:i,defaultRender:o}):o(e,r)}_buildProductsSpec(e){const t={},r=[];for(let i=0;i<e.length;i++){const o=e[i],s=`product-${i}`;r.push(s),t[s]={type:"ProductCard",props:{product:o,index:i,discountType:this.config.discountType}}}return t.root={type:"ProductGrid",props:{layout:"grid"},children:r},{root:"root",elements:t}}_buildGroupsSpec(e){return{root:"root",elements:{root:{type:"GroupTabs",props:{groups:e}}}}}}function F(){return new A}exports.GengageSimRel=A;exports.createDefaultSimRelUISpecRegistry=S;exports.createSimRelWidget=F;exports.defaultSimRelUnknownUISpecRenderer=C;exports.renderSimRelUISpec=k;exports.simRelCatalog=H;
2
+ //# sourceMappingURL=simrel.cjs.map