@gengage/assistant-fe 0.1.8 → 0.2.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 (138) hide show
  1. package/README.md +79 -286
  2. package/dist/assistant-fe.css +1 -1
  3. package/dist/chat/api.d.ts +1 -12
  4. package/dist/chat/api.d.ts.map +1 -1
  5. package/dist/chat/components/CategoriesContainer.d.ts.map +1 -1
  6. package/dist/chat/components/ChatDrawer.d.ts +15 -1
  7. package/dist/chat/components/ChatDrawer.d.ts.map +1 -1
  8. package/dist/chat/components/ChoicePrompter.d.ts +1 -0
  9. package/dist/chat/components/ChoicePrompter.d.ts.map +1 -1
  10. package/dist/chat/components/ComparisonTable.d.ts +5 -3
  11. package/dist/chat/components/ComparisonTable.d.ts.map +1 -1
  12. package/dist/chat/components/PanelTopBar.d.ts +2 -0
  13. package/dist/chat/components/PanelTopBar.d.ts.map +1 -1
  14. package/dist/chat/components/ProductSummaryCard.d.ts.map +1 -1
  15. package/dist/chat/components/ReviewHighlights.d.ts +3 -0
  16. package/dist/chat/components/ReviewHighlights.d.ts.map +1 -1
  17. package/dist/chat/components/renderUISpec.d.ts +0 -5
  18. package/dist/chat/components/renderUISpec.d.ts.map +1 -1
  19. package/dist/chat/index.d.ts +18 -9
  20. package/dist/chat/index.d.ts.map +1 -1
  21. package/dist/chat/locales/en.d.ts.map +1 -1
  22. package/dist/chat/locales/tr.d.ts.map +1 -1
  23. package/dist/chat/session-persistence.d.ts +3 -0
  24. package/dist/chat/session-persistence.d.ts.map +1 -1
  25. package/dist/chat/types.d.ts +23 -25
  26. package/dist/chat/types.d.ts.map +1 -1
  27. package/dist/chat.cjs +1 -1
  28. package/dist/chat.iife.js +22 -22
  29. package/dist/chat.iife.js.map +1 -1
  30. package/dist/chat.js +8 -9
  31. package/dist/chat.js.map +1 -1
  32. package/dist/common/action-router.d.ts.map +1 -1
  33. package/dist/common/activity-tracker.d.ts +1 -1
  34. package/dist/common/analytics.d.ts +12 -8
  35. package/dist/common/analytics.d.ts.map +1 -1
  36. package/dist/common/api-paths.d.ts +2 -5
  37. package/dist/common/api-paths.d.ts.map +1 -1
  38. package/dist/common/config-schema.d.ts.map +1 -1
  39. package/dist/common/debug.d.ts +14 -0
  40. package/dist/common/debug.d.ts.map +1 -0
  41. package/dist/common/events.d.ts.map +1 -1
  42. package/dist/common/index.d.ts +2 -2
  43. package/dist/common/index.d.ts.map +1 -1
  44. package/dist/common/native-webview.d.ts.map +1 -1
  45. package/dist/common/overlay.d.ts +19 -0
  46. package/dist/common/overlay.d.ts.map +1 -1
  47. package/dist/common/product-utils.d.ts +10 -0
  48. package/dist/common/product-utils.d.ts.map +1 -1
  49. package/dist/common/{v1-protocol-adapter.d.ts → protocol-adapter.d.ts} +2 -2
  50. package/dist/common/protocol-adapter.d.ts.map +1 -0
  51. package/dist/common/quantity-stepper.d.ts +10 -10
  52. package/dist/common/quantity-stepper.d.ts.map +1 -1
  53. package/dist/common/safe-html.d.ts.map +1 -1
  54. package/dist/common/streaming.d.ts.map +1 -1
  55. package/dist/common/tts-player.d.ts +2 -0
  56. package/dist/common/tts-player.d.ts.map +1 -1
  57. package/dist/common/types.d.ts +1 -1
  58. package/dist/common/voice-input.d.ts +1 -0
  59. package/dist/common/voice-input.d.ts.map +1 -1
  60. package/dist/common/widget-base.d.ts.map +1 -1
  61. package/dist/common.cjs +1 -1
  62. package/dist/common.cjs.map +1 -1
  63. package/dist/common.js +173 -172
  64. package/dist/common.js.map +1 -1
  65. package/dist/index-BA7N_XOO.cjs +2 -0
  66. package/dist/index-BA7N_XOO.cjs.map +1 -0
  67. package/dist/{index-CcOJTzYu.js → index-C6KDzSjm.js} +155 -159
  68. package/dist/index-C6KDzSjm.js.map +1 -0
  69. package/dist/index-RmQRBt6w.js +4449 -0
  70. package/dist/index-RmQRBt6w.js.map +1 -0
  71. package/dist/index-VgLdYuZV.cjs +13 -0
  72. package/dist/index-VgLdYuZV.cjs.map +1 -0
  73. package/dist/index.cjs +1 -1
  74. package/dist/index.js +16 -16
  75. package/dist/native.cjs +1 -1
  76. package/dist/native.iife.js +23 -23
  77. package/dist/native.iife.js.map +1 -1
  78. package/dist/native.js +1 -1
  79. package/dist/qna/index.d.ts +19 -0
  80. package/dist/qna/index.d.ts.map +1 -1
  81. package/dist/qna/types.d.ts +2 -2
  82. package/dist/qna/types.d.ts.map +1 -1
  83. package/dist/qna.cjs +1 -1
  84. package/dist/qna.cjs.map +1 -1
  85. package/dist/qna.css +1 -1
  86. package/dist/qna.iife.js +7 -7
  87. package/dist/qna.iife.js.map +1 -1
  88. package/dist/qna.js +14 -14
  89. package/dist/qna.js.map +1 -1
  90. package/dist/quantity-stepper-BKtPQUR1.js +78 -0
  91. package/dist/quantity-stepper-BKtPQUR1.js.map +1 -0
  92. package/dist/quantity-stepper-DU6va4sS.cjs +2 -0
  93. package/dist/quantity-stepper-DU6va4sS.cjs.map +1 -0
  94. package/dist/{schemas-yF4IOEUi.js → schemas-BAEbjFPE.js} +1181 -957
  95. package/dist/schemas-BAEbjFPE.js.map +1 -0
  96. package/dist/schemas-DIyHm5pa.cjs +86 -0
  97. package/dist/schemas-DIyHm5pa.cjs.map +1 -0
  98. package/dist/simrel/api.d.ts +1 -1
  99. package/dist/simrel/api.d.ts.map +1 -1
  100. package/dist/simrel/components/GroupTabs.d.ts +1 -1
  101. package/dist/simrel/components/GroupTabs.d.ts.map +1 -1
  102. package/dist/simrel/components/ProductCard.d.ts +1 -1
  103. package/dist/simrel/components/ProductCard.d.ts.map +1 -1
  104. package/dist/simrel/components/ProductGrid.d.ts +1 -1
  105. package/dist/simrel/components/ProductGrid.d.ts.map +1 -1
  106. package/dist/simrel/index.d.ts +20 -1
  107. package/dist/simrel/index.d.ts.map +1 -1
  108. package/dist/simrel/locales/en.d.ts.map +1 -1
  109. package/dist/simrel/locales/tr.d.ts.map +1 -1
  110. package/dist/simrel/types.d.ts +2 -0
  111. package/dist/simrel/types.d.ts.map +1 -1
  112. package/dist/simrel.cjs +1 -1
  113. package/dist/simrel.cjs.map +1 -1
  114. package/dist/simrel.css +1 -1
  115. package/dist/simrel.iife.js +11 -11
  116. package/dist/simrel.iife.js.map +1 -1
  117. package/dist/simrel.js +281 -267
  118. package/dist/simrel.js.map +1 -1
  119. package/package.json +1 -1
  120. package/dist/chat/components/ProactivePopup.d.ts +0 -20
  121. package/dist/chat/components/ProactivePopup.d.ts.map +0 -1
  122. package/dist/chat/heartbeat.d.ts +0 -71
  123. package/dist/chat/heartbeat.d.ts.map +0 -1
  124. package/dist/common/v1-protocol-adapter.d.ts.map +0 -1
  125. package/dist/index-BqIzV4ni.cjs +0 -2
  126. package/dist/index-BqIzV4ni.cjs.map +0 -1
  127. package/dist/index-CcOJTzYu.js.map +0 -1
  128. package/dist/index-DZ3Mi5xF.cjs +0 -13
  129. package/dist/index-DZ3Mi5xF.cjs.map +0 -1
  130. package/dist/index-FnP8WtfG.js +0 -4571
  131. package/dist/index-FnP8WtfG.js.map +0 -1
  132. package/dist/quantity-stepper-B8kX8GbN.js +0 -209
  133. package/dist/quantity-stepper-B8kX8GbN.js.map +0 -1
  134. package/dist/quantity-stepper-UbAp53Ow.cjs +0 -2
  135. package/dist/quantity-stepper-UbAp53Ow.cjs.map +0 -1
  136. package/dist/schemas-DHzfUzwA.cjs +0 -86
  137. package/dist/schemas-DHzfUzwA.cjs.map +0 -1
  138. package/dist/schemas-yF4IOEUi.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { NormalizedProduct } from '../common/v1-protocol-adapter.js';
