vviinn-widgets 2.18.21 → 2.19.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 (503) hide show
  1. package/dist/cjs/Campaign-13258569.js +2 -0
  2. package/dist/cjs/Campaign-13258569.js.map +1 -0
  3. package/dist/cjs/{Handler-176539c8.js → Handler-de64afa5.js} +31 -43
  4. package/dist/cjs/Handler-de64afa5.js.map +1 -0
  5. package/dist/cjs/cropper-handler.cjs.entry.js +7 -4
  6. package/dist/cjs/cropper-handler.cjs.entry.js.map +1 -0
  7. package/dist/cjs/{customized-slots-6e56c354.js → customized-slots-aee3f39d.js} +3 -1
  8. package/dist/cjs/customized-slots-aee3f39d.js.map +1 -0
  9. package/dist/cjs/highlight-box_22.cjs.entry.js +68 -39
  10. package/dist/cjs/highlight-box_22.cjs.entry.js.map +1 -0
  11. package/dist/cjs/{imageSearch.store-98824653.js → imageSearch.store-fbe0600a.js} +3570 -2250
  12. package/dist/cjs/imageSearch.store-fbe0600a.js.map +1 -0
  13. package/dist/cjs/{index-cb410762.js → index-610c6c1f.js} +3 -1
  14. package/dist/cjs/index-610c6c1f.js.map +1 -0
  15. package/dist/cjs/{index-7f1325a7.js → index-a4becaff.js} +685 -303
  16. package/dist/cjs/index-a4becaff.js.map +1 -0
  17. package/dist/cjs/{index-a99edb90.js → index-c4851793.js} +3 -1
  18. package/dist/cjs/index-c4851793.js.map +1 -0
  19. package/dist/cjs/index.cjs.js +2 -0
  20. package/dist/cjs/index.cjs.js.map +1 -0
  21. package/dist/cjs/loader.cjs.js +6 -3
  22. package/dist/cjs/loader.cjs.js.map +1 -0
  23. package/dist/cjs/vviinn-button.cjs.entry.js +5 -3
  24. package/dist/cjs/vviinn-button.cjs.entry.js.map +1 -0
  25. package/dist/cjs/vviinn-carousel_3.cjs.entry.js +124 -39
  26. package/dist/cjs/vviinn-carousel_3.cjs.entry.js.map +1 -0
  27. package/dist/cjs/vviinn-error.cjs.entry.js +4 -2
  28. package/dist/cjs/vviinn-error.cjs.entry.js.map +1 -0
  29. package/dist/cjs/vviinn-preloader.cjs.entry.js +7 -5
  30. package/dist/cjs/vviinn-preloader.cjs.entry.js.map +1 -0
  31. package/dist/cjs/vviinn-recommendations-sidebar.cjs.entry.js +15 -6
  32. package/dist/cjs/vviinn-recommendations-sidebar.cjs.entry.js.map +1 -0
  33. package/dist/cjs/vviinn-vpr-button.cjs.entry.js +13 -12
  34. package/dist/cjs/vviinn-vpr-button.cjs.entry.js.map +1 -0
  35. package/dist/cjs/vviinn-vps-button.cjs.entry.js +28 -25
  36. package/dist/cjs/vviinn-vps-button.cjs.entry.js.map +1 -0
  37. package/dist/cjs/vviinn-vps-widget.cjs.entry.js +46 -31
  38. package/dist/cjs/vviinn-vps-widget.cjs.entry.js.map +1 -0
  39. package/dist/cjs/vviinn-widgets.cjs.js +12 -3
  40. package/dist/cjs/vviinn-widgets.cjs.js.map +1 -0
  41. package/dist/collection/Image/error.js +1 -0
  42. package/dist/collection/Image/error.js.map +1 -0
  43. package/dist/collection/Image/form.js +1 -0
  44. package/dist/collection/Image/form.js.map +1 -0
  45. package/dist/collection/Image/fromFile.js +1 -0
  46. package/dist/collection/Image/fromFile.js.map +1 -0
  47. package/dist/collection/Image/imageToB64.js +1 -0
  48. package/dist/collection/Image/imageToB64.js.map +1 -0
  49. package/dist/collection/Image/index.js +1 -0
  50. package/dist/collection/Image/index.js.map +1 -0
  51. package/dist/collection/Image/renderPromise.js +1 -0
  52. package/dist/collection/Image/renderPromise.js.map +1 -0
  53. package/dist/collection/Image/resizeImage.js +1 -0
  54. package/dist/collection/Image/resizeImage.js.map +1 -0
  55. package/dist/collection/Image/sizing.js +1 -0
  56. package/dist/collection/Image/sizing.js.map +1 -0
  57. package/dist/collection/Image/sizing.spec.js +67 -0
  58. package/dist/collection/Image/sizing.spec.js.map +1 -0
  59. package/dist/collection/Image/toFile.js +1 -0
  60. package/dist/collection/Image/toFile.js.map +1 -0
  61. package/dist/collection/analytics/GAnalytics.js +1 -0
  62. package/dist/collection/analytics/GAnalytics.js.map +1 -0
  63. package/dist/collection/analytics/GeneralAnalytics.js +1 -0
  64. package/dist/collection/analytics/GeneralAnalytics.js.map +1 -0
  65. package/dist/collection/analytics/GtagAnalytics.js +1 -0
  66. package/dist/collection/analytics/GtagAnalytics.js.map +1 -0
  67. package/dist/collection/analytics/ProductAnalytics.js +1 -0
  68. package/dist/collection/analytics/ProductAnalytics.js.map +1 -0
  69. package/dist/collection/campaign/Campaign.js +1 -0
  70. package/dist/collection/campaign/Campaign.js.map +1 -0
  71. package/dist/collection/campaign/CampaignService.js +1 -0
  72. package/dist/collection/campaign/CampaignService.js.map +1 -0
  73. package/dist/collection/campaign/VCSCampaign.js +1 -0
  74. package/dist/collection/campaign/VCSCampaign.js.map +1 -0
  75. package/dist/collection/campaign/VCSCampaignResponse.js +1 -0
  76. package/dist/collection/campaign/VCSCampaignResponse.js.map +1 -0
  77. package/dist/collection/campaign/VCSCampaignService.js +1 -0
  78. package/dist/collection/campaign/VCSCampaignService.js.map +1 -0
  79. package/dist/collection/campaign/VPRCampaignResponse.js +1 -0
  80. package/dist/collection/campaign/VPRCampaignResponse.js.map +1 -0
  81. package/dist/collection/campaign/VPRCampaignService.js +1 -0
  82. package/dist/collection/campaign/VPRCampaignService.js.map +1 -0
  83. package/dist/collection/collection-manifest.json +2 -2
  84. package/dist/collection/components/customized-slots.js +1 -0
  85. package/dist/collection/components/customized-slots.js.map +1 -0
  86. package/dist/collection/components/image-search/image-view/highlight-box/highlight-box.css +2 -16
  87. package/dist/collection/components/image-search/image-view/highlight-box/highlight-box.js +12 -7
  88. package/dist/collection/components/image-search/image-view/highlight-box/highlight-box.js.map +1 -0
  89. package/dist/collection/components/image-search/image-view/image-cropper/cropper-handler/cropper-handler.css +0 -1
  90. package/dist/collection/components/image-search/image-view/image-cropper/cropper-handler/cropper-handler.js +41 -37
  91. package/dist/collection/components/image-search/image-view/image-cropper/cropper-handler/cropper-handler.js.map +1 -0
  92. package/dist/collection/components/image-search/image-view/image-cropper/image-cropper.js +74 -67
  93. package/dist/collection/components/image-search/image-view/image-cropper/image-cropper.js.map +1 -0
  94. package/dist/collection/components/image-search/search-filters/search-filters.css +4 -23
  95. package/dist/collection/components/image-search/search-filters/search-filters.js +98 -91
  96. package/dist/collection/components/image-search/search-filters/search-filters.js.map +1 -0
  97. package/dist/collection/components/vviinn-button/vviinn-button.js +35 -31
  98. package/dist/collection/components/vviinn-button/vviinn-button.js.map +1 -0
  99. package/dist/collection/components/vviinn-carousel/vviinn-carousel.css +1 -2
  100. package/dist/collection/components/vviinn-carousel/vviinn-carousel.js +162 -156
  101. package/dist/collection/components/vviinn-carousel/vviinn-carousel.js.map +1 -0
  102. package/dist/collection/components/vviinn-error/vviinn-empty-results/vviinn-empty-results.js +13 -14
  103. package/dist/collection/components/vviinn-error/vviinn-empty-results/vviinn-empty-results.js.map +1 -0
  104. package/dist/collection/components/vviinn-error/vviinn-error.js +13 -12
  105. package/dist/collection/components/vviinn-error/vviinn-error.js.map +1 -0
  106. package/dist/collection/components/vviinn-error/vviinn-server-error/vviinn-server-error.js +36 -30
  107. package/dist/collection/components/vviinn-error/vviinn-server-error/vviinn-server-error.js.map +1 -0
  108. package/dist/collection/components/vviinn-error/vviinn-wrong-format/vviinn-wrong-format.js +36 -30
  109. package/dist/collection/components/vviinn-error/vviinn-wrong-format/vviinn-wrong-format.js.map +1 -0
  110. package/dist/collection/components/vviinn-example-images/vviinn-example-image/vviinn-example-image.js +130 -121
  111. package/dist/collection/components/vviinn-example-images/vviinn-example-image/vviinn-example-image.js.map +1 -0
  112. package/dist/collection/components/vviinn-example-images/vviinn-example-images.js +76 -75
  113. package/dist/collection/components/vviinn-example-images/vviinn-example-images.js.map +1 -0
  114. package/dist/collection/components/vviinn-icons/index.js +11 -27
  115. package/dist/collection/components/vviinn-icons/index.js.map +1 -0
  116. package/dist/collection/components/vviinn-image-selector/vviinn-image-selector.js +121 -67
  117. package/dist/collection/components/vviinn-image-selector/vviinn-image-selector.js.map +1 -0
  118. package/dist/collection/components/vviinn-image-view/vviinn-detected-object/vviinn-detected-object.js +82 -69
  119. package/dist/collection/components/vviinn-image-view/vviinn-detected-object/vviinn-detected-object.js.map +1 -0
  120. package/dist/collection/components/vviinn-image-view/vviinn-image-view.css +0 -1
  121. package/dist/collection/components/vviinn-image-view/vviinn-image-view.js +28 -28
  122. package/dist/collection/components/vviinn-image-view/vviinn-image-view.js.map +1 -0
  123. package/dist/collection/components/vviinn-modal/vviinn-modal.css +7 -36
  124. package/dist/collection/components/vviinn-modal/vviinn-modal.js +116 -93
  125. package/dist/collection/components/vviinn-modal/vviinn-modal.js.map +1 -0
  126. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-1/vviinn-onboarding-card-1.js +13 -14
  127. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-1/vviinn-onboarding-card-1.js.map +1 -0
  128. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-2/vviinn-onboarding-card-2.js +13 -14
  129. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-2/vviinn-onboarding-card-2.js.map +1 -0
  130. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-3/vviinn-onboarding-card-3.js +13 -14
  131. package/dist/collection/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-3/vviinn-onboarding-card-3.js.map +1 -0
  132. package/dist/collection/components/vviinn-onboarding/vviinn-onboarding.js +13 -17
  133. package/dist/collection/components/vviinn-onboarding/vviinn-onboarding.js.map +1 -0
  134. package/dist/collection/components/vviinn-overlay/vviinn-overlay.css +1 -12
  135. package/dist/collection/components/vviinn-overlay/vviinn-overlay.js +13 -9
  136. package/dist/collection/components/vviinn-overlay/vviinn-overlay.js.map +1 -0
  137. package/dist/collection/components/vviinn-overlayed-modal/vviinn-overlayed-modal.js +108 -78
  138. package/dist/collection/components/vviinn-overlayed-modal/vviinn-overlayed-modal.js.map +1 -0
  139. package/dist/collection/components/vviinn-preloader/vviinn-preloader.css +1 -11
  140. package/dist/collection/components/vviinn-preloader/vviinn-preloader.js +12 -7
  141. package/dist/collection/components/vviinn-preloader/vviinn-preloader.js.map +1 -0
  142. package/dist/collection/components/vviinn-privacy-badge/vviinn-privacy-badge.css +0 -1
  143. package/dist/collection/components/vviinn-privacy-badge/vviinn-privacy-badge.js +13 -16
  144. package/dist/collection/components/vviinn-privacy-badge/vviinn-privacy-badge.js.map +1 -0
  145. package/dist/collection/components/vviinn-product-card/render-helpers.js +7 -14
  146. package/dist/collection/components/vviinn-product-card/render-helpers.js.map +1 -0
  147. package/dist/collection/components/vviinn-product-card/stories/args.js +1 -0
  148. package/dist/collection/components/vviinn-product-card/stories/args.js.map +1 -0
  149. package/dist/collection/components/vviinn-product-card/stories/decorators.js +1 -0
  150. package/dist/collection/components/vviinn-product-card/stories/decorators.js.map +1 -0
  151. package/dist/collection/components/vviinn-product-card/stories/vviinn-product-card.stories.js +1 -0
  152. package/dist/collection/components/vviinn-product-card/stories/vviinn-product-card.stories.js.map +1 -0
  153. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +426 -415
  154. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js.map +1 -0
  155. package/dist/collection/components/vviinn-slider/arrow.js +2 -2
  156. package/dist/collection/components/vviinn-slider/arrow.js.map +1 -0
  157. package/dist/collection/components/vviinn-slider/vviinn-slide/vviinn-slide.js +13 -9
  158. package/dist/collection/components/vviinn-slider/vviinn-slide/vviinn-slide.js.map +1 -0
  159. package/dist/collection/components/vviinn-slider/vviinn-slider.css +0 -1
  160. package/dist/collection/components/vviinn-slider/vviinn-slider.js +88 -82
  161. package/dist/collection/components/vviinn-slider/vviinn-slider.js.map +1 -0
  162. package/dist/collection/components/vviinn-teaser/vviinn-teaser.js +13 -18
  163. package/dist/collection/components/vviinn-teaser/vviinn-teaser.js.map +1 -0
  164. package/dist/collection/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.css +12 -64
  165. package/dist/collection/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.js +372 -360
  166. package/dist/collection/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.js.map +1 -0
  167. package/dist/collection/components/vviinn-vpr-button/stories/args.js +1 -0
  168. package/dist/collection/components/vviinn-vpr-button/stories/args.js.map +1 -0
  169. package/dist/collection/components/vviinn-vpr-button/stories/vviinn-vpr-button.stories.js +1 -0
  170. package/dist/collection/components/vviinn-vpr-button/stories/vviinn-vpr-button.stories.js.map +1 -0
  171. package/dist/collection/components/vviinn-vpr-button/vviinn-vpr-button.js +449 -444
  172. package/dist/collection/components/vviinn-vpr-button/vviinn-vpr-button.js.map +1 -0
  173. package/dist/collection/components/vviinn-vpr-widget/stories/args.js +1 -0
  174. package/dist/collection/components/vviinn-vpr-widget/stories/args.js.map +1 -0
  175. package/dist/collection/components/vviinn-vpr-widget/stories/decorators.js +1 -0
  176. package/dist/collection/components/vviinn-vpr-widget/stories/decorators.js.map +1 -0
  177. package/dist/collection/components/vviinn-vpr-widget/stories/vviinn-vpr-widget.stories.js +1 -0
  178. package/dist/collection/components/vviinn-vpr-widget/stories/vviinn-vpr-widget.stories.js.map +1 -0
  179. package/dist/collection/components/vviinn-vpr-widget/token-helpers.js +1 -0
  180. package/dist/collection/components/vviinn-vpr-widget/token-helpers.js.map +1 -0
  181. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-vidget.js +546 -542
  182. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-vidget.js.map +1 -0
  183. package/dist/collection/components/vviinn-vps-button/stories/vviinn-vps-button.stories.js +3 -0
  184. package/dist/collection/components/vviinn-vps-button/stories/vviinn-vps-button.stories.js.map +1 -0
  185. package/dist/collection/components/vviinn-vps-button/vviinn-vps-button.js +369 -332
  186. package/dist/collection/components/vviinn-vps-button/vviinn-vps-button.js.map +1 -0
  187. package/dist/collection/components/vviinn-vps-widget/stories/vviinn-vps-widget.stories.js +1 -0
  188. package/dist/collection/components/vviinn-vps-widget/stories/vviinn-vps-widget.stories.js.map +1 -0
  189. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.css +0 -5
  190. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.e2e.js +27 -0
  191. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.e2e.js.map +1 -0
  192. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.js +503 -425
  193. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.js.map +1 -0
  194. package/dist/collection/cropper/Cropper.js +1 -0
  195. package/dist/collection/cropper/Cropper.js.map +1 -0
  196. package/dist/collection/cropper/Handler.js +1 -0
  197. package/dist/collection/cropper/Handler.js.map +1 -0
  198. package/dist/collection/dom/index.js +1 -0
  199. package/dist/collection/dom/index.js.map +1 -0
  200. package/dist/collection/error.js +1 -0
  201. package/dist/collection/error.js.map +1 -0
  202. package/dist/collection/file/index.js +1 -0
  203. package/dist/collection/file/index.js.map +1 -0
  204. package/dist/collection/geometry/Clip.js +1 -0
  205. package/dist/collection/geometry/Clip.js.map +1 -0
  206. package/dist/collection/geometry/Clip.spec.js +17 -0
  207. package/dist/collection/geometry/Clip.spec.js.map +1 -0
  208. package/dist/collection/geometry/Point.js +1 -0
  209. package/dist/collection/geometry/Point.js.map +1 -0
  210. package/dist/collection/geometry/Rectangle.js +1 -0
  211. package/dist/collection/geometry/Rectangle.js.map +1 -0
  212. package/dist/collection/geometry/Rectangle.spec.js +67 -0
  213. package/dist/collection/geometry/Rectangle.spec.js.map +1 -0
  214. package/dist/collection/geometry/RectangleAlt.js +1 -0
  215. package/dist/collection/geometry/RectangleAlt.js.map +1 -0
  216. package/dist/collection/geometry/Sized.js +1 -0
  217. package/dist/collection/geometry/Sized.js.map +1 -0
  218. package/dist/collection/geometry/Sized.spec.js +17 -0
  219. package/dist/collection/geometry/Sized.spec.js.map +1 -0
  220. package/dist/collection/global.js +1 -0
  221. package/dist/collection/global.js.map +1 -0
  222. package/dist/collection/index.js +1 -0
  223. package/dist/collection/index.js.map +1 -0
  224. package/dist/collection/interfaces/generated.js +1 -4
  225. package/dist/collection/interfaces/generated.js.map +1 -0
  226. package/dist/collection/interfaces/recommendation.js +1 -0
  227. package/dist/collection/interfaces/recommendation.js.map +1 -0
  228. package/dist/collection/network/apiClient.js +1 -0
  229. package/dist/collection/network/apiClient.js.map +1 -0
  230. package/dist/collection/network/ion/File.js +1 -0
  231. package/dist/collection/network/ion/File.js.map +1 -0
  232. package/dist/collection/network/ion/Form.js +1 -0
  233. package/dist/collection/network/ion/Form.js.map +1 -0
  234. package/dist/collection/network/ion/Form.spec.js +44 -0
  235. package/dist/collection/network/ion/Form.spec.js.map +1 -0
  236. package/dist/collection/network/ion/Link.js +1 -0
  237. package/dist/collection/network/ion/Link.js.map +1 -0
  238. package/dist/collection/network/ion/ValueObject.js +1 -0
  239. package/dist/collection/network/ion/ValueObject.js.map +1 -0
  240. package/dist/collection/network/request.js +1 -0
  241. package/dist/collection/network/request.js.map +1 -0
  242. package/dist/collection/network/utils.js +1 -0
  243. package/dist/collection/network/utils.js.map +1 -0
  244. package/dist/collection/openApi/index.js +1 -0
  245. package/dist/collection/openApi/index.js.map +1 -0
  246. package/dist/collection/recommendation/events.js +1 -0
  247. package/dist/collection/recommendation/events.js.map +1 -0
  248. package/dist/collection/recommendation/recommendation.js +1 -0
  249. package/dist/collection/recommendation/recommendation.js.map +1 -0
  250. package/dist/collection/searchSession/searchSession.js +1 -0
  251. package/dist/collection/searchSession/searchSession.js.map +1 -0
  252. package/dist/collection/sentry.js +1 -0
  253. package/dist/collection/sentry.js.map +1 -0
  254. package/dist/collection/slider/GridMode.js +1 -0
  255. package/dist/collection/slider/GridMode.js.map +1 -0
  256. package/dist/collection/store/file-processing.js +1 -0
  257. package/dist/collection/store/file-processing.js.map +1 -0
  258. package/dist/collection/store/imageSearch.store.js +1 -0
  259. package/dist/collection/store/imageSearch.store.js.map +1 -0
  260. package/dist/collection/store/store.js +1 -0
  261. package/dist/collection/store/store.js.map +1 -0
  262. package/dist/collection/store/tracking.store.js +1 -0
  263. package/dist/collection/store/tracking.store.js.map +1 -0
  264. package/dist/collection/stories/image-selector.stories.js +1 -0
  265. package/dist/collection/stories/image-selector.stories.js.map +1 -0
  266. package/dist/collection/stories/image-view.stories.js +1 -0
  267. package/dist/collection/stories/image-view.stories.js.map +1 -0
  268. package/dist/collection/stories/modal.stories.js +1 -0
  269. package/dist/collection/stories/modal.stories.js.map +1 -0
  270. package/dist/collection/stories/onboarding.stories.js +1 -0
  271. package/dist/collection/stories/onboarding.stories.js.map +1 -0
  272. package/dist/collection/stories/overlay.stories.js +1 -0
  273. package/dist/collection/stories/overlay.stories.js.map +1 -0
  274. package/dist/collection/stories/overlayedModal.stories.js +1 -0
  275. package/dist/collection/stories/overlayedModal.stories.js.map +1 -0
  276. package/dist/collection/stories/privacy-badge.stories.js +1 -0
  277. package/dist/collection/stories/privacy-badge.stories.js.map +1 -0
  278. package/dist/collection/stories/slider.stories.js +1 -0
  279. package/dist/collection/stories/slider.stories.js.map +1 -0
  280. package/dist/collection/stories/teaser.stories.js +1 -0
  281. package/dist/collection/stories/teaser.stories.js.map +1 -0
  282. package/dist/collection/stories/vps-widget.stories.js +1 -0
  283. package/dist/collection/stories/vps-widget.stories.js.map +1 -0
  284. package/dist/collection/stories/vviinn-product.stories.js +1 -0
  285. package/dist/collection/stories/vviinn-product.stories.js.map +1 -0
  286. package/dist/collection/tracking/event.js +1 -0
  287. package/dist/collection/tracking/event.js.map +1 -0
  288. package/dist/collection/tracking/filter.js +1 -0
  289. package/dist/collection/tracking/filter.js.map +1 -0
  290. package/dist/collection/tracking/index.js +1 -0
  291. package/dist/collection/tracking/index.js.map +1 -0
  292. package/dist/collection/tracking/models.js +1 -0
  293. package/dist/collection/tracking/models.js.map +1 -0
  294. package/dist/collection/tracking/product.js +1 -0
  295. package/dist/collection/tracking/product.js.map +1 -0
  296. package/dist/collection/tracking/search.js +1 -0
  297. package/dist/collection/tracking/search.js.map +1 -0
  298. package/dist/collection/tracking/widget.js +1 -0
  299. package/dist/collection/tracking/widget.js.map +1 -0
  300. package/dist/collection/utils/collections/collectionsUtils.js +1 -0
  301. package/dist/collection/utils/collections/collectionsUtils.js.map +1 -0
  302. package/dist/collection/utils/either.js +1 -0
  303. package/dist/collection/utils/either.js.map +1 -0
  304. package/dist/collection/utils/enum/enumUtils.js +1 -0
  305. package/dist/collection/utils/enum/enumUtils.js.map +1 -0
  306. package/dist/collection/utils/event/Events.js +1 -0
  307. package/dist/collection/utils/event/Events.js.map +1 -0
  308. package/dist/collection/utils/number/index.js +1 -0
  309. package/dist/collection/utils/number/index.js.map +1 -0
  310. package/dist/collection/utils/option/option.js +1 -0
  311. package/dist/collection/utils/option/option.js.map +1 -0
  312. package/dist/collection/utils/semigroup/semigroupDiff.js +1 -0
  313. package/dist/collection/utils/semigroup/semigroupDiff.js.map +1 -0
  314. package/dist/collection/utils/token/tokenUtils.js +1 -0
  315. package/dist/collection/utils/token/tokenUtils.js.map +1 -0
  316. package/dist/esm/Campaign-90ba7e06.js +2 -0
  317. package/dist/esm/Campaign-90ba7e06.js.map +1 -0
  318. package/dist/esm/{Handler-f9b8735c.js → Handler-7bfee84f.js} +30 -43
  319. package/dist/esm/Handler-7bfee84f.js.map +1 -0
  320. package/dist/esm/cropper-handler.entry.js +7 -4
  321. package/dist/esm/cropper-handler.entry.js.map +1 -0
  322. package/dist/esm/{customized-slots-00afe247.js → customized-slots-b372eaed.js} +3 -1
  323. package/dist/esm/customized-slots-b372eaed.js.map +1 -0
  324. package/dist/esm/highlight-box_22.entry.js +68 -39
  325. package/dist/esm/highlight-box_22.entry.js.map +1 -0
  326. package/dist/esm/{imageSearch.store-9dde5360.js → imageSearch.store-cccd9b24.js} +3572 -2251
  327. package/dist/esm/imageSearch.store-cccd9b24.js.map +1 -0
  328. package/dist/esm/{index-590cb67e.js → index-48ef9564.js} +685 -304
  329. package/dist/esm/index-48ef9564.js.map +1 -0
  330. package/dist/esm/{index-b31d86ce.js → index-714e572a.js} +3 -1
  331. package/dist/esm/index-714e572a.js.map +1 -0
  332. package/dist/esm/{index-4d5b52ba.js → index-fdc32fbc.js} +3 -1
  333. package/dist/esm/index-fdc32fbc.js.map +1 -0
  334. package/dist/esm/index.js +2 -0
  335. package/dist/esm/index.js.map +1 -0
  336. package/dist/esm/loader.js +6 -3
  337. package/dist/esm/loader.js.map +1 -0
  338. package/dist/esm/polyfills/css-shim.js +1 -1
  339. package/dist/esm/vviinn-button.entry.js +5 -3
  340. package/dist/esm/vviinn-button.entry.js.map +1 -0
  341. package/dist/esm/vviinn-carousel_3.entry.js +123 -38
  342. package/dist/esm/vviinn-carousel_3.entry.js.map +1 -0
  343. package/dist/esm/vviinn-error.entry.js +4 -2
  344. package/dist/esm/vviinn-error.entry.js.map +1 -0
  345. package/dist/esm/vviinn-preloader.entry.js +7 -5
  346. package/dist/esm/vviinn-preloader.entry.js.map +1 -0
  347. package/dist/esm/vviinn-recommendations-sidebar.entry.js +15 -6
  348. package/dist/esm/vviinn-recommendations-sidebar.entry.js.map +1 -0
  349. package/dist/esm/vviinn-vpr-button.entry.js +13 -12
  350. package/dist/esm/vviinn-vpr-button.entry.js.map +1 -0
  351. package/dist/esm/vviinn-vps-button.entry.js +28 -25
  352. package/dist/esm/vviinn-vps-button.entry.js.map +1 -0
  353. package/dist/esm/vviinn-vps-widget.entry.js +46 -31
  354. package/dist/esm/vviinn-vps-widget.entry.js.map +1 -0
  355. package/dist/esm/vviinn-widgets.js +9 -3
  356. package/dist/esm/vviinn-widgets.js.map +1 -0
  357. package/dist/loader/index.d.ts +9 -0
  358. package/dist/loader/package.json +1 -0
  359. package/dist/types/Image/sizing.d.ts +4 -4
  360. package/dist/types/campaign/Campaign.d.ts +5 -5
  361. package/dist/types/campaign/VCSCampaignResponse.d.ts +1 -1
  362. package/dist/types/components/vviinn-carousel/vviinn-carousel.d.ts +2 -2
  363. package/dist/types/components/vviinn-image-selector/vviinn-image-selector.d.ts +4 -0
  364. package/dist/types/components/vviinn-modal/vviinn-modal.d.ts +2 -0
  365. package/dist/types/components/vviinn-overlayed-modal/vviinn-overlayed-modal.d.ts +2 -0
  366. package/dist/types/components/vviinn-product-card/render-helpers.d.ts +3 -3
  367. package/dist/types/components/vviinn-slider/arrow.d.ts +2 -2
  368. package/dist/types/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.d.ts +2 -2
  369. package/dist/types/components/vviinn-vps-button/vviinn-vps-button.d.ts +9 -4
  370. package/dist/types/components/vviinn-vps-widget/vviinn-vps-widget.d.ts +8 -0
  371. package/dist/types/components.d.ts +154 -54
  372. package/dist/types/error.d.ts +1 -1
  373. package/dist/types/geometry/Point.d.ts +1 -1
  374. package/dist/types/geometry/Rectangle.d.ts +1 -1
  375. package/dist/types/geometry/Sized.d.ts +1 -1
  376. package/dist/types/interfaces/generated.d.ts +192 -371
  377. package/dist/types/network/ion/File.d.ts +2 -2
  378. package/dist/types/network/ion/Form.d.ts +5 -5
  379. package/dist/types/network/ion/Link.d.ts +1 -1
  380. package/dist/types/network/ion/ValueObject.d.ts +4 -4
  381. package/dist/types/network/utils.d.ts +3 -3
  382. package/dist/types/recommendation/events.d.ts +5 -5
  383. package/dist/types/recommendation/recommendation.d.ts +1 -1
  384. package/dist/types/searchSession/searchSession.d.ts +7 -7
  385. package/dist/types/slider/GridMode.d.ts +1 -1
  386. package/dist/types/stencil-public-runtime.d.ts +98 -23
  387. package/dist/types/store/imageSearch.store.d.ts +1 -1
  388. package/dist/types/tracking/models.d.ts +2 -2
  389. package/dist/types/utils/event/Events.d.ts +1 -1
  390. package/dist/vviinn-widgets/index.esm.js +2 -0
  391. package/dist/vviinn-widgets/index.esm.js.map +1 -0
  392. package/dist/vviinn-widgets/p-0b0d59d7.entry.js +2 -0
  393. package/dist/vviinn-widgets/p-0b0d59d7.entry.js.map +1 -0
  394. package/dist/vviinn-widgets/p-14373da7.entry.js +2 -0
  395. package/dist/vviinn-widgets/p-14373da7.entry.js.map +1 -0
  396. package/dist/vviinn-widgets/p-18fd769b.js +2 -1
  397. package/dist/vviinn-widgets/p-18fd769b.js.map +1 -0
  398. package/dist/vviinn-widgets/p-2f7bf983.js +2 -0
  399. package/dist/vviinn-widgets/p-2f7bf983.js.map +1 -0
  400. package/dist/vviinn-widgets/p-3abc679c.js +2 -0
  401. package/dist/vviinn-widgets/p-3abc679c.js.map +1 -0
  402. package/dist/vviinn-widgets/p-3b99c62d.js +2 -0
  403. package/dist/vviinn-widgets/p-3b99c62d.js.map +1 -0
  404. package/dist/vviinn-widgets/p-4325566b.entry.js +2 -0
  405. package/dist/vviinn-widgets/p-4325566b.entry.js.map +1 -0
  406. package/dist/vviinn-widgets/p-53eacbe3.js +2 -0
  407. package/dist/vviinn-widgets/p-53eacbe3.js.map +1 -0
  408. package/dist/vviinn-widgets/p-645baf22.entry.js +2 -0
  409. package/dist/vviinn-widgets/p-645baf22.entry.js.map +1 -0
  410. package/dist/vviinn-widgets/p-a10b9151.entry.js +2 -0
  411. package/dist/vviinn-widgets/p-a10b9151.entry.js.map +1 -0
  412. package/dist/vviinn-widgets/p-c012ef97.entry.js +2 -0
  413. package/dist/vviinn-widgets/p-c012ef97.entry.js.map +1 -0
  414. package/dist/vviinn-widgets/p-c24caccd.js +2 -0
  415. package/dist/vviinn-widgets/p-c24caccd.js.map +1 -0
  416. package/dist/vviinn-widgets/p-d20a9a96.entry.js +2 -0
  417. package/dist/vviinn-widgets/p-d20a9a96.entry.js.map +1 -0
  418. package/dist/vviinn-widgets/p-d95d7c38.entry.js +2 -0
  419. package/dist/vviinn-widgets/p-d95d7c38.entry.js.map +1 -0
  420. package/dist/vviinn-widgets/p-e5e67a5f.entry.js +2 -0
  421. package/dist/vviinn-widgets/p-e5e67a5f.entry.js.map +1 -0
  422. package/dist/vviinn-widgets/p-e6d67de3.entry.js +2 -0
  423. package/dist/vviinn-widgets/p-e6d67de3.entry.js.map +1 -0
  424. package/dist/vviinn-widgets/p-fa17e81f.js +3 -0
  425. package/dist/vviinn-widgets/p-fa17e81f.js.map +1 -0
  426. package/dist/vviinn-widgets/vviinn-widgets.esm.js +2 -1
  427. package/dist/vviinn-widgets/vviinn-widgets.esm.js.map +1 -0
  428. package/package.json +12 -12
  429. package/www/build/index.esm.js +2 -0
  430. package/www/build/index.esm.js.map +1 -0
  431. package/www/build/p-0b0d59d7.entry.js +2 -0
  432. package/www/build/p-0b0d59d7.entry.js.map +1 -0
  433. package/www/build/p-14373da7.entry.js +2 -0
  434. package/www/build/p-14373da7.entry.js.map +1 -0
  435. package/www/build/p-18fd769b.js +2 -1
  436. package/www/build/p-18fd769b.js.map +1 -0
  437. package/www/build/p-2f7bf983.js +2 -0
  438. package/www/build/p-2f7bf983.js.map +1 -0
  439. package/www/build/p-3abc679c.js +2 -0
  440. package/www/build/p-3abc679c.js.map +1 -0
  441. package/www/build/p-3b99c62d.js +2 -0
  442. package/www/build/p-3b99c62d.js.map +1 -0
  443. package/www/build/p-4325566b.entry.js +2 -0
  444. package/www/build/p-4325566b.entry.js.map +1 -0
  445. package/www/build/p-53eacbe3.js +2 -0
  446. package/www/build/p-53eacbe3.js.map +1 -0
  447. package/www/build/p-645baf22.entry.js +2 -0
  448. package/www/build/p-645baf22.entry.js.map +1 -0
  449. package/www/build/p-a10b9151.entry.js +2 -0
  450. package/www/build/p-a10b9151.entry.js.map +1 -0
  451. package/www/build/p-a67898be.css +1 -0
  452. package/www/build/p-ae6e6410.js +2 -0
  453. package/www/build/p-c012ef97.entry.js +2 -0
  454. package/www/build/p-c012ef97.entry.js.map +1 -0
  455. package/www/build/p-c24caccd.js +2 -0
  456. package/www/build/p-c24caccd.js.map +1 -0
  457. package/www/build/p-d20a9a96.entry.js +2 -0
  458. package/www/build/p-d20a9a96.entry.js.map +1 -0
  459. package/www/build/p-d95d7c38.entry.js +2 -0
  460. package/www/build/p-d95d7c38.entry.js.map +1 -0
  461. package/www/build/p-e5e67a5f.entry.js +2 -0
  462. package/www/build/p-e5e67a5f.entry.js.map +1 -0
  463. package/www/build/p-e6d67de3.entry.js +2 -0
  464. package/www/build/p-e6d67de3.entry.js.map +1 -0
  465. package/www/build/p-fa17e81f.js +3 -0
  466. package/www/build/p-fa17e81f.js.map +1 -0
  467. package/www/build/vviinn-widgets.esm.js +2 -1
  468. package/www/build/vviinn-widgets.esm.js.map +1 -0
  469. package/www/index.html +1 -1
  470. package/dist/vviinn-widgets/p-11f61564.js +0 -1
  471. package/dist/vviinn-widgets/p-12851e97.entry.js +0 -1
  472. package/dist/vviinn-widgets/p-2f9ee951.js +0 -1
  473. package/dist/vviinn-widgets/p-339c6838.js +0 -1
  474. package/dist/vviinn-widgets/p-3b2c91c0.entry.js +0 -1
  475. package/dist/vviinn-widgets/p-45df9f28.entry.js +0 -1
  476. package/dist/vviinn-widgets/p-57ed5303.entry.js +0 -1
  477. package/dist/vviinn-widgets/p-69850e5b.js +0 -1
  478. package/dist/vviinn-widgets/p-7c2f762a.entry.js +0 -1
  479. package/dist/vviinn-widgets/p-7c3b7388.entry.js +0 -1
  480. package/dist/vviinn-widgets/p-85006f41.entry.js +0 -1
  481. package/dist/vviinn-widgets/p-8a3dd76d.entry.js +0 -1
  482. package/dist/vviinn-widgets/p-99e58be7.entry.js +0 -1
  483. package/dist/vviinn-widgets/p-a2b450b6.entry.js +0 -1
  484. package/dist/vviinn-widgets/p-bcc1ccf0.js +0 -1
  485. package/dist/vviinn-widgets/p-e6fee8d2.js +0 -1
  486. package/www/build/p-11f61564.js +0 -1
  487. package/www/build/p-12851e97.entry.js +0 -1
  488. package/www/build/p-2f9ee951.js +0 -1
  489. package/www/build/p-339c6838.js +0 -1
  490. package/www/build/p-3b2c91c0.entry.js +0 -1
  491. package/www/build/p-45df9f28.entry.js +0 -1
  492. package/www/build/p-57ed5303.entry.js +0 -1
  493. package/www/build/p-69850e5b.js +0 -1
  494. package/www/build/p-7c2f762a.entry.js +0 -1
  495. package/www/build/p-7c3b7388.entry.js +0 -1
  496. package/www/build/p-85006f41.entry.js +0 -1
  497. package/www/build/p-8a3dd76d.entry.js +0 -1
  498. package/www/build/p-99e58be7.entry.js +0 -1
  499. package/www/build/p-9e2c131a.js +0 -125
  500. package/www/build/p-a2b450b6.entry.js +0 -1
  501. package/www/build/p-bcc1ccf0.js +0 -1
  502. package/www/build/p-e0153ae2.css +0 -6
  503. package/www/build/p-e6fee8d2.js +0 -1
@@ -0,0 +1,2 @@
1
+ var r=undefined&&undefined.__spreadArray||function(r,n,t){if(t||arguments.length===2)for(var e=0,a=n.length,u;e<a;e++){if(u||!(e in n)){if(!u)u=Array.prototype.slice.call(n,0,e);u[e]=n[e]}}return r.concat(u||Array.prototype.slice.call(n))};function n(r){return r}function t(){var r=[];for(var n=0;n<arguments.length;n++){r[n]=arguments[n]}return r}function e(r,n,t,e,a,u,s,c,i){switch(arguments.length){case 1:return r;case 2:return n(r);case 3:return t(n(r));case 4:return e(t(n(r)));case 5:return a(e(t(n(r))));case 6:return u(a(e(t(n(r)))));case 7:return s(u(a(e(t(n(r))))));case 8:return c(s(u(a(e(t(n(r)))))));case 9:return i(c(s(u(a(e(t(n(r))))))));default:{var o=arguments[0];for(var f=1;f<arguments.length;f++){o=arguments[f](o)}return o}}}var a=function(n,t){var e=typeof n==="number"?function(r){return r.length>=n}:n;return function(){var n=Array.from(arguments);if(e(arguments)){return t.apply(this,n)}return function(e){return t.apply(void 0,r([e],n,false))}}};var u=function(r){return r._tag==="None"};var s=function(r){return r._tag==="Some"};var c={_tag:"None"};var i=function(r){return{_tag:"Some",value:r}};var o=function(r){return r._tag==="Left"};var f=function(r){return{_tag:"Left",left:r}};var v=function(r){return{_tag:"Right",right:r}};var d=Object.prototype.hasOwnProperty;var h=function(r,n){return a(2,(function(t,e){return n.flatMap(t,(function(n){return r.fromTask(e(n))}))}))};var y=function(r){return{concat:function(n,t){var e={};for(var a in r){if(d.call(r,a)){e[a]=r[a].concat(n[a],t[a])}}return e}}};var x=function(){return{concat:n}};var l=function(){return{concat:function(r,n){return n}}};var p={concat:function(r,n){return r+n}};const z={concat:(r,n)=>r-n};const g=({x:r,y:n})=>({x:r,y:n});const w=({clientX:r,clientY:n})=>({x:r,y:n});const N=y({x:z,y:z});const S=y({x:p,y:p});var m;(function(r){r[r["East"]=0]="East";r[r["North"]=1]="North";r[r["NorthEast"]=2]="NorthEast";r[r["NorthWest"]=3]="NorthWest";r[r["South"]=4]="South";r[r["SouthEast"]=5]="SouthEast";r[r["SouthWest"]=6]="SouthWest";r[r["West"]=7]="West"})(m||(m={}));const _=r=>{switch(r){case m.East:return"e-resize";case m.North:return"n-resize";case m.NorthEast:return"ne-resize";case m.NorthWest:return"nw-resize";case m.South:return"s-resize";case m.SouthEast:return"se-resize";case m.SouthWest:return"sw-resize";case m.West:return"w-resize";default:return"pointer"}};const b=r=>[{position:g(r),direction:m.NorthWest},{position:S.concat(g(r),{x:r.width,y:0}),direction:m.NorthEast},{position:S.concat(g(r),{x:0,y:r.height}),direction:m.SouthWest},{position:S.concat(g(r),{x:r.width,y:r.height}),direction:m.SouthEast}];export{m as H,o as a,n as b,h as c,a as d,y as e,x as f,l as g,d as h,u as i,S as j,g as k,f as l,s as m,c as n,b as o,e as p,N as q,v as r,i as s,t,w as u,_ as v};
2
+ //# sourceMappingURL=p-3b99c62d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__spreadArray","this","to","from","pack","arguments","length","i","l","ar","Array","prototype","slice","call","concat","identity","a","tuple","t","_i","pipe","ab","bc","cd","de","ef","fg","gh","hi","ret","dual","arity","body","isDataFirst","args","apply","self","isNone","fa","_tag","isSome","none","some","value","isLeft","ma","left","e","right","has","Object","hasOwnProperty","flatMapTask","F","M","f","flatMap","fromTask","struct","semigroups","first","second","r","k","_.has","last","_","y","semigroupSum","x","semigroupDiff","fromRectangle","fromMouseEvent","clientX","clientY","pointDiffSemigroup","pointSumSemigroup","HandlerDirection","getCursorValue","direction","East","North","NorthEast","NorthWest","South","SouthEast","SouthWest","West","position","Point.fromRectangle","Point.pointSumSemigroup","width","height"],"sources":["./node_modules/fp-ts/es6/function.js","./node_modules/fp-ts/es6/internal.js","./node_modules/fp-ts/es6/Semigroup.js","./src/utils/semigroup/semigroupDiff.ts","./src/geometry/Point.ts","./src/cropper/Handler.ts"],"sourcesContent":["var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n// -------------------------------------------------------------------------------------\n// instances\n// -------------------------------------------------------------------------------------\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getBooleanAlgebra = function (B) {\n return function () { return ({\n meet: function (x, y) { return function (a) { return B.meet(x(a), y(a)); }; },\n join: function (x, y) { return function (a) { return B.join(x(a), y(a)); }; },\n zero: function () { return B.zero; },\n one: function () { return B.one; },\n implies: function (x, y) { return function (a) { return B.implies(x(a), y(a)); }; },\n not: function (x) { return function (a) { return B.not(x(a)); }; }\n }); };\n};\n/**\n * Unary functions form a semigroup as long as you can provide a semigroup for the codomain.\n *\n * @example\n * import { Predicate, getSemigroup } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const S1 = getSemigroup(B.SemigroupAll)<number>()\n *\n * assert.deepStrictEqual(S1.concat(f, g)(1), true)\n * assert.deepStrictEqual(S1.concat(f, g)(3), false)\n *\n * const S2 = getSemigroup(B.SemigroupAny)<number>()\n *\n * assert.deepStrictEqual(S2.concat(f, g)(1), true)\n * assert.deepStrictEqual(S2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getSemigroup = function (S) {\n return function () { return ({\n concat: function (f, g) { return function (a) { return S.concat(f(a), g(a)); }; }\n }); };\n};\n/**\n * Unary functions form a monoid as long as you can provide a monoid for the codomain.\n *\n * @example\n * import { Predicate } from 'fp-ts/Predicate'\n * import { getMonoid } from 'fp-ts/function'\n * import * as B from 'fp-ts/boolean'\n *\n * const f: Predicate<number> = (n) => n <= 2\n * const g: Predicate<number> = (n) => n >= 0\n *\n * const M1 = getMonoid(B.MonoidAll)<number>()\n *\n * assert.deepStrictEqual(M1.concat(f, g)(1), true)\n * assert.deepStrictEqual(M1.concat(f, g)(3), false)\n *\n * const M2 = getMonoid(B.MonoidAny)<number>()\n *\n * assert.deepStrictEqual(M2.concat(f, g)(1), true)\n * assert.deepStrictEqual(M2.concat(f, g)(3), true)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var getMonoid = function (M) {\n var getSemigroupM = getSemigroup(M);\n return function () { return ({\n concat: getSemigroupM().concat,\n empty: function () { return M.empty; }\n }); };\n};\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getSemiring = function (S) { return ({\n add: function (f, g) { return function (x) { return S.add(f(x), g(x)); }; },\n zero: function () { return S.zero; },\n mul: function (f, g) { return function (x) { return S.mul(f(x), g(x)); }; },\n one: function () { return S.one; }\n}); };\n/**\n * @category instances\n * @since 2.10.0\n */\nexport var getRing = function (R) {\n var S = getSemiring(R);\n return {\n add: S.add,\n mul: S.mul,\n one: S.one,\n zero: S.zero,\n sub: function (f, g) { return function (x) { return R.sub(f(x), g(x)); }; }\n };\n};\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * @since 2.11.0\n */\nexport var apply = function (a) {\n return function (f) {\n return f(a);\n };\n};\n/**\n * @since 2.0.0\n */\nexport function identity(a) {\n return a;\n}\n/**\n * @since 2.0.0\n */\nexport var unsafeCoerce = identity;\n/**\n * @since 2.0.0\n */\nexport function constant(a) {\n return function () { return a; };\n}\n/**\n * A thunk that returns always `true`.\n *\n * @since 2.0.0\n */\nexport var constTrue = /*#__PURE__*/ constant(true);\n/**\n * A thunk that returns always `false`.\n *\n * @since 2.0.0\n */\nexport var constFalse = /*#__PURE__*/ constant(false);\n/**\n * A thunk that returns always `null`.\n *\n * @since 2.0.0\n */\nexport var constNull = /*#__PURE__*/ constant(null);\n/**\n * A thunk that returns always `undefined`.\n *\n * @since 2.0.0\n */\nexport var constUndefined = /*#__PURE__*/ constant(undefined);\n/**\n * A thunk that returns always `void`.\n *\n * @since 2.0.0\n */\nexport var constVoid = constUndefined;\nexport function flip(f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length > 1) {\n return f(args[1], args[0]);\n }\n return function (a) { return f(a)(args[0]); };\n };\n}\nexport function flow(ab, bc, cd, de, ef, fg, gh, hi, ij) {\n switch (arguments.length) {\n case 1:\n return ab;\n case 2:\n return function () {\n return bc(ab.apply(this, arguments));\n };\n case 3:\n return function () {\n return cd(bc(ab.apply(this, arguments)));\n };\n case 4:\n return function () {\n return de(cd(bc(ab.apply(this, arguments))));\n };\n case 5:\n return function () {\n return ef(de(cd(bc(ab.apply(this, arguments)))));\n };\n case 6:\n return function () {\n return fg(ef(de(cd(bc(ab.apply(this, arguments))))));\n };\n case 7:\n return function () {\n return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))));\n };\n case 8:\n return function () {\n return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))));\n };\n case 9:\n return function () {\n return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))));\n };\n }\n return;\n}\n/**\n * @since 2.0.0\n */\nexport function tuple() {\n var t = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n t[_i] = arguments[_i];\n }\n return t;\n}\n/**\n * @since 2.0.0\n */\nexport function increment(n) {\n return n + 1;\n}\n/**\n * @since 2.0.0\n */\nexport function decrement(n) {\n return n - 1;\n}\n/**\n * @since 2.0.0\n */\nexport function absurd(_) {\n throw new Error('Called `absurd` function which should be uncallable');\n}\n/**\n * Creates a tupled version of this function: instead of `n` arguments, it accepts a single tuple argument.\n *\n * @example\n * import { tupled } from 'fp-ts/function'\n *\n * const add = tupled((x: number, y: number): number => x + y)\n *\n * assert.strictEqual(add([1, 2]), 3)\n *\n * @since 2.4.0\n */\nexport function tupled(f) {\n return function (a) { return f.apply(void 0, a); };\n}\n/**\n * Inverse function of `tupled`\n *\n * @since 2.4.0\n */\nexport function untupled(f) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n return f(a);\n };\n}\nexport function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {\n switch (arguments.length) {\n case 1:\n return a;\n case 2:\n return ab(a);\n case 3:\n return bc(ab(a));\n case 4:\n return cd(bc(ab(a)));\n case 5:\n return de(cd(bc(ab(a))));\n case 6:\n return ef(de(cd(bc(ab(a)))));\n case 7:\n return fg(ef(de(cd(bc(ab(a))))));\n case 8:\n return gh(fg(ef(de(cd(bc(ab(a)))))));\n case 9:\n return hi(gh(fg(ef(de(cd(bc(ab(a))))))));\n default: {\n var ret = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n ret = arguments[i](ret);\n }\n return ret;\n }\n }\n}\n/**\n * Type hole simulation\n *\n * @since 2.7.0\n */\nexport var hole = absurd;\n/**\n * @since 2.11.0\n */\nexport var SK = function (_, b) { return b; };\n/**\n * Use `Predicate` module instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport function not(predicate) {\n return function (a) { return !predicate(a); };\n}\n/**\n * Use `Endomorphism` module instead.\n *\n * @category zone of death\n * @since 2.10.0\n * @deprecated\n */\nexport var getEndomorphismMonoid = function () { return ({\n concat: function (first, second) { return flow(first, second); },\n empty: identity\n}); };\n/** @internal */\nexport var dual = function (arity, body) {\n var isDataFirst = typeof arity === 'number' ? function (args) { return args.length >= arity; } : arity;\n return function () {\n var args = Array.from(arguments);\n if (isDataFirst(arguments)) {\n return body.apply(this, args);\n }\n return function (self) { return body.apply(void 0, __spreadArray([self], args, false)); };\n };\n};\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { dual } from './function';\n// -------------------------------------------------------------------------------------\n// Option\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isNone = function (fa) { return fa._tag === 'None'; };\n/** @internal */\nexport var isSome = function (fa) { return fa._tag === 'Some'; };\n/** @internal */\nexport var none = { _tag: 'None' };\n/** @internal */\nexport var some = function (a) { return ({ _tag: 'Some', value: a }); };\n// -------------------------------------------------------------------------------------\n// Either\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var isLeft = function (ma) { return ma._tag === 'Left'; };\n/** @internal */\nexport var isRight = function (ma) { return ma._tag === 'Right'; };\n/** @internal */\nexport var left = function (e) { return ({ _tag: 'Left', left: e }); };\n/** @internal */\nexport var right = function (a) { return ({ _tag: 'Right', right: a }); };\n// -------------------------------------------------------------------------------------\n// ReadonlyNonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var singleton = function (a) { return [a]; };\n/** @internal */\nexport var isNonEmpty = function (as) { return as.length > 0; };\n/** @internal */\nexport var head = function (as) { return as[0]; };\n/** @internal */\nexport var tail = function (as) { return as.slice(1); };\n// -------------------------------------------------------------------------------------\n// empty\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var emptyReadonlyArray = [];\n/** @internal */\nexport var emptyRecord = {};\n// -------------------------------------------------------------------------------------\n// Record\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var has = Object.prototype.hasOwnProperty;\n// -------------------------------------------------------------------------------------\n// NonEmptyArray\n// -------------------------------------------------------------------------------------\n/** @internal */\nexport var fromReadonlyNonEmptyArray = function (as) { return __spreadArray([as[0]], as.slice(1), true); };\n/** @internal */\nexport var liftNullable = function (F) {\n return function (f, onNullable) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(o == null ? left(onNullable.apply(void 0, a)) : right(o));\n };\n };\n};\n/** @internal */\nexport var liftOption = function (F) {\n return function (f, onNone) {\n return function () {\n var a = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n a[_i] = arguments[_i];\n }\n var o = f.apply(void 0, a);\n return F.fromEither(isNone(o) ? left(onNone.apply(void 0, a)) : right(o.value));\n };\n };\n};\n/** @internal */\nexport var flatMapNullable = function (F, M) {\n /*#__PURE__*/ return dual(3, function (self, f, onNullable) {\n return M.flatMap(self, liftNullable(F)(f, onNullable));\n });\n};\n/** @internal */\nexport var flatMapOption = function (F, M) {\n /*#__PURE__*/ return dual(3, function (self, f, onNone) { return M.flatMap(self, liftOption(F)(f, onNone)); });\n};\n/** @internal */\nexport var flatMapEither = function (F, M) {\n /*#__PURE__*/ return dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromEither(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapIO = function (F, M) {\n /*#__PURE__*/ return dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromIO(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapTask = function (F, M) {\n /*#__PURE__*/ return dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromTask(f(a)); });\n });\n};\n/** @internal */\nexport var flatMapReader = function (F, M) {\n /*#__PURE__*/ return dual(2, function (self, f) {\n return M.flatMap(self, function (a) { return F.fromReader(f(a)); });\n });\n};\n","/**\n * If a type `A` can form a `Semigroup` it has an **associative** binary operation.\n *\n * ```ts\n * interface Semigroup<A> {\n * readonly concat: (x: A, y: A) => A\n * }\n * ```\n *\n * Associativity means the following equality must hold for any choice of `x`, `y`, and `z`.\n *\n * ```ts\n * concat(x, concat(y, z)) = concat(concat(x, y), z)\n * ```\n *\n * A common example of a semigroup is the type `string` with the operation `+`.\n *\n * ```ts\n * import { Semigroup } from 'fp-ts/Semigroup'\n *\n * const semigroupString: Semigroup<string> = {\n * concat: (x, y) => x + y\n * }\n *\n * const x = 'x'\n * const y = 'y'\n * const z = 'z'\n *\n * semigroupString.concat(x, y) // 'xy'\n *\n * semigroupString.concat(x, semigroupString.concat(y, z)) // 'xyz'\n *\n * semigroupString.concat(semigroupString.concat(x, y), z) // 'xyz'\n * ```\n *\n * *Adapted from https://typelevel.org/cats*\n *\n * @since 2.0.0\n */\nimport { getSemigroup, identity } from './function';\nimport * as _ from './internal';\nimport * as M from './Magma';\nimport * as Or from './Ord';\n// -------------------------------------------------------------------------------------\n// constructors\n// -------------------------------------------------------------------------------------\n/**\n * Get a semigroup where `concat` will return the minimum, based on the provided order.\n *\n * @example\n * import * as N from 'fp-ts/number'\n * import * as S from 'fp-ts/Semigroup'\n *\n * const S1 = S.min(N.Ord)\n *\n * assert.deepStrictEqual(S1.concat(1, 2), 1)\n *\n * @category constructors\n * @since 2.10.0\n */\nexport var min = function (O) { return ({\n concat: Or.min(O)\n}); };\n/**\n * Get a semigroup where `concat` will return the maximum, based on the provided order.\n *\n * @example\n * import * as N from 'fp-ts/number'\n * import * as S from 'fp-ts/Semigroup'\n *\n * const S1 = S.max(N.Ord)\n *\n * assert.deepStrictEqual(S1.concat(1, 2), 2)\n *\n * @category constructors\n * @since 2.10.0\n */\nexport var max = function (O) { return ({\n concat: Or.max(O)\n}); };\n/**\n * @category constructors\n * @since 2.10.0\n */\nexport var constant = function (a) { return ({\n concat: function () { return a; }\n}); };\n// -------------------------------------------------------------------------------------\n// combinators\n// -------------------------------------------------------------------------------------\n/**\n * The dual of a `Semigroup`, obtained by swapping the arguments of `concat`.\n *\n * @example\n * import { reverse } from 'fp-ts/Semigroup'\n * import * as S from 'fp-ts/string'\n *\n * assert.deepStrictEqual(reverse(S.Semigroup).concat('a', 'b'), 'ba')\n *\n * @since 2.10.0\n */\nexport var reverse = M.reverse;\n/**\n * Given a struct of semigroups returns a semigroup for the struct.\n *\n * @example\n * import { struct } from 'fp-ts/Semigroup'\n * import * as N from 'fp-ts/number'\n *\n * interface Point {\n * readonly x: number\n * readonly y: number\n * }\n *\n * const S = struct<Point>({\n * x: N.SemigroupSum,\n * y: N.SemigroupSum\n * })\n *\n * assert.deepStrictEqual(S.concat({ x: 1, y: 2 }, { x: 3, y: 4 }), { x: 4, y: 6 })\n *\n * @since 2.10.0\n */\nexport var struct = function (semigroups) { return ({\n concat: function (first, second) {\n var r = {};\n for (var k in semigroups) {\n if (_.has.call(semigroups, k)) {\n r[k] = semigroups[k].concat(first[k], second[k]);\n }\n }\n return r;\n }\n}); };\n/**\n * Given a tuple of semigroups returns a semigroup for the tuple.\n *\n * @example\n * import { tuple } from 'fp-ts/Semigroup'\n * import * as B from 'fp-ts/boolean'\n * import * as N from 'fp-ts/number'\n * import * as S from 'fp-ts/string'\n *\n * const S1 = tuple(S.Semigroup, N.SemigroupSum)\n * assert.deepStrictEqual(S1.concat(['a', 1], ['b', 2]), ['ab', 3])\n *\n * const S2 = tuple(S.Semigroup, N.SemigroupSum, B.SemigroupAll)\n * assert.deepStrictEqual(S2.concat(['a', 1, true], ['b', 2, false]), ['ab', 3, false])\n *\n * @since 2.10.0\n */\nexport var tuple = function () {\n var semigroups = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n semigroups[_i] = arguments[_i];\n }\n return ({\n concat: function (first, second) { return semigroups.map(function (s, i) { return s.concat(first[i], second[i]); }); }\n });\n};\n/**\n * Between each pair of elements insert `middle`.\n *\n * @example\n * import { intercalate } from 'fp-ts/Semigroup'\n * import * as S from 'fp-ts/string'\n * import { pipe } from 'fp-ts/function'\n *\n * const S1 = pipe(S.Semigroup, intercalate(' + '))\n *\n * assert.strictEqual(S1.concat('a', 'b'), 'a + b')\n *\n * @since 2.10.0\n */\nexport var intercalate = function (middle) {\n return function (S) { return ({\n concat: function (x, y) { return S.concat(x, S.concat(middle, y)); }\n }); };\n};\n// -------------------------------------------------------------------------------------\n// instances\n// -------------------------------------------------------------------------------------\n/**\n * Always return the first argument.\n *\n * @example\n * import * as S from 'fp-ts/Semigroup'\n *\n * assert.deepStrictEqual(S.first<number>().concat(1, 2), 1)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var first = function () { return ({ concat: identity }); };\n/**\n * Always return the last argument.\n *\n * @example\n * import * as S from 'fp-ts/Semigroup'\n *\n * assert.deepStrictEqual(S.last<number>().concat(1, 2), 2)\n *\n * @category instances\n * @since 2.10.0\n */\nexport var last = function () { return ({ concat: function (_, y) { return y; } }); };\n// -------------------------------------------------------------------------------------\n// utils\n// -------------------------------------------------------------------------------------\n/**\n * Given a sequence of `as`, concat them and return the total.\n *\n * If `as` is empty, return the provided `startWith` value.\n *\n * @example\n * import { concatAll } from 'fp-ts/Semigroup'\n * import * as N from 'fp-ts/number'\n *\n * const sum = concatAll(N.SemigroupSum)(0)\n *\n * assert.deepStrictEqual(sum([1, 2, 3]), 6)\n * assert.deepStrictEqual(sum([]), 0)\n *\n * @since 2.10.0\n */\nexport var concatAll = M.concatAll;\n// -------------------------------------------------------------------------------------\n// deprecated\n// -------------------------------------------------------------------------------------\n/**\n * Use `void` module instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupVoid = constant(undefined);\n/**\n * Use [`getAssignSemigroup`](./struct.ts.html#getAssignSemigroup) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getObjectSemigroup = function () { return ({\n concat: function (first, second) { return Object.assign({}, first, second); }\n}); };\n/**\n * Use [`last`](#last) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getLastSemigroup = last;\n/**\n * Use [`first`](#first) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getFirstSemigroup = first;\n/**\n * Use [`tuple`](#tuple) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getTupleSemigroup = tuple;\n/**\n * Use [`struct`](#struct) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getStructSemigroup = struct;\n/**\n * Use [`reverse`](#reverse) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getDualSemigroup = reverse;\n/**\n * Use [`max`](#max) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getJoinSemigroup = max;\n/**\n * Use [`min`](#min) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getMeetSemigroup = min;\n/**\n * Use [`intercalate`](#intercalate) instead.\n *\n * @category zone of death\n * @since 2.5.0\n * @deprecated\n */\nexport var getIntercalateSemigroup = intercalate;\nexport function fold(S) {\n var concatAllS = concatAll(S);\n return function (startWith, as) { return (as === undefined ? concatAllS(startWith) : concatAllS(startWith)(as)); };\n}\n/**\n * Use [`SemigroupAll`](./boolean.ts.html#SemigroupAll) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupAll = {\n concat: function (x, y) { return x && y; }\n};\n/**\n * Use [`SemigroupAny`](./boolean.ts.html#SemigroupAny) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupAny = {\n concat: function (x, y) { return x || y; }\n};\n/**\n * Use [`getSemigroup`](./function.ts.html#getSemigroup) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var getFunctionSemigroup = getSemigroup;\n/**\n * Use [`Semigroup`](./string.ts.html#Semigroup) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupString = {\n concat: function (x, y) { return x + y; }\n};\n/**\n * Use [`SemigroupSum`](./number.ts.html#SemigroupSum) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupSum = {\n concat: function (x, y) { return x + y; }\n};\n/**\n * Use [`SemigroupProduct`](./number.ts.html#SemigroupProduct) instead.\n *\n * @category zone of death\n * @since 2.0.0\n * @deprecated\n */\nexport var semigroupProduct = {\n concat: function (x, y) { return x * y; }\n};\n","import { Semigroup } from \"fp-ts/Semigroup\";\n\nexport const semigroupDiff: Semigroup<number> = {\n concat: (x, y) => x - y,\n};\n\nexport const semigroupDiv: Semigroup<number> = {\n concat: (x, y) => x / y,\n};\n","import { semigroupSum, semigroupProduct, struct } from \"fp-ts/Semigroup\";\nimport { ClientEvent } from \"../utils/event/Events\";\nimport { semigroupDiff } from \"../utils/semigroup/semigroupDiff\";\nimport { Rectangle } from \"./Rectangle\";\n\nexport type Point = {\n readonly x: number;\n readonly y: number;\n};\n\nexport const fromRectangle = ({ x, y }: Rectangle): Point => {\n return {\n x,\n y,\n };\n};\n\nexport const fromMouseEvent = ({ clientX, clientY }: ClientEvent): Point => {\n return {\n x: clientX,\n y: clientY,\n };\n};\n\nexport const fromTouchEvent = ({ touches }: TouchEvent): Point => {\n return {\n x: touches[0].clientX,\n y: touches[0].clientY,\n };\n};\n\nexport const pointDiffSemigroup = struct<Point>({\n x: semigroupDiff,\n y: semigroupDiff,\n});\n\nexport const pointSumSemigroup = struct<Point>({\n x: semigroupSum,\n y: semigroupSum,\n});\n\nexport const pointProductSemigroup = struct<Point>({\n x: semigroupProduct,\n y: semigroupProduct,\n});\n","import * as Point from \"../geometry/Point\";\nimport { Rectangle } from \"../geometry/Rectangle\";\n\nexport enum HandlerDirection {\n East,\n North,\n NorthEast,\n NorthWest,\n South,\n SouthEast,\n SouthWest,\n West,\n}\n\nexport const getCursorValue = (direction: HandlerDirection): string => {\n switch (direction) {\n case HandlerDirection.East:\n return \"e-resize\";\n case HandlerDirection.North:\n return \"n-resize\";\n case HandlerDirection.NorthEast:\n return \"ne-resize\";\n case HandlerDirection.NorthWest:\n return \"nw-resize\";\n case HandlerDirection.South:\n return \"s-resize\";\n case HandlerDirection.SouthEast:\n return \"se-resize\";\n case HandlerDirection.SouthWest:\n return \"sw-resize\";\n case HandlerDirection.West:\n return \"w-resize\";\n default:\n return \"pointer\";\n }\n};\n\nexport interface Handler {\n position: Point.Point;\n readonly direction: HandlerDirection;\n}\n\nexport const fromRectangle = (r: Rectangle): Handler[] => [\n {\n position: Point.fromRectangle(r),\n direction: HandlerDirection.NorthWest,\n },\n {\n position: Point.pointSumSemigroup.concat(Point.fromRectangle(r), {\n x: r.width,\n y: 0,\n }),\n direction: HandlerDirection.NorthEast,\n },\n {\n position: Point.pointSumSemigroup.concat(Point.fromRectangle(r), {\n x: 0,\n y: r.height,\n }),\n direction: HandlerDirection.SouthWest,\n },\n {\n position: Point.pointSumSemigroup.concat(Point.fromRectangle(r), {\n x: r.width,\n y: r.height,\n }),\n direction: HandlerDirection.SouthEast,\n },\n];\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as t,h as i,H as e,g as n,c as s,F as r}from"./p-fa17e81f.js";import{_ as o,O as a,S as c,a as d,E as h,i as l,s as u,c as p,m as f,f as g,g as m,b as v,A as b,d as y,e as w,T as x,h as k}from"./p-3abc679c.js";import{C as I}from"./p-c24caccd.js";import{c as C,f as P,a as T}from"./p-18fd769b.js";import{h as _,t as R,p as S}from"./p-3b99c62d.js";import{c as $,a as j,v as N,b as E,d as V}from"./p-2f7bf983.js";const A=":host{--vviinn-progressbar-width:0;--vviinn-carousel-item-width:150px;--vviinn-carousel-columns-internal:var(--vviinn-carousel-columns, 4);--vviinn-carousel-image-width-system:140px}.body{display:flex;position:relative;width:var(--vviinn-carousel-content-width);flex-direction:column}.content-wrapper *{box-sizing:border-box}.content-wrapper{overflow-y:hidden;overflow-x:auto;flex-grow:1}.bullets{margin-top:16px;display:flex;flex-direction:row;grid-gap:24px;justify-content:center}.bullet{width:10px;height:10px;background:#e0e0e0;border-radius:50%;cursor:pointer}.bullet.active{background:#161616}.content:not(.show-scrollbar),.content.grid{scrollbar-color:#fff0 #fff0}.content:not(.show-scrollbar)::-webkit-scrollbar,.content.grid::-webkit-scrollbar{opacity:0}.content{display:flex;flex-direction:row;grid-gap:8px;scroll-snap-type:x mandatory;overflow-y:hidden;overflow-x:auto;flex-grow:1;padding-bottom:16px}.content.left>*{scroll-snap-align:start}.content.right>*{scroll-snap-align:end}:host(.continuity) button{border-radius:2px}:host(.grid) button{border-radius:50%}button{align-items:center;background-color:white;border:none;box-shadow:0px 2px 6px rgba(0, 0, 0, 0.15);cursor:pointer;display:grid;height:40px;justify-items:center;position:absolute;top:calc(50% - 20px);width:40px;z-index:1;padding:0;margin:0}button{fill:#525252}button:disabled{display:none}button.prev svg{transform:rotate(180deg);margin-left:-5px}.prev{left:0}.next{right:0}.items-group{display:grid;grid-gap:16px;grid-template-columns:repeat(var(--vviinn-carousel-columns-internal), 1fr);min-width:100%}vviinn-product-card::part(price-container){text-align:center}:host(.classic) vviinn-product-card::part(title),:host(.classic) vviinn-product-card::part(brand),:host(.classic) vviinn-product-card::part(type){text-align:center}@media (max-width: 480px){:host(.modern) button{display:none}.items-group{grid-template-columns:repeat(2, 1fr)}}";const z="--vviinn-carousel-columns-internal";const O="--vviinn-carousel-content-width";const L="--vviinn-carousel-image-width";const D="items-group";const W=class{constructor(i){t(this,i);this.columns=0;this.resizeObserver=new ResizeObserver((()=>this.handleResize()));this.mutationObserver=new MutationObserver((()=>this.cloneSlottedContent()));this.isLastGroup=()=>this.activeContentGroup===this.getContentGroups().length-1&&this.mode==="grid";this.isFirstGroup=()=>this.activeContentGroup===0&&this.mode==="grid";this.moveDirection="right";this.contentGroups=[];this.activeContentGroup=0;this.isRTL=false;this.mode="continuity";this.imageWidth=140;this.showScroll=true;this.campaignTypeId=undefined;this.widgetElementId=undefined;this.gridArrowsDynamic=undefined;this.recommendations=[]}componentWillLoad(){this.isRTL=document.dir==="rtl"}connectedCallback(){this.setItemWidth()}disconnectedCallback(){this.resizeObserver.disconnect()}componentDidLoad(){this.setWidth();this.processScrollbarWidth();this.columns=this.getColumnsNumber();const t=this.el.querySelector(".content");this.mutationObserver.observe(t,{subtree:true,childList:true});this.resizeObserver.observe(this.getHostParent())}getItemWidthFromDocument(){return parseInt(getComputedStyle(document.body).getPropertyValue(L))}setItemWidth(){const t=this.getItemWidthFromDocument();const i=isNaN(t)?this.imageWidth:t;this.el.style.setProperty(L,`${i}px`)}getContentClassMap(){return{content:true,[this.moveDirection]:true,[this.mode]:true,"show-scrollbar":this.showScroll}}handleResize(){this.setWidth();this.processScrollbarWidth();this.setItemWidth();const t=this.getColumnsNumber();if(t!==this.columns){this.columns=t}}calculateMoveStep(){const t=this.getContent().map((t=>t.getBoundingClientRect().width));const i=t.reduce(((t,i)=>t+i),0);return i/t.length}getHostParent(){const t=this.el.parentNode;return t.host.parentElement}setWidth(){const t=this.getHostParent();if(!t)return;const i=getComputedStyle(t);const e=t.getBoundingClientRect().width;const n=e-(parseInt(i["padding-right"])+parseInt(i["padding-left"]));this.el.style.setProperty(O,`${n}px`)}getParent(){const t=this.el.parentNode;const i=t.host;return i.parentElement}cloneSlottedContent(){this.setWidth()}getActiveGroupIndex(){var t,i;const e=(i=(t=this.getContentNode())===null||t===void 0?void 0:t.getBoundingClientRect())===null||i===void 0?void 0:i.left;if(!e)return 0;const n=this.getContentGroups();const s=n.map((t=>t.getBoundingClientRect().left));const r=s.map(((t,i)=>[t,i])).filter((t=>t[0]>=0));return r.length>0?this.isRTL?r[r.length-1][1]:r[0][1]:0}getContentNode(){return this.el.querySelector(".content")}getContent(){const t=this.getContentNode().children;return Array.from(t).map((t=>t))}getColumnsNumber(){const t=getComputedStyle(this.el);const i=t.getPropertyValue(z);const e=parseInt(i);return e&&!isNaN(e)?e:4}getContentGroups(){return Array.from(this.el.querySelectorAll(`.${D}`))}showNext(){this.moveDirection="right";const t=this.getContentNode();requestAnimationFrame((()=>{t.scrollTo({top:0,left:t.scrollLeft+this.calculateMoveStep(),behavior:"smooth"})}))}showPrev(){this.moveDirection="left";const t=this.getContentNode();requestAnimationFrame((()=>{t.scrollTo({top:0,left:t.scrollLeft-this.calculateMoveStep(),behavior:"smooth"})}))}scroll(t){const i=this.getContentNode();requestAnimationFrame((()=>{i.scrollTo({top:0,left:this.calculateMoveStep()*t,behavior:"smooth"})}))}processScrollbarWidth(){const t=this.getContentNode();if(!t)return;const i=(t.scrollLeft+t.clientWidth)/t.scrollWidth;const e=t.clientWidth*i;this.el.style.setProperty("--vviinn-progressbar-width",`${e}px`);this.activeContentGroup=this.getActiveGroupIndex()}showBullets(){return this.mode==="grid"&&this.showScroll}showScrollbar(){return this.mode==="continuity"&&this.showScroll}getClassMap(){return{[this.mode]:true,"show-scrollbar":this.showScrollbar()}}renderRecommendation(t,e){return i("vviinn-product-card",{part:"product-part",productId:t.productId,productTitle:t.title,deeplink:t.deeplink,image:t.image.thumbnail,brand:t.brand,imageWidth:this.imageWidth,imageRatio:1,price:t.price.actual,salePrice:t.price.sale,responsive:this.mode==="grid",dimmedBackground:this.mode==="continuity",campaignTypeId:this.campaignTypeId,index:e,widgetElementId:this.widgetElementId})}renderRecommendationGroup(t){return i("div",{class:D,part:"items-group"},...t)}renderRecommendationGroups(t){return t.map((t=>this.renderRecommendationGroup(t)))}renderRecommendations(){return this.mode==="grid"?this.renderGrid():this.renderRecommendationsElements()}renderRecommendationsElements(){return this.recommendations.map(((t,i)=>this.renderRecommendation(t,i)))}renderGrid(){const t=this.renderRecommendationsElements();const i=o.chunksOf(this.getColumnsNumber())(t);return this.renderRecommendationGroups(i)}renderBullets(){const t=Math.ceil(this.recommendations.length/this.getColumnsNumber());const e=Array.from(Array(t).keys());return e.map((t=>i("div",{class:{bullet:true,active:this.activeContentGroup===t},onClick:()=>this.scroll(t)})))}render(){return i(e,{class:this.getClassMap()},i("div",{class:Object.assign({body:true},this.getClassMap())},i("button",{class:"prev",onClick:()=>this.showPrev(),part:"carousel-button",disabled:this.gridArrowsDynamic&&this.isFirstGroup()},i(I,null)),i("div",{class:this.getContentClassMap(),onScroll:()=>this.processScrollbarWidth()},this.renderRecommendations()),i("button",{class:"next",onClick:()=>this.showNext(),part:"carousel-button",disabled:this.gridArrowsDynamic&&this.isLastGroup()},i(I,null))),this.showBullets()&&i("div",{class:"bullets"},this.renderBullets()))}get el(){return n(this)}};W.style=A;class M{sendImpression(t){var i,e,n;gtag("event","view_item_list",{items:[{id:t.productId,name:t.title,brand:(i=t.brand)!==null&&i!==void 0?i:"",category:(e=t.productType)!==null&&e!==void 0?e:"",list_name:"VI VPR View",price:Math.min(...[t.price.actual,(n=t.price.sale)!==null&&n!==void 0?n:Infinity])}]});return undefined}sendClick(t){var i,e,n;gtag("event","select_content",{content_type:"product",items:[{id:t.productId,name:t.title,brand:(i=t.brand)!==null&&i!==void 0?i:"",category:(e=t.productType)!==null&&e!==void 0?e:"",list_name:"VI VPR View",price:Math.min(...[t.price.actual,(n=t.price.sale)!==null&&n!==void 0?n:Infinity])}]});return undefined}}class F{constructor(){ga("require","ec")}convertProduct(t){var i,e,n;return{id:t.productId,name:t.title,brand:(i=t.brand)!==null&&i!==void 0?i:"",category:(e=t.productType)!==null&&e!==void 0?e:"",list:"VI VPR View",price:Math.min(...[t.price.actual,(n=t.price.sale)!==null&&n!==void 0?n:Infinity])}}sendImpression(t){ga("ec:addImpression",this.convertProduct(t));return undefined}sendClick(t){var i,e,n;ga("ec:addProduct",{id:t.productId,name:t.title,brand:(i=t.brand)!==null&&i!==void 0?i:"",category:(e=t.productType)!==null&&e!==void 0?e:"",price:Math.min(...[t.price.actual,(n=t.price.sale)!==null&&n!==void 0?n:Infinity])});ga("ec:setAction","click",{list:"VI VPR View"});return undefined}}const B=()=>d.pipe(a.fromNullable(window.gtag),a.map((()=>new M)));const U=()=>d.pipe(a.fromNullable(window.ga),a.map((()=>new F)));const G=a.getMonoid(c.first());const q=G.concat(B(),U());function H(t,i,e){return function(n){var s=Array(e.length+1);for(var r=0;r<e.length;r++){s[r]=e[r]}s[e.length]=n;return i===0?t.apply(null,s):H(t,i-1,s)}}var J={1:function(t){return[t]},2:function(t){return function(i){return[t,i]}},3:function(t){return function(i){return function(e){return[t,i,e]}}},4:function(t){return function(i){return function(e){return function(n){return[t,i,e,n]}}}},5:function(t){return function(i){return function(e){return function(n){return function(s){return[t,i,e,n,s]}}}}}};function K(t){if(!_.call(J,t)){J[t]=H(R,t-1,[])}return J[t]}function Q(t){return function(){var i=[];for(var e=0;e<arguments.length;e++){i[e]=arguments[e]}var n=i.length;var s=K(n);var r=t.map(i[0],s);for(var o=1;o<n;o++){r=t.ap(r,i[o])}return r}}const X=/fit\/\d+\//;const Y=t=>d.pipe(t.match(X),h.fromNullable(t),h.map((()=>t)));const Z=(t,i)=>d.pipe(Y(t),h.map((t=>t.replace(X,`fit/${i}/`))),h.getOrElse((()=>t)));const tt=(t,e)=>t.deeplink?i("a",{class:t.part,part:t.part,href:t.deeplink},e):e;const it=t=>{const e=t.locale;const n=t.priceType;const s=new Intl.NumberFormat(e,{minimumFractionDigits:2}).format(t.price);const r=t.prefix?i("span",{part:"price-prefix"},t.prefix+" "):null;const o=t.currency?i("span",{part:"currency"}," "+t.currency):null;return i("span",{class:"price-amount",part:`price-amount${n?"-"+n:""}`},r,s,o)};const et=t=>i("span",{class:"price-container",part:"price-container"},t.salePrice?[i("span",{class:"price-sale",part:"price-sale"},i(it,{prefix:t.prefix,currency:t.currency,price:t.salePrice,locale:t.locale,priceType:"sale"})),i("span",{class:"price-outdated",part:"price-outdated"},i(it,{prefix:t.prefix,currency:t.currency,price:t.price,locale:t.locale,priceType:"outdated"}))]:i("span",{class:"price-regular",part:"price-regular"},i(it,{prefix:t.prefix,currency:t.currency,price:t.price,locale:t.locale,priceType:"regular"})));const nt=(t,e=(()=>undefined))=>i("picture",null,i("img",{loading:t.lazy?"lazy":"eager",part:"image",class:"image",width:t.width,height:t.height,src:Z(t.src,t.width),alt:t.title,onLoad:e}));const st=(t,e=(()=>undefined))=>i("picture",null,i("img",{loading:t.lazy?"lazy":"eager",part:"image",class:"image responsive",src:Z(t.src,t.width),alt:t.title,onLoad:e}));const rt=':host{align-items:center;display:flex;flex-direction:column;gap:8px;height:100%}.price-container{display:flex;flex-direction:column}.price-sale,.price-regular{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#161616}.price-outdated{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#757575;text-decoration:line-through}.product-type{word-wrap:anywhere}.image{display:grid;align-content:center;-o-object-position:50% 50%;object-position:50% 50%;-o-object-fit:contain;object-fit:contain;text-align:center;box-sizing:border-box}img.responsive{width:100%;height:auto;aspect-ratio:1}.brand,.type{display:none}.title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#161616;display:-webkit-box;font-size:16px;font-style:normal;font-weight:500;line-height:24px;margin-bottom:8px;overflow:hidden}.deeplink{text-decoration:none}.image-link{display:contents}picture{position:relative;width:100%}:host(.dimmed) picture::before{content:"";width:100%;height:100%;box-sizing:border-box;background:#f7f7f7;display:block;top:0;left:0;position:absolute;mix-blend-mode:multiply}';const ot=class{constructor(i){t(this,i);this.vviinnProductLoad=s(this,"vviinnProductLoad",7);this.vviinnProductView=s(this,"vviinnProductView",7);this.vviinnProductClick=s(this,"vviinnProductClick",7);this.productData=null;this.intersectionObserver=new IntersectionObserver(this.intersectionCallback.bind(this),{threshold:1});this.brand=undefined;this.currency=undefined;this.deeplink=undefined;this.image=undefined;this.imageRatio=1;this.imageWidth=200;this.locale=undefined;this.price=undefined;this.pricePrefix=undefined;this.productId=undefined;this.productTitle=undefined;this.productType=undefined;this.salePrice=undefined;this.responsive=false;this.campaignTypeId=undefined;this.dimmedBackground=false;this.widgetElementId=undefined;this.buttonElementId=undefined;this.index=0;this.imageLoaded=false}connectedCallback(){this.productData=this.getProductData()}getWidgetType(){return this.campaignTypeId==="VPR"||this.campaignTypeId==="VCS"?"VPR":"VPS"}getProductData(){var t;return{productId:this.productId,productRank:this.index,productName:this.productTitle,widgetType:this.getWidgetType(),campaignTypeId:this.campaignTypeId,campaignTypeName:C[this.campaignTypeId],widgetId:(t=this.buttonElementId)!==null&&t!==void 0?t:this.widgetElementId}}intersectionCallback(t){if(t.some((t=>t.isIntersecting))){d.pipe(q,a.map((t=>t.sendImpression(this.getProduct()))));this.vviinnProductView.emit(this.productData);this.intersectionObserver.disconnect()}}componentDidLoad(){this.vviinnProductLoad.emit(this.productData);this.intersectionObserver.observe(this.el);const t=this.el.shadowRoot.querySelectorAll("a");t.forEach((t=>t.addEventListener("click",(t=>{t.preventDefault();t.stopImmediatePropagation();this.vviinnProductClick.emit(this.productData);d.pipe(q,a.match((()=>null),(t=>t.sendClick(this.getProduct()))))}))))}getProduct(){return l.results.find((t=>t.productId===this.productId))}renderImage(){const t={width:this.imageWidth,height:this.imageWidth*this.imageRatio,src:this.image,title:this.productTitle,lazy:false};return this.responsive?st(t):nt(t)}render(){var t,n,s;return i(e,{part:"product-card",class:{dimmed:this.dimmedBackground},exportparts:"brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title"},i(tt,{deeplink:this.deeplink,part:"image-link"},this.renderImage()),i(tt,{deeplink:this.deeplink,part:"deeplink"},i("span",{class:"title",part:"title"},this.productTitle)),i("span",{class:"brand",part:"brand"},this.brand),i("span",{class:"type",part:"type"},this.productType),i(et,{prefix:(t=this.pricePrefix)!==null&&t!==void 0?t:u.pricePrefix,currency:(n=this.currency)!==null&&n!==void 0?n:u.currencySign,price:this.price,salePrice:this.salePrice,locale:(s=this.locale)!==null&&s!==void 0?s:u.locale}))}get el(){return n(this)}};ot.style=rt;const at=t=>`Bearer ${t}`;const ct=t=>new Headers({Authorization:t});const dt=t=>({headers:t});const ht=d.flow(at,ct,dt);const lt=Q(b);const ut=(t,i={})=>S(lt(m(),v),g,p(f(t,i)));const pt=t=>i=>e=>n=>{const s=d.pipe(e,y(encodeURIComponent),w((()=>`product/${t}/similar-products${i?`?color=${i}`:""}`),(e=>`product/${t}/similar-products?campaigns=${e}${i?`&color=${i}`:""}`)));return ut(s,n)};const ft=t=>i=>e=>n=>{const s=d.pipe(e,y(encodeURIComponent),w((()=>`product/${t}/cross-selling-products${i?`?color=${i}`:""}`),(e=>`product/${t}/cross-selling-products?campaigns=${e}${i?`&color=${i}`:""}`)));return ut(s,n)};const gt=t=>d.pipe(P(t),T((()=>pt),(()=>ft)));function mt(t){return typeof t==="function"}function vt(t){const i=t=>{Error.call(t);t.stack=(new Error).stack};const e=t(i);e.prototype=Object.create(Error.prototype);e.prototype.constructor=e;return e}const bt=vt((t=>function i(e){t(this);this.message=e?`${e.length} errors occurred during unsubscription:\n${e.map(((t,i)=>`${i+1}) ${t.toString()}`)).join("\n ")}`:"";this.name="UnsubscriptionError";this.errors=e}));function yt(t,i){if(t){const e=t.indexOf(i);0<=e&&t.splice(e,1)}}class wt{constructor(t){this.initialTeardown=t;this.closed=false;this._parentage=null;this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=true;const{_parentage:i}=this;if(i){this._parentage=null;if(Array.isArray(i)){for(const t of i){t.remove(this)}}else{i.remove(this)}}const{initialTeardown:e}=this;if(mt(e)){try{e()}catch(i){t=i instanceof bt?i.errors:[i]}}const{_finalizers:n}=this;if(n){this._finalizers=null;for(const i of n){try{It(i)}catch(i){t=t!==null&&t!==void 0?t:[];if(i instanceof bt){t=[...t,...i.errors]}else{t.push(i)}}}}if(t){throw new bt(t)}}}add(t){var i;if(t&&t!==this){if(this.closed){It(t)}else{if(t instanceof wt){if(t.closed||t._hasParent(this)){return}t._addParent(this)}(this._finalizers=(i=this._finalizers)!==null&&i!==void 0?i:[]).push(t)}}}_hasParent(t){const{_parentage:i}=this;return i===t||Array.isArray(i)&&i.includes(t)}_addParent(t){const{_parentage:i}=this;this._parentage=Array.isArray(i)?(i.push(t),i):i?[i,t]:t}_removeParent(t){const{_parentage:i}=this;if(i===t){this._parentage=null}else if(Array.isArray(i)){yt(i,t)}}remove(t){const{_finalizers:i}=this;i&&yt(i,t);if(t instanceof wt){t._removeParent(this)}}}wt.EMPTY=(()=>{const t=new wt;t.closed=true;return t})();const xt=wt.EMPTY;function kt(t){return t instanceof wt||t&&"closed"in t&&mt(t.remove)&&mt(t.add)&&mt(t.unsubscribe)}function It(t){if(mt(t)){t()}else{t.unsubscribe()}}const Ct={onUnhandledError:null,onStoppedNotification:null,Promise:undefined,useDeprecatedSynchronousErrorHandling:false,useDeprecatedNextContext:false};const Pt={setTimeout(t,i,...e){const{delegate:n}=Pt;if(n===null||n===void 0?void 0:n.setTimeout){return n.setTimeout(t,i,...e)}return setTimeout(t,i,...e)},clearTimeout(t){const{delegate:i}=Pt;return((i===null||i===void 0?void 0:i.clearTimeout)||clearTimeout)(t)},delegate:undefined};function Tt(t){Pt.setTimeout((()=>{const{onUnhandledError:i}=Ct;if(i){i(t)}else{throw t}}))}function _t(){}const Rt=(()=>jt("C",undefined,undefined))();function St(t){return jt("E",undefined,t)}function $t(t){return jt("N",t,undefined)}function jt(t,i,e){return{kind:t,value:i,error:e}}function Nt(t){{t()}}class Et extends wt{constructor(t){super();this.isStopped=false;if(t){this.destination=t;if(kt(t)){t.add(this)}}else{this.destination=Mt}}static create(t,i,e){return new Ot(t,i,e)}next(t){if(this.isStopped){Wt($t(t),this)}else{this._next(t)}}error(t){if(this.isStopped){Wt(St(t),this)}else{this.isStopped=true;this._error(t)}}complete(){if(this.isStopped){Wt(Rt,this)}else{this.isStopped=true;this._complete()}}unsubscribe(){if(!this.closed){this.isStopped=true;super.unsubscribe();this.destination=null}}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const Vt=Function.prototype.bind;function At(t,i){return Vt.call(t,i)}class zt{constructor(t){this.partialObserver=t}next(t){const{partialObserver:i}=this;if(i.next){try{i.next(t)}catch(t){Lt(t)}}}error(t){const{partialObserver:i}=this;if(i.error){try{i.error(t)}catch(t){Lt(t)}}else{Lt(t)}}complete(){const{partialObserver:t}=this;if(t.complete){try{t.complete()}catch(t){Lt(t)}}}}class Ot extends Et{constructor(t,i,e){super();let n;if(mt(t)||!t){n={next:t!==null&&t!==void 0?t:undefined,error:i!==null&&i!==void 0?i:undefined,complete:e!==null&&e!==void 0?e:undefined}}else{let i;if(this&&Ct.useDeprecatedNextContext){i=Object.create(t);i.unsubscribe=()=>this.unsubscribe();n={next:t.next&&At(t.next,i),error:t.error&&At(t.error,i),complete:t.complete&&At(t.complete,i)}}else{n=t}}this.destination=new zt(n)}}function Lt(t){{Tt(t)}}function Dt(t){throw t}function Wt(t,i){const{onStoppedNotification:e}=Ct;e&&Pt.setTimeout((()=>e(t,i)))}const Mt={closed:true,next:_t,error:Dt,complete:_t};const Ft=(()=>typeof Symbol==="function"&&Symbol.observable||"@@observable")();function Bt(t){return t}function Ut(t){if(t.length===0){return Bt}if(t.length===1){return t[0]}return function i(e){return t.reduce(((t,i)=>i(t)),e)}}class Gt{constructor(t){if(t){this._subscribe=t}}lift(t){const i=new Gt;i.source=this;i.operator=t;return i}subscribe(t,i,e){const n=Jt(t)?t:new Ot(t,i,e);Nt((()=>{const{operator:t,source:i}=this;n.add(t?t.call(n,i):i?this._subscribe(n):this._trySubscribe(n))}));return n}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){i=qt(i);return new i(((i,e)=>{const n=new Ot({next:i=>{try{t(i)}catch(t){e(t);n.unsubscribe()}},error:e,complete:i});this.subscribe(n)}))}_subscribe(t){var i;return(i=this.source)===null||i===void 0?void 0:i.subscribe(t)}[Ft](){return this}pipe(...t){return Ut(t)(this)}toPromise(t){t=qt(t);return new t(((t,i)=>{let e;this.subscribe((t=>e=t),(t=>i(t)),(()=>t(e)))}))}}Gt.create=t=>new Gt(t);function qt(t){var i;return(i=t!==null&&t!==void 0?t:Ct.Promise)!==null&&i!==void 0?i:Promise}function Ht(t){return t&&mt(t.next)&&mt(t.error)&&mt(t.complete)}function Jt(t){return t&&t instanceof Et||Ht(t)&&kt(t)}const Kt=vt((t=>function i(){t(this);this.name="ObjectUnsubscribedError";this.message="object unsubscribed"}));class Qt extends Gt{constructor(){super();this.closed=false;this.currentObservers=null;this.observers=[];this.isStopped=false;this.hasError=false;this.thrownError=null}lift(t){const i=new Xt(this,this);i.operator=t;return i}_throwIfClosed(){if(this.closed){throw new Kt}}next(t){Nt((()=>{this._throwIfClosed();if(!this.isStopped){if(!this.currentObservers){this.currentObservers=Array.from(this.observers)}for(const i of this.currentObservers){i.next(t)}}}))}error(t){Nt((()=>{this._throwIfClosed();if(!this.isStopped){this.hasError=this.isStopped=true;this.thrownError=t;const{observers:i}=this;while(i.length){i.shift().error(t)}}}))}complete(){Nt((()=>{this._throwIfClosed();if(!this.isStopped){this.isStopped=true;const{observers:t}=this;while(t.length){t.shift().complete()}}}))}unsubscribe(){this.isStopped=this.closed=true;this.observers=this.currentObservers=null}get observed(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0}_trySubscribe(t){this._throwIfClosed();return super._trySubscribe(t)}_subscribe(t){this._throwIfClosed();this._checkFinalizedStatuses(t);return this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:i,isStopped:e,observers:n}=this;if(i||e){return xt}this.currentObservers=null;n.push(t);return new wt((()=>{this.currentObservers=null;yt(n,t)}))}_checkFinalizedStatuses(t){const{hasError:i,thrownError:e,isStopped:n}=this;if(i){t.error(e)}else if(n){t.complete()}}asObservable(){const t=new Gt;t.source=this;return t}}Qt.create=(t,i)=>new Xt(t,i);class Xt extends Qt{constructor(t,i){super();this.destination=t;this.source=i}next(t){var i,e;(e=(i=this.destination)===null||i===void 0?void 0:i.next)===null||e===void 0?void 0:e.call(i,t)}error(t){var i,e;(e=(i=this.destination)===null||i===void 0?void 0:i.error)===null||e===void 0?void 0:e.call(i,t)}complete(){var t,i;(i=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||i===void 0?void 0:i.call(t)}_subscribe(t){var i,e;return(e=(i=this.source)===null||i===void 0?void 0:i.subscribe(t))!==null&&e!==void 0?e:xt}}const Yt=":host{display:grid;grid-gap:1rem;width:100%}:host(:not(.loaded)){position:absolute;visibility:hidden}:host(.grid) vviinn-product-card::part(image){border:1px solid #dddddd;width:100%}h2{margin:0}vviinn-product-card::part(price-container){align-self:flex-start;text-align:left;display:flex}.results{display:grid;grid-gap:1rem}.no-result-text{font-size:20px}.visually-hidden{position:absolute;top:0;left:0;z-index:-1;height:0;width:0}h2{margin:0}:host(.grid) h2{justify-content:center}:host(.grid) vviinn-product-card::part(image){min-width:100%}:host(.grid) vviinn-product-card::part(image-link){width:100%}:host(.grid) vviinn-product-card::part(title),:host(.grid) vviinn-product-card::part(brand),:host(.grid) vviinn-product-card::part(type){text-align:center}:host(.grid) vviinn-product-card::part(price-container){align-self:center}:host(.continuity) vviinn-product-card::part(title),:host(.continuity) vviinn-product-card::part(brand),:host(.continuity) vviinn-product-card::part(type),:host(.continuity) vviinn-product-card::part(deeplink){text-align:left;max-width:unset;align-self:start}";var Zt=undefined&&undefined.__rest||function(t,i){var e={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&i.indexOf(n)<0)e[n]=t[n];if(t!=null&&typeof Object.getOwnPropertySymbols==="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++){if(i.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s]))e[n[s]]=t[n[s]]}return e};const ti=class{constructor(i){t(this,i);this.vviinnWidgetLoad=s(this,"vviinnWidgetLoad",7);this.vviinnProductClick=s(this,"vviinnProductClick",7);this.vviinnProductView=s(this,"vviinnProductView",7);this.vviinnProductLoad=s(this,"vviinnProductLoad",7);this.vviinnNoResult=s(this,"vviinnNoResult",7);this.vviinnRecommendationsLoaded=s(this,"vviinnRecommendationsLoaded",7);this.productImageLoadedSubject=new Qt;this.setTrackingDeactivated=t=>{if(t.status==="rejected"){this.trackingDeactivated=true}};this.blockTitle="Recommended products";this.imageRatio=1;this.imageWidth=300;this.productId=undefined;this.token=undefined;this.currencySign="€";this.pricePrefix=undefined;this.mode="continuity";this.campaignType="VPR";this.locale="de-DE";this.campaigns="";this.color=undefined;this.gridArrowsDynamic=false;this.noResultText=undefined;this.noResultShow=true;this.apiPath="https://api.vviinn.com";this.useCarousel=true;this.showScroll=true;this.cssUrl=null;this.buttonElementId=undefined;this.recommendations=[];this.trackingDeactivated=false;this.hasErrorOnLoad=false}getEventData(){return{widgetType:"VPR",campaignTypeId:this.campaignType,campaignTypeName:C[this.campaignType],widgetId:this.id}}handleProductIdChange(){this.getRecommendations()}handleCampaignTypeChange(){this.getRecommendations()}handleCampaignsChange(){this.getRecommendations()}handleApiPathChange(t){u.apiPath=t;this.getRecommendations()}handleProductLoading({detail:t}){this.productImageLoadedSubject.next(t.productId)}trackProductView({detail:t}){if(this.trackingDeactivated)return;const{productRank:i,productId:e,productName:n,widgetType:s,widgetId:r,campaignTypeId:o,campaignTypeName:a}=t,c=Zt(t,["productRank","productId","productName","widgetType","widgetId","campaignTypeId","campaignTypeName"]);const d=$(Object.assign({session_id:this.uiSessionId,rank:i,product:e},c));this.trackingApi.trackEvent(d).then(this.setTrackingDeactivated)}async trackProductClick({detail:t}){const{productRank:i,productId:e,productName:n,widgetType:s,widgetId:r,campaignTypeId:o,campaignTypeName:a}=t,c=Zt(t,["productRank","productId","productName","widgetType","widgetId","campaignTypeId","campaignTypeName"]);const d=j(Object.assign({session_id:this.uiSessionId,rank:i,product:e},c));if(!this.trackingDeactivated){await this.trackingApi.trackEvent(d).then(this.setTrackingDeactivated)}const h=this.recommendations.find((i=>i.productId===t.productId));if(!h||!h.deeplink)return;window.location.href=h.deeplink}connectedCallback(){var t;u.apiPath=this.apiPath;u.currencySign=this.currencySign;u.locale=this.locale;this.id=(t=this.buttonElementId)!==null&&t!==void 0?t:this.el.id;this.uiSessionId=N();this.trackingApi=E(this.apiPath,this.token);if(this.trackingDeactivated)return;const i=V({action:"open",session_id:this.uiSessionId});this.trackingApi.trackEvent(i).then(this.setTrackingDeactivated)}disconnectedCallback(){if(this.trackingDeactivated)return;const t=V({action:"close",session_id:this.uiSessionId});this.trackingApi.trackEvent(t).then(this.setTrackingDeactivated)}async componentWillLoad(){u.pricePrefix=this.pricePrefix;u.currencySign=this.currencySign;this.vviinnWidgetLoad.emit(this.getEventData());this.getRecommendations()}async getRecommendations(){if(this.productId===undefined||this.token===undefined)return;const t=this.campaignType.length>0?this.campaignType:"VPR";const i=ht(this.token);const e=d.pipe(x.of(gt(t)),x.ap(x.of(this.productId)),x.ap(x.of(this.color)),x.ap(x.of(k(this.campaigns))),x.ap(x.of(i)),x.flatten);const n=await e();d.pipe(n,h.fold((t=>{this.handleError(t);this.vviinnNoResult.emit(this.getEventData());this.vviinnRecommendationsLoaded.emit()}),(t=>this.handleRecommendationsSuccess(t))))}handleError(t){this.hasErrorOnLoad=true}handleRecommendationsSuccess(t){var i;this.recommendations=(i=t===null||t===void 0?void 0:t.extended)!==null&&i!==void 0?i:t;l.results=this.recommendations;this.productIds=this.recommendations.map((t=>t.productId));this.productImageLoadedSubject.subscribe((t=>{this.productIds=this.productIds.filter((i=>i!==t));if(this.productIds.length===0){this.vviinnRecommendationsLoaded.emit()}}))}isExternalCSS(){return this.cssUrl&&this.cssUrl.length>0}renderExternalCSS(){return this.isExternalCSS()?i("link",{href:this.cssUrl,rel:"stylesheet"}):""}render(){var t;if(this.recommendations.length===0&&this.noResultShow===false)return null;return i(e,{class:{loaded:true,empty:this.recommendations.length==0,[this.mode]:true},"aria-hidden":"false"},i(r,null,this.renderExternalCSS(),i("style",null,u.fallbackStyles),i("h2",{part:"recommendations-title"},this.blockTitle),this.recommendations.length>0&&(this.useCarousel?this.renderCarousel():this.renderResults()),this.recommendations.length===0&&this.hasErrorOnLoad&&i("p",{class:"no-result-text"},`${(t=this===null||this===void 0?void 0:this.noResultText)!==null&&t!==void 0?t:"No results! Please, try again later."}`)))}renderRecommendation(t,e){return i("vviinn-product-card",{part:"product-part",productId:t.productId,productTitle:t.title,deeplink:t.deeplink,image:t.image.thumbnail,brand:t.brand,imageWidth:this.imageWidth,imageRatio:1,price:t.price.actual,salePrice:t.price.sale,responsive:this.mode==="grid",dimmedBackground:this.useDimmedBackgroundInCard(),campaignTypeId:this.campaignType,index:e,widgetElementId:this.id})}useDimmedBackgroundInCard(){return this.mode==="continuity"||!this.useCarousel}renderResults(){return i("div",{class:"recommendations-grid",part:"recommendations-grid"},this.recommendations.map(((t,i)=>this.renderRecommendation(t,i))))}renderCarousel(){return i("vviinn-carousel",{mode:this.mode,campaignTypeId:this.campaignType,imageWidth:this.imageWidth,showScroll:this.showScroll,recommendations:this.recommendations,widgetElementId:this.id,gridArrowsDynamic:this.gridArrowsDynamic})}get el(){return n(this)}static get watchers(){return{productId:["handleProductIdChange"],campaignType:["handleCampaignTypeChange"],campaigns:["handleCampaignsChange"],apiPath:["handleApiPathChange"]}}};ti.style=Yt;export{W as vviinn_carousel,ot as vviinn_product_card,ti as vviinn_vpr_widget};
2
+ //# sourceMappingURL=p-4325566b.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["vviinnCarouselCss","COLUMNS_NUMBER_CSS_VAR","CAROUSEL_WIDTH_CSS_VAR","CAROUSEL_IMAGE_WIDTH_CSS_VAR","CONTENT_GROUP_CSS_CLASS","VviinnCarousel","this","columns","resizeObserver","ResizeObserver","handleResize","mutationObserver","MutationObserver","cloneSlottedContent","isLastGroup","activeContentGroup","getContentGroups","length","mode","isFirstGroup","componentWillLoad","isRTL","document","dir","connectedCallback","setItemWidth","disconnectedCallback","disconnect","componentDidLoad","setWidth","processScrollbarWidth","getColumnsNumber","slot","el","querySelector","observe","subtree","childList","getHostParent","getItemWidthFromDocument","parseInt","getComputedStyle","body","getPropertyValue","widthInDocument","itemWidth","isNaN","imageWidth","style","setProperty","getContentClassMap","content","moveDirection","showScroll","newColumns","calculateMoveStep","contentWidths","getContent","map","getBoundingClientRect","width","sum","reduce","acc","val","parent","parentNode","host","parentElement","parentStyles","parentWidth","getParent","getActiveGroupIndex","contentNodeLeft","_b","_a","getContentNode","left","groups","groupsPositions","g","indexedPositions","value","index","filter","x","children","Array","from","c","styleSheet","columnsInCss","columnsNumber","querySelectorAll","showNext","contentContainer","requestAnimationFrame","scrollTo","top","scrollLeft","behavior","showPrev","scroll","target","scrollRatio","clientWidth","scrollWidth","scrolledWidth","showBullets","showScrollbar","getClassMap","renderRecommendation","recommendation","rank","h","part","productId","productTitle","title","deeplink","image","thumbnail","brand","imageRatio","price","actual","salePrice","sale","responsive","dimmedBackground","campaignTypeId","widgetElementId","renderRecommendationGroup","elements","class","renderRecommendationGroups","renderRecommendations","renderGrid","renderRecommendationsElements","recommendations","r","i","grouppedContent","chunksOf","renderBullets","numberOfBullets","Math","ceil","bulletsArray","keys","bullet","active","onClick","render","Host","Object","assign","disabled","gridArrowsDynamic","ChevronIcon","onScroll","GtagAnalytics","sendImpression","product","gtag","items","id","name","category","productType","list_name","min","_c","Infinity","undefined","sendClick","content_type","GAnalytics","constructor","ga","convertProduct","list","getGtagAnalytics","pipe","fromNullable","window","getCommonAnalytics","analyticsMonoid","getMonoid","first","getAnalyticsModule","concat","curried","f","n","combined","apply","tupleConstructors","a","b","d","e","getTupleConstructor","len","_.has","call","tuple","sequenceT","F","args","_i","arguments","fas","ap","FIT_EXPR","containsFit","url","match","E.fromNullable","E.map","processWidth","size","replace","E.getOrElse","Linked","props","child","href","FormattedPrice","locale","priceType","formattedPrice","Intl","NumberFormat","minimumFractionDigits","format","prefixElement","prefix","currencyElement","currency","Price","Image","onLoadEnd","loading","lazy","height","src","alt","onLoad","ResponsiveImage","vviinnProductCardCss","VviinnProductCard","productData","intersectionObserver","IntersectionObserver","intersectionCallback","bind","threshold","getProductData","getWidgetType","productRank","productName","widgetType","campaignTypeName","campaignTypeNames","widgetId","buttonElementId","data","some","entry","isIntersecting","O.map","analytics","getProduct","vviinnProductView","emit","vviinnProductLoad","links","shadowRoot","forEach","link","addEventListener","event","preventDefault","stopImmediatePropagation","vviinnProductClick","O.match","imageSearchState","results","find","renderImage","dimmed","exportparts","pricePrefix","state","currencySign","createBearerString","createAuthedHeader","Headers","Authorization","createFetchAuthOptions","headers","createBearAuthedHeader","flow","sequenceToEither","E.Apply","apiGet","path","getApiPath","createInitGetRequest","TE.fromEither","TE.chainW","makeRequest","getVPRRecommendations","color","campaigns","options","encodeURIComponent","encodedCampaignsIds","getVCSRecommendations","getRecommendationsService","campaignType","C.fromString","C.fold","isFunction","createErrorClass","createImpl","_super","instance","Error","stack","ctorFunc","prototype","create","UnsubscriptionError","UnsubscriptionErrorImpl","errors","message","err","toString","join","arrRemove","arr","item","indexOf","splice","Subscription","initialTeardown","closed","_parentage","_finalizers","unsubscribe","isArray","remove","initialFinalizer","finalizer","execFinalizer","push","add","teardown","_hasParent","_addParent","includes","_removeParent","EMPTY","empty","EMPTY_SUBSCRIPTION","isSubscription","config","onUnhandledError","onStoppedNotification","Promise","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","timeoutProvider","setTimeout","handler","timeout","delegate","clearTimeout","handle","reportUnhandledError","noop","COMPLETE_NOTIFICATION","createNotification","errorNotification","error","nextNotification","kind","errorContext","cb","Subscriber","destination","super","isStopped","EMPTY_OBSERVER","static","next","complete","SafeSubscriber","handleStoppedNotification","_next","_error","_complete","_bind","Function","fn","thisArg","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","context","defaultErrorHandler","notification","subscriber","observable","Symbol","identity","pipeFromArray","fns","piped","input","prev","Observable","subscribe","_subscribe","lift","operator","source","isSubscriber","_trySubscribe","sink","promiseCtor","getPromiseCtor","resolve","reject","Symbol_observable","operations","toPromise","isObserver","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","Subject","currentObservers","observers","hasError","thrownError","subject","AnonymousSubject","_throwIfClosed","observer","shift","observed","_checkFinalizedStatuses","_innerSubscribe","asObservable","vviinnVprWidgetCss","VviinnVprWidget","productImageLoadedSubject","setTrackingDeactivated","result","status","trackingDeactivated","getEventData","handleProductIdChange","getRecommendations","handleCampaignTypeChange","handleCampaignsChange","handleApiPathChange","newPath","apiPath","handleProductLoading","detail","trackProductView","rest","__rest","productViewEvent","createProductViewVprEvent","session_id","uiSessionId","trackingApi","trackEvent","then","async","productClickEvent","createProductClickVprEvent","location","uuidv4","createTrackingApi","token","widgetOpenEvent","createWidgetVprEvent","action","widgetCloseEvent","vviinnWidgetLoad","request","TE.of","TE.ap","checkEmpryString","TE.flatten","runRequest","E.fold","handleError","vviinnNoResult","vviinnRecommendationsLoaded","handleRecommendationsSuccess","_","hasErrorOnLoad","extended","productIds","isExternalCSS","cssUrl","renderExternalCSS","rel","noResultShow","loaded","Fragment","fallbackStyles","blockTitle","useCarousel","renderCarousel","renderResults","noResultText","useDimmedBackgroundInCard"],"sources":["./src/components/vviinn-carousel/vviinn-carousel.css?tag=vviinn-carousel","./src/components/vviinn-carousel/vviinn-carousel.tsx","./src/analytics/GtagAnalytics.ts","./src/analytics/GAnalytics.ts","./src/analytics/GeneralAnalytics.ts","./node_modules/fp-ts/es6/Apply.js","./src/components/vviinn-product-card/render-helpers.tsx","./src/components/vviinn-product-card/vviinn-product-card.css?tag=vviinn-product-card&encapsulation=shadow","./src/components/vviinn-product-card/vviinn-product-card.tsx","./src/components/vviinn-vpr-widget/token-helpers.ts","./src/network/apiClient.ts","./src/campaign/VPRCampaignService.ts","./src/campaign/VCSCampaignService.ts","./src/campaign/CampaignService.ts","./node_modules/rxjs/dist/esm/internal/util/isFunction.js","./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","./node_modules/rxjs/dist/esm/internal/util/arrRemove.js","./node_modules/rxjs/dist/esm/internal/Subscription.js","./node_modules/rxjs/dist/esm/internal/config.js","./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","./node_modules/rxjs/dist/esm/internal/util/noop.js","./node_modules/rxjs/dist/esm/internal/NotificationFactories.js","./node_modules/rxjs/dist/esm/internal/util/errorContext.js","./node_modules/rxjs/dist/esm/internal/Subscriber.js","./node_modules/rxjs/dist/esm/internal/symbol/observable.js","./node_modules/rxjs/dist/esm/internal/util/identity.js","./node_modules/rxjs/dist/esm/internal/util/pipe.js","./node_modules/rxjs/dist/esm/internal/Observable.js","./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/dist/esm/internal/Subject.js","./src/components/vviinn-vpr-widget/vviinn-vpr-widget.css?tag=vviinn-vpr-widget&encapsulation=shadow","./src/components/vviinn-vpr-widget/vviinn-vpr-vidget.tsx"],"sourcesContent":[":host {\n --vviinn-progressbar-width: 0;\n --vviinn-carousel-item-width: 150px;\n --vviinn-carousel-columns-internal: var(--vviinn-carousel-columns, 4);\n --vviinn-carousel-image-width-system: 140px;\n}\n\n.body {\n display: flex;\n position: relative;\n width: var(--vviinn-carousel-content-width);\n flex-direction: column;\n}\n\n.content-wrapper * {\n box-sizing: border-box;\n}\n\n.content-wrapper {\n overflow-y: hidden;\n overflow-x: auto;\n flex-grow: 1;\n}\n\n.bullets {\n margin-top: 16px;\n display: flex;\n flex-direction: row;\n grid-gap: 24px;\n justify-content: center;\n}\n\n.bullet {\n width: 10px;\n height: 10px;\n background: #e0e0e0;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.bullet.active {\n background: #161616;\n}\n\n.content:not(.show-scrollbar),\n.content.grid {\n scrollbar-color: #fff0 #fff0;\n}\n\n.content:not(.show-scrollbar)::-webkit-scrollbar,\n.content.grid::-webkit-scrollbar {\n opacity: 0;\n}\n\n.content {\n display: flex;\n flex-direction: row;\n grid-gap: 8px;\n scroll-snap-type: x mandatory;\n overflow-y: hidden;\n overflow-x: auto;\n flex-grow: 1;\n padding-bottom: 16px;\n}\n\n.content.left > * {\n scroll-snap-align: start;\n}\n\n.content.right > * {\n scroll-snap-align: end;\n}\n\n:host(.continuity) button {\n border-radius: 2px;\n}\n\n:host(.grid) button {\n border-radius: 50%;\n}\n\nbutton {\n align-items: center;\n background-color: white;\n border: none;\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.15);\n cursor: pointer;\n display: grid;\n height: 40px;\n justify-items: center;\n position: absolute;\n top: calc(50% - 20px);\n width: 40px;\n z-index: 1;\n padding: 0;\n margin: 0;\n}\n\nbutton {\n fill: #525252;\n}\n\nbutton:disabled {\n display: none;\n}\n\nbutton.prev svg {\n transform: rotate(180deg);\n margin-left: -5px;\n}\n\n.prev {\n left: 0;\n}\n\n.next {\n right: 0;\n}\n\n.items-group {\n display: grid;\n grid-gap: 16px;\n grid-template-columns: repeat(var(--vviinn-carousel-columns-internal), 1fr);\n min-width: 100%;\n}\n\nvviinn-product-card::part(price-container) {\n text-align: center;\n}\n\n:host(.classic) vviinn-product-card::part(title),\n:host(.classic) vviinn-product-card::part(brand),\n:host(.classic) vviinn-product-card::part(type) {\n text-align: center;\n}\n\n@media (max-width: 480px) {\n :host(.modern) button {\n display: none;\n }\n\n .items-group {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","import { Component, Host, h, Element, State, Prop } from \"@stencil/core\";\nimport { chunksOf } from \"fp-ts/lib/Array\";\nimport { Recommendation } from \"../../recommendation/recommendation\";\nimport { ChevronIcon } from \"../vviinn-icons\";\nimport { CampaignTypeId } from \"../../campaign/Campaign\";\n\nconst COLUMNS_NUMBER_CSS_VAR = \"--vviinn-carousel-columns-internal\";\nconst CAROUSEL_WIDTH_CSS_VAR = \"--vviinn-carousel-content-width\";\nconst CAROUSEL_IMAGE_WIDTH_CSS_VAR = \"--vviinn-carousel-image-width\";\nconst CONTENT_GROUP_CSS_CLASS = \"items-group\";\n\ntype MoveDirection = \"left\" | \"right\";\nexport type CarouselMode = \"grid\" | \"continuity\";\n\n/**\n * @part carousel-button\n **/\n@Component({\n tag: \"vviinn-carousel\",\n styleUrl: \"vviinn-carousel.css\",\n shadow: false,\n})\nexport class VviinnCarousel {\n @Element() el: HTMLElement;\n\n @State() moveDirection: MoveDirection = \"right\";\n @State() contentGroups: HTMLElement[] = [];\n @State() activeContentGroup: number = 0;\n @State() isRTL: boolean = false;\n\n @Prop() mode: CarouselMode = \"continuity\";\n @Prop() imageWidth: number = 140;\n @Prop() showScroll: boolean = true;\n @Prop() campaignTypeId: CampaignTypeId;\n @Prop() widgetElementId?: string;\n @Prop() gridArrowsDynamic: boolean;\n\n @Prop() recommendations: Recommendation[] = [];\n\n private columns: number = 0;\n private resizeObserver: ResizeObserver = new ResizeObserver(() =>\n this.handleResize()\n );\n\n private mutationObserver = new MutationObserver(() =>\n this.cloneSlottedContent()\n );\n\n private isLastGroup = () =>\n this.activeContentGroup === this.getContentGroups().length - 1 &&\n this.mode === \"grid\";\n\n private isFirstGroup = () =>\n this.activeContentGroup === 0 && this.mode === \"grid\";\n\n componentWillLoad() {\n this.isRTL = document.dir === \"rtl\";\n }\n\n connectedCallback() {\n this.setItemWidth();\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n componentDidLoad() {\n this.setWidth();\n this.processScrollbarWidth();\n this.columns = this.getColumnsNumber();\n const slot = this.el.querySelector(\".content\");\n\n this.mutationObserver.observe(slot, { subtree: true, childList: true });\n this.resizeObserver.observe(this.getHostParent());\n }\n\n private getItemWidthFromDocument(): number {\n return parseInt(\n getComputedStyle(document.body).getPropertyValue(\n CAROUSEL_IMAGE_WIDTH_CSS_VAR\n )\n );\n }\n\n private setItemWidth() {\n const widthInDocument = this.getItemWidthFromDocument();\n const itemWidth = isNaN(widthInDocument)\n ? this.imageWidth\n : widthInDocument;\n\n this.el.style.setProperty(CAROUSEL_IMAGE_WIDTH_CSS_VAR, `${itemWidth}px`);\n }\n\n private getContentClassMap() {\n return {\n content: true,\n [this.moveDirection]: true,\n [this.mode]: true,\n \"show-scrollbar\": this.showScroll,\n };\n }\n\n private handleResize() {\n this.setWidth();\n this.processScrollbarWidth();\n this.setItemWidth();\n\n const newColumns = this.getColumnsNumber();\n\n if (newColumns !== this.columns) {\n this.columns = newColumns;\n }\n }\n\n private calculateMoveStep() {\n const contentWidths = this.getContent().map(\n (el) => el.getBoundingClientRect().width\n );\n const sum = contentWidths.reduce((acc, val) => acc + val, 0);\n\n return sum / contentWidths.length;\n }\n\n private getHostParent(): Element {\n const parent = this.el.parentNode as any;\n return parent.host.parentElement;\n }\n\n private setWidth() {\n const parent = this.getHostParent();\n\n if (!parent) return;\n\n const parentStyles = getComputedStyle(parent);\n const parentWidth = parent.getBoundingClientRect().width;\n const width =\n parentWidth -\n (parseInt(parentStyles[\"padding-right\"]) +\n parseInt(parentStyles[\"padding-left\"]));\n\n this.el.style.setProperty(CAROUSEL_WIDTH_CSS_VAR, `${width}px`);\n }\n\n getParent(): HTMLElement {\n const parentNode: any = this.el.parentNode;\n const host = parentNode.host;\n return host.parentElement as HTMLElement;\n }\n\n private cloneSlottedContent() {\n this.setWidth();\n }\n\n private getActiveGroupIndex(): number {\n const contentNodeLeft =\n this.getContentNode()?.getBoundingClientRect()?.left;\n\n if (!contentNodeLeft) return 0;\n\n const groups = this.getContentGroups();\n const groupsPositions = groups.map((g) => g.getBoundingClientRect().left);\n\n const indexedPositions = groupsPositions\n .map((value: number, index: number) => [value, index])\n .filter((x) => x[0] >= 0);\n\n return indexedPositions.length > 0\n ? this.isRTL\n ? indexedPositions[indexedPositions.length - 1][1]\n : indexedPositions[0][1]\n : 0;\n }\n\n private getContentNode(): HTMLElement {\n return this.el.querySelector(\".content\");\n }\n\n private getContent(): HTMLElement[] {\n const children = this.getContentNode().children;\n return Array.from(children).map((c) => c as HTMLElement);\n }\n\n private getColumnsNumber(): number {\n const styleSheet = getComputedStyle(this.el);\n const columnsInCss = styleSheet.getPropertyValue(COLUMNS_NUMBER_CSS_VAR);\n const columnsNumber = parseInt(columnsInCss);\n return columnsNumber && !isNaN(columnsNumber) ? columnsNumber : 4;\n }\n\n private getContentGroups(): HTMLElement[] {\n return Array.from(this.el.querySelectorAll(`.${CONTENT_GROUP_CSS_CLASS}`));\n }\n\n private showNext() {\n this.moveDirection = \"right\";\n const contentContainer = this.getContentNode();\n\n requestAnimationFrame(() => {\n contentContainer.scrollTo({\n top: 0,\n left: contentContainer.scrollLeft + this.calculateMoveStep(),\n behavior: \"smooth\",\n });\n });\n }\n\n private showPrev() {\n this.moveDirection = \"left\";\n const contentContainer = this.getContentNode();\n\n requestAnimationFrame(() => {\n contentContainer.scrollTo({\n top: 0,\n left: contentContainer.scrollLeft - this.calculateMoveStep(),\n behavior: \"smooth\",\n });\n });\n }\n\n private scroll(index: number) {\n const contentContainer = this.getContentNode();\n\n requestAnimationFrame(() => {\n contentContainer.scrollTo({\n top: 0,\n left: this.calculateMoveStep() * index,\n behavior: \"smooth\",\n });\n });\n }\n\n private processScrollbarWidth() {\n const target = this.getContentNode();\n if (!target) return;\n const scrollRatio =\n (target.scrollLeft + target.clientWidth) / target.scrollWidth;\n const scrolledWidth = target.clientWidth * scrollRatio;\n\n this.el.style.setProperty(\n \"--vviinn-progressbar-width\",\n `${scrolledWidth}px`\n );\n\n this.activeContentGroup = this.getActiveGroupIndex();\n }\n\n private showBullets(): boolean {\n return this.mode === \"grid\" && this.showScroll;\n }\n\n private showScrollbar(): boolean {\n return this.mode === \"continuity\" && this.showScroll;\n }\n\n private getClassMap() {\n return {\n [this.mode]: true,\n \"show-scrollbar\": this.showScrollbar(),\n };\n }\n\n private renderRecommendation(\n recommendation: Recommendation,\n rank: number\n ): HTMLVviinnProductCardElement {\n return (\n <vviinn-product-card\n part=\"product-part\"\n productId={recommendation.productId}\n productTitle={recommendation.title}\n deeplink={recommendation.deeplink}\n image={recommendation.image.thumbnail}\n brand={recommendation.brand}\n imageWidth={this.imageWidth}\n imageRatio={1}\n price={recommendation.price.actual}\n salePrice={recommendation.price.sale}\n responsive={this.mode === \"grid\"}\n dimmedBackground={this.mode === \"continuity\"}\n campaignTypeId={this.campaignTypeId}\n index={rank}\n widgetElementId={this.widgetElementId}\n />\n );\n }\n\n private renderRecommendationGroup(elements: HTMLVviinnProductCardElement[]) {\n return (\n <div class={CONTENT_GROUP_CSS_CLASS} part=\"items-group\">\n {...elements}\n </div>\n );\n }\n\n private renderRecommendationGroups(\n elements: HTMLVviinnProductCardElement[][]\n ) {\n return elements.map((el) => this.renderRecommendationGroup(el));\n }\n\n private renderRecommendations() {\n return this.mode === \"grid\"\n ? this.renderGrid()\n : this.renderRecommendationsElements();\n }\n\n private renderRecommendationsElements(): HTMLVviinnProductCardElement[] {\n return this.recommendations.map((r, i) => this.renderRecommendation(r, i));\n }\n\n private renderGrid() {\n const recommendations = this.renderRecommendationsElements();\n const grouppedContent = chunksOf(this.getColumnsNumber())(recommendations);\n\n return this.renderRecommendationGroups(grouppedContent);\n }\n\n private renderBullets() {\n const numberOfBullets = Math.ceil(\n this.recommendations.length / this.getColumnsNumber()\n );\n\n const bulletsArray = Array.from(Array(numberOfBullets).keys());\n\n return bulletsArray.map((index) => (\n <div\n class={{\n bullet: true,\n active: this.activeContentGroup === index,\n }}\n onClick={() => this.scroll(index)}\n />\n ));\n }\n\n render() {\n return (\n <Host class={this.getClassMap()}>\n <div class={{ body: true, ...this.getClassMap() }}>\n <button\n class=\"prev\"\n onClick={() => this.showPrev()}\n part=\"carousel-button\"\n disabled={this.gridArrowsDynamic && this.isFirstGroup()}\n >\n <ChevronIcon />\n </button>\n\n <div\n class={this.getContentClassMap()}\n onScroll={() => this.processScrollbarWidth()}\n >\n {this.renderRecommendations()}\n </div>\n\n <button\n class=\"next\"\n onClick={() => this.showNext()}\n part=\"carousel-button\"\n disabled={this.gridArrowsDynamic && this.isLastGroup()}\n >\n <ChevronIcon />\n </button>\n </div>\n {this.showBullets() && (\n <div class=\"bullets\">{this.renderBullets()}</div>\n )}\n </Host>\n );\n }\n}\n","import { ProductAnalytics } from \"./ProductAnalytics\";\nimport { Interfaces } from \"../interfaces/recommendation\";\n\nexport class GtagAnalytics implements ProductAnalytics {\n sendImpression(product: Interfaces['VisualProductSearch']) {\n gtag('event', 'view_item_list', {\n items: [\n {\n id: product.productId,\n name: product.title,\n brand: product.brand ?? '',\n category: product.productType ?? '',\n list_name: 'VI VPR View',\n price: Math.min(...[product.price.actual, product.price.sale ?? Infinity])\n }\n ]\n });\n\n return undefined;\n }\n\n sendClick(product: Interfaces['VisualProductSearch']) {\n gtag('event', 'select_content', {\n content_type: 'product',\n items: [\n {\n id: product.productId,\n name: product.title,\n brand: product.brand ?? '',\n category: product.productType ?? '',\n list_name: 'VI VPR View',\n price: Math.min(...[product.price.actual, product.price.sale ?? Infinity])\n }\n ]\n });\n\n return undefined;\n }\n}\n","import { ProductAnalytics } from \"./ProductAnalytics\";\nimport { Interfaces } from \"../interfaces/recommendation\";\n\nexport class GAnalytics implements ProductAnalytics {\n constructor() {\n ga('require', 'ec');\n }\n\n convertProduct(product: Interfaces['VisualProductSearch']) {\n return {\n id: product.productId,\n name: product.title,\n brand: product.brand ?? '',\n category: product.productType ?? '',\n list: 'VI VPR View',\n price: Math.min(...[product.price.actual, product.price.sale ?? Infinity])\n } \n }\n\n sendImpression(product: Interfaces['VisualProductSearch']) {\n ga('ec:addImpression', this.convertProduct(product));\n\n return undefined;\n }\n\n sendClick(product: Interfaces['VisualProductSearch']) {\n ga('ec:addProduct', {\n id: product.productId,\n name: product.title,\n brand: product.brand ?? '',\n category: product.productType ?? '',\n price: Math.min(...[product.price.actual, product.price.sale ?? Infinity])\n });\n\n ga('ec:setAction', 'click', {list: 'VI VPR View'});\n\n return undefined;\n }\n}\n","import { pipe } from \"fp-ts/lib/function\";\nimport { fromNullable, map, getMonoid, Option } from \"fp-ts/lib/Option\";\nimport { GtagAnalytics } from \"./GtagAnalytics\";\nimport { GAnalytics } from \"./GAnalytics\";\nimport { ProductAnalytics } from \"./ProductAnalytics\";\nimport { first } from \"fp-ts/lib/Semigroup\";\nimport { Monoid } from \"fp-ts/lib/Monoid\";\n\nconst getGtagAnalytics = () =>\n pipe(\n fromNullable(window.gtag),\n map(() => new GtagAnalytics())\n );\n\nconst getCommonAnalytics = () =>\n pipe(\n fromNullable(window.ga),\n map(() => new GAnalytics())\n );\n\nconst analyticsMonoid: Monoid<Option<ProductAnalytics>> = getMonoid(first());\n\nexport const getAnalyticsModule: Option<ProductAnalytics> = analyticsMonoid.concat(\n getGtagAnalytics(),\n getCommonAnalytics()\n);\n","/**\n * The `Apply` class provides the `ap` which is used to apply a function to an argument under a type constructor.\n *\n * `Apply` can be used to lift functions of two or more arguments to work on values wrapped with the type constructor\n * `f`.\n *\n * Instances must satisfy the following law in addition to the `Functor` laws:\n *\n * 1. Associative composition: `F.ap(F.ap(F.map(fbc, bc => ab => a => bc(ab(a))), fab), fa) <-> F.ap(fbc, F.ap(fab, fa))`\n *\n * Formally, `Apply` represents a strong lax semi-monoidal endofunctor.\n *\n * @example\n * import * as O from 'fp-ts/Option'\n * import { pipe } from 'fp-ts/function'\n *\n * const f = (a: string) => (b: number) => (c: boolean) => a + String(b) + String(c)\n * const fa: O.Option<string> = O.some('s')\n * const fb: O.Option<number> = O.some(1)\n * const fc: O.Option<boolean> = O.some(true)\n *\n * assert.deepStrictEqual(\n * pipe(\n * // lift a function\n * O.some(f),\n * // apply the first argument\n * O.ap(fa),\n * // apply the second argument\n * O.ap(fb),\n * // apply the third argument\n * O.ap(fc)\n * ),\n * O.some('s1true')\n * )\n *\n * @since 2.0.0\n */\nimport { tuple } from './function';\nimport * as _ from './internal';\nexport function ap(F, G) {\n return function (fa) {\n return function (fab) {\n return F.ap(F.map(fab, function (gab) { return function (ga) { return G.ap(gab, ga); }; }), fa);\n };\n };\n}\nexport function apFirst(A) {\n return function (second) { return function (first) {\n return A.ap(A.map(first, function (a) { return function () { return a; }; }), second);\n }; };\n}\nexport function apSecond(A) {\n return function (second) {\n return function (first) {\n return A.ap(A.map(first, function () { return function (b) { return b; }; }), second);\n };\n };\n}\nexport function apS(F) {\n return function (name, fb) {\n return function (fa) {\n return F.ap(F.map(fa, function (a) { return function (b) {\n var _a;\n return Object.assign({}, a, (_a = {}, _a[name] = b, _a));\n }; }), fb);\n };\n };\n}\nexport function getApplySemigroup(F) {\n return function (S) { return ({\n concat: function (first, second) {\n return F.ap(F.map(first, function (x) { return function (y) { return S.concat(x, y); }; }), second);\n }\n }); };\n}\nfunction curried(f, n, acc) {\n return function (x) {\n var combined = Array(acc.length + 1);\n for (var i = 0; i < acc.length; i++) {\n combined[i] = acc[i];\n }\n combined[acc.length] = x;\n return n === 0 ? f.apply(null, combined) : curried(f, n - 1, combined);\n };\n}\nvar tupleConstructors = {\n 1: function (a) { return [a]; },\n 2: function (a) { return function (b) { return [a, b]; }; },\n 3: function (a) { return function (b) { return function (c) { return [a, b, c]; }; }; },\n 4: function (a) { return function (b) { return function (c) { return function (d) { return [a, b, c, d]; }; }; }; },\n 5: function (a) { return function (b) { return function (c) { return function (d) { return function (e) { return [a, b, c, d, e]; }; }; }; }; }\n};\nfunction getTupleConstructor(len) {\n if (!_.has.call(tupleConstructors, len)) {\n tupleConstructors[len] = curried(tuple, len - 1, []);\n }\n return tupleConstructors[len];\n}\nexport function sequenceT(F) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var len = args.length;\n var f = getTupleConstructor(len);\n var fas = F.map(args[0], f);\n for (var i = 1; i < len; i++) {\n fas = F.ap(fas, args[i]);\n }\n return fas;\n };\n}\nfunction getRecordConstructor(keys) {\n var len = keys.length;\n switch (len) {\n case 1:\n return function (a) {\n var _a;\n return (_a = {}, _a[keys[0]] = a, _a);\n };\n case 2:\n return function (a) { return function (b) {\n var _a;\n return (_a = {}, _a[keys[0]] = a, _a[keys[1]] = b, _a);\n }; };\n case 3:\n return function (a) { return function (b) { return function (c) {\n var _a;\n return (_a = {}, _a[keys[0]] = a, _a[keys[1]] = b, _a[keys[2]] = c, _a);\n }; }; };\n case 4:\n return function (a) { return function (b) { return function (c) { return function (d) {\n var _a;\n return (_a = {},\n _a[keys[0]] = a,\n _a[keys[1]] = b,\n _a[keys[2]] = c,\n _a[keys[3]] = d,\n _a);\n }; }; }; };\n case 5:\n return function (a) { return function (b) { return function (c) { return function (d) { return function (e) {\n var _a;\n return (_a = {},\n _a[keys[0]] = a,\n _a[keys[1]] = b,\n _a[keys[2]] = c,\n _a[keys[3]] = d,\n _a[keys[4]] = e,\n _a);\n }; }; }; }; };\n default:\n return curried(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var r = {};\n for (var i = 0; i < len; i++) {\n r[keys[i]] = args[i];\n }\n return r;\n }, len - 1, []);\n }\n}\nexport function sequenceS(F) {\n return function (r) {\n var keys = Object.keys(r);\n var len = keys.length;\n var f = getRecordConstructor(keys);\n var fr = F.map(r[keys[0]], f);\n for (var i = 1; i < len; i++) {\n fr = F.ap(fr, r[keys[i]]);\n }\n return fr;\n };\n}\n","import { pipe } from \"fp-ts/lib/function\";\nimport * as E from \"fp-ts/lib/Either\";\nimport { FunctionalComponent, h } from \"@stencil/core\";\n\nconst FIT_EXPR = /fit\\/\\d+\\//;\n\nexport const containsFit = (url: string): E.Either<string, string> => {\n return pipe(\n url.match(FIT_EXPR),\n E.fromNullable(url),\n E.map(() => url)\n );\n};\n\nexport const processWidth = (url: string, size: number): string => {\n return pipe(\n containsFit(url),\n E.map((url) => url.replace(FIT_EXPR, `fit/${size}/`)),\n E.getOrElse(() => url)\n );\n};\n\nexport const Linked = (props, child) =>\n props.deeplink ? (\n <a class={props.part} part={props.part} href={props.deeplink}>\n {child}\n </a>\n ) : (\n child\n );\n\ntype PriceElementProps = {\n readonly locale: string;\n readonly price: number;\n readonly prefix: string;\n readonly currency: string;\n readonly priceType?: \"sale\" | \"outdated\" | \"regular\";\n};\n\nconst FormattedPrice: FunctionalComponent<PriceElementProps> = (props) => {\n const locale = props.locale;\n const priceType = props.priceType;\n\n const formattedPrice = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n }).format(props.price);\n\n const prefixElement = props.prefix ? (\n <span part=\"price-prefix\">{props.prefix + \" \"}</span>\n ) : null;\n\n const currencyElement = props.currency ? (\n <span part=\"currency\">{\" \" + props.currency}</span>\n ) : null;\n\n return (\n <span\n class=\"price-amount\"\n part={`price-amount${priceType ? \"-\" + priceType : \"\"}`}\n >\n {prefixElement}\n {formattedPrice}\n {currencyElement}\n </span>\n );\n};\n\ntype PriceProps = PriceElementProps & {\n salePrice: number;\n};\n\nexport const Price: FunctionalComponent<PriceProps> = (props) => {\n return (\n <span class=\"price-container\" part=\"price-container\">\n {props.salePrice ? (\n [\n <span class=\"price-sale\" part=\"price-sale\">\n <FormattedPrice\n prefix={props.prefix}\n currency={props.currency}\n price={props.salePrice}\n locale={props.locale}\n priceType=\"sale\"\n />\n </span>,\n <span class=\"price-outdated\" part=\"price-outdated\">\n <FormattedPrice\n prefix={props.prefix}\n currency={props.currency}\n price={props.price}\n locale={props.locale}\n priceType=\"outdated\"\n />\n </span>,\n ]\n ) : (\n <span class=\"price-regular\" part=\"price-regular\">\n <FormattedPrice\n prefix={props.prefix}\n currency={props.currency}\n price={props.price}\n locale={props.locale}\n priceType=\"regular\"\n />\n </span>\n )}\n </span>\n );\n};\n\nexport type ImageProps = {\n width: number;\n height: number;\n title: string;\n src: string;\n lazy: boolean;\n};\n\nexport const Image = (props: ImageProps, onLoadEnd = () => undefined) => (\n <picture>\n <img\n loading={props.lazy ? \"lazy\" : \"eager\"}\n part=\"image\"\n class=\"image\"\n width={props.width}\n height={props.height}\n src={processWidth(props.src, props.width)}\n alt={props.title}\n onLoad={onLoadEnd}\n />\n </picture>\n);\n\nexport const ResponsiveImage = (\n props: ImageProps,\n onLoadEnd = () => undefined\n) => (\n <picture>\n <img\n loading={props.lazy ? \"lazy\" : \"eager\"}\n part=\"image\"\n class=\"image responsive\"\n src={processWidth(props.src, props.width)}\n alt={props.title}\n onLoad={onLoadEnd}\n />\n </picture>\n);\n",":host {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 8px;\n height: 100%;\n}\n\n.price-container {\n display: flex;\n flex-direction: column;\n}\n\n.price-sale,\n.price-regular {\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 24px;\n color: #161616;\n}\n\n.price-outdated {\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 24px;\n color: #757575;\n text-decoration: line-through;\n}\n\n.product-type {\n word-wrap: anywhere;\n}\n\n.image {\n display: grid;\n align-content: center;\n object-position: 50% 50%;\n object-fit: contain;\n text-align: center;\n box-sizing: border-box;\n}\n\nimg.responsive {\n width: 100%;\n height: auto;\n aspect-ratio: 1;\n}\n\n.brand,\n.type {\n display: none;\n}\n\n.title {\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n color: #161616;\n display: -webkit-box;\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n line-height: 24px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n\n.deeplink {\n text-decoration: none;\n}\n\n.image-link {\n display: contents;\n}\n\npicture {\n position: relative;\n width: 100%;\n}\n\n:host(.dimmed) picture::before {\n content: \"\";\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n background: #f7f7f7;\n display: block;\n top: 0;\n left: 0;\n position: absolute;\n mix-blend-mode: multiply;\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n State,\n} from \"@stencil/core\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport { getAnalyticsModule } from \"../../analytics/GeneralAnalytics\";\nimport { state } from \"../../store/store\";\nimport * as O from \"fp-ts/lib/Option\";\nimport { imageSearchState } from \"../../store/imageSearch.store\";\nimport { Recommendation } from \"../../recommendation/recommendation\";\nimport {\n ImageProps,\n Linked,\n Price,\n ResponsiveImage,\n Image,\n} from \"./render-helpers\";\nimport { ProductCardEventData } from \"../../recommendation/events\";\n\nimport styles from \"./vviinn-product-card.css\";\nimport {\n CampaignTypeId,\n WidgetType,\n campaignTypeNames,\n} from \"../../campaign/Campaign\";\n\n/**\n * @part brand - product brand.\n * @part currency - currency sign. Renders after price-amount.\n * @part deeplink - anchor element for title. Rendered only if \"deeplink\" property filled.\n * @part image - product image.\n * @part image-link - anchor element for image. Rendered only if \"deeplink\" property filled.\n * @part price-amount-sale - numeric part of price.\n * @part price-amount-outdated - numeric part of price.\n * @part price-amount-regular - numeric part of price.\n * @part price-container - block contains all prices.\n * @part price-outdated - renders inside price-container when \"sale-price\" property filled. Contains regular price.\n * @part price-regular - renders inside price-container when \"sale-price\" property is empty.\n * @part price-sale - renders inside price-container when \"sale-price\" property filled. Contains sale price.\n * @part price-prefix - renders before price-amount. Can be set with \"price-prefix\" property or inherited from parent component.\n * @part title - product title\n */\n@Component({\n tag: \"vviinn-product-card\",\n shadow: true,\n styles,\n})\nexport class VviinnProductCard {\n @Element() el: HTMLElement;\n @Prop() brand: string | undefined;\n @Prop() currency: string | undefined = undefined;\n @Prop() deeplink: string | undefined;\n @Prop() image: string | undefined;\n @Prop() imageRatio: number = 1;\n @Prop() imageWidth: number = 200;\n @Prop() locale: string | undefined = undefined;\n @Prop() price: number | undefined;\n @Prop() pricePrefix: string | undefined = undefined;\n @Prop() productId: string;\n @Prop() productTitle: string;\n @Prop() productType: string | undefined;\n @Prop() salePrice: number | undefined;\n @Prop() responsive: boolean = false;\n @Prop() campaignTypeId: CampaignTypeId;\n @Prop() dimmedBackground: boolean = false;\n /** @internal */\n @Prop() widgetElementId?: string;\n /** @internal */\n @Prop() buttonElementId?: string;\n\n /** @internal */\n @Prop() index: number = 0;\n\n @State() imageLoaded: boolean = false;\n\n /** Event fires ones when recommendation rendered on page */\n @Event({ bubbles: true })\n vviinnProductLoad: EventEmitter<ProductCardEventData>;\n /** Event fires ones when recommendation appears on the viewport */\n @Event({ bubbles: true })\n vviinnProductView: EventEmitter<ProductCardEventData>;\n /** Event fires ones when user click on deeplink */\n @Event({ bubbles: true })\n vviinnProductClick: EventEmitter<ProductCardEventData>;\n\n private productData: ProductCardEventData | null = null;\n\n private intersectionObserver = new IntersectionObserver(\n this.intersectionCallback.bind(this),\n { threshold: 1.0 }\n );\n\n connectedCallback() {\n this.productData = this.getProductData();\n }\n\n private getWidgetType() {\n return this.campaignTypeId === \"VPR\" || this.campaignTypeId === \"VCS\"\n ? (\"VPR\" as WidgetType)\n : (\"VPS\" as WidgetType);\n }\n\n private getProductData() {\n return {\n productId: this.productId,\n productRank: this.index,\n productName: this.productTitle,\n widgetType: this.getWidgetType(),\n campaignTypeId: this.campaignTypeId,\n campaignTypeName: campaignTypeNames[this.campaignTypeId],\n widgetId: this.buttonElementId ?? this.widgetElementId,\n };\n }\n\n private intersectionCallback(data: IntersectionObserverEntry[]) {\n if (data.some((entry) => entry.isIntersecting)) {\n pipe(\n getAnalyticsModule,\n O.map((analytics) => analytics.sendImpression(this.getProduct()))\n );\n\n this.vviinnProductView.emit(this.productData);\n this.intersectionObserver.disconnect();\n }\n }\n\n componentDidLoad() {\n this.vviinnProductLoad.emit(this.productData);\n this.intersectionObserver.observe(this.el);\n\n const links = this.el.shadowRoot.querySelectorAll(\"a\");\n\n links.forEach((link) =>\n link.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.vviinnProductClick.emit(this.productData);\n\n pipe(\n getAnalyticsModule,\n O.match(\n () => null,\n (analytics) => analytics.sendClick(this.getProduct())\n )\n );\n })\n );\n }\n\n private getProduct(): Recommendation {\n return imageSearchState.results.find((r) => r.productId === this.productId);\n }\n\n private renderImage() {\n const props: ImageProps = {\n width: this.imageWidth,\n height: this.imageWidth * this.imageRatio,\n src: this.image,\n title: this.productTitle,\n lazy: false,\n };\n\n return this.responsive ? ResponsiveImage(props) : Image(props);\n }\n\n render() {\n return (\n <Host\n part=\"product-card\"\n class={{ dimmed: this.dimmedBackground }}\n exportparts=\"brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title\"\n >\n <Linked deeplink={this.deeplink} part=\"image-link\">\n {this.renderImage()}\n </Linked>\n <Linked deeplink={this.deeplink} part=\"deeplink\">\n <span class=\"title\" part=\"title\">\n {this.productTitle}\n </span>\n </Linked>\n <span class=\"brand\" part=\"brand\">\n {this.brand}\n </span>\n <span class=\"type\" part=\"type\">\n {this.productType}\n </span>\n <Price\n prefix={this.pricePrefix ?? state.pricePrefix}\n currency={this.currency ?? state.currencySign}\n price={this.price}\n salePrice={this.salePrice}\n locale={this.locale ?? state.locale}\n />\n </Host>\n );\n }\n}\n","import { flow } from \"fp-ts/lib/function\";\n\nconst createBearerString = (x: string): string => `Bearer ${x}`;\n\nconst createAuthedHeader = (x: string): Headers =>\n new Headers({\n Authorization: x,\n });\n\nconst createFetchAuthOptions = (x: Headers): RequestInit => {\n return {\n headers: x,\n };\n};\n\nexport const createBearAuthedHeader = flow(\n createBearerString,\n createAuthedHeader,\n createFetchAuthOptions\n);\n","import * as E from \"fp-ts/Either\";\nimport * as TE from \"fp-ts/TaskEither\";\nimport { pipe } from \"fp-ts/function\";\nimport { sequenceT } from \"fp-ts/Apply\";\nimport {\n createInitGetRequest,\n createInitPostRequest,\n getApiPath,\n} from \"./utils\";\nimport { BasicError } from \"../error\";\nimport { makeRequest } from \"./request\";\n\nconst sequenceToEither = sequenceT(E.Apply);\n\nexport const apiGet = <T>(\n path: string,\n data: RequestInit = {}\n): TE.TaskEither<BasicError<Response | string>, T> =>\n pipe(\n sequenceToEither(getApiPath(), createInitGetRequest),\n TE.fromEither,\n TE.chainW(makeRequest<T>(path, data))\n );\n\nexport const apiPost = <T>(\n path: string,\n data: RequestInit = {}\n): TE.TaskEither<BasicError<Response | string>, T> =>\n pipe(\n sequenceToEither(getApiPath(), createInitPostRequest),\n TE.fromEither,\n TE.chainW(makeRequest<T>(path, data))\n );\n","import { apiGet } from \"../network/apiClient\";\nimport { VPRCampaignResponse } from \"./VPRCampaignResponse\";\nimport * as O from \"fp-ts/Option\";\nimport { pipe } from \"fp-ts/lib/function\";\n\nexport const getVPRRecommendations =\n (productId: string) =>\n (color: string) =>\n (campaigns: O.Option<string>) =>\n (options: RequestInit) => {\n const url = pipe(\n campaigns,\n O.map(encodeURIComponent),\n O.match(\n () =>\n `product/${productId}/similar-products${\n color ? `?color=${color}` : \"\"\n }`,\n (encodedCampaignsIds) =>\n `product/${productId}/similar-products?campaigns=${encodedCampaignsIds}${\n color ? `&color=${color}` : \"\"\n }`\n )\n );\n\n return apiGet<VPRCampaignResponse>(url, options);\n };\n","import { apiGet } from \"../network/apiClient\";\nimport { VCSCampaignResponse } from \"./VCSCampaignResponse\";\nimport * as O from \"fp-ts/Option\";\nimport { pipe } from \"fp-ts/lib/function\";\n\nexport const getVCSRecommendations =\n (productId: string) =>\n (color: string) =>\n (campaigns: O.Option<string>) =>\n (options: RequestInit) => {\n const url = pipe(\n campaigns,\n O.map(encodeURIComponent),\n O.match(\n () =>\n `product/${productId}/cross-selling-products${\n color ? `?color=${color}` : \"\"\n }`,\n (encodedCampaignsIds) =>\n `product/${productId}/cross-selling-products?campaigns=${encodedCampaignsIds}${\n color ? `&color=${color}` : \"\"\n }`\n )\n );\n return apiGet<VCSCampaignResponse>(url, options);\n };\n","import * as C from \"./Campaign\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport { getVPRRecommendations } from \"./VPRCampaignService\";\nimport { getVCSRecommendations } from \"./VCSCampaignService\";\n\nexport const getRecommendationsService = (campaignType: C.CampaignName) =>\n pipe(\n C.fromString(campaignType),\n C.fold(\n () => getVPRRecommendations,\n () => getVCSRecommendations\n )\n );\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n const _super = (instance) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport const UnsubscriptionError = createErrorClass((_super) => function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nexport class Subscription {\n constructor(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n unsubscribe() {\n let errors;\n if (!this.closed) {\n this.closed = true;\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n add(teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n }\n _hasParent(parent) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n _addParent(parent) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n _removeParent(parent) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n remove(teardown) {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\nSubscription.EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n})();\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export const config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","export const timeoutProvider = {\n setTimeout(handler, timeout, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","export const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined))();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind,\n value,\n error,\n };\n}\n//# sourceMappingURL=NotificationFactories.js.map","import { config } from '../config';\nlet context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nexport class Subscriber extends Subscription {\n constructor(destination) {\n super();\n this.isStopped = false;\n if (destination) {\n this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(this);\n }\n }\n else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n static create(next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n }\n next(value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n }\n error(err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n }\n complete() {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n }\n unsubscribe() {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null;\n }\n }\n _next(value) {\n this.destination.next(value);\n }\n _error(err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n _complete() {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n }\n}\nconst _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nclass ConsumerObserver {\n constructor(partialObserver) {\n this.partialObserver = partialObserver;\n }\n next(value) {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n error(err) {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n }\n complete() {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\nexport class SafeSubscriber extends Subscriber {\n constructor(observerOrNext, error, complete) {\n super();\n let partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n let context;\n if (this && config.useDeprecatedNextContext) {\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\nexport const EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export const observable = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe(...fns) {\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce((prev, fn) => fn(prev), input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nexport class Observable {\n constructor(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n lift(operator) {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n subscribe(observerOrNext, error, complete) {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n this._subscribe(subscriber)\n :\n this._trySubscribe(subscriber));\n });\n return subscriber;\n }\n _trySubscribe(sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n }\n forEach(next, promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n });\n }\n _subscribe(subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n }\n [Symbol_observable]() {\n return this;\n }\n pipe(...operations) {\n return pipeFromArray(operations)(this);\n }\n toPromise(promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n let value;\n this.subscribe((x) => (value = x), (err) => reject(err), () => resolve(value));\n });\n }\n}\nObservable.create = (subscribe) => {\n return new Observable(subscribe);\n};\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { createErrorClass } from './createErrorClass';\nexport const ObjectUnsubscribedError = createErrorClass((_super) => function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nexport class Subject extends Observable {\n constructor() {\n super();\n this.closed = false;\n this.currentObservers = null;\n this.observers = [];\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n next(value) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n error(err) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n }\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n }\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n }\n get observed() {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n _trySubscribe(subscriber) {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n _innerSubscribe(subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n _checkFinalizedStatuses(subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n}\nSubject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n};\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n }\n error(err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n }\n complete() {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n _subscribe(subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n }\n}\n//# sourceMappingURL=Subject.js.map",":host {\n /**\n * @prop --vviinn-carousel-columns: control number of items in grid mode\n */\n\n display: grid;\n grid-gap: 1rem;\n width: 100%;\n}\n\n:host(:not(.loaded)) {\n position: absolute;\n visibility: hidden;\n}\n\n:host(.grid) vviinn-product-card::part(image) {\n border: 1px solid #dddddd;\n width: 100%;\n}\n\nh2 {\n margin: 0;\n}\n\nvviinn-product-card::part(price-container) {\n align-self: flex-start;\n text-align: left;\n display: flex;\n}\n\n.results {\n display: grid;\n grid-gap: 1rem;\n}\n\n.no-result-text {\n font-size: 20px;\n}\n\n.visually-hidden {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n height: 0;\n width: 0;\n}\n\nh2 {\n margin: 0;\n}\n\n:host(.grid) h2 {\n justify-content: center;\n}\n\n:host(.grid) vviinn-product-card::part(image) {\n min-width: 100%;\n}\n\n:host(.grid) vviinn-product-card::part(image-link) {\n width: 100%;\n}\n\n:host(.grid) vviinn-product-card::part(title),\n:host(.grid) vviinn-product-card::part(brand),\n:host(.grid) vviinn-product-card::part(type) {\n text-align: center;\n}\n\n:host(.grid) vviinn-product-card::part(price-container) {\n align-self: center;\n}\n\n:host(.continuity) vviinn-product-card::part(title),\n:host(.continuity) vviinn-product-card::part(brand),\n:host(.continuity) vviinn-product-card::part(type),\n:host(.continuity) vviinn-product-card::part(deeplink) {\n text-align: left;\n max-width: unset;\n align-self: start;\n}\n","import {\n Component,\n ComponentInterface,\n Host,\n h,\n Prop,\n State,\n Element,\n Watch,\n Event,\n EventEmitter,\n Listen,\n Fragment,\n} from \"@stencil/core\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport * as TE from \"fp-ts/lib/TaskEither\";\nimport * as E from \"fp-ts/lib/Either\";\nimport { createBearAuthedHeader } from \"./token-helpers\";\nimport { state } from \"../../store/store\";\nimport { CampaignName, campaignTypeNames } from \"../../campaign/Campaign\";\nimport { getRecommendationsService } from \"../../campaign/CampaignService\";\nimport { imageSearchState } from \"../../store/imageSearch.store\";\nimport { CarouselMode } from \"../vviinn-carousel/vviinn-carousel\";\nimport { Recommendation } from \"../../recommendation/recommendation\";\nimport { Subject } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport {\n DefaultApi,\n EventConfirmation,\n ProductClickEvent,\n ProductViewEvent,\n WidgetEvent,\n} from \"vviinn-tracking-client-ts\";\nimport { createTrackingApi } from \"../../openApi\";\nimport { ProductCardEvent, BasicEventData } from \"../../recommendation/events\";\nimport {\n createProductClickVprEvent,\n createProductViewVprEvent,\n createWidgetVprEvent,\n} from \"../../tracking\";\nimport { checkEmpryString } from \"../../utils/option/option\";\n\n/**\n * @part product-card - product card itself\n * @part title - title inside product card\n * @part brand - brand inside product card\n * @part currency - brand inside product card\n * @part image - product card image\n * @part image-link - anchor element around product image\n * @part deeplink - anchor element around product title\n * @part price-amount-sale - numeric part of price.\n * @part price-amount-outdated - numeric part of price.\n * @part price-amount-regular - numeric part of price.\n * @part price-container - block of prices\n * @part price-outdated - block for outdated price. rendered when product contains sale price\n * @part price-regular - block for price if no sale price presented\n * @part price-sale - block for sale price. rendered only if sale price presented\n * @part price-prefix - block rendered before each price element (for ex. \"from\")\n * @part carousel-button\n */\n@Component({\n tag: \"vviinn-vpr-widget\",\n styleUrl: \"vviinn-vpr-widget.css\",\n shadow: true,\n})\nexport class VviinnVprWidget implements ComponentInterface {\n @Element() el: HTMLElement;\n /** Title for recommendations widget */\n @Prop() blockTitle: string = \"Recommended products\";\n /** Ratio of each recommended product image */\n @Prop() imageRatio: number = 1;\n /** Width of each recommended product image */\n @Prop() imageWidth: number = 300;\n /** Id of product you need recommendations for */\n @Prop() productId: string;\n /** vviinn customer token */\n @Prop() token: string;\n /** Currency sign will shown after price */\n @Prop() currencySign: string = \"€\";\n /** prefix will shown before price */\n @Prop() pricePrefix: string;\n /** Use slider or grid view */\n @Prop() mode: CarouselMode = \"continuity\";\n /** Campaign type */\n @Prop() campaignType: CampaignName = \"VPR\";\n /** Locale for currency formatting */\n @Prop() locale: string = \"de-DE\";\n /** comma-separated list of campaign-ids */\n @Prop() campaigns: string = \"\";\n /** Color accepts any hexcode string */\n @Prop() color: string;\n /** Hiding disabled arrows in the carousel if true */\n @Prop() gridArrowsDynamic: boolean = false;\n /** This message is displayed when no results */\n @Prop() noResultText?: string;\n /** Showing message (when true) or hiding the whole widget, when no results */\n @Prop() noResultShow?: boolean = true;\n /** @internal */\n @Prop() apiPath: string | undefined = \"https://api.vviinn.com\";\n /** @internal */\n @Prop() useCarousel: boolean = true;\n\n @Prop() showScroll = true;\n @Prop() cssUrl: string | null = null;\n\n /** @internal */\n @Prop() buttonElementId?: string;\n\n @State() recommendations: Recommendation[] = [];\n @State() trackingDeactivated: boolean = false;\n @State() hasErrorOnLoad: boolean = false;\n\n @Event({ bubbles: true })\n vviinnWidgetLoad: EventEmitter<BasicEventData>;\n\n // List to show in the Storybook:\n @Event() vviinnProductClick: EventEmitter;\n @Event() vviinnProductView: EventEmitter;\n @Event() vviinnProductLoad: EventEmitter;\n @Event() vviinnNoResult: EventEmitter;\n\n /** @internal */\n @Event() vviinnRecommendationsLoaded: EventEmitter;\n\n private productIds: string[];\n private productImageLoadedSubject = new Subject();\n private id?: string;\n\n private getEventData(): BasicEventData {\n return {\n widgetType: \"VPR\",\n campaignTypeId: this.campaignType,\n campaignTypeName: campaignTypeNames[this.campaignType],\n widgetId: this.id,\n };\n }\n\n trackingApi: DefaultApi;\n uiSessionId: string;\n\n setTrackingDeactivated = (result: EventConfirmation) => {\n if (result.status === \"rejected\") {\n this.trackingDeactivated = true;\n }\n };\n\n @Watch(\"productId\")\n handleProductIdChange() {\n this.getRecommendations();\n }\n\n @Watch(\"campaignType\")\n handleCampaignTypeChange() {\n this.getRecommendations();\n }\n\n @Watch(\"campaigns\")\n handleCampaignsChange() {\n this.getRecommendations();\n }\n\n @Watch(\"apiPath\")\n handleApiPathChange(newPath: string) {\n state.apiPath = newPath;\n this.getRecommendations();\n }\n\n @Listen(\"vviinnProductLoad\")\n handleProductLoading({ detail }: ProductCardEvent) {\n this.productImageLoadedSubject.next(detail.productId);\n }\n\n @Listen(\"vviinnProductView\")\n trackProductView({ detail }: ProductCardEvent) {\n if (this.trackingDeactivated) return;\n const {\n productRank,\n productId,\n productName,\n widgetType,\n widgetId,\n campaignTypeId,\n campaignTypeName,\n ...rest\n } = detail;\n\n const productViewEvent: ProductViewEvent = createProductViewVprEvent({\n session_id: this.uiSessionId,\n rank: productRank,\n product: productId,\n ...rest,\n });\n this.trackingApi\n .trackEvent(productViewEvent)\n .then(this.setTrackingDeactivated);\n }\n\n @Listen(\"vviinnProductClick\")\n async trackProductClick({ detail }: ProductCardEvent) {\n const {\n productRank,\n productId,\n productName,\n widgetType,\n widgetId,\n campaignTypeId,\n campaignTypeName,\n ...rest\n } = detail;\n\n const productClickEvent: ProductClickEvent = createProductClickVprEvent({\n session_id: this.uiSessionId,\n rank: productRank,\n product: productId,\n ...rest,\n });\n if (!this.trackingDeactivated) {\n await this.trackingApi\n .trackEvent(productClickEvent)\n .then(this.setTrackingDeactivated);\n }\n\n const product = this.recommendations.find(\n (r) => r.productId === detail.productId\n );\n if (!product || !product.deeplink) return;\n window.location.href = product.deeplink;\n }\n\n connectedCallback() {\n state.apiPath = this.apiPath;\n state.currencySign = this.currencySign;\n state.locale = this.locale;\n this.id = this.buttonElementId ?? this.el.id;\n this.uiSessionId = uuidv4();\n this.trackingApi = createTrackingApi(this.apiPath, this.token);\n\n if (this.trackingDeactivated) return;\n\n const widgetOpenEvent: WidgetEvent = createWidgetVprEvent({\n action: \"open\",\n session_id: this.uiSessionId,\n });\n this.trackingApi\n .trackEvent(widgetOpenEvent)\n .then(this.setTrackingDeactivated);\n }\n\n disconnectedCallback() {\n if (this.trackingDeactivated) return;\n\n const widgetCloseEvent: WidgetEvent = createWidgetVprEvent({\n action: \"close\",\n session_id: this.uiSessionId,\n });\n this.trackingApi\n .trackEvent(widgetCloseEvent)\n .then(this.setTrackingDeactivated);\n }\n\n async componentWillLoad() {\n state.pricePrefix = this.pricePrefix;\n state.currencySign = this.currencySign;\n\n this.vviinnWidgetLoad.emit(this.getEventData());\n this.getRecommendations();\n }\n\n private async getRecommendations() {\n if (this.productId === undefined || this.token === undefined) return;\n const campaignType =\n this.campaignType.length > 0 ? this.campaignType : \"VPR\";\n const headers = createBearAuthedHeader(this.token);\n const request = pipe(\n TE.of(getRecommendationsService(campaignType)),\n TE.ap(TE.of(this.productId)),\n TE.ap(TE.of(this.color)),\n TE.ap(TE.of(checkEmpryString(this.campaigns))),\n TE.ap(TE.of(headers)),\n TE.flatten\n );\n\n const runRequest = await request();\n\n pipe(\n runRequest,\n E.fold(\n (error) => {\n this.handleError(error);\n this.vviinnNoResult.emit(this.getEventData());\n this.vviinnRecommendationsLoaded.emit();\n },\n (data) => this.handleRecommendationsSuccess(data)\n )\n );\n }\n\n private handleError(_: unknown): any {\n this.hasErrorOnLoad = true;\n }\n\n private handleRecommendationsSuccess(data: any) {\n this.recommendations = data?.extended ?? data;\n imageSearchState.results = this.recommendations;\n\n this.productIds = this.recommendations.map((r) => r.productId);\n this.productImageLoadedSubject.subscribe((id) => {\n this.productIds = this.productIds.filter((x) => x !== id);\n\n if (this.productIds.length === 0) {\n this.vviinnRecommendationsLoaded.emit();\n }\n });\n }\n\n private isExternalCSS(): boolean {\n return this.cssUrl && this.cssUrl.length > 0;\n }\n\n private renderExternalCSS() {\n return this.isExternalCSS() ? (\n <link href={this.cssUrl} rel=\"stylesheet\" />\n ) : (\n \"\"\n );\n }\n\n render() {\n if (this.recommendations.length === 0 && this.noResultShow === false)\n return null;\n\n return (\n <Host\n class={{\n loaded: true,\n empty: this.recommendations.length == 0,\n [this.mode]: true,\n }}\n aria-hidden=\"false\"\n >\n <Fragment>\n {this.renderExternalCSS()}\n <style>{state.fallbackStyles}</style>\n <h2 part=\"recommendations-title\">{this.blockTitle}</h2>\n {this.recommendations.length > 0 &&\n (this.useCarousel ? this.renderCarousel() : this.renderResults())}\n\n {this.recommendations.length === 0 && this.hasErrorOnLoad && (\n <p class=\"no-result-text\">{`${\n this?.noResultText ?? \"No results! Please, try again later.\"\n }`}</p>\n )}\n </Fragment>\n </Host>\n );\n }\n\n private renderRecommendation(\n recommendation: Recommendation,\n index: number\n ): HTMLVviinnProductCardElement {\n return (\n <vviinn-product-card\n part=\"product-part\"\n productId={recommendation.productId}\n productTitle={recommendation.title}\n deeplink={recommendation.deeplink}\n image={recommendation.image.thumbnail}\n brand={recommendation.brand}\n imageWidth={this.imageWidth}\n imageRatio={1}\n price={recommendation.price.actual}\n salePrice={recommendation.price.sale}\n responsive={this.mode === \"grid\"}\n dimmedBackground={this.useDimmedBackgroundInCard()}\n campaignTypeId={this.campaignType}\n index={index}\n widgetElementId={this.id}\n />\n );\n }\n\n private useDimmedBackgroundInCard(): boolean {\n return this.mode === \"continuity\" || !this.useCarousel;\n }\n\n private renderResults() {\n return (\n <div class=\"recommendations-grid\" part=\"recommendations-grid\">\n {this.recommendations.map((r, i) => this.renderRecommendation(r, i))}\n </div>\n );\n }\n\n private renderCarousel(): HTMLVviinnCarouselElement {\n return (\n <vviinn-carousel\n mode={this.mode}\n campaignTypeId={this.campaignType}\n imageWidth={this.imageWidth}\n showScroll={this.showScroll}\n recommendations={this.recommendations}\n widgetElementId={this.id}\n gridArrowsDynamic={this.gridArrowsDynamic}\n ></vviinn-carousel>\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{h as n}from"./p-fa17e81f.js";const t=["vviinn-onboarding-title","onboarding-card-1-icon","onboarding-card-1-text","onboarding-card-2-icon","onboarding-card-2-text","onboarding-card-3-icon","onboarding-card-3-text","vviinn-example-images-title","vviinn-example-images-1","vviinn-example-images-2","vviinn-example-images-3","vviinn-example-images-4","vviinn-teaser-text","vviinn-image-upload-button-text","vviinn-privacy-badge-text","vviinn-image-search-modal-title"];const i=t=>n("slot",{name:t});const o=()=>t.map(i);const a=n=>Array.from(n.shadowRoot.querySelectorAll("slot"));const e=n=>n.getAttribute("name");const s=n=>n.getAttribute("slot");const c=n=>t=>{const i=e(n);const o=s(t);return i===o};const r=n=>(t,i)=>{const o=n.find(c(i));if(o){t.set(i,o)}return t};const v=(n,t)=>{t.innerHTML=n.outerHTML};const d=(n,t)=>{n.connectedCallback=function(){document.addEventListener("globalSlotsChanged",(({detail:n})=>{const i=a(t).reduce(r(n),new Map);i.forEach(v)}),true)};n.connectedCallback.call(n)};export{o as S,d as s};
2
+ //# sourceMappingURL=p-53eacbe3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultSlotsNames","renderNamedSlot","name","h","SlotSkeleton","map","getSlots","element","Array","from","shadowRoot","querySelectorAll","getNameAttribute","getAttribute","getSlotAttribute","elementContainSlot","slot","container","name1","name2","getContentToReplace","targets","acc","content","replaceCandidate","find","set","replaceSlotContent","target","innerHTML","outerHTML","slotChangeListener","component","connectedCallback","document","addEventListener","detail","slotsToReplace","reduce","Map","forEach","call"],"sources":["./src/components/customized-slots.tsx"],"sourcesContent":["import { h } from \"@stencil/core\";\n\nconst defaultSlotsNames: string[] = [\n \"vviinn-onboarding-title\",\n \"onboarding-card-1-icon\",\n \"onboarding-card-1-text\",\n \"onboarding-card-2-icon\",\n \"onboarding-card-2-text\",\n \"onboarding-card-3-icon\",\n \"onboarding-card-3-text\",\n \"vviinn-example-images-title\",\n \"vviinn-example-images-1\",\n \"vviinn-example-images-2\",\n \"vviinn-example-images-3\",\n \"vviinn-example-images-4\",\n \"vviinn-teaser-text\",\n \"vviinn-image-upload-button-text\",\n \"vviinn-privacy-badge-text\",\n \"vviinn-image-search-modal-title\",\n];\n\nconst renderNamedSlot = (name: string) => <slot name={name} />;\n\nexport const SlotSkeleton = () => defaultSlotsNames.map(renderNamedSlot);\n\nconst getSlots = (element: HTMLElement): HTMLSlotElement[] =>\n Array.from(element.shadowRoot.querySelectorAll(\"slot\"));\n\nconst getNameAttribute = (element: HTMLElement): string | null =>\n element.getAttribute(\"name\");\n\nconst getSlotAttribute = (element: HTMLElement): string | null =>\n element.getAttribute(\"slot\");\n\nconst elementContainSlot =\n (slot: HTMLSlotElement) =>\n (container: HTMLElement): boolean => {\n const name1 = getNameAttribute(slot);\n const name2 = getSlotAttribute(container);\n\n return name1 === name2;\n };\n\nconst getContentToReplace =\n (targets: HTMLElement[]) =>\n (\n acc: Map<HTMLSlotElement, HTMLElement>,\n content: HTMLSlotElement\n ): Map<HTMLSlotElement, HTMLElement> => {\n const replaceCandidate = targets.find(elementContainSlot(content));\n\n if (replaceCandidate) {\n acc.set(content, replaceCandidate);\n }\n\n return acc;\n };\n\nconst replaceSlotContent = (\n content: HTMLSlotElement,\n target: HTMLElement\n): void => {\n target.innerHTML = content.outerHTML;\n};\n\nexport const slotChangeListener = (component: any, element: HTMLElement) => {\n component.connectedCallback = function () {\n document.addEventListener(\n \"globalSlotsChanged\",\n ({ detail }: CustomEvent<HTMLElement[]>) => {\n const slotsToReplace: Map<HTMLSlotElement, HTMLElement> = getSlots(\n element\n ).reduce(getContentToReplace(detail), new Map());\n\n slotsToReplace.forEach(replaceSlotContent);\n },\n true\n );\n };\n\n component.connectedCallback.call(component);\n};\n"],"mappings":"oCAEA,MAAMA,EAA8B,CAClC,0BACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,8BACA,0BACA,0BACA,0BACA,0BACA,qBACA,kCACA,4BACA,mCAGF,MAAMC,EAAmBC,GAAiBC,EAAA,QAAMD,KAAMA,I,MAEzCE,EAAe,IAAMJ,EAAkBK,IAAIJ,GAExD,MAAMK,EAAYC,GAChBC,MAAMC,KAAKF,EAAQG,WAAWC,iBAAiB,SAEjD,MAAMC,EAAoBL,GACxBA,EAAQM,aAAa,QAEvB,MAAMC,EAAoBP,GACxBA,EAAQM,aAAa,QAEvB,MAAME,EACHC,GACAC,IACC,MAAMC,EAAQN,EAAiBI,GAC/B,MAAMG,EAAQL,EAAiBG,GAE/B,OAAOC,IAAUC,CAAK,EAG1B,MAAMC,EACHC,GACD,CACEC,EACAC,KAEA,MAAMC,EAAmBH,EAAQI,KAAKV,EAAmBQ,IAEzD,GAAIC,EAAkB,CACpBF,EAAII,IAAIH,EAASC,E,CAGnB,OAAOF,CAAG,EAGd,MAAMK,EAAqB,CACzBJ,EACAK,KAEAA,EAAOC,UAAYN,EAAQO,SAAS,E,MAGzBC,EAAqB,CAACC,EAAgBzB,KACjDyB,EAAUC,kBAAoB,WAC5BC,SAASC,iBACP,sBACA,EAAGC,aACD,MAAMC,EAAoD/B,EACxDC,GACA+B,OAAOlB,EAAoBgB,GAAS,IAAIG,KAE1CF,EAAeG,QAAQb,EAAmB,GAE5C,K,EAIJK,EAAUC,kBAAkBQ,KAAKT,EAAU,S"}
@@ -0,0 +1,2 @@
1
+ import{r as i,c as t,h as s,H as h,g as n}from"./p-fa17e81f.js";import{V as e}from"./p-c24caccd.js";import{c as o}from"./p-18fd769b.js";const d=":host{display:block}";const c=class{constructor(s){i(this,s);this.vviinnWidgetOpen=t(this,"vviinnWidgetOpen",7);this.vviinnWidgetLoad=t(this,"vviinnWidgetLoad",7);this.vviinnWidgetClose=t(this,"vviinnWidgetClose",7);this.vviinnProductClick=t(this,"vviinnProductClick",7);this.vviinnProductView=t(this,"vviinnProductView",7);this.vviinnProductLoad=t(this,"vviinnProductLoad",7);this.vviinnNoResult=t(this,"vviinnNoResult",7);this.sidebar=null;this.sidebarCloseListener=()=>{document.body.removeChild(this.sidebar)};this.token=undefined;this.productId=undefined;this.position="bottom";this.sourceImage=null;this.sidebarTitle="Visually similar products";this.modalScrollbar=false;this.campaigns="";this.campaignType="VPR";this.color=undefined;this.addStyle=true;this.mode="continuity";this.imageWidth=300;this.currencySign="€";this.noResultText=undefined;this.noResultShow=true;this.gridArrowsDynamic=false;this.apiPath="https://api.vviinn.com"}render(){return s(h,{onClick:()=>{this.handleClick();this.vviinnWidgetOpen.emit({widgetType:"VPR",campaignTypeId:this.campaignType,campaignTypeName:o[this.campaignType],widgetId:this.el.id})},role:"button",tabindex:"0"},s("vviinn-button",{addStyle:this.addStyle,part:"vviinn-button"},s("slot",null,s(e,null))))}handleClick(){const i=document.createElement("vviinn-recommendations-sidebar");i.sidebarTitle=this.sidebarTitle;i.productId=this.productId;i.token=this.token;i.position=this.position;i.sourceImage=this.sourceImage;i.widgetScrollbar=this.modalScrollbar;i.campaigns=this.campaigns;i.campaignType=this.campaignType;i.color=this.color;i.mode=this.position==="right"?"grid":this.mode;i.imageWidth=this.imageWidth;i.currencySign=this.currencySign;i.apiPath=this.apiPath;i.buttonElementId=this.el.id;i.noResultText=this.noResultText;i.noResultShow=this.noResultShow;i.gridArrowsDynamic=this.gridArrowsDynamic;this.sidebar=i;i.addEventListener("vviinnWidgetClose",this.sidebarCloseListener);document.body.append(this.sidebar)}disconnectedCallback(){if(!this.sidebar)return;this.sidebar.removeEventListener("vviinnWidgetClose",this.sidebarCloseListener);document.body.removeChild(this.sidebar)}get el(){return n(this)}};c.style=d;export{c as vviinn_vpr_button};
2
+ //# sourceMappingURL=p-645baf22.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["vviinnVprButtonCss","VviinnVprButton","this","sidebar","sidebarCloseListener","document","body","removeChild","render","h","Host","onClick","handleClick","vviinnWidgetOpen","emit","widgetType","campaignTypeId","campaignType","campaignTypeName","campaignTypeNames","widgetId","el","id","role","tabindex","addStyle","part","VisualSearchIcon","createElement","sidebarTitle","productId","token","position","sourceImage","widgetScrollbar","modalScrollbar","campaigns","color","mode","imageWidth","currencySign","apiPath","buttonElementId","noResultText","noResultShow","gridArrowsDynamic","addEventListener","append","disconnectedCallback","removeEventListener"],"sources":["./src/components/vviinn-vpr-button/vviinn-vpr-button.css?tag=vviinn-vpr-button&encapsulation=shadow","./src/components/vviinn-vpr-button/vviinn-vpr-button.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n} from \"@stencil/core\";\nimport { VisualSearchIcon } from \"../vviinn-icons\";\nimport { CarouselMode } from \"../vviinn-carousel/vviinn-carousel\";\nimport { BasicEventData } from \"../../recommendation/events\";\nimport { CampaignName, campaignTypeNames } from \"../../campaign/Campaign\";\n\n/**\n *\n * @part button - clickable button element\n */\n@Component({\n tag: \"vviinn-vpr-button\",\n styleUrl: \"vviinn-vpr-button.css\",\n shadow: true,\n})\nexport class VviinnVprButton {\n @Element() el: HTMLElement;\n @Prop() token: string;\n @Prop() productId: string;\n @Prop() position: \"bottom\" | \"right\" = \"bottom\";\n @Prop() sourceImage: string | null = null;\n @Prop() sidebarTitle: string = \"Visually similar products\";\n @Prop() modalScrollbar: boolean = false;\n /** comma-separated list of campaign-ids */\n @Prop() campaigns: string = \"\";\n /** Campaign type */\n @Prop() campaignType: CampaignName = \"VPR\";\n @Prop() color: string;\n @Prop() addStyle: boolean = true;\n @Prop() mode: CarouselMode = \"continuity\";\n @Prop() imageWidth: number = 300;\n @Prop() currencySign: string = \"€\";\n /** This message is displayed when no results */\n @Prop() noResultText?: string;\n /** Showing message (when true) or hiding the whole widget, when no results */\n @Prop() noResultShow?: boolean = true;\n /** Hiding disabled arrows in the carousel if true */\n @Prop() gridArrowsDynamic: boolean = false;\n\n /** @internal */\n @Prop() apiPath: string | undefined = \"https://api.vviinn.com\";\n\n /** Event emitted when vpr-button clicked */\n @Event() vviinnWidgetOpen: EventEmitter<BasicEventData>;\n\n // List to show in the Storybook:\n @Event() vviinnWidgetLoad: EventEmitter;\n @Event() vviinnWidgetClose: EventEmitter;\n @Event() vviinnProductClick: EventEmitter;\n @Event() vviinnProductView: EventEmitter;\n @Event() vviinnProductLoad: EventEmitter;\n @Event() vviinnNoResult: EventEmitter;\n\n private sidebar: HTMLVviinnRecommendationsSidebarElement | null = null;\n private sidebarCloseListener: () => void = () => {\n document.body.removeChild(this.sidebar);\n };\n\n render() {\n return (\n <Host\n onClick={(): void => {\n this.handleClick();\n this.vviinnWidgetOpen.emit({\n widgetType: \"VPR\",\n campaignTypeId: this.campaignType,\n campaignTypeName: campaignTypeNames[this.campaignType],\n widgetId: this.el.id,\n });\n }}\n role=\"button\"\n tabindex=\"0\"\n >\n <vviinn-button addStyle={this.addStyle} part=\"vviinn-button\">\n <slot>\n <VisualSearchIcon />\n </slot>\n </vviinn-button>\n </Host>\n );\n }\n\n handleClick(): void {\n const sidebar = document.createElement(\"vviinn-recommendations-sidebar\");\n sidebar.sidebarTitle = this.sidebarTitle;\n sidebar.productId = this.productId;\n sidebar.token = this.token;\n sidebar.position = this.position;\n sidebar.sourceImage = this.sourceImage;\n sidebar.widgetScrollbar = this.modalScrollbar;\n sidebar.campaigns = this.campaigns;\n sidebar.campaignType = this.campaignType;\n sidebar.color = this.color;\n sidebar.mode = this.position === \"right\" ? \"grid\" : this.mode;\n sidebar.imageWidth = this.imageWidth;\n sidebar.currencySign = this.currencySign;\n sidebar.apiPath = this.apiPath;\n sidebar.buttonElementId = this.el.id;\n sidebar.noResultText = this.noResultText;\n sidebar.noResultShow = this.noResultShow;\n sidebar.gridArrowsDynamic = this.gridArrowsDynamic;\n\n this.sidebar = sidebar;\n\n sidebar.addEventListener(\"vviinnWidgetClose\", this.sidebarCloseListener);\n document.body.append(this.sidebar);\n }\n\n disconnectedCallback() {\n if (!this.sidebar) return;\n this.sidebar.removeEventListener(\n \"vviinnWidgetClose\",\n this.sidebarCloseListener\n );\n document.body.removeChild(this.sidebar);\n }\n}\n"],"mappings":"wIAAA,MAAMA,EAAqB,uB,MCuBdC,EAAe,M,oYAsClBC,KAAAC,QAA0D,KAC1DD,KAAAE,qBAAmC,KACzCC,SAASC,KAAKC,YAAYL,KAAKC,QAAQ,E,4DApCF,S,iBACF,K,kBACN,4B,oBACG,M,eAEN,G,kBAES,M,mCAET,K,UACC,a,gBACA,I,kBACE,I,8CAIE,K,uBAEI,M,aAGC,wB,CAkBtCK,SACE,OACEC,EAACC,EAAI,CACHC,QAAS,KACPT,KAAKU,cACLV,KAAKW,iBAAiBC,KAAK,CACzBC,WAAY,MACZC,eAAgBd,KAAKe,aACrBC,iBAAkBC,EAAkBjB,KAAKe,cACzCG,SAAUlB,KAAKmB,GAAGC,IAClB,EAEJC,KAAK,SACLC,SAAS,KAETf,EAAA,iBAAegB,SAAUvB,KAAKuB,SAAUC,KAAK,iBAC3CjB,EAAA,YACEA,EAACkB,EAAgB,Q,CAO3Bf,cACE,MAAMT,EAAUE,SAASuB,cAAc,kCACvCzB,EAAQ0B,aAAe3B,KAAK2B,aAC5B1B,EAAQ2B,UAAY5B,KAAK4B,UACzB3B,EAAQ4B,MAAQ7B,KAAK6B,MACrB5B,EAAQ6B,SAAW9B,KAAK8B,SACxB7B,EAAQ8B,YAAc/B,KAAK+B,YAC3B9B,EAAQ+B,gBAAkBhC,KAAKiC,eAC/BhC,EAAQiC,UAAYlC,KAAKkC,UACzBjC,EAAQc,aAAef,KAAKe,aAC5Bd,EAAQkC,MAAQnC,KAAKmC,MACrBlC,EAAQmC,KAAOpC,KAAK8B,WAAa,QAAU,OAAS9B,KAAKoC,KACzDnC,EAAQoC,WAAarC,KAAKqC,WAC1BpC,EAAQqC,aAAetC,KAAKsC,aAC5BrC,EAAQsC,QAAUvC,KAAKuC,QACvBtC,EAAQuC,gBAAkBxC,KAAKmB,GAAGC,GAClCnB,EAAQwC,aAAezC,KAAKyC,aAC5BxC,EAAQyC,aAAe1C,KAAK0C,aAC5BzC,EAAQ0C,kBAAoB3C,KAAK2C,kBAEjC3C,KAAKC,QAAUA,EAEfA,EAAQ2C,iBAAiB,oBAAqB5C,KAAKE,sBACnDC,SAASC,KAAKyC,OAAO7C,KAAKC,Q,CAG5B6C,uBACE,IAAK9C,KAAKC,QAAS,OACnBD,KAAKC,QAAQ8C,oBACX,oBACA/C,KAAKE,sBAEPC,SAASC,KAAKC,YAAYL,KAAKC,Q"}
@@ -0,0 +1,2 @@
1
+ import{r as t,c as i,h as e,H as n,g as o}from"./p-fa17e81f.js";import{b as r}from"./p-c24caccd.js";import{c as s}from"./p-18fd769b.js";const a=":host{--vviinn-carousel-columns:4;box-sizing:border-box;display:block;display:flex;height:100vh;left:0;position:fixed;top:0;transition:background 0.1s ease-in-out;width:100vw}:host(.open){background:rgba(0, 0, 0, 0.2)}:host(.bottom){flex-direction:column;justify-content:end}:host(.right){flex-direction:row;justify-content:flex-end}header{position:relative;text-align:center;padding:32px}header.contains-source-img{display:grid;justify-items:center;grid-gap:12px}img.source-image{width:64px;height:64px;border-radius:50%;box-shadow:0px 2px 4px rgba(0, 0, 0, 0.15);padding:8px}:host(.right) header{box-shadow:0px 2px 6px rgba(0, 0, 0, 0.1)}main{padding:0 24px;min-height:100px}:host(.right) main{overflow:auto}.sidebar{background:white;box-sizing:border-box;display:flex;flex-direction:column;max-height:100vh;overflow-y:auto}:host(.bottom.idle) .sidebar,:host(.bottom.closed) .sidebar{transform:translateY(100%)}:host(.bottom.closed) .sidebar{animation-name:slideOutFromBottom;animation-duration:0.5s;animation-fill-mode:forwards}:host(.bottom.open) .sidebar{animation-name:slideInFromBottom;animation-duration:0.5s;animation-fill-mode:forwards}:host(.right.idle) .sidebar{transform:translateX(100%)}:host(.right.closed) .sidebar{animation-name:slideOutFromRight;animation-duration:0.5s;animation-fill-mode:forwards}:host(.right.open) .sidebar{animation-name:slideInFromRight;animation-duration:0.5s;animation-fill-mode:forwards}:host(.right) .sidebar{max-width:480px}:host(.right) vviinn-vpr-widget::part(recommendations-grid){display:grid;grid-template-columns:repeat(2, 1fr);grid-gap:24px}:host(.right) vviinn-vpr-widget{overflow:auto}:host(.right) vviinn-vpr-widget::part(image){border:none}.title{font-style:normal;font-weight:500;font-size:28px;line-height:40px;text-align:center;color:#000000}vviinn-vpr-widget::part(title),vviinn-vpr-widget::part(brand),vviinn-vpr-widget::part(type){text-align:left}vviinn-vpr-widget::part(price-container){align-self:start}.close-sidebar{background:transparent;border:none;cursor:pointer;margin:0;padding:0;position:absolute;right:24px;top:24px}@keyframes slideInFromBottom{from{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideOutFromBottom{from{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes slideInFromRight{from{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes slideOutFromRight{from{transform:translateX(0)}to{transform:translateX(100%)}}@media (max-width: 768px){:host{--vviinn-carousel-columns:2}}";const d=class{constructor(e){t(this,e);this.vviinnWidgetClose=i(this,"vviinnWidgetClose",7);this.sidebarTitle=undefined;this.token=undefined;this.productId=undefined;this.position="bottom";this.sourceImage=null;this.widgetScrollbar=false;this.mode="continuity";this.campaigns="";this.campaignType=undefined;this.color=undefined;this.imageWidth=300;this.currencySign="€";this.noResultText=undefined;this.noResultShow=undefined;this.gridArrowsDynamic=undefined;this.apiPath="https://api.vviinn.com";this.buttonElementId=undefined;this.state="idle"}bodyClickListener(t){const{clientX:i,clientY:e}=t;const n=this.getSidebarRectangle();if(!n)return;const o=i>=n.left;const r=i<=n.right;const s=e>=n.top;const a=e<=n.bottom;const d=o&&r&&s&&a;if(!d){this.state="closed"}}getClassMap(){return{[this.position]:true,[this.state]:true}}getSidebarRectangle(){var t;return(t=this.el.shadowRoot.querySelector("aside"))===null||t===void 0?void 0:t.getBoundingClientRect()}render(){return e(n,{class:this.getClassMap()},e("aside",{class:"sidebar",part:"body",onAnimationEnd:t=>this.handleAnimationEnd(t)},e("header",{class:{"contains-source-img":this.isSourceImageValid()},part:"sidebar-header"},this.isSourceImageValid()?this.renderSourceImage():null,e("span",{class:"title",part:"title"},this.sidebarTitle),e("button",{class:"close-sidebar",onClick:()=>this.state="closed"},e(r,null))),e("main",{part:"sidebar-content"},e("vviinn-vpr-widget",{exportparts:"brand, currency, deeplink, image, image-link, price-amount, price-container, price-prefix, price-outdated, price-regular, price-sale, title: product-title, carousel-button, product-card, items-group",token:this.token,productId:this.productId,imageWidth:this.imageWidth,blockTitle:"",mode:this.mode,useCarousel:this.position==="bottom",onVviinnRecommendationsLoaded:()=>this.state="open",showScroll:this.widgetScrollbar,campaigns:this.campaigns,color:this.color,currencySign:this.currencySign,apiPath:this.apiPath,buttonElementId:this.buttonElementId,noResultText:this.noResultText,noResultShow:this.noResultShow,gridArrowsDynamic:this.gridArrowsDynamic}))))}renderSourceImage(){return e("img",{class:"source-image",part:"source-image",src:this.sourceImage})}isSourceImageValid(){var t;return((t=this.sourceImage)===null||t===void 0?void 0:t.length)>0}handleAnimationEnd({animationName:t}){const i=t.includes("slideOut");if(!i)return;this.vviinnWidgetClose.emit({widgetType:"VPR",campaignTypeId:this.campaignType,campaignTypeName:s[this.campaignType],widgetId:this.buttonElementId})}get el(){return o(this)}};d.style=a;export{d as vviinn_recommendations_sidebar};
2
+ //# sourceMappingURL=p-a10b9151.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["recommendationsSidebarCss","RecommendationsSidebar","bodyClickListener","event","clientX","clientY","sidebarRect","this","getSidebarRectangle","inLeftBound","left","inRightBound","right","inTopBound","top","inBottomBound","bottom","inBound","state","getClassMap","position","_a","el","shadowRoot","querySelector","getBoundingClientRect","render","h","Host","class","part","onAnimationEnd","e","handleAnimationEnd","isSourceImageValid","renderSourceImage","sidebarTitle","onClick","CrossIcon","exportparts","token","productId","imageWidth","blockTitle","mode","useCarousel","onVviinnRecommendationsLoaded","showScroll","widgetScrollbar","campaigns","color","currencySign","apiPath","buttonElementId","noResultText","noResultShow","gridArrowsDynamic","src","sourceImage","length","animationName","isClosingAnimation","includes","vviinnWidgetClose","emit","widgetType","campaignTypeId","campaignType","campaignTypeName","campaignTypeNames","widgetId"],"sources":["./src/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.css?tag=vviinn-recommendations-sidebar&encapsulation=shadow","./src/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.tsx"],"sourcesContent":[":host {\n --vviinn-carousel-columns: 4;\n box-sizing: border-box;\n display: block;\n display: flex;\n height: 100vh;\n left: 0;\n position: fixed;\n top: 0;\n transition: background 0.1s ease-in-out;\n width: 100vw;\n}\n\n:host(.open) {\n background: rgba(0, 0, 0, 0.2);\n}\n\n:host(.bottom) {\n flex-direction: column;\n justify-content: end;\n}\n\n:host(.right) {\n flex-direction: row;\n justify-content: flex-end;\n}\n\nheader {\n position: relative;\n text-align: center;\n padding: 32px;\n}\n\nheader.contains-source-img {\n display: grid;\n justify-items: center;\n grid-gap: 12px;\n}\n\nimg.source-image {\n width: 64px;\n height: 64px;\n border-radius: 50%;\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);\n padding: 8px;\n}\n\n:host(.right) header {\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);\n}\n\nmain {\n padding: 0 24px;\n min-height: 100px;\n}\n\n:host(.right) main {\n overflow: auto;\n}\n\n.sidebar {\n background: white;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n max-height: 100vh;\n overflow-y: auto;\n}\n\n:host(.bottom.idle) .sidebar,\n:host(.bottom.closed) .sidebar {\n transform: translateY(100%);\n}\n\n:host(.bottom.closed) .sidebar {\n animation-name: slideOutFromBottom;\n animation-duration: 0.5s;\n animation-fill-mode: forwards;\n}\n\n:host(.bottom.open) .sidebar {\n animation-name: slideInFromBottom;\n animation-duration: 0.5s;\n animation-fill-mode: forwards;\n}\n\n:host(.right.idle) .sidebar {\n transform: translateX(100%);\n}\n\n:host(.right.closed) .sidebar {\n animation-name: slideOutFromRight;\n animation-duration: 0.5s;\n animation-fill-mode: forwards;\n}\n\n:host(.right.open) .sidebar {\n animation-name: slideInFromRight;\n animation-duration: 0.5s;\n animation-fill-mode: forwards;\n}\n\n:host(.right) .sidebar {\n max-width: 480px;\n}\n\n:host(.right) vviinn-vpr-widget::part(recommendations-grid) {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 24px;\n}\n\n:host(.right) vviinn-vpr-widget {\n overflow: auto;\n}\n\n:host(.right) vviinn-vpr-widget::part(image) {\n border: none;\n}\n\n.title {\n font-style: normal;\n font-weight: 500;\n font-size: 28px;\n line-height: 40px;\n text-align: center;\n color: #000000;\n}\n\nvviinn-vpr-widget::part(title),\nvviinn-vpr-widget::part(brand),\nvviinn-vpr-widget::part(type) {\n text-align: left;\n}\n\nvviinn-vpr-widget::part(price-container) {\n align-self: start;\n}\n\n.close-sidebar {\n background: transparent;\n border: none;\n cursor: pointer;\n margin: 0;\n padding: 0;\n position: absolute;\n right: 24px;\n top: 24px;\n}\n\n@keyframes slideInFromBottom {\n from {\n transform: translateY(100%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slideOutFromBottom {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(100%);\n }\n}\n\n@keyframes slideInFromRight {\n from {\n transform: translateX(100%);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes slideOutFromRight {\n from {\n transform: translateX(0);\n }\n\n to {\n transform: translateX(100%);\n }\n}\n\n@media (max-width: 768px) {\n :host {\n --vviinn-carousel-columns: 2;\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Listen,\n Element,\n Event,\n EventEmitter,\n} from \"@stencil/core\";\nimport { CrossIcon } from \"../../vviinn-icons\";\nimport { CarouselMode } from \"../../vviinn-carousel/vviinn-carousel\";\nimport { BasicEventData } from \"../../../recommendation/events\";\nimport { CampaignTypeId, campaignTypeNames } from \"../../../campaign/Campaign\";\n\ntype SidebarState = \"idle\" | \"open\" | \"closed\";\ntype ClickEvent = Event & { clientX: number; clientY: number };\n\n@Component({\n tag: \"vviinn-recommendations-sidebar\",\n styleUrl: \"recommendations-sidebar.css\",\n shadow: true,\n})\nexport class RecommendationsSidebar {\n @Element() el: HTMLElement;\n\n @Prop() sidebarTitle: string;\n @Prop() token: string;\n @Prop() productId: string;\n @Prop() position: \"bottom\" | \"right\" = \"bottom\";\n @Prop() sourceImage: string | null = null;\n @Prop() widgetScrollbar: boolean = false;\n @Prop() mode: CarouselMode = \"continuity\";\n /** comma-separated list of campaign-ids */\n @Prop() campaigns: string = \"\";\n @Prop() campaignType: CampaignTypeId;\n @Prop() color: string;\n @Prop() imageWidth: number = 300;\n @Prop() currencySign: string = \"€\";\n @Prop() noResultText?: string;\n @Prop() noResultShow?: boolean;\n /** Hiding disabled arrows in the carousel if true */\n @Prop() gridArrowsDynamic: boolean;\n\n /** @internal */\n @Prop() apiPath: string | undefined = \"https://api.vviinn.com\";\n /** @internal */\n @Prop() buttonElementId?: string;\n\n @State() state: SidebarState = \"idle\";\n\n @Event() vviinnWidgetClose: EventEmitter<BasicEventData>;\n\n @Listen(\"click\", { target: \"body\" })\n bodyClickListener(event: ClickEvent) {\n const { clientX, clientY } = event;\n const sidebarRect = this.getSidebarRectangle();\n\n if (!sidebarRect) return;\n\n const inLeftBound = clientX >= sidebarRect.left;\n const inRightBound = clientX <= sidebarRect.right;\n const inTopBound = clientY >= sidebarRect.top;\n const inBottomBound = clientY <= sidebarRect.bottom;\n const inBound = inLeftBound && inRightBound && inTopBound && inBottomBound;\n\n if (!inBound) {\n this.state = \"closed\";\n }\n }\n\n private getClassMap() {\n return {\n [this.position]: true,\n [this.state]: true,\n };\n }\n\n private getSidebarRectangle(): DOMRect {\n return this.el.shadowRoot.querySelector(\"aside\")?.getBoundingClientRect();\n }\n\n render(): any {\n return (\n <Host class={this.getClassMap()}>\n <aside\n class=\"sidebar\"\n part=\"body\"\n onAnimationEnd={(e) => this.handleAnimationEnd(e)}\n >\n <header\n class={{ \"contains-source-img\": this.isSourceImageValid() }}\n part=\"sidebar-header\"\n >\n {this.isSourceImageValid() ? this.renderSourceImage() : null}\n <span class=\"title\" part=\"title\">\n {this.sidebarTitle}\n </span>\n <button\n class=\"close-sidebar\"\n onClick={() => (this.state = \"closed\")}\n >\n <CrossIcon />\n </button>\n </header>\n <main part=\"sidebar-content\">\n <vviinn-vpr-widget\n exportparts=\"brand, currency, deeplink, image, image-link, price-amount, price-container, price-prefix, price-outdated, price-regular, price-sale, title: product-title, carousel-button, product-card, items-group\"\n token={this.token}\n productId={this.productId}\n imageWidth={this.imageWidth}\n blockTitle=\"\"\n mode={this.mode}\n useCarousel={this.position === \"bottom\"}\n onVviinnRecommendationsLoaded={() => (this.state = \"open\")}\n showScroll={this.widgetScrollbar}\n campaigns={this.campaigns}\n color={this.color}\n currencySign={this.currencySign}\n apiPath={this.apiPath}\n buttonElementId={this.buttonElementId}\n noResultText={this.noResultText}\n noResultShow={this.noResultShow}\n gridArrowsDynamic={this.gridArrowsDynamic}\n />\n </main>\n </aside>\n </Host>\n );\n }\n\n private renderSourceImage(): HTMLImageElement {\n return (\n <img class=\"source-image\" part=\"source-image\" src={this.sourceImage} />\n );\n }\n\n private isSourceImageValid(): boolean {\n return this.sourceImage?.length > 0;\n }\n\n private handleAnimationEnd({ animationName }: AnimationEvent): void {\n const isClosingAnimation = animationName.includes(\"slideOut\");\n if (!isClosingAnimation) return;\n\n this.vviinnWidgetClose.emit({\n widgetType: \"VPR\",\n campaignTypeId: this.campaignType,\n campaignTypeName: campaignTypeNames[this.campaignType],\n widgetId: this.buttonElementId,\n });\n }\n}\n"],"mappings":"wIAAA,MAAMA,EAA4B,68E,MCwBrBC,EAAsB,M,sKAMM,S,iBACF,K,qBACF,M,UACN,a,eAED,G,iEAGC,I,kBACE,I,sGAOO,yB,0CAIP,M,CAK/BC,kBAAkBC,GAChB,MAAMC,QAAEA,EAAOC,QAAEA,GAAYF,EAC7B,MAAMG,EAAcC,KAAKC,sBAEzB,IAAKF,EAAa,OAElB,MAAMG,EAAcL,GAAWE,EAAYI,KAC3C,MAAMC,EAAeP,GAAWE,EAAYM,MAC5C,MAAMC,EAAaR,GAAWC,EAAYQ,IAC1C,MAAMC,EAAgBV,GAAWC,EAAYU,OAC7C,MAAMC,EAAUR,GAAeE,GAAgBE,GAAcE,EAE7D,IAAKE,EAAS,CACZV,KAAKW,MAAQ,Q,EAITC,cACN,MAAO,CACL,CAACZ,KAAKa,UAAW,KACjB,CAACb,KAAKW,OAAQ,K,CAIVV,sB,MACN,OAAOa,EAAAd,KAAKe,GAAGC,WAAWC,cAAc,YAAQ,MAAAH,SAAA,SAAAA,EAAEI,uB,CAGpDC,SACE,OACEC,EAACC,EAAI,CAACC,MAAOtB,KAAKY,eAChBQ,EAAA,SACEE,MAAM,UACNC,KAAK,OACLC,eAAiBC,GAAMzB,KAAK0B,mBAAmBD,IAE/CL,EAAA,UACEE,MAAO,CAAE,sBAAuBtB,KAAK2B,sBACrCJ,KAAK,kBAEJvB,KAAK2B,qBAAuB3B,KAAK4B,oBAAsB,KACxDR,EAAA,QAAME,MAAM,QAAQC,KAAK,SACtBvB,KAAK6B,cAERT,EAAA,UACEE,MAAM,gBACNQ,QAAS,IAAO9B,KAAKW,MAAQ,UAE7BS,EAACW,EAAS,QAGdX,EAAA,QAAMG,KAAK,mBACTH,EAAA,qBACEY,YAAY,yMACZC,MAAOjC,KAAKiC,MACZC,UAAWlC,KAAKkC,UAChBC,WAAYnC,KAAKmC,WACjBC,WAAW,GACXC,KAAMrC,KAAKqC,KACXC,YAAatC,KAAKa,WAAa,SAC/B0B,8BAA+B,IAAOvC,KAAKW,MAAQ,OACnD6B,WAAYxC,KAAKyC,gBACjBC,UAAW1C,KAAK0C,UAChBC,MAAO3C,KAAK2C,MACZC,aAAc5C,KAAK4C,aACnBC,QAAS7C,KAAK6C,QACdC,gBAAiB9C,KAAK8C,gBACtBC,aAAc/C,KAAK+C,aACnBC,aAAchD,KAAKgD,aACnBC,kBAAmBjD,KAAKiD,sB,CAQ5BrB,oBACN,OACER,EAAA,OAAKE,MAAM,eAAeC,KAAK,eAAe2B,IAAKlD,KAAKmD,a,CAIpDxB,qB,MACN,QAAOb,EAAAd,KAAKmD,eAAW,MAAArC,SAAA,SAAAA,EAAEsC,QAAS,C,CAG5B1B,oBAAmB2B,cAAEA,IAC3B,MAAMC,EAAqBD,EAAcE,SAAS,YAClD,IAAKD,EAAoB,OAEzBtD,KAAKwD,kBAAkBC,KAAK,CAC1BC,WAAY,MACZC,eAAgB3D,KAAK4D,aACrBC,iBAAkBC,EAAkB9D,KAAK4D,cACzCG,SAAU/D,KAAK8C,iB"}
@@ -0,0 +1 @@
1
+ :host{--color-primary-system:#0F62FE;--color-primary-hover-system:#014CDA;--color-icons-system:#2F8EDF;--spacer:8px}
@@ -0,0 +1,2 @@
1
+ import{p as e,b as i}from"./p-fa17e81f.js";export{s as setNonce}from"./p-fa17e81f.js";const t=()=>{const i=import.meta.url;const t={};if(i!==""){t.resourcesUrl=new URL(".",i).href}return e(t)};t().then((e=>i([["p-c012ef97",[[1,"vviinn-button",{addStyle:[4,"add-style"]}]]],["p-e6d67de3",[[1,"cropper-handler",{handler:[16],disabled:[4]}]]],["p-e5e67a5f",[[1,"vviinn-error"]]],["p-0b0d59d7",[[1,"vviinn-preloader"]]],["p-4325566b",[[1,"vviinn-vpr-widget",{blockTitle:[1,"block-title"],imageRatio:[2,"image-ratio"],imageWidth:[2,"image-width"],productId:[1,"product-id"],token:[1],currencySign:[1,"currency-sign"],pricePrefix:[1,"price-prefix"],mode:[1],campaignType:[1,"campaign-type"],locale:[1],campaigns:[1],color:[1],gridArrowsDynamic:[4,"grid-arrows-dynamic"],noResultText:[1,"no-result-text"],noResultShow:[4,"no-result-show"],apiPath:[1,"api-path"],useCarousel:[4,"use-carousel"],showScroll:[4,"show-scroll"],cssUrl:[1,"css-url"],buttonElementId:[1,"button-element-id"],recommendations:[32],trackingDeactivated:[32],hasErrorOnLoad:[32]},[[0,"vviinnProductLoad","handleProductLoading"],[0,"vviinnProductView","trackProductView"],[0,"vviinnProductClick","trackProductClick"]]],[0,"vviinn-carousel",{mode:[1],imageWidth:[2,"image-width"],showScroll:[4,"show-scroll"],campaignTypeId:[1,"campaign-type-id"],widgetElementId:[1,"widget-element-id"],gridArrowsDynamic:[4,"grid-arrows-dynamic"],recommendations:[16],moveDirection:[32],contentGroups:[32],activeContentGroup:[32],isRTL:[32]}],[1,"vviinn-product-card",{brand:[1],currency:[1],deeplink:[1],image:[1],imageRatio:[2,"image-ratio"],imageWidth:[2,"image-width"],locale:[1],price:[2],pricePrefix:[1,"price-prefix"],productId:[1,"product-id"],productTitle:[1,"product-title"],productType:[1,"product-type"],salePrice:[2,"sale-price"],responsive:[4],campaignTypeId:[1,"campaign-type-id"],dimmedBackground:[4,"dimmed-background"],widgetElementId:[1,"widget-element-id"],buttonElementId:[1,"button-element-id"],index:[2],imageLoaded:[32]}]]],["p-d20a9a96",[[1,"vviinn-image-view",{basicEventData:[16]}],[1,"vviinn-onboarding"],[1,"vviinn-example-images",{basicEventData:[16]}],[1,"vviinn-overlayed-modal",{active:[4],resetState:[16],buttonElementId:[1,"button-element-id"],hideBackButton:[4,"hide-back-button"]}],[1,"vviinn-empty-results"],[1,"vviinn-image-selector",{basicEventData:[16],startUpload:[4,"start-upload"],resetVpsButton:[16]}],[1,"vviinn-server-error",{handler:[16]}],[1,"vviinn-wrong-format",{handler:[16]}],[1,"search-filters",{filter:[16],basicEventData:[16],selectedCategoryId:[32],hideFilters:[32]}],[1,"vviinn-privacy-badge"],[1,"vviinn-teaser"],[1,"image-cropper",{disabled:[4],basicEventData:[16],handleMove:[32]}],[1,"vviinn-example-image",{src:[1],width:[2],height:[2],basicEventData:[16],selected:[32]}],[1,"highlight-box"],[1,"vviinn-detected-object",{detectedObject:[16],basicEventData:[16],position:[32]}],[1,"vviinn-modal",{active:[1540],resetState:[16],buttonElementId:[1,"button-element-id"],hideBackButton:[4,"hide-back-button"],slider:[32]}],[1,"vviinn-onboarding-card-1"],[1,"vviinn-onboarding-card-2"],[1,"vviinn-onboarding-card-3"],[1,"vviinn-overlay"],[1,"vviinn-slide"],[1,"vviinn-slider",{showBullets:[4,"show-bullets"],position:[514],showArrows:[4,"show-arrows"],elementsCount:[32],internalPosition:[32],swipeStartPosition:[32],isRTL:[32]}]]],["p-14373da7",[[1,"vviinn-vps-widget",{token:[1],apiPath:[1,"api-path"],active:[1028],currencySign:[1,"currency-sign"],locale:[1],campaignId:[1,"campaign-id"],showingInButton:[4,"showing-in-button"],buttonElementId:[1,"button-element-id"],buttonPressed:[4,"button-pressed"],mode:[1],resetVpsButton:[16],slidePosition:[32],width:[32],wrongImageFormat:[32],trackingDeactivated:[32]},[[0,"vviinnProductView","trackProductView"],[0,"vviinnProductClick","trackProductClick"],[0,"vviinnImageCrop","trachSearchAreaChanges"],[0,"vviinnSelectObject","trackDetectedObject"],[0,"vviinnSelectFilter","trackFilter"]]]]],["p-d95d7c38",[[1,"vviinn-vps-button",{token:[1],currencySign:[1,"currency-sign"],locale:[1],campaignId:[1,"campaign-id"],addStyle:[4,"add-style"],mode:[1],apiPath:[1,"api-path"],buttonPressed:[32]},[[0,"vviinnWidgetClose","handleModalClosed"]]]]],["p-a10b9151",[[1,"vviinn-recommendations-sidebar",{sidebarTitle:[1,"sidebar-title"],token:[1],productId:[1,"product-id"],position:[1],sourceImage:[1,"source-image"],widgetScrollbar:[4,"widget-scrollbar"],mode:[1],campaigns:[1],campaignType:[1,"campaign-type"],color:[1],imageWidth:[2,"image-width"],currencySign:[1,"currency-sign"],noResultText:[1,"no-result-text"],noResultShow:[4,"no-result-show"],gridArrowsDynamic:[4,"grid-arrows-dynamic"],apiPath:[1,"api-path"],buttonElementId:[1,"button-element-id"],state:[32]},[[16,"click","bodyClickListener"]]]]],["p-645baf22",[[1,"vviinn-vpr-button",{token:[1],productId:[1,"product-id"],position:[1],sourceImage:[1,"source-image"],sidebarTitle:[1,"sidebar-title"],modalScrollbar:[4,"modal-scrollbar"],campaigns:[1],campaignType:[1,"campaign-type"],color:[1],addStyle:[4,"add-style"],mode:[1],imageWidth:[2,"image-width"],currencySign:[1,"currency-sign"],noResultText:[1,"no-result-text"],noResultShow:[4,"no-result-show"],gridArrowsDynamic:[4,"grid-arrows-dynamic"],apiPath:[1,"api-path"]}]]]],e)));
2
+ //# sourceMappingURL=vviinn-widgets.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{r as o,h as t,H as n}from"./p-fa17e81f.js";import{V as r}from"./p-c24caccd.js";const e=":host{display:block}.open-button{align-items:center;background:rgba(255, 255, 255, 0.8);border-radius:50%;border:none;box-shadow:0px 2px 6px rgba(0, 0, 0, 0.15);box-sizing:border-box;cursor:pointer;display:grid;height:40px;justify-items:center;padding:0;width:40px;transition:all 0.25s ease-in-out}.raw-open-button{background:none;border:none;cursor:pointer}.open-button:hover{box-shadow:0px 2px 6px rgba(0, 0, 0, 0.25)}.open-button:focus{border:2px solid rgba(15, 98, 254, 0.5);outline:none}.open-button:active{background:#f4f4f4;outline:none}";const s=class{constructor(t){o(this,t);this.addStyle=true}render(){return t(n,{exportparts:"button"},t("button",{class:this.addStyle?"open-button":"raw-open-button",part:"button"},t("slot",null,t(r,null))))}};s.style=e;export{s as vviinn_button};
2
+ //# sourceMappingURL=p-c012ef97.entry.js.map