1
+ import { NormalizedProduct } from '../common/protocol-adapter.js';
2
2
  import { ChatTransportConfig } from '../common/api-paths.js';
3
3
  export interface SimilarProductsRequest {
4
4
  account_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/simrel/api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AA6BD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,EAAE,mBAAmB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B;AAuCD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,mBAAmB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA0BzB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/simrel/api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAmCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,EAAE,mBAAmB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B;AAgCD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,mBAAmB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CA0BzB"}
@@ -1,4 +1,4 @@
1
- import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
1
+ import { NormalizedProduct } from '../../common/protocol-adapter.js';
2
2
  import { ProductGroup } from '../api.js';
3
3
  import { SimRelI18n } from '../types.js';
4
4
  export interface GroupTabsOptions {
@@ -1 +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;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAqHtE"}
1
+ {"version":3,"file":"GroupTabs.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/GroupTabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,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;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAqHtE"}
@@ -1,4 +1,4 @@
1
- import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
1
+ import { NormalizedProduct } from '../../common/protocol-adapter.js';
2
2
  import { SimRelI18n } from '../types.js';
3
3
  import { PriceFormatConfig } from '../../common/price-formatter.js';
4
4
  export interface ProductCardOptions {
@@ -1 +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;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAMzE,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;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA0I1E"}
1
+ {"version":3,"file":"ProductCard.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/ProductCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAMzE,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;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+I1E"}
@@ -1,4 +1,4 @@
1
- import { NormalizedProduct } from '../../common/v1-protocol-adapter.js';
1
+ import { NormalizedProduct } from '../../common/protocol-adapter.js';
2
2
  import { SimRelI18n } from '../types.js';
3
3
  export interface ProductGridOptions {
4
4
  products: NormalizedProduct[];
@@ -1 +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"}
1
+ {"version":3,"file":"ProductGrid.d.ts","sourceRoot":"","sources":["../../../src/simrel/components/ProductGrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,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"}
@@ -1,7 +1,26 @@
1
1
  import { PageContext } from '../common/types.js';
2
- import { NormalizedProduct } from '../common/v1-protocol-adapter.js';
2
+ import { NormalizedProduct } from '../common/protocol-adapter.js';
3
3
  import { BaseWidget } from '../common/widget-base.js';
4
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: 'https://chat.gengage.ai',
17
+ * sku: '12345',
18
+ * mountTarget: '#similar-products',
19
+ * session: { sessionId: bootstrapSession() },
20
+ * onAddToCart: ({ sku, quantity }) => cart.add(sku, quantity),
21
+ * });
22
+ * ```
23
+ */
5
24
  export declare class GengageSimRel extends BaseWidget<SimRelWidgetConfig> {
6
25
  private _abortController;
7
26
  private _contentEl;
@@ -1 +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;AAI5G,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;IAajE,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;IA6BrD,gBAAgB,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqBnF,OAAO,CAAC,MAAM;YAKA,eAAe;IAuJ7B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;IAa3B,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"}
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,+BAA+B,CAAC;AAIvE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAgBtD,OAAO,KAAK,EAAE,kBAAkB,EAAyD,MAAM,YAAY,CAAC;AAI5G,OAAO,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,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;IAajE,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;IA6BrD,gBAAgB,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqBnF,OAAO,CAAC,MAAM;YAKA,eAAe;IAuK7B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,mBAAmB;IAa3B,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"}
@@ -1 +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"}
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,UAO5B,CAAC"}
@@ -1 +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"}
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,UAO5B,CAAC"}
@@ -62,6 +62,8 @@ export interface SimRelI18n {
62
62
  similarProductsAriaLabel: string;
63
63
  emptyStateMessage: string;
64
64
  addToCartButton: string;
65
+ ctaLabel: string;
66
+ outOfStockLabel: string;
65
67
  /**
66
68
  * @deprecated Prefer `pricing` config on the widget for locale-aware formatting.
67
69
  * Kept for backwards compatibility with existing custom integrations.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/simrel/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IAEZ,kDAAkD;IAClD,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC;IAMlC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEpF;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC;IAE7D;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEjF,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAM1E;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAEhE,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC;IAE/D,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,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,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,8BAA8B,EAAE,iBAAiB,CAAC;CACpE;AAED,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,yBAAyB,CAAC,CAAC;AAMtF,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,WAAW,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,yCAAyC;IACzC,WAAW,EAAE;QACX,OAAO,EAAE,cAAc,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;KAC3C,CAAC;IAEF,wCAAwC;IACxC,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,8DAA8D;IAC9D,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,aAAa,CAAA;SAAE,CAAC,CAAC;KAC1D,CAAC;IAEF,4DAA4D;IAC5D,UAAU,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/simrel/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IAEZ,kDAAkD;IAClD,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC;IAMlC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEpF;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,IAAI,CAAC;IAE7D;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAEjF,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAM1E;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAEhE,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC;IAE/D,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,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,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,8BAA8B,EAAE,iBAAiB,CAAC;CACpE;AAED,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,yBAAyB,CAAC,CAAC;AAMtF,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,WAAW,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,yCAAyC;IACzC,WAAW,EAAE;QACX,OAAO,EAAE,cAAc,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;KAC3C,CAAC;IAEF,wCAAwC;IACxC,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,8DAA8D;IAC9D,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,aAAa,CAAA;SAAE,CAAC,CAAC;KAC1D,CAAC;IAEF,4DAA4D;IAC5D,UAAU,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
package/dist/simrel.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./schemas-DHzfUzwA.cjs"),b=require("./quantity-stepper-UbAp53Ow.cjs");function S(n){const e=n.headers.get("Content-Type")??"";return e.includes("application/x-ndjson")||e.includes("text/event-stream")}async function I(n,e){const t=[],r={onEvent:i=>{const o=c.adaptV1Event(i);if(!(!o||o.type!=="ui_spec")){for(const s of Object.values(o.spec.elements))if(s.type==="ProductCard"&&s.props){const g=s.props.product??s.props;typeof g.sku=="string"&&typeof g.name=="string"&&t.push(g)}}}};return e!==void 0&&(r.signal=e),await c.consumeStream(n,r),t}async function N(n,e,t){const r=c.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(S(o))return I(o,t);const s=await o.text();if(!s)return[];try{return c.normalizeSimilarProductsResponse(JSON.parse(s))}catch{throw new Error("Invalid JSON from similar_products endpoint")}}async function U(n,e){const t=[];let r=null;const i={onEvent:o=>{const s=c.adaptV1Event(o);if(s){if(s.type==="metadata"&&s.meta){const g=s.meta.group_name;if(typeof g=="string"){r={name:g,products:[]};const l=s.meta.highlight;typeof l=="string"&&(r.highlight=l),t.push(r)}}if(s.type==="ui_spec"&&r){for(const g of Object.values(s.spec.elements))if(g.type==="ProductCard"&&g.props){const l=g.props.product??g.props;typeof l.sku=="string"&&typeof l.name=="string"&&r.products.push(l)}}}}};return e!==void 0&&(i.signal=e),await c.consumeStream(n,i),t}async function x(n,e,t){const r=c.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(S(o))return U(o,t);const s=await o.text();if(!s)return[];try{return c.normalizeProductGroupingsResponse(JSON.parse(s))}catch{throw new Error("Invalid JSON from product_groupings endpoint")}}function k(n){const{product:e,index:t,discountType:r,onClick:i,onAddToCart:o,renderCard:s}=n,g=n.i18n,l=n.pricing;if(s){const a=document.createElement("div");return a.className="gengage-simrel-card gengage-simrel-card--custom",a.innerHTML=b.sanitizeHtml(s(e,t)),a.addEventListener("click",h=>{h.target.closest(".gengage-simrel-atc")||h.target.closest(".gengage-chat-product-card-atc")||i(e)}),a}const p=document.createElement("article");p.className="gengage-simrel-card gengage-chat-product-card",p.setAttribute("role","listitem"),p.dataset.sku=e.sku;const d=document.createElement("div");if(d.className="gengage-simrel-card-image gengage-chat-product-card-img-wrapper",e.imageUrl&&b.isSafeImageUrl(e.imageUrl)){const a=document.createElement("img");a.className="gengage-chat-product-card-img",a.src=e.imageUrl,a.alt=e.name,a.loading="lazy",b.addImageErrorHandler(a),d.appendChild(a)}if(r==="badge"&&e.discountPercent&&e.discountPercent>0){const a=document.createElement("span");a.className="gengage-simrel-badge gengage-chat-product-card-discount-badge",a.textContent=`%${b.clampDiscount(e.discountPercent)}`,d.appendChild(a)}p.appendChild(d);const m=document.createElement("div");if(m.className="gengage-simrel-card-info gengage-chat-product-card-body",e.brand){const a=document.createElement("div");a.className="gengage-simrel-card-brand gengage-chat-product-card-brand",a.textContent=e.brand,m.appendChild(a)}const f=document.createElement("div");if(f.className="gengage-simrel-card-name gengage-chat-product-card-name",f.textContent=e.name,m.appendChild(f),e.rating!=null&&e.rating>0){const a=document.createElement("div");if(a.className="gengage-simrel-card-rating gengage-chat-product-card-rating",a.textContent=b.renderStarRating(e.rating),e.reviewCount!=null){const h=document.createElement("span");h.className="gengage-simrel-card-review-count gengage-chat-product-card-review-count",h.textContent=` (${e.reviewCount})`,a.appendChild(h)}m.appendChild(a)}const y=document.createElement("div");if(y.className="gengage-simrel-card-price gengage-chat-product-card-price",e.originalPrice&&e.originalPrice!==e.price&&(r==="strike-through"||!r)){const a=document.createElement("span");a.className="gengage-simrel-card-price-original gengage-chat-product-card-original-price",a.textContent=b.formatPrice(e.originalPrice,l),y.appendChild(a)}if(e.price){const a=document.createElement("span");a.className="gengage-simrel-card-price-current gengage-chat-product-card-price-current",a.textContent=b.formatPrice(e.price,l),y.appendChild(a)}m.appendChild(y),p.appendChild(m);const u=document.createElement("button");if(u.className="gengage-simrel-card-cta gengage-chat-product-card-cta",u.type="button",u.textContent="İncele",u.addEventListener("click",a=>{a.preventDefault(),a.stopPropagation(),i(e)}),p.appendChild(u),e.cartCode&&e.inStock!==!1){const a=e.cartCode,h=b.createQuantityStepper({compact:!0,label:g?.addToCartButton??"Sepete Ekle",onSubmit:C=>{o({sku:e.sku,quantity:C,cartCode:a})}});h.classList.add("gengage-simrel-atc","gengage-chat-product-card-atc"),p.appendChild(h)}return p.addEventListener("click",a=>{a.target.closest(".gengage-simrel-atc")||a.target.closest(".gengage-chat-product-card-atc")||a.target.closest(".gengage-chat-product-card-cta")||i(e)}),p}function E(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=k(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}let L=0;function j(n){const e=L++,t=document.createElement("div");if(t.className="gengage-simrel-groups",n.groups.length===0){const d=document.createElement("div");return d.className="gengage-simrel-empty",d.textContent=n.i18n?.emptyStateMessage??"Benzer ürün bulunamadı.",t.appendChild(d),t}const r=document.createElement("div");r.className="gengage-simrel-tabs",r.setAttribute("role","tablist");const i=[],o=[],s=d=>{const m={products:d.products,onClick:n.onClick,onAddToCart:n.onAddToCart};return n.i18n!==void 0&&(m.i18n=n.i18n),n.discountType!==void 0&&(m.discountType=n.discountType),n.renderCard!==void 0&&(m.renderCard=n.renderCard),m},g=d=>{for(let u=0;u<i.length;u++){const a=u===d;i[u].classList.toggle("gengage-simrel-tab--active",a),i[u].setAttribute("aria-selected",String(a)),i[u].tabIndex=a?0:-1}const m=n.groups[d],f=o[d];f.innerHTML="";const y=E(s(m));f.appendChild(y);for(let u=0;u<o.length;u++){const a=u===d;o[u].style.display=a?"":"none",o[u].tabIndex=a?0:-1}};for(let d=0;d<n.groups.length;d++){const m=n.groups[d],f=`gengage-simrel-tab-${e}-${d}`,y=`gengage-simrel-panel-${e}-${d}`,u=document.createElement("button");u.className="gengage-simrel-tab",u.type="button",u.id=f,u.textContent=m.name,u.setAttribute("role","tab"),u.setAttribute("aria-controls",y),u.setAttribute("aria-selected",String(d===0)),u.tabIndex=d===0?0:-1,d===0&&u.classList.add("gengage-simrel-tab--active"),u.addEventListener("click",()=>g(d)),u.addEventListener("keydown",h=>{let C=-1;h.key==="ArrowRight"||h.key==="ArrowDown"?C=(d+1)%n.groups.length:h.key==="ArrowLeft"||h.key==="ArrowUp"?C=(d-1+n.groups.length)%n.groups.length:h.key==="Home"?C=0:h.key==="End"&&(C=n.groups.length-1),C>=0&&(h.preventDefault(),g(C),i[C].focus())}),i.push(u),r.appendChild(u);const a=document.createElement("div");a.className="gengage-simrel-tab-panel",a.id=y,a.setAttribute("role","tabpanel"),a.setAttribute("aria-labelledby",f),a.tabIndex=d===0?0:-1,d!==0&&(a.style.display="none"),o.push(a)}t.appendChild(r);const l=o[0],p=E(s(n.groups[0]));l.appendChild(p);for(const d of o)t.appendChild(d);return t}function _(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 g=e.brand;typeof g=="string"&&(t.brand=g);const l=e.rating;typeof l=="number"&&(t.rating=l);const p=e.reviewCount;typeof p=="number"&&(t.reviewCount=p);const d=e.cartCode;typeof d=="string"&&(t.cartCode=d);const m=e.inStock;return typeof m=="boolean"&&(t.inStock=m),t}function G(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 w={ProductGrid:({element:n,renderElement:e,context:t})=>{const r=document.createElement("div");r.className="gengage-simrel-grid",r.setAttribute("role","list");const i=n.props?.columns;typeof i=="number"&&Number.isFinite(i)&&i>0&&r.style.setProperty("--gengage-simrel-columns",String(i));for(const o of n.children??[]){const s=e(o);s&&r.appendChild(s)}if(r.children.length===0){const o=document.createElement("div");o.className="gengage-simrel-empty",o.textContent=t.i18n.emptyStateMessage,r.appendChild(o)}return r},ProductCard:({element:n,context:e})=>{const t=n.props?.product??n.props,r=_(t);if(!r)return null;const i=n.props?.index,o=typeof i=="number"&&Number.isFinite(i)?i:0,s=n.props?.discountType,g=s==="strike-through"||s==="badge"?s:e.discountType,l={product:r,index:o,onClick:e.onClick,onAddToCart:e.onAddToCart,i18n:e.i18n};return g!==void 0&&(l.discountType=g),e.renderCard!==void 0&&(l.renderCard=e.renderCard),e.pricing!==void 0&&(l.pricing=e.pricing),k(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 g=[];if(Array.isArray(s.products))for(const p of s.products){const d=_(p);d&&g.push(d)}const l={name:s.name,products:g};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),j(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 gengage-chat-product-card-cta",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,g=G(o.action);if(typeof s!="string"||!g)continue;const l=document.createElement("button");l.className="gengage-simrel-quick-action",l.type="button",l.textContent=s,l.addEventListener("click",p=>{p.preventDefault(),p.stopPropagation(),e.onAction?.(g)}),t.appendChild(l)}return t}},v=({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 T(){return{...w}}function P(n,e,t=w,r=v){return c.renderUISpecWithRegistry({spec:n,context:e,registry:t,containerClassName:"gengage-simrel-uispec",unknownRenderer:r})}const A={similarProductsAriaLabel:"Benzer ürünler",emptyStateMessage:"Benzer ürün bulunamadı.",addToCartButton:"Sepete Ekle",priceSuffix:" TL"},D={similarProductsAriaLabel:"Similar products",emptyStateMessage:"No similar products found.",addToCartButton:"Add to cart",priceSuffix:""};function O(n){return n?n.toLowerCase().split("-")[0]??"tr":"tr"}function M(n){return O(n)==="en"?D:A}const q=c.object({sku:c.string(),name:c.string(),imageUrl:c.string().url().optional(),price:c.string().optional(),originalPrice:c.string().optional(),discountPercent:c.number().optional(),url:c.string().url(),brand:c.string().optional(),rating:c.number().min(0).max(5).optional(),reviewCount:c.number().int().nonnegative().optional()}),H=c.object({layout:c._enum(["grid","carousel"]).optional(),columns:c.number().int().positive().optional()}),B=c.object({product:q,index:c.number().int().nonnegative(),discountType:c._enum(["strike-through","badge"]).optional()}),z=c.object({sku:c.string(),label:c.string().optional(),cartCode:c.string()}),$=c.object({actions:c.array(c.object({label:c.string(),action:c.object({title:c.string(),type:c.string(),payload:c.unknown().optional()})}))}),F=c.object({message:c.string().optional()}),J={components:{ProductGrid:{schema:H,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:z,description:"Add-to-cart CTA rendered inside or below a product card."},QuickActions:{schema:$,description:"A row of quick-action buttons below product info."},EmptyState:{schema:F,description:"Empty state shown when no similar products are available."}}};class R extends c.BaseWidget{constructor(){super(...arguments),this._abortController=null,this._contentEl=null,this._i18n=A}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,c.trackInit("simrel")}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;c.trackProductDetail(e.sku,e.name);const r=this.config.session?.sessionId??null;c.dispatch("gengage:similar:product-click",{sku:e.sku,url:e.url,sessionId:r}),this.config.onProductNavigate?.(e.url,e.sku,r)}_handleAddToCart(e){c.trackCartAdd(e.sku,e.quantity),this.config.onAddToCart?.(e),c.dispatch("gengage:similar:add-to-cart",e),this.track(c.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){this._abort(),this._abortController=new AbortController;const t=this._abortController.signal;if(!this._contentEl)return;this._contentEl.innerHTML="",this._contentEl.style.display="";const r=document.createElement("div");r.className="gengage-simrel-loading";const i=document.createElement("div");i.className="gengage-simrel-spinner",r.appendChild(i),this._contentEl.appendChild(r);const o={middlewareUrl:this.config.middlewareUrl},s=crypto.randomUUID(),g=Date.now();this.track(c.streamStartEvent(this.analyticsContext(),{endpoint:"similar_products",request_id:s,widget:"simrel"}));try{const l={account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",sku:e};this.config.domain!==void 0&&(l.domain=this.config.domain);const p=await N(l,o,t);if(!this._contentEl)return;if(this._contentEl.innerHTML="",p.length>0)try{const d=p.map(f=>f.sku),m=await x({account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",skus:d},o,t);if(m.length>0&&this._contentEl){const f=this._buildGroupsSpec(m),y=this._renderUISpec(f);this._contentEl.appendChild(y),c.trackShow("simrel"),this.track(c.streamDoneEvent(this.analyticsContext(),{request_id:s,latency_ms:Date.now()-g,chunk_count:m.reduce((u,a)=>u+a.products.length,0),widget:"simrel"})),this.track(c.widgetHistorySnapshotEvent(this.analyticsContext(),{message_count:m.reduce((u,a)=>u+a.products.length,0),history_ref:s,redaction_level:"none",widget:"simrel"}));return}}catch{}if(this._contentEl){const d=this._buildProductsSpec(p),m=this._renderUISpec(d);this._contentEl.appendChild(m)}p.length>0&&c.trackShow("simrel"),this.track(c.streamDoneEvent(this.analyticsContext(),{request_id:s,latency_ms:Date.now()-g,chunk_count:p.length,widget:"simrel"})),this.track(c.widgetHistorySnapshotEvent(this.analyticsContext(),{message_count:p.length,history_ref:s,redaction_level:"none",widget:"simrel"}))}catch(l){if(l instanceof DOMException&&l.name==="AbortError")return;c.dispatch("gengage:global:error",{source:"simrel",code:"FETCH_ERROR",message:c.getGlobalErrorMessage(this.config.locale)}),this.track(c.streamErrorEvent(this.analyticsContext(),{request_id:s,error_code:"FETCH_ERROR",error_message:l instanceof Error?l.message:String(l),widget:"simrel"})),this._contentEl&&(this._contentEl.innerHTML="",this._contentEl.style.display="none")}}_resolveI18n(e){return{...M(e.locale),...e.i18n}}_resolveUISpecRegistry(){const e=T();return c.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),this.config.pricing!==void 0&&(t.pricing=this.config.pricing),t}_renderUISpec(e){const t=this._resolveUISpecRegistry(),r=this._buildRenderContext(),i=this.config.renderer?.unknownRenderer??v,o=(l,p)=>P(l,p,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 W(){return new R}exports.GengageSimRel=R;exports.createDefaultSimRelUISpecRegistry=T;exports.createSimRelWidget=W;exports.defaultSimRelUnknownUISpecRenderer=v;exports.renderSimRelUISpec=P;exports.simRelCatalog=J;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./schemas-DIyHm5pa.cjs"),b=require("./quantity-stepper-DU6va4sS.cjs");function S(n){const e=[];for(const t of Object.values(n))if(t.type==="ProductCard"&&t.props){const r=t.props.product??t.props;typeof r.sku=="string"&&typeof r.name=="string"&&e.push(r)}return e}function _(n){const e=n.headers.get("Content-Type")??"";return e.includes("application/x-ndjson")||e.includes("text/event-stream")}async function N(n,e){const t=[],r={onEvent:i=>{const s=a.adaptBackendEvent(i);!s||s.type!=="ui_spec"||t.push(...S(s.spec.elements))}};return e!==void 0&&(r.signal=e),await a.consumeStream(n,r),t}async function x(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 s=await fetch(r,i);if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);if(_(s))return N(s,t);const c=await s.text();if(!c)return[];try{return a.normalizeSimilarProductsResponse(JSON.parse(c))}catch{throw new Error("Invalid JSON from similar_products endpoint")}}async function U(n,e){const t=[];let r=null;const i={onEvent:s=>{const c=a.adaptBackendEvent(s);if(c){if(c.type==="metadata"&&c.meta){const m=c.meta.group_name;if(typeof m=="string"){r={name:m,products:[]};const u=c.meta.highlight;typeof u=="string"&&(r.highlight=u),t.push(r)}}c.type==="ui_spec"&&r&&r.products.push(...S(c.spec.elements))}}};return e!==void 0&&(i.signal=e),await a.consumeStream(n,i),t}async function L(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 s=await fetch(r,i);if(!s.ok)throw new Error(`HTTP ${s.status}: ${s.statusText}`);if(_(s))return U(s,t);const c=await s.text();if(!c)return[];try{return a.normalizeProductGroupingsResponse(JSON.parse(c))}catch{throw new Error("Invalid JSON from product_groupings endpoint")}}function T(n){const{product:e,index:t,discountType:r,onClick:i,onAddToCart:s,renderCard:c}=n,m=n.i18n,u=n.pricing;if(c){const o=document.createElement("div");return o.className="gengage-simrel-card gengage-simrel-card--custom",o.innerHTML=a.sanitizeHtml(c(e,t)),o.addEventListener("click",h=>{h.target.closest(".gengage-simrel-atc")||h.target.closest(".gengage-chat-product-card-atc")||i(e)}),o}const g=document.createElement("article");g.className="gengage-simrel-card gengage-chat-product-card",g.setAttribute("role","listitem"),g.dataset.sku=e.sku;const d=document.createElement("div");if(d.className="gengage-simrel-card-image gengage-chat-product-card-img-wrapper",e.imageUrl&&a.isSafeImageUrl(e.imageUrl)){const o=document.createElement("img");o.className="gengage-chat-product-card-img",o.src=e.imageUrl,o.alt=e.name,o.loading="lazy",b.addImageErrorHandler(o),d.appendChild(o)}if(r==="badge"&&e.discountPercent&&e.discountPercent>0){const o=document.createElement("span");o.className="gengage-simrel-badge gengage-chat-product-card-discount-badge",o.textContent=`%${b.clampDiscount(e.discountPercent)}`,d.appendChild(o)}g.appendChild(d);const p=document.createElement("div");if(p.className="gengage-simrel-card-info gengage-chat-product-card-body",e.brand){const o=document.createElement("div");o.className="gengage-simrel-card-brand gengage-chat-product-card-brand",o.textContent=e.brand,p.appendChild(o)}const f=document.createElement("div");if(f.className="gengage-simrel-card-name gengage-chat-product-card-name",f.textContent=e.name,p.appendChild(f),e.rating!=null&&e.rating>0){const o=document.createElement("div");if(o.className="gengage-simrel-card-rating gengage-chat-product-card-rating",o.appendChild(b.createStarRatingElement(e.rating)),e.reviewCount!=null){const h=document.createElement("span");h.className="gengage-simrel-card-review-count gengage-chat-product-card-review-count",h.textContent=` (${e.reviewCount})`,o.appendChild(h)}p.appendChild(o)}const y=document.createElement("div");if(y.className="gengage-simrel-card-price gengage-chat-product-card-price",e.originalPrice&&e.originalPrice!==e.price&&(r==="strike-through"||!r)){const o=document.createElement("span");o.className="gengage-simrel-card-price-original gengage-chat-product-card-original-price",o.textContent=b.formatPrice(e.originalPrice,u),y.appendChild(o)}if(e.price){const o=document.createElement("span");o.className="gengage-simrel-card-price-current gengage-chat-product-card-price-current",o.textContent=b.formatPrice(e.price,u),y.appendChild(o)}p.appendChild(y),g.appendChild(p);const l=document.createElement("button");if(l.className="gengage-simrel-card-cta gengage-chat-product-card-cta",l.type="button",l.textContent=m?.ctaLabel??"View",l.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),i(e)}),g.appendChild(l),e.inStock===!1){const o=document.createElement("div");o.className="gengage-simrel-card-oos",o.textContent=m?.outOfStockLabel??"Out of Stock",g.appendChild(o)}else if(e.cartCode){const o=e.cartCode,h=b.createQuantityStepper({compact:!0,label:m?.addToCartButton??"Add to Cart",onSubmit:C=>{s({sku:e.sku,quantity:C,cartCode:o})}});h.classList.add("gengage-simrel-atc"),g.appendChild(h)}return g.addEventListener("click",o=>{o.target.closest(".gengage-simrel-atc")||o.target.closest(".gengage-chat-product-card-atc")||o.target.closest(".gengage-chat-product-card-cta")||i(e)}),g}function v(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 s=T(i);e.appendChild(s)}if(n.products.length===0){const t=document.createElement("div");t.className="gengage-simrel-empty",t.textContent=n.i18n?.emptyStateMessage??"No similar products found.",e.appendChild(t)}return e}let O=0;function j(n){const e=O++,t=document.createElement("div");if(t.className="gengage-simrel-groups",n.groups.length===0){const d=document.createElement("div");return d.className="gengage-simrel-empty",d.textContent=n.i18n?.emptyStateMessage??"No similar products found.",t.appendChild(d),t}const r=document.createElement("div");r.className="gengage-simrel-tabs",r.setAttribute("role","tablist");const i=[],s=[],c=d=>{const p={products:d.products,onClick:n.onClick,onAddToCart:n.onAddToCart};return n.i18n!==void 0&&(p.i18n=n.i18n),n.discountType!==void 0&&(p.discountType=n.discountType),n.renderCard!==void 0&&(p.renderCard=n.renderCard),p},m=d=>{for(let l=0;l<i.length;l++){const o=l===d;i[l].classList.toggle("gengage-simrel-tab--active",o),i[l].setAttribute("aria-selected",String(o)),i[l].tabIndex=o?0:-1}const p=n.groups[d],f=s[d];f.innerHTML="";const y=v(c(p));f.appendChild(y);for(let l=0;l<s.length;l++){const o=l===d;s[l].style.display=o?"":"none",s[l].tabIndex=o?0:-1}};for(let d=0;d<n.groups.length;d++){const p=n.groups[d],f=`gengage-simrel-tab-${e}-${d}`,y=`gengage-simrel-panel-${e}-${d}`,l=document.createElement("button");l.className="gengage-simrel-tab",l.type="button",l.id=f,l.textContent=p.name,l.setAttribute("role","tab"),l.setAttribute("aria-controls",y),l.setAttribute("aria-selected",String(d===0)),l.tabIndex=d===0?0:-1,d===0&&l.classList.add("gengage-simrel-tab--active"),l.addEventListener("click",()=>m(d)),l.addEventListener("keydown",h=>{let C=-1;h.key==="ArrowRight"||h.key==="ArrowDown"?C=(d+1)%n.groups.length:h.key==="ArrowLeft"||h.key==="ArrowUp"?C=(d-1+n.groups.length)%n.groups.length:h.key==="Home"?C=0:h.key==="End"&&(C=n.groups.length-1),C>=0&&(h.preventDefault(),m(C),i[C].focus())}),i.push(l),r.appendChild(l);const o=document.createElement("div");o.className="gengage-simrel-tab-panel",o.id=y,o.setAttribute("role","tabpanel"),o.setAttribute("aria-labelledby",f),o.tabIndex=d===0?0:-1,d!==0&&(o.style.display="none"),s.push(o)}t.appendChild(r);const u=s[0],g=v(c(n.groups[0]));u.appendChild(g);for(const d of s)t.appendChild(d);return t}function k(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 s=e.originalPrice;typeof s=="string"&&(t.originalPrice=s);const c=e.discountPercent;typeof c=="number"&&(t.discountPercent=c);const m=e.brand;typeof m=="string"&&(t.brand=m);const u=e.rating;typeof u=="number"&&(t.rating=u);const g=e.reviewCount;typeof g=="number"&&(t.reviewCount=g);const d=e.cartCode;typeof d=="string"&&(t.cartCode=d);const p=e.inStock;return typeof p=="boolean"&&(t.inStock=p),t}function G(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 w={ProductGrid:({element:n,renderElement:e,context:t})=>{const r=document.createElement("div");r.className="gengage-simrel-grid",r.setAttribute("role","list");const i=n.props?.columns;typeof i=="number"&&Number.isFinite(i)&&i>0&&r.style.setProperty("--gengage-simrel-columns",String(i));for(const s of n.children??[]){const c=e(s);c&&r.appendChild(c)}if(r.children.length===0){const s=document.createElement("div");s.className="gengage-simrel-empty",s.textContent=t.i18n.emptyStateMessage,r.appendChild(s)}return r},ProductCard:({element:n,context:e})=>{const t=n.props?.product??n.props,r=k(t);if(!r)return null;const i=n.props?.index,s=typeof i=="number"&&Number.isFinite(i)?i:0,c=n.props?.discountType,m=c==="strike-through"||c==="badge"?c:e.discountType,u={product:r,index:s,onClick:e.onClick,onAddToCart:e.onAddToCart,i18n:e.i18n};return m!==void 0&&(u.discountType=m),e.renderCard!==void 0&&(u.renderCard=e.renderCard),e.pricing!==void 0&&(u.pricing=e.pricing),T(u)},GroupTabs:({element:n,context:e})=>{const t=n.props?.groups;if(!Array.isArray(t))return null;const r=[];for(const s of t){if(!s||typeof s!="object")continue;const c=s;if(typeof c.name!="string")continue;const m=[];if(Array.isArray(c.products))for(const g of c.products){const d=k(g);d&&m.push(d)}const u={name:c.name,products:m};typeof c.highlight=="string"&&(u.highlight=c.highlight),r.push(u)}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),j(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 gengage-chat-product-card-cta",i.type="button";const s=n.props?.label;return i.textContent=typeof s=="string"?s:e.i18n.addToCartButton,i.addEventListener("click",c=>{c.preventDefault(),c.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 s=i,c=s.label,m=G(s.action);if(typeof c!="string"||!m)continue;const u=document.createElement("button");u.className="gengage-simrel-quick-action",u.type="button",u.textContent=c,u.addEventListener("click",g=>{g.preventDefault(),g.stopPropagation(),e.onAction?.(m)}),t.appendChild(u)}return t}},E=({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 P(){return{...w}}function A(n,e,t=w,r=E){return a.renderUISpecWithRegistry({spec:n,context:e,registry:t,containerClassName:"gengage-simrel-uispec",unknownRenderer:r})}const R={similarProductsAriaLabel:"Benzer ürünler",emptyStateMessage:"Benzer ürün bulunamadı.",addToCartButton:"Sepete Ekle",ctaLabel:"İncele",outOfStockLabel:"Stokta Yok",priceSuffix:" TL"},D={similarProductsAriaLabel:"Similar products",emptyStateMessage:"No similar products found.",addToCartButton:"Add to cart",ctaLabel:"View",outOfStockLabel:"Out of Stock",priceSuffix:""};function M(n){return n?n.toLowerCase().split("-")[0]??"tr":"tr"}function q(n){return M(n)==="en"?D:R}const B=a.object({sku:a.string(),name:a.string(),imageUrl:a.string().url().optional(),price:a.string().optional(),originalPrice:a.string().optional(),discountPercent:a.number().optional(),url:a.string().url(),brand:a.string().optional(),rating:a.number().min(0).max(5).optional(),reviewCount:a.number().int().nonnegative().optional()}),H=a.object({layout:a._enum(["grid","carousel"]).optional(),columns:a.number().int().positive().optional()}),z=a.object({product:B,index:a.number().int().nonnegative(),discountType:a._enum(["strike-through","badge"]).optional()}),$=a.object({sku:a.string(),label:a.string().optional(),cartCode:a.string()}),F=a.object({actions:a.array(a.object({label:a.string(),action:a.object({title:a.string(),type:a.string(),payload:a.unknown().optional()})}))}),J=a.object({message:a.string().optional()}),W={components:{ProductGrid:{schema:H,description:"Outer grid or carousel container for similar products."},ProductCard:{schema:z,description:"A single product card with image, title, price, and actions."},AddToCartButton:{schema:$,description:"Add-to-cart CTA rendered inside or below a product card."},QuickActions:{schema:F,description:"A row of quick-action buttons below product info."},EmptyState:{schema:J,description:"Empty state shown when no similar products are available."}}};class I extends a.BaseWidget{constructor(){super(...arguments),this._abortController=null,this._contentEl=null,this._i18n=R}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,a.trackInit("simrel")}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;a.trackProductDetail(e.sku,e.name);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){a.trackCartAdd(e.sku,e.quantity),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){this._abort(),this._abortController=new AbortController;const t=this._abortController.signal;if(!this._contentEl)return;this._contentEl.innerHTML="",this._contentEl.style.display="";const r=document.createElement("div");r.className="gengage-simrel-loading";const i=document.createElement("div");i.className="gengage-simrel-spinner",r.appendChild(i),this._contentEl.appendChild(r);const s={middlewareUrl:this.config.middlewareUrl},c=crypto.randomUUID(),m=Date.now();this.track(a.streamStartEvent(this.analyticsContext(),{endpoint:"similar_products",request_id:c,widget:"simrel"}));try{const u={account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",sku:e};this.config.domain!==void 0&&(u.domain=this.config.domain);const g=await x(u,s,t);if(!this._contentEl)return;if(this._contentEl.innerHTML="",g.length>0)try{const d=g.map(f=>f.sku),p=await L({account_id:this.config.accountId,session_id:this.config.session?.sessionId??"",correlation_id:this.config.session?.sessionId??"",skus:d},s,t);if(p.length>0&&this._contentEl){const f=this._buildGroupsSpec(p),y=this._renderUISpec(f);this._contentEl.appendChild(y),a.trackShow("simrel"),this.track(a.streamDoneEvent(this.analyticsContext(),{request_id:c,latency_ms:Date.now()-m,chunk_count:p.reduce((l,o)=>l+o.products.length,0),widget:"simrel"})),this.track(a.widgetHistorySnapshotEvent(this.analyticsContext(),{message_count:p.reduce((l,o)=>l+o.products.length,0),history_ref:c,redaction_level:"none",widget:"simrel"}));return}}catch{}if(this._contentEl){const d=this._buildProductsSpec(g),p=this._renderUISpec(d);this._contentEl.appendChild(p)}g.length>0&&a.trackShow("simrel"),this.track(a.streamDoneEvent(this.analyticsContext(),{request_id:c,latency_ms:Date.now()-m,chunk_count:g.length,widget:"simrel"})),this.track(a.widgetHistorySnapshotEvent(this.analyticsContext(),{message_count:g.length,history_ref:c,redaction_level:"none",widget:"simrel"}))}catch(u){if(u instanceof DOMException&&u.name==="AbortError")return;if(a.dispatch("gengage:global:error",{source:"simrel",code:"FETCH_ERROR",message:a.getGlobalErrorMessage(this.config.locale)}),this.track(a.streamErrorEvent(this.analyticsContext(),{request_id:c,error_code:"FETCH_ERROR",error_message:u instanceof Error?u.message:String(u),widget:"simrel"})),this._contentEl){this._contentEl.innerHTML="";const g=document.createElement("div");g.className="gengage-simrel-error",g.style.cssText="text-align:center;padding:16px;color:#6b7280;font-size:13px;";const d=document.createElement("span");d.textContent=this.config.locale?.startsWith("tr")?"Benzer ürünler yüklenemedi.":"Could not load similar products.",g.appendChild(d);const p=document.createElement("button");p.textContent=this.config.locale?.startsWith("tr")?"Tekrar dene":"Try again",p.style.cssText="margin-left:8px;border:1px solid #d1d5db;background:#fff;border-radius:6px;padding:4px 12px;cursor:pointer;font-size:13px;color:#374151;",p.addEventListener("click",()=>{this._fetchAndRender(this.config.sku)}),g.appendChild(p),this._contentEl.appendChild(g)}}}_resolveI18n(e){return{...q(e.locale),...e.i18n}}_resolveUISpecRegistry(){const e=P();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),this.config.pricing!==void 0&&(t.pricing=this.config.pricing),t}_renderUISpec(e){const t=this._resolveUISpecRegistry(),r=this._buildRenderContext(),i=this.config.renderer?.unknownRenderer??E,s=(u,g)=>A(u,g,t,i),c=this.config.renderer?.renderUISpec;return c?c(e,r,{registry:t,unknownRenderer:i,defaultRender:s}):s(e,r)}_buildProductsSpec(e){const t={},r=[];for(let i=0;i<e.length;i++){const s=e[i],c=`product-${i}`;r.push(c),t[c]={type:"ProductCard",props:{product:s,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 Q(){return new I}exports.GengageSimRel=I;exports.createDefaultSimRelUISpecRegistry=P;exports.createSimRelWidget=Q;exports.defaultSimRelUnknownUISpecRenderer=E;exports.renderSimRelUISpec=A;exports.simRelCatalog=W;
2
2
  //# sourceMappingURL=simrel.cjs.map