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 @@
1
+ {"version":3,"file":"vviinn-vps-widget.js","sourceRoot":"","sources":["../../../src/components/vviinn-vps-widget/vviinn-vps-widget.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,CAAC,EACD,KAAK,EACL,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,GAEN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASlD,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAClC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAE5D,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAMH,MAAM,OAAO,eAAe;;IAuDlB,gBAAW,GAA6B,IAAI,CAAC;IAQrD,2BAAsB,GAAG,CAAC,MAAyB,EAAE,EAAE;MACrD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;OACjC;IACH,CAAC,CAAC;IAEF,sBAAiB,GAAG,GAAmB,EAAE;;MACvC,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,iBAAiB,CAAC,KAAK,CAAC;QAC1C,QAAQ,EAAE,MAAA,IAAI,CAAC,eAAe,mCAAI,IAAI,CAAC,EAAE;OAC1C,CAAC;IACJ,CAAC,CAAC;;mBAtEwB,wBAAwB;kBAEP,KAAK;wBAEjB,GAAG;kBAET,OAAO;;2BAII,KAAK;;;gBAON,OAAO;;yBAIT,CAAC;iBACT,CAAC;4BACW,KAAK;+BACF,KAAK;;EA4B7C,gBAAgB;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EAClD,CAAC;EAkBD,aAAa,CAAC,KAAc;IAC1B,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;MAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;MACxC,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;SAAM;MACL,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC9C;EACH,CAAC;EAGD,oBAAoB,CAAC,OAAgB;IACnC,IAAI,CAAC,OAAO;MAAE,OAAO;IACrB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;MACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;MACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACtD;EACH,CAAC;EAGD,gBAAgB,CAAC,EAAE,MAAM,EAAoB;IAC3C,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,EACJ,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,KAEd,MAAM,EADL,IAAI,UACL,MAAM,EATJ,2GASL,CAAS,CAAC;IAEX,MAAM,gBAAgB,GAAqB,yBAAyB,iBAClE,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,SAAS,IACf,IAAI,EACP,CAAC;IAEH,IAAI,CAAC,WAAW;OACb,UAAU,CAAC,gBAAgB,CAAC;OAC5B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EACvC,CAAC;EAGD,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAoB;IAClD,MAAM,EACJ,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,KAEd,MAAM,EADL,IAAI,UACL,MAAM,EATJ,2GASL,CAAS,CAAC;IAEX,MAAM,iBAAiB,GAAsB,0BAA0B,iBACrE,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,SAAS,IACf,IAAI,EACP,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;MAC7B,MAAM,IAAI,CAAC,WAAW;SACnB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;SAC/D,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KACtC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CACxC,CAAC;IACF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;MAAE,OAAO;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;EAC1C,CAAC;EAGD,sBAAsB;IACpB,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,WAAW,GAAgB,iBAAiB,CAAC;MACjD,UAAU,EAAE,IAAI,CAAC,WAAW;MAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;MACxB,WAAW,EAAE,kBAAkB;KAChC,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EAC7E,CAAC;EAGD,mBAAmB;IACjB,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,WAAW,GAAgB,iBAAiB,CAAC;MACjD,UAAU,EAAE,IAAI,CAAC,WAAW;MAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;MACxB,WAAW,EAAE,iBAAiB;KAC/B,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EAC7E,CAAC;EAGD,WAAW,CAAC,EAAE,MAAM,EAAsC;IACxD,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,WAAW,GAAgB,iBAAiB,CAAC;MACjD,UAAU,EAAE,IAAI,CAAC,WAAW;MAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;MACxB,IAAI,EAAE,UAAU;MAChB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EAC7E,CAAC;EAED,iBAAiB;IACf,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACpC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAChC,IAAI,CAAC,UAAU,EACf,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EACxC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAChB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAChC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CACrB,CAAC;IAEF,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;EACvB,CAAC;EAED,iBAAiB;IACf,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;EACvD,CAAC;EAEO,cAAc;IACpB,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,eAAe,GAAgB,oBAAoB,CAAC;MACxD,MAAM,EAAE,MAAM;MACd,UAAU,EAAE,IAAI,CAAC,WAAW;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,WAAW;OACb,UAAU,CAAC,eAAe,CAAC;OAC3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EACvC,CAAC;EAEO,oBAAoB,CAAC,MAAyB;IACpD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1D,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;IAExB,IAAI,CAAC,kBAAkB,EAAE,CAAC;EAC5B,CAAC;EAEO,kBAAkB;IACxB,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,WAAW,GAAgB,iBAAiB,CAAC;MACjD,UAAU,EAAE,IAAI,CAAC,WAAW;MAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;MACxB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EAC7E,CAAC;EAEO,UAAU;IAChB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAErC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,gBAAgB,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC;IAC9B,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC;IAC9B,gBAAgB,CAAC,eAAe,GAAG,EAAE,CAAC;IACtC,gBAAgB,CAAC,aAAa,GAAG,SAAS,CAAC;IAC3C,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACjD,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;EACpC,CAAC;EAEO,UAAU;IAChB,OAAO,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,WAAW,CAAC;EAC/D,CAAC;EAEO,WAAW,CAAC,SAAiB,EAAE,WAA2B,MAAM;IACtE,MAAM,OAAO,GAAgB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;EAChD,CAAC;EAEO,gBAAgB;IACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,UAAU,EAAE,CAAC;IAElB,MAAM,eAAe,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;IAC9D,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1D,IAAI,IAAI,CAAC,mBAAmB;MAAE,OAAO;IAErC,MAAM,gBAAgB,GAAgB,oBAAoB,CAAC;MACzD,MAAM,EAAE,OAAO;MACf,UAAU,EAAE,IAAI,CAAC,WAAW;KAC7B,CAAC,CAAC;IACH,IAAI,CAAC,WAAW;OACb,UAAU,CAAC,gBAAgB,CAAC;OAC5B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;EACvC,CAAC;EAED,MAAM;;IACJ,OAAO,CACL,EAAC,IAAI;MACF,CAAC,IAAI,CAAC,eAAe,IAAI,EAAC,YAAY,OAAG;MAE1C,8BACE,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE,EACnD,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAClD,eAAe,EAAE,MAAA,IAAI,CAAC,eAAe,mCAAI,IAAI,CAAC,EAAE,EAChD,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,EACtC,WAAW,EAAC,uDAAuD;QAEnE,qBAAe,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa;UAC7D,oBAAc,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YACzC,WACE,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;gBACxB,kBAAkB,EAAE,IAAI;eACzB;cAED,2BACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAC9C;cACF,2BACE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAChD,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC,GACrD;cACF,qBAAe,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAI;cACvD,6BACE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EACpC,mBAAmB,EAAE,GAAG,EAAE;kBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;kBACnB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;kBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;mBACtD;gBACH,CAAC,EACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EACtD,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,EACxC,IAAI,EAAC,qBAAqB,EAC1B,WAAW,EACT,IAAI,CAAC,aAAa;kBAClB,IAAI,CAAC,eAAe;kBACpB,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAGxB,YAAM,IAAI,EAAC,oBAAoB,EAAC,KAAK,EAAC,uBAAuB;kBAC3D,WACE,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,IAAI,EAAC,MAAM;oBAEX,eAAQ;oBACR,YACE,IAAI,EAAC,MAAM,eACD,SAAS,EACnB,CAAC,EAAC,maAAma,eAC3Z,SAAS,GACnB;oBACF,YACE,IAAI,EAAC,MAAM,eACD,SAAS,EACnB,CAAC,EAAC,8HAA8H,eACtH,SAAS,GACnB,CACE;kBACN,YAAM,IAAI,EAAC,iCAAiC;oBAC1C,kDAAuC,CAClC,CACF,CACe;cACxB,4BAAsB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAI,CAC1D;YACN,WAAK,EAAE,EAAC,kBAAkB,EAAC,KAAK,EAAC,kBAAkB;cACjD,WAAK,KAAK,EAAC,oBAAoB;gBAC7B,4BAAqB;gBACrB,6BACE,IAAI,EAAC,gBAAgB,EACrB,mBAAmB,EAAE,GAAG,EAAE,CACxB,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAEtC,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,QAAQ,CAAC,EAEhD,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,GACxC,CACE,CACF,CACO;UACf,oBACE,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;YAEhE,WAAK,KAAK,EAAC,eAAe;cACxB,yBAAmB,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAI;cAC/D,WAAK,KAAK,EAAC,iBAAiB;gBAC1B,WAAK,KAAK,EAAC,SAAS,IACjB,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACxC,sBACE,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,GACxC,CACH,CAAC,CACE,CACF,CACF;YACN,WAAK,EAAE,EAAC,eAAe,EAAC,KAAK,EAAC,kBAAkB;cAC9C,WACE,KAAK,EAAE;kBACL,eAAe,EAAE,IAAI;kBACrB,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;iBAC5C;gBAED,+BAAwB;gBACxB,4BAAqB,CACjB;cACN,WACE,KAAK,EAAE;kBACL,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;kBAC5C,QAAQ,EAAE,IAAI;iBACf,IAEA,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;gBAAC,OAAA,CACtC,2BACE,GAAG,EAAE,CAAC,CAAC,SAAS,EAChB,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,CAAC,CAAC,KAAK,EACrB,SAAS,EAAE,CAAC,CAAC,SAAS,EACtB,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EACrB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EACvB,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,MAAA,CAAC,CAAC,KAAK,CAAC,SAAS,mCAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAC5C,IAAI,EAAC,cAAc,EACnB,cAAc,EAAC,KAAK,EACpB,KAAK,EAAE,CAAC,EACR,eAAe,EAAE,IAAI,CAAC,EAAE,EACxB,eAAe,EAAE,IAAI,CAAC,eAAe,GACrC,CACH,CAAA;eAAA,CAAC,CACE,CACF,CACO,CACD,CACO,CACpB,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Host,\n h,\n State,\n Prop,\n Element,\n Watch,\n Listen,\n Event,\n EventEmitter,\n} from \"@stencil/core\";\nimport { state } from \"../../store/store\";\nimport { imageSearchState } from \"../../store/imageSearch.store\";\nimport * as O from \"fp-ts/lib/Option\";\nimport { isEmpty } from \"fp-ts/string\";\nimport { slotChangeListener } from \"../customized-slots\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { createTrackingApi } from \"../../openApi\";\nimport {\n DefaultApi,\n EventConfirmation,\n ProductClickEvent,\n ProductViewEvent,\n SearchImageSource,\n WidgetEvent,\n} from \"vviinn-tracking-client-ts\";\nimport {\n createFilterEvent,\n createProductClickVpsEvent,\n createProductViewVpsEvent,\n createSearchEvent,\n createWidgetVpsEvent,\n} from \"../../tracking\";\nimport {\n ProductCardEvent,\n BasicEventData,\n SelectFilterEventData,\n} from \"../../recommendation/events\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport { SlotSkeleton } from \"../customized-slots\";\nimport { campaignTypeNames } from \"../../campaign/Campaign\";\n\nconst filterInt = (value: string) =>\n /^[-+]?(\\d+|Infinity)$/.test(value) ? Number(value) : NaN;\n\nconst notEmptyString = (s: string) => !isEmpty(s);\nconst notNan = (n: number): boolean => !isNaN(n);\n\n/**\n * @prop --color-primary: color used for action button, slider bullets and selected detected object;\n *\n * @part close-button - close button on modal header.\n * @part secondary-action - back button on modal header.\n * @part title - modal window title.\n *\n * @part select-image_button\n *\n * @part product-card - product card.\n * @part brand - product card brand.\n * @part currency - currency sign. Renders after price-amount inside product card.\n * @part deeplink - anchor element for title. Rendered only if \"deeplink\" property filled.\n * @part image - product image inside product card.\n * @part image-link - anchor element for image. Rendered only if \"deeplink\" property filled.\n * @part price-amount-sale - numeric part of price inside product card.\n * @part price-amount-outdated - numeric part of price inside product card.\n * @part price-amount-regular - numeric part of price inside product card.\n * @part price-container - block contains all prices inside product card.\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 * @part example-images - example images block\n\n * @slot vviinn-onboarding-title - Title of onboarding section\n * @slot onboarding-card-1-icon - Icon (or other graphics) on first onboarding slide\n * @slot onboarding-card-1-text - Text content of first onboarding slide\n * @slot onboarding-card-2-icon - Icon (or other graphics) on second onboarding slide\n * @slot onboarding-card-2-text - Text content of second onboarding slide\n * @slot onboarding-card-3-icon - Icon (or other graphics) on third onboarding slide\n * @slot onboarding-card-3-text - Text content of third onboarding slide\n * @slot vviinn-example-images-title - Header of example images block\n * @slot vviinn-example-images-1 - First image in example images block\n * @slot vviinn-example-images-2 - Second image in example images block\n * @slot vviinn-example-images-3 - Third image in example images block\n * @slot vviinn-example-images-4 - Fourth image in example images block\n * @slot vviinn-teaser-text - Text on widget's main screen\n * @slot vviinn-image-upload-button-text - Title of upload button\n * @slot vviinn-privacy-badge-text - Text content of privacy notification block\n * @slot vviinn-image-search-modal-title - Image search title\n *\n */\n@Component({\n tag: \"vviinn-vps-widget\",\n styleUrl: \"vviinn-vps-widget.css\",\n shadow: true,\n})\nexport class VviinnVpsWidget {\n @Element() el: HTMLElement;\n\n /** vviinn customer token */\n @Prop() token: string | undefined;\n /** @internal */\n @Prop() apiPath: string = \"https://api.vviinn.com\";\n /** When true modal window with widget will be shown */\n @Prop({ mutable: true }) active: boolean = false;\n /** Currency sign will shown after price */\n @Prop() currencySign: string = \"€\";\n /** Locale for currency formatting */\n @Prop() locale: string = \"de-DE\";\n /** Campaign using for visual search */\n @Prop() campaignId?: string;\n /** Set true when showing the widget in button */\n @Prop() showingInButton?: boolean = false;\n /** Element Id, passed from vps-button */\n /** @internal */\n @Prop() buttonElementId?: string;\n /** @internal */\n @Prop() buttonPressed?: boolean;\n /** @internal */\n @Prop() mode: \"modal\" | \"upload\" = \"modal\";\n /** @internal */\n @Prop() resetVpsButton: () => void;\n\n @State() slidePosition: number = 0;\n @State() width: number = 0;\n @State() wrongImageFormat: boolean = false;\n @State() trackingDeactivated: boolean = false;\n\n /** @internal */\n @Event({ bubbles: true, composed: true })\n globalSlotsChanged: EventEmitter<any>;\n\n @Event({ bubbles: true })\n vviinnWidgetLoad: EventEmitter<BasicEventData>;\n @Event({ bubbles: true })\n vviinnWidgetOpen: EventEmitter<BasicEventData>;\n\n // List to show in the Storybook:\n @Event() vviinnWidgetClose: EventEmitter;\n @Event() vviinnProductClick: EventEmitter;\n @Event() vviinnProductView: EventEmitter;\n @Event() vviinnProductLoad: EventEmitter;\n @Event() vviinnImageUpload: EventEmitter;\n @Event() vviinnImageCrop: EventEmitter;\n @Event() vviinnSelectObject: EventEmitter;\n @Event() vviinnSelectFilter: EventEmitter;\n @Event() vviinnNoResult: EventEmitter;\n\n private overflow: string;\n private uiSessionId: string;\n private trackingApi: DefaultApi;\n private imageSource: SearchImageSource | null = null;\n private id?: string;\n\n componentDidLoad() {\n const slots = this.el.querySelectorAll(\"[slot]\");\n this.globalSlotsChanged.emit(Array.from(slots));\n }\n\n setTrackingDeactivated = (result: EventConfirmation) => {\n if (result.status === \"rejected\") {\n this.trackingDeactivated = true;\n }\n };\n\n getBasicEventData = (): BasicEventData => {\n return {\n widgetType: \"VPS\",\n campaignTypeId: \"VPS\",\n campaignTypeName: campaignTypeNames[\"VPS\"],\n widgetId: this.buttonElementId ?? this.id,\n };\n };\n\n @Watch(\"active\")\n activeWatcher(value: boolean) {\n if (value) {\n this.overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n this.trackOpenEvent();\n } else {\n document.body.style.overflow = this.overflow;\n }\n }\n\n @Watch(\"buttonPressed\")\n buttonPressedWatcher(pressed: boolean) {\n if (!pressed) return;\n if (this.mode === \"modal\") {\n this.active = true;\n this.vviinnWidgetOpen.emit(this.getBasicEventData());\n }\n }\n\n @Listen(\"vviinnProductView\")\n trackProductView({ detail }: ProductCardEvent) {\n if (this.trackingDeactivated) return;\n\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 = createProductViewVpsEvent({\n session_id: this.uiSessionId,\n rank: productRank,\n product: productId,\n ...rest,\n });\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 = createProductClickVpsEvent({\n session_id: this.uiSessionId,\n rank: productRank,\n product: productId,\n ...rest,\n });\n\n if (!this.trackingDeactivated) {\n await this.trackingApi\n .trackEvent(this.trackingDeactivated ? null : productClickEvent)\n .then(this.setTrackingDeactivated);\n }\n\n const product = imageSearchState.results.find(\n (r) => r.productId === detail.productId\n );\n if (!product || !product.deeplink) return;\n window.location.href = product.deeplink;\n }\n\n @Listen(\"vviinnImageCrop\")\n trachSearchAreaChanges() {\n if (this.trackingDeactivated) return;\n\n const searchEvent: WidgetEvent = createSearchEvent({\n session_id: this.uiSessionId,\n source: this.imageSource,\n search_area: \"manual-selection\",\n });\n this.trackingApi.trackEvent(searchEvent).then(this.setTrackingDeactivated);\n }\n\n @Listen(\"vviinnSelectObject\")\n trackDetectedObject() {\n if (this.trackingDeactivated) return;\n\n const searchEvent: WidgetEvent = createSearchEvent({\n session_id: this.uiSessionId,\n source: this.imageSource,\n search_area: \"attention-point\",\n });\n this.trackingApi.trackEvent(searchEvent).then(this.setTrackingDeactivated);\n }\n\n @Listen(\"vviinnSelectFilter\")\n trackFilter({ detail }: CustomEvent<SelectFilterEventData>) {\n if (this.trackingDeactivated) return;\n\n const searchEvent: WidgetEvent = createFilterEvent({\n session_id: this.uiSessionId,\n source: this.imageSource,\n kind: \"category\",\n action: detail.action,\n });\n this.trackingApi.trackEvent(searchEvent).then(this.setTrackingDeactivated);\n }\n\n connectedCallback() {\n state.apiPath = this.apiPath;\n state.currencySign = this.currencySign;\n state.locale = this.locale;\n imageSearchState.token = this.token;\n imageSearchState.campaignId = pipe(\n this.campaignId,\n O.fromNullable,\n O.chain(O.fromPredicate(notEmptyString)),\n O.map(filterInt),\n O.chain(O.fromPredicate(notNan)),\n O.map((s) => `${s}`)\n );\n\n this.uiSessionId = uuidv4();\n this.trackingApi = createTrackingApi(this.apiPath, this.token);\n this.id = this.el.id;\n }\n\n componentWillLoad() {\n slotChangeListener(this, this.el);\n this.vviinnWidgetLoad.emit(this.getBasicEventData());\n }\n\n private trackOpenEvent() {\n if (this.trackingDeactivated) return;\n\n const widgetOpenEvent: WidgetEvent = createWidgetVpsEvent({\n action: \"open\",\n session_id: this.uiSessionId,\n });\n this.trackingApi\n .trackEvent(widgetOpenEvent)\n .then(this.setTrackingDeactivated);\n }\n\n private handleImageSelection(source: SearchImageSource) {\n this.imageSource = source;\n this.slidePosition = 1;\n const root = this.el.shadowRoot.querySelector(\"vviinn-overlayed-modal\");\n const overlay = root.shadowRoot.querySelector(\"vviinn-overlay\");\n const modal = overlay.querySelector(\"vviinn-modal\");\n const modalBody = modal.shadowRoot.querySelector(\".body\");\n modalBody.scrollTop = 0;\n\n this.trackInitialSearch();\n }\n\n private trackInitialSearch() {\n if (this.trackingDeactivated) return;\n\n const searchEvent: WidgetEvent = createSearchEvent({\n session_id: this.uiSessionId,\n source: this.imageSource,\n search_area: \"full\",\n });\n this.trackingApi.trackEvent(searchEvent).then(this.setTrackingDeactivated);\n }\n\n private resetState() {\n this.resetScroll(\"onboarding-block\");\n\n this.slidePosition = 0;\n imageSearchState.image = O.none;\n imageSearchState.imageUrl = O.none;\n imageSearchState.imageBounds = O.none;\n imageSearchState.searchArea = O.none;\n imageSearchState.results = [];\n imageSearchState.filters = [];\n imageSearchState.detectedObjects = [];\n imageSearchState.activeIonLink = undefined;\n imageSearchState.rectangleSearchForm = undefined;\n imageSearchState.loading = false;\n this.resetScroll(\"results-block\");\n }\n\n private haveErrors(): boolean {\n return this.wrongImageFormat || imageSearchState.serverError;\n }\n\n private resetScroll(elementId: string, behavior: ScrollBehavior = \"auto\") {\n const element: HTMLElement = this.el.shadowRoot.getElementById(elementId);\n element.scroll({ top: 0, left: 0, behavior });\n }\n\n private handleModalClose() {\n this.active = false;\n this.resetState();\n\n const elementsToReset = [\"onboarding-block\", \"results-block\"];\n elementsToReset.forEach((name) => this.resetScroll(name));\n\n if (this.trackingDeactivated) return;\n\n const widgetCloseEvent: WidgetEvent = createWidgetVpsEvent({\n action: \"close\",\n session_id: this.uiSessionId,\n });\n this.trackingApi\n .trackEvent(widgetCloseEvent)\n .then(this.setTrackingDeactivated);\n }\n\n render() {\n return (\n <Host>\n {!this.showingInButton && <SlotSkeleton />}\n\n <vviinn-overlayed-modal\n class={{ \"first-screen\": this.slidePosition === 0 }}\n active={this.active}\n resetState={this.resetState.bind(this)}\n onVviinnWidgetClose={() => this.handleModalClose()}\n buttonElementId={this.buttonElementId ?? this.id}\n hideBackButton={this.mode === \"upload\"}\n exportparts=\"secondary-action, title, close-button, example-images\"\n >\n <vviinn-slider showBullets={false} position={this.slidePosition}>\n <vviinn-slide class={{ \"start-page\": true }}>\n <div\n class={{\n error: this.haveErrors(),\n \"start-page_block\": true,\n }}\n >\n <vviinn-wrong-format\n class={{ hidden: !this.wrongImageFormat }}\n handler={() => (this.wrongImageFormat = false)}\n />\n <vviinn-server-error\n class={{ hidden: !imageSearchState.serverError }}\n handler={() => (imageSearchState.serverError = false)}\n />\n <vviinn-teaser class={{ hidden: this.haveErrors() }} />\n <vviinn-image-selector\n class={{ hidden: this.haveErrors() }}\n onVviinnImageUpload={() => {\n this.active = true;\n this.handleImageSelection(\"upload\");\n if (this.mode === \"upload\") {\n this.vviinnWidgetOpen.emit(this.getBasicEventData());\n }\n }}\n onVviinnNoResult={() => (this.wrongImageFormat = true)}\n resetVpsButton={this.resetVpsButton}\n basicEventData={this.getBasicEventData()}\n part=\"select-image_button\"\n startUpload={\n this.buttonPressed &&\n this.showingInButton &&\n this.mode === \"upload\"\n }\n >\n <span slot=\"upload-button-text\" class=\"upload-button-content\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"29\"\n height=\"28\"\n fill=\"none\"\n >\n <defs />\n <path\n fill=\"#fff\"\n fill-rule=\"evenodd\"\n d=\"M10.271 3.89A.875.875 0 0111 3.5h7c.293 0 .566.146.728.39l1.49 2.235h3.033a2.625 2.625 0 012.625 2.625V21a2.625 2.625 0 01-2.625 2.625H5.75A2.625 2.625 0 013.125 21V8.75A2.625 2.625 0 015.75 6.125h3.031l1.49-2.235zm1.197 1.36l-1.49 2.235a.875.875 0 01-.729.39H5.75a.875.875 0 00-.875.875V21a.875.875 0 00.875.875h17.5a.875.875 0 00.875-.875V8.75a.875.875 0 00-.875-.875h-3.5a.875.875 0 01-.729-.39l-1.49-2.235h-6.063z\"\n clip-rule=\"evenodd\"\n />\n <path\n fill=\"#fff\"\n fill-rule=\"evenodd\"\n d=\"M14.5 11.375a3.062 3.062 0 100 6.125 3.062 3.062 0 000-6.125zm-4.813 3.063a4.812 4.812 0 119.625 0 4.812 4.812 0 01-9.625 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n <slot name=\"vviinn-image-upload-button-text\">\n <span>Kamera oder Bild auswählen</span>\n </slot>\n </span>\n </vviinn-image-selector>\n <vviinn-privacy-badge class={{ hidden: this.haveErrors() }} />\n </div>\n <div id=\"onboarding-block\" class=\"start-page_block\">\n <div class=\"onboarding-wrapper\">\n <vviinn-onboarding />\n <vviinn-example-images\n part=\"example-images\"\n onVviinnImageUpload={() =>\n this.handleImageSelection(\"example\")\n }\n onVviinnNoResult={() =>\n this.resetScroll(\"onboarding-block\", \"smooth\")\n }\n basicEventData={this.getBasicEventData()}\n />\n </div>\n </div>\n </vviinn-slide>\n <vviinn-slide\n class={{ \"results-page\": true, active: this.slidePosition == 1 }}\n >\n <div class=\"image-wrapper\">\n <vviinn-image-view basicEventData={this.getBasicEventData()} />\n <div class=\"filters-wrapper\">\n <div class=\"filters\">\n {imageSearchState.filters.map((filter) => (\n <search-filters\n filter={filter}\n basicEventData={this.getBasicEventData()}\n />\n ))}\n </div>\n </div>\n </div>\n <div id=\"results-block\" class=\"products-wrapper\">\n <div\n class={{\n \"nothing-found\": true,\n hidden: imageSearchState.results.length > 0,\n }}\n >\n <vviinn-empty-results />\n <vviinn-onboarding />\n </div>\n <div\n class={{\n hidden: imageSearchState.results.length <= 0,\n products: true,\n }}\n >\n {imageSearchState.results.map((p, i) => (\n <vviinn-product-card\n key={p.productId}\n hidden={true}\n productTitle={p.title}\n productId={p.productId}\n brand={p.brand}\n deeplink={p.deeplink}\n price={p.price.actual}\n salePrice={p.price.sale}\n imageWidth={160}\n image={p.image.thumbnail ?? p.image.original}\n part=\"product-card\"\n campaignTypeId=\"VPS\"\n index={i}\n widgetElementId={this.id}\n buttonElementId={this.buttonElementId}\n />\n ))}\n </div>\n </div>\n </vviinn-slide>\n </vviinn-slider>\n </vviinn-overlayed-modal>\n </Host>\n );\n }\n}\n"]}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=Cropper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cropper.js","sourceRoot":"","sources":["../../src/cropper/Cropper.ts"],"names":[],"mappings":"","sourcesContent":["export interface Cropper {\n\n}\n"]}
@@ -59,3 +59,4 @@ export const fromRectangle = (r) => [
59
59
  direction: HandlerDirection.SouthEast,
60
60
  },
61
61
  ];
62
+ //# sourceMappingURL=Handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/cropper/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,MAAM,CAAN,IAAY,gBASX;AATD,WAAY,gBAAgB;EAC1B,uDAAI,CAAA;EACJ,yDAAK,CAAA;EACL,iEAAS,CAAA;EACT,iEAAS,CAAA;EACT,yDAAK,CAAA;EACL,iEAAS,CAAA;EACT,iEAAS,CAAA;EACT,uDAAI,CAAA;AACN,CAAC,EATW,gBAAgB,KAAhB,gBAAgB,QAS3B;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAA2B,EAAU,EAAE;EACpE,QAAQ,SAAS,EAAE;IACjB,KAAK,gBAAgB,CAAC,IAAI;MACxB,OAAO,UAAU,CAAC;IACpB,KAAK,gBAAgB,CAAC,KAAK;MACzB,OAAO,UAAU,CAAC;IACpB,KAAK,gBAAgB,CAAC,SAAS;MAC7B,OAAO,WAAW,CAAC;IACrB,KAAK,gBAAgB,CAAC,SAAS;MAC7B,OAAO,WAAW,CAAC;IACrB,KAAK,gBAAgB,CAAC,KAAK;MACzB,OAAO,UAAU,CAAC;IACpB,KAAK,gBAAgB,CAAC,SAAS;MAC7B,OAAO,WAAW,CAAC;IACrB,KAAK,gBAAgB,CAAC,SAAS;MAC7B,OAAO,WAAW,CAAC;IACrB,KAAK,gBAAgB,CAAC,IAAI;MACxB,OAAO,UAAU,CAAC;IACpB;MACE,OAAO,SAAS,CAAC;GACpB;AACH,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAY,EAAa,EAAE,CAAC;EACxD;IACE,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,gBAAgB,CAAC,SAAS;GACtC;EACD;IACE,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;MAC/D,CAAC,EAAE,CAAC,CAAC,KAAK;MACV,CAAC,EAAE,CAAC;KACL,CAAC;IACF,SAAS,EAAE,gBAAgB,CAAC,SAAS;GACtC;EACD;IACE,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;MAC/D,CAAC,EAAE,CAAC;MACJ,CAAC,EAAE,CAAC,CAAC,MAAM;KACZ,CAAC;IACF,SAAS,EAAE,gBAAgB,CAAC,SAAS;GACtC;EACD;IACE,QAAQ,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;MAC/D,CAAC,EAAE,CAAC,CAAC,KAAK;MACV,CAAC,EAAE,CAAC,CAAC,MAAM;KACZ,CAAC;IACF,SAAS,EAAE,gBAAgB,CAAC,SAAS;GACtC;CACF,CAAC","sourcesContent":["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"]}
@@ -1,3 +1,4 @@
1
1
  export const findTarget = (ev) => {
2
2
  return ev.target;
3
3
  };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dom/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAO,EAAE,EAAE;EACpC,OAAO,EAAE,CAAC,MAAM,CAAC;AACnB,CAAC,CAAC","sourcesContent":["export const findTarget = (ev: any) => {\n return ev.target;\n};\n"]}
@@ -12,3 +12,4 @@ export const emptyApiPathError = {
12
12
  kind: "client",
13
13
  inner: "Api path empty or missing",
14
14
  };
15
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAe,EACO,EAAE;EACxB,OAAO;IACL,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,KAAK;GACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAuB;EACnD,IAAI,EAAE,QAAQ;EACd,KAAK,EAAE,0BAA0B;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAuB;EACnD,IAAI,EAAE,QAAQ;EACd,KAAK,EAAE,2BAA2B;CACnC,CAAC","sourcesContent":["export type BasicError<T> = {\n kind: \"client\" | \"server\" | \"app\";\n inner: T;\n};\n\nexport const basicErrorFromResponse = (\n error: Response\n): BasicError<Response> => {\n return {\n kind: \"server\",\n inner: error,\n };\n};\n\nexport const invalidTokenError: BasicError<string> = {\n kind: \"client\",\n inner: \"Token not exist or empty\",\n};\n\nexport const emptyApiPathError: BasicError<string> = {\n kind: \"client\",\n inner: \"Api path empty or missing\",\n};\n"]}
@@ -2,3 +2,4 @@ export const fileDoesntExistError = {
2
2
  kind: "app",
3
3
  inner: "File doesnt exist",
4
4
  };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;EACtD,IAAI,EAAE,KAAK;EACX,KAAK,EAAE,mBAAmB;CAC3B,CAAC","sourcesContent":["import { BasicError } from \"../error\";\n\nexport const fileDoesntExistError: BasicError<string> = {\n kind: \"app\",\n inner: \"File doesnt exist\",\n};\n"]}
@@ -12,3 +12,4 @@ const fromRectangle = (shape, target) => {
12
12
  };
13
13
  const printClip = (clip) => `inset(${clip.top} ${clip.right} ${clip.bottom} ${clip.left})`;
14
14
  export const getClipValue = (shape, target) => printClip(fromRectangle(shape, target));
15
+ //# sourceMappingURL=Clip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clip.js","sourceRoot":"","sources":["../../src/geometry/Clip.ts"],"names":[],"mappings":"AAUA,MAAM,aAAa,GAAG,CAAC,KAAgB,EAAE,MAAa,EAAQ,EAAE;EAC9D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC;EAC3B,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC;EAC5B,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;EAC5D,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EAE/D,OAAO;IACL,GAAG;IACH,KAAK;IACL,MAAM;IACN,IAAI;GACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAU,EAAU,EAAE,CACvC,SAAS,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAgB,EAAE,MAAa,EAAU,EAAE,CACtE,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { Rectangle } from \"./Rectangle\";\nimport { Sized } from \"./Sized\";\n\ninterface Clip {\n readonly top: string;\n readonly right: string;\n readonly bottom: string;\n readonly left: string;\n}\n\nconst fromRectangle = (shape: Rectangle, target: Sized): Clip => {\n const top = `${shape.y}px`;\n const left = `${shape.x}px`;\n const right = `${target.width - (shape.x + shape.width)}px`;\n const bottom = `${target.height - (shape.y + shape.height)}px`;\n\n return {\n top,\n right,\n bottom,\n left,\n };\n};\n\nconst printClip = (clip: Clip): string =>\n `inset(${clip.top} ${clip.right} ${clip.bottom} ${clip.left})`;\n\nexport const getClipValue = (shape: Rectangle, target: Sized): string =>\n printClip(fromRectangle(shape, target));\n"]}
@@ -0,0 +1,17 @@
1
+ import { getClipValue } from "./Clip";
2
+ it("should return proper clip css string with Rectangular type", async () => {
3
+ const image = {
4
+ width: 100,
5
+ height: 100,
6
+ };
7
+ const selection = {
8
+ x: 10,
9
+ y: 0,
10
+ width: 10,
11
+ height: 10,
12
+ };
13
+ const clip = getClipValue(selection, image);
14
+ const result = "inset(0px 80px 90px 10px)";
15
+ expect(clip).toEqual(result);
16
+ });
17
+ //# sourceMappingURL=Clip.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clip.spec.js","sourceRoot":"","sources":["../../src/geometry/Clip.spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;EAC1E,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,SAAS,GAAc;IAC3B,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;EAC5C,MAAM,MAAM,GAAG,2BAA2B,CAAC;EAE3C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC","sourcesContent":["import { Rectangle } from \"./Rectangle\";\nimport { getClipValue } from \"./Clip\";\n\nit(\"should return proper clip css string with Rectangular type\", async () => {\n const image = {\n width: 100,\n height: 100,\n };\n\n const selection: Rectangle = {\n x: 10,\n y: 0,\n width: 10,\n height: 10,\n };\n\n const clip = getClipValue(selection, image);\n const result = \"inset(0px 80px 90px 10px)\";\n\n expect(clip).toEqual(result);\n});\n"]}
@@ -30,3 +30,4 @@ export const pointProductSemigroup = struct({
30
30
  x: semigroupProduct,
31
31
  y: semigroupProduct,
32
32
  });
33
+ //# sourceMappingURL=Point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Point.js","sourceRoot":"","sources":["../../src/geometry/Point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAQjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAa,EAAS,EAAE;EAC1D,OAAO;IACL,CAAC;IACD,CAAC;GACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAe,EAAS,EAAE;EACzE,OAAO;IACL,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;GACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,OAAO,EAAc,EAAS,EAAE;EAC/D,OAAO;IACL,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;IACrB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;GACtB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAQ;EAC9C,CAAC,EAAE,aAAa;EAChB,CAAC,EAAE,aAAa;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAQ;EAC7C,CAAC,EAAE,YAAY;EACf,CAAC,EAAE,YAAY;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAQ;EACjD,CAAC,EAAE,gBAAgB;EACnB,CAAC,EAAE,gBAAgB;CACpB,CAAC,CAAC","sourcesContent":["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"]}
@@ -93,3 +93,4 @@ export const center = (r) => {
93
93
  y: r.y + r.height * 0.5,
94
94
  };
95
95
  };
96
+ //# sourceMappingURL=Rectangle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rectangle.js","sourceRoot":"","sources":["../../src/geometry/Rectangle.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Point,\n fromRectangle,\n pointSumSemigroup,\n pointProductSemigroup,\n} from \"./Point\";\nimport { Handler, HandlerDirection } from \"../cropper/Handler\";\nimport { Sized, sizedDivSemigroup } from \"./Sized\";\nimport { RectangleAlt } from \"./RectangleAlt\";\n\nexport type Rectangle = Point & Sized;\n\ninterface RectangleTransform {\n (x: Rectangle, y: Handler): Rectangle;\n}\n\nexport const move = (origin: Rectangle, position: Point): Rectangle => {\n const originPosition = fromRectangle(origin);\n const newPosition = pointSumSemigroup.concat(originPosition, position);\n\n return {\n ...newPosition,\n width: origin.width,\n height: origin.height,\n };\n};\n\nconst transformNorthEast: RectangleTransform = (origin, handler) => {\n const newPosition = pointSumSemigroup.concat(fromRectangle(origin), {\n x: 0,\n y: handler.position.y,\n });\n\n return {\n ...newPosition,\n width: origin.width + handler.position.x,\n height: origin.height - handler.position.y,\n };\n};\n\nexport const transformNorthWest = (\n origin: Rectangle,\n handler: Handler\n): Rectangle => {\n const newPosition = pointSumSemigroup.concat(\n fromRectangle(origin),\n handler.position\n );\n\n return {\n ...newPosition,\n width: origin.width - handler.position.x,\n height: origin.height - handler.position.y,\n };\n};\n\nconst transformSouthEast: RectangleTransform = (origin, handler) => {\n return {\n ...origin,\n width: origin.width + handler.position.x,\n height: origin.height + handler.position.y,\n };\n};\n\nconst transformSouthWest = (origin: Rectangle, handler: Handler): Rectangle => {\n const newPosition = pointSumSemigroup.concat(fromRectangle(origin), {\n x: handler.position.x,\n y: 0,\n });\n\n return {\n ...newPosition,\n width: origin.width - handler.position.x,\n height: origin.height + handler.position.y,\n };\n};\n\nexport const transform: RectangleTransform = (origin, handler) => {\n switch (handler.direction) {\n case HandlerDirection.NorthEast:\n return transformNorthEast(origin, handler);\n case HandlerDirection.NorthWest:\n return transformNorthWest(origin, handler);\n case HandlerDirection.SouthEast:\n return transformSouthEast(origin, handler);\n case HandlerDirection.SouthWest:\n return transformSouthWest(origin, handler);\n }\n};\n\nexport const fromImage = (image: HTMLImageElement): Rectangle => {\n return {\n x: 0,\n y: 0,\n width: image.width,\n height: image.height,\n };\n};\n\nexport const fromNaturalImage = (image: HTMLImageElement): Rectangle => {\n return {\n x: 0,\n y: 0,\n width: image.naturalWidth,\n height: image.naturalHeight,\n };\n};\n\nexport const getScaleRange = (source: Rectangle, target: Rectangle): Point => {\n const difference = sizedDivSemigroup.concat(target, source);\n return {\n x: difference.width,\n y: difference.height,\n };\n};\n\nexport const scaleSelection = (\n source: Rectangle,\n sourceSelection: Rectangle,\n target: Rectangle\n): Rectangle => {\n const sourcePosition = fromRectangle(source);\n const scale = getScaleRange(source, target);\n const newPosition = pointProductSemigroup.concat(sourcePosition, scale);\n\n return {\n ...newPosition,\n width: sourceSelection.width * scale.x,\n height: sourceSelection.height * scale.y,\n };\n};\n\nexport const fromAlt = (r: RectangleAlt): Rectangle => {\n return {\n x: r.left,\n y: r.top,\n ...r,\n };\n};\n\nexport const scaleWithSized = (s: Sized) => (r: Rectangle): Rectangle => {\n return {\n x: r.x * s.width,\n y: r.y * s.height,\n width: r.width * s.width,\n height: r.height * s.height,\n };\n};\n\nexport const divideOnSized = (s: Sized) => (r: Rectangle): Rectangle => {\n return {\n x: r.x / s.width,\n y: r.y / s.height,\n width: r.width / s.width,\n height: r.height / s.height,\n };\n};\n\nexport const center = (r: Rectangle): Point => {\n return {\n x: r.x + r.width * 0.5,\n y: r.y + r.height * 0.5,\n };\n};\n"]}
@@ -0,0 +1,67 @@
1
+ import { scaleSelection, getScaleRange, scaleWithSized, } from "./Rectangle";
2
+ it("should return proper scale range", async () => {
3
+ const source = {
4
+ x: 0,
5
+ y: 0,
6
+ width: 50,
7
+ height: 50,
8
+ };
9
+ const target = {
10
+ x: 0,
11
+ y: 0,
12
+ width: 100,
13
+ height: 100,
14
+ };
15
+ const result = {
16
+ x: 0.5,
17
+ y: 0.5,
18
+ };
19
+ expect(getScaleRange(target, source)).toStrictEqual(result);
20
+ });
21
+ it("should scale properly", async () => {
22
+ const source = {
23
+ x: 0,
24
+ y: 0,
25
+ width: 50,
26
+ height: 50,
27
+ };
28
+ const sourceSelection = {
29
+ x: 0,
30
+ y: 0,
31
+ width: 10,
32
+ height: 10,
33
+ };
34
+ const target = {
35
+ x: 0,
36
+ y: 0,
37
+ width: 100,
38
+ height: 100,
39
+ };
40
+ const result = {
41
+ x: 0,
42
+ y: 0,
43
+ width: 20,
44
+ height: 20,
45
+ };
46
+ expect(scaleSelection(source, sourceSelection, target)).toStrictEqual(result);
47
+ });
48
+ it("should scale rectangle with sizable", async () => {
49
+ const source = {
50
+ width: 100,
51
+ height: 100,
52
+ };
53
+ const target = {
54
+ x: 0.5,
55
+ y: 0.5,
56
+ width: 0.5,
57
+ height: 0.5,
58
+ };
59
+ const result = {
60
+ x: 50,
61
+ y: 50,
62
+ width: 50,
63
+ height: 50,
64
+ };
65
+ expect(scaleWithSized(source)(target)).toStrictEqual(result);
66
+ });
67
+ //# sourceMappingURL=Rectangle.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rectangle.spec.js","sourceRoot":"","sources":["../../src/geometry/Rectangle.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAIrB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;EAChD,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,MAAM,GAAG;IACb,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;GACP,CAAC;EAEF,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;EACrC,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,eAAe,GAAc;IACjC,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;EACnD,MAAM,MAAM,GAAU;IACpB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,MAAM,GAAc;IACxB,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,MAAM,GAAG;IACb,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC","sourcesContent":["import {\n Rectangle,\n scaleSelection,\n getScaleRange,\n scaleWithSized,\n} from \"./Rectangle\";\n\nimport { Sized } from \"./Sized\";\n\nit(\"should return proper scale range\", async () => {\n const source: Rectangle = {\n x: 0,\n y: 0,\n width: 50,\n height: 50,\n };\n\n const target: Rectangle = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n };\n\n const result = {\n x: 0.5,\n y: 0.5,\n };\n\n expect(getScaleRange(target, source)).toStrictEqual(result);\n});\n\nit(\"should scale properly\", async () => {\n const source: Rectangle = {\n x: 0,\n y: 0,\n width: 50,\n height: 50,\n };\n\n const sourceSelection: Rectangle = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n };\n\n const target: Rectangle = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n };\n\n const result: Rectangle = {\n x: 0,\n y: 0,\n width: 20,\n height: 20,\n };\n\n expect(scaleSelection(source, sourceSelection, target)).toStrictEqual(result);\n});\n\nit(\"should scale rectangle with sizable\", async () => {\n const source: Sized = {\n width: 100,\n height: 100,\n };\n\n const target: Rectangle = {\n x: 0.5,\n y: 0.5,\n width: 0.5,\n height: 0.5,\n };\n\n const result = {\n x: 50,\n y: 50,\n width: 50,\n height: 50,\n };\n\n expect(scaleWithSized(source)(target)).toStrictEqual(result);\n});\n"]}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=RectangleAlt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RectangleAlt.js","sourceRoot":"","sources":["../../src/geometry/RectangleAlt.ts"],"names":[],"mappings":"","sourcesContent":["export interface RectangleAlt {\n readonly top: number;\n readonly left: number;\n readonly width: number;\n readonly height: number;\n}\n"]}
@@ -6,3 +6,4 @@ export const sizedDivSemigroup = getStructSemigroup({
6
6
  height: semigroupDiv,
7
7
  });
8
8
  export const ordSized = Ord.contramap((s) => s.width * s.height)(Ord.ordNumber);
9
+ //# sourceMappingURL=Sized.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sized.js","sourceRoot":"","sources":["../../src/geometry/Sized.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AAOjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAQ;EACzD,KAAK,EAAE,YAAY;EACnB,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAmB,GAAG,CAAC,SAAS,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAC1B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC","sourcesContent":["import { semigroupDiv } from \"../utils/semigroup/semigroupDiff\";\nimport { getStructSemigroup } from \"fp-ts/Semigroup\";\nimport * as Ord from \"fp-ts/Ord\";\n\nexport type Sized = {\n readonly width: number;\n readonly height: number;\n};\n\nexport const sizedDivSemigroup = getStructSemigroup<Sized>({\n width: semigroupDiv,\n height: semigroupDiv,\n});\n\nexport const ordSized: Ord.Ord<Sized> = Ord.contramap<number, Sized>(\n (s) => s.width * s.height\n)(Ord.ordNumber);\n"]}
@@ -0,0 +1,17 @@
1
+ import { sizedDivSemigroup } from "./Sized";
2
+ it("should divide two sizables", async () => {
3
+ const source = {
4
+ width: 100,
5
+ height: 100,
6
+ };
7
+ const target = {
8
+ width: 50,
9
+ height: 50,
10
+ };
11
+ const result = {
12
+ width: 0.5,
13
+ height: 0.5,
14
+ };
15
+ expect(sizedDivSemigroup.concat(target, source)).toStrictEqual(result);
16
+ });
17
+ //# sourceMappingURL=Sized.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sized.spec.js","sourceRoot":"","sources":["../../src/geometry/Sized.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnD,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;EAC1C,MAAM,MAAM,GAAU;IACpB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,MAAM,GAAU;IACpB,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;GACX,CAAC;EAEF,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;GACZ,CAAC;EAEF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC","sourcesContent":["import { Sized, sizedDivSemigroup } from \"./Sized\";\n\nit(\"should divide two sizables\", async () => {\n const source: Sized = {\n width: 100,\n height: 100,\n };\n\n const target: Sized = {\n width: 50,\n height: 50,\n };\n\n const result = {\n width: 0.5,\n height: 0.5,\n };\n\n expect(sizedDivSemigroup.concat(target, source)).toStrictEqual(result);\n});\n"]}
@@ -2,3 +2,4 @@ const setupSentry = () => { };
2
2
  export default function () {
3
3
  setupSentry();
4
4
  }
5
+ //# sourceMappingURL=global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAE7B,MAAM,CAAC,OAAO;EACZ,WAAW,EAAE,CAAC;AAChB,CAAC","sourcesContent":["const setupSentry = () => {};\n\nexport default function () {\n setupSentry();\n}\n"]}
@@ -1 +1,2 @@
1
1
  export * from './components';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC","sourcesContent":["export * from './components';\n"]}
@@ -1,5 +1,2 @@
1
- /**
2
- * This file was auto-generated by openapi-typescript.
3
- * Do not make direct changes to the file.
4
- */
5
1
  export {};
2
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/interfaces/generated.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\nexport interface paths {\n \"/product/{product-id}/similar-products\": {\n /** Return most similar products to input one */\n get: operations[\"GetSimilarProductsToInputImage\"];\n };\n \"/product/{product-id}/similar-products/{category}\": {\n /** Return most similar products to input one in specific category */\n get: operations[\"GetSimilarProductsToInputImageInSpecificCategory\"];\n };\n \"/product/{product-id}/cross-selling-products\": {\n /** Return cross selling products to input one */\n get: operations[\"GetCrossSellingProductsToInputImage\"];\n };\n \"/product/{product-id}/cross-selling-products/{category}\": {\n /** Return cross selling products to input one in specific category */\n get: operations[\"GetCrossSellingProductsToInputImageInSpecificCategory\"];\n };\n \"/product/{product-id}\": {\n /** Creates a new product or updates an existing one */\n put: operations[\"SetProduct\"];\n /** Deletes product and its images from a site on a given product id */\n delete: operations[\"DeleteProduct\"];\n parameters: {\n path: {\n \"product-id\": string;\n };\n };\n };\n \"/search/session\": {\n /** Starts a reusable search session for a one image. */\n post: operations[\"CreateSearchSession\"];\n };\n \"/search/session/{search-id}\": {\n /** Starts a search in existing session. */\n get: operations[\"SearchInExistingSession\"];\n };\n \"/search/session/{search-id}/category/{category}\": {\n /** Starts a search in existing session in specific category. */\n get: operations[\"SearchInExistingSessionWithCategory\"];\n };\n \"/search/session/{search-id}/detect-objects\": {\n /** Get detected objects of image in existing session. */\n get: operations[\"DetectObjectsOfImageInExistingSession\"];\n };\n \"/search/session/{search-id}/upload-image\": {\n /** Upload high resolution image to existing session. */\n put: operations[\"UploadHighResolutionImageToExistingSession\"];\n };\n \"/visual-product-data/predict-product\": {\n /**\n * This endpoint predicts the fields of a single product, already existing in your product catalog.\n * In addition to the fields of the products, the response also contains information about the product's images.\n */\n post: operations[\"predictProduct\"];\n };\n}\n\nexport interface components {\n schemas: {\n \"ion-detected-object-rectangle\": {\n left?: number;\n /** @example 0.3641 */\n top?: number;\n /** @example 0.94 */\n width?: number;\n /** @example 0.54175 */\n height?: number;\n };\n \"ion-detected-object-value\": {\n classId?: number;\n class?: string;\n score?: number;\n rectangle?: components[\"schemas\"][\"ion-detected-object-rectangle\"];\n };\n \"ion-detected-object\": {\n value?: components[\"schemas\"][\"ion-detected-object-value\"];\n links?: { [key: string]: components[\"schemas\"][\"ion-link\"] };\n };\n \"ion-detected-objects\": {\n value?: components[\"schemas\"][\"ion-detected-object\"][];\n };\n \"delete-image-error\": {\n /** @example 25 */\n \"site-id\"?: number;\n /** @example 1 */\n \"image-id\"?: string;\n };\n \"product-data\": {\n /** @example product title */\n title?: string | null;\n /** @example product description */\n description?: string | null;\n /** @example https://www.example.com/writing/google-pens */\n link?: string | null;\n /** @example https://www.m.example.com/writing/fiji-pens */\n mobile_link?: string | null;\n /** @example in_stock */\n availability?:\n | (\"in_stock\" | \"out_of_stock\" | \"preorder\" | \"backorder\")\n | null;\n /** @example 18.5 */\n price?: number | null;\n /** @example 25.5 */\n sale_price?: number | null;\n /**\n * @description Only category paths are supported.\n * @example Apparel & Accessories > Clothing > Dresses\n */\n google_product_category?: string | null;\n /** @example Home > Women > Dresses > Maxi Dresses, Home > Women > Dresses > Party Dresses */\n product_type?: string | null;\n /** @example Google */\n brand?: string | null;\n /** @example 3234567890126, 123456788787, 98746543218 */\n gtin?: string | null;\n /** @example GO12345OOGLE */\n mpn?: string | null;\n /** @example new */\n condition?: (\"new\" | \"refurbished\" | \"used\") | null;\n /** @example true */\n adult?: boolean | null;\n /** @example 6 */\n multipack?: number | null;\n is_bundle?: boolean | null;\n /** @example A+ */\n energy_efficiency_class?:\n | (\"A+++\" | \"A++\" | \"A+\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\")\n | null;\n /** @example C */\n min_energy_efficiency_class?:\n | (\"A+++\" | \"A++\" | \"A+\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\")\n | null;\n /** @example A++ */\n max_energy_efficiency_class?:\n | (\"A+++\" | \"A++\" | \"A+\" | \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\")\n | null;\n /** @example infant */\n age_group?: (\"newborn\" | \"infant\" | \"toddler\" | \"kids\" | \"adult\") | null;\n /** @example Orange Mango Explosion */\n color?: string | null;\n /** @example female */\n gender?: (\"male\" | \"female\" | \"unisex\") | null;\n /** @example Leather */\n material?: string | null;\n /** @example Striped */\n pattern?: string | null;\n /** @example XL */\n size?: string | null;\n /** @example petite */\n size_type?:\n | (\"regular\" | \"petite\" | \"tall\" | \"plus\" | \"big\" | \"maternity\")\n | null;\n /** @example UK */\n size_system?:\n | (\n | \"AU\"\n | \"BR\"\n | \"CN\"\n | \"DE\"\n | \"EU\"\n | \"FR\"\n | \"IT\"\n | \"JP\"\n | \"MEX\"\n | \"UK\"\n | \"US\"\n )\n | null;\n /** @example AB12345 */\n item_group_id?: string | null;\n /** @example summer */\n custom_label_0?: string | null;\n /** @example summer */\n custom_label_1?: string | null;\n /** @example summer */\n custom_label_2?: string | null;\n /** @example summer */\n custom_label_3?: string | null;\n /** @example summer */\n custom_label_4?: string | null;\n /** @example tbby123_us */\n promotion_id?: string | null;\n /** @example General:Product Type:Digital player,General:Digital Player Type:Flash based,Display:Resolution:432 x 240,Display:Diagonal Size:\"2.5\" */\n product_detail?: string | null;\n /** @example \"Supports thousands of apps, including Netflix, YouTube, HBO Now, Spotify, Showtime, Pandora, Google Play Movies\", \"1080p maximum display resolution\" */\n product_highlight?: string | null;\n /** @example 30 cm */\n product_length?: string | null;\n /** @example 30 cm */\n product_width?: string | null;\n /** @example 30 cm */\n product_height?: string | null;\n /** @example 10 kg */\n product_weight?: string | null;\n };\n product: {\n /** @example 11 */\n \"site-id\"?: number;\n /** @example 100257 */\n \"product-id\"?: string;\n data?: components[\"schemas\"][\"product-data\"];\n };\n \"product-annotation\": {\n /** @example success */\n message: string;\n data: components[\"schemas\"][\"product\"];\n }[];\n /** Product images object */\n \"product-annotation-images\": {\n url?: string;\n };\n \"product-annotation-error\": {\n /** @example Could not save or publish the product */\n message: string;\n data: components[\"schemas\"][\"product\"];\n /** @example exception message */\n debug?: string;\n }[];\n \"category-tree\": {\n /** @example 100 */\n id: string;\n /** @example title */\n title: string;\n /** @example 100 */\n parentId: string;\n }[];\n products: {\n /** @example 05848170643ab0deb9914566391c0c63,0f4f08358666c54b4fde3d83d2b7ef04 */\n productIds?: unknown[];\n };\n \"visual-product-search-object\": {\n /** @example 55fc5f71d6362321cb93b82b387e2f32 */\n groupId?: string | null;\n /** @example 55fc5f71d6362321cb93b82b387e2f32 */\n productId?: string;\n /** @example Livingwalls Fototapete Walls by Patel iconic 3 */\n title?: string;\n /**\n * @description link to the product detail page\n * @example http://mainUrl/site/5/product/55fc5f71d6362321cb93b82b387e2f32/details\n */\n deeplink?: string | null;\n /** @example Fender */\n brand?: string | null;\n /** @example guitar */\n productType?: string | null;\n image?: {\n /** @example http://mainUrl/image.jpg */\n original?: string;\n /** @example http://mainUrl/thumbnail-image.jpg */\n thumbnail?: string | null;\n };\n price?: {\n /** @example 39.95 */\n actual?: number | null;\n /** @example 24.95 */\n sale?: number | null;\n };\n };\n \"category-filter\": components[\"schemas\"][\"ion-link\"] & {\n /** @example Kinder */\n name: string;\n };\n \"name-value-item\": {\n name: string;\n value: string;\n };\n \"ion-link\": {\n /** @example POST */\n method: string;\n /** Format: uri */\n href: string;\n };\n \"search-area\": components[\"schemas\"][\"ion-link\"] & {\n rel: string[];\n value: components[\"schemas\"][\"name-value-item\"][];\n };\n \"upload-high-resolution-image\": components[\"schemas\"][\"ion-link\"] & {\n rel: string[];\n value: components[\"schemas\"][\"name-value-item\"][];\n };\n \"visual-product-search\": components[\"schemas\"][\"visual-product-search-object\"][];\n \"ion-visual-product-search\": {\n value?: components[\"schemas\"][\"visual-product-search-object\"][];\n /** @example array */\n type?: string;\n searchArea?: components[\"schemas\"][\"search-area\"];\n uploadHighResolutionImage?: components[\"schemas\"][\"upload-high-resolution-image\"];\n filters?: {\n /** @example object */\n type?: string;\n value?: {\n categories?: components[\"schemas\"][\"category-filter\"][];\n };\n };\n /** @example [object Object] */\n links?: { [key: string]: components[\"schemas\"][\"ion-link\"] };\n detectedObjects?: components[\"schemas\"][\"ion-detected-object\"][];\n };\n \"visual-product-recommendations\": {\n /** @example b56764137ca959da9541bb28c1987d6c,b5685a5230f5050475f214b4bb0e239b,b56c560872da93602ff88c7267eb4774,d861ad687c60820255dbf8f88516f24d */\n bestFits?: string[];\n extended?: components[\"schemas\"][\"visual-product-search\"][];\n };\n predict_product: {\n /**\n * @description the id of the product for which to make a prediction\n * @example 0010020000VR\n */\n id: string;\n };\n predicted_product: {\n /**\n * @description the id of the product to which the predictions belong\n * @example 0010020000VR\n */\n id: string;\n /** @description each object represents a field of the product with its predicted value */\n fields: components[\"schemas\"][\"predicted_field\"][];\n /** @description each object represents an image of the product with its predicted fields */\n images: components[\"schemas\"][\"predicted_image\"][];\n };\n predicted_image: {\n /**\n * @description the url that identifies the image\n * @example https://www.example.org/image.jpg\n */\n url: string;\n /** @description each object represents a field of the image with its predicted value */\n fields: components[\"schemas\"][\"predicted_field\"][];\n };\n /** @description this object contains a prediction for a field */\n predicted_field: {\n /**\n * @description the fields's name\n * @example color\n */\n name: string;\n /**\n * @description the fields's known value (according to the product catalog)\n * @example red\n */\n value: unknown | null;\n /**\n * @description the fields's predicted value\n * @example orange\n */\n prediction: unknown | null;\n };\n /**\n * Error Response\n * @description This is top-level object based on Google's JSON style guide (https://google.github.io/styleguide/jsoncstyleguide.xml#Reserved_Property_Names_in_the_error_object).\n */\n error_response: {\n /**\n * @description Represents the code for this error. This property value will usually represent the HTTP response code. If there are multiple errors, code will be the error code for the first error.\n * @example 500\n */\n code: number;\n /** @description A human readable message providing more details about the error. If there are multiple errors, message will be the message for the first error. */\n message: string;\n /** @description Container for any additional information regarding the error. If the service returns multiple errors, each element in the errors array represents a different error. */\n errors?: components[\"schemas\"][\"error_object\"][];\n };\n /**\n * Error Object\n * @description This is a distinct error in an error response, also based on Google's JSON style guide (https://google.github.io/styleguide/jsoncstyleguide.xml#Reserved_Property_Names_in_the_error_object).\n */\n error_object: {\n /** @description Unique identifier for the service raising this error. This helps distinguish service-specific errors (i.e. error inserting an event in a calendar) from general protocol errors (i.e. file not found). */\n domain?: string;\n /** @description Unique identifier for this error. Different from the error.code property in that this is not an http response code. */\n reason?: string;\n /** @description A human readable message providing more details about the error. If there is only one error, this field will match error.message. */\n message: string;\n /** @description The location of the error (the interpretation of its value depends on location_type). */\n location?: string;\n /** @description Indicates how the location property should be interpreted. */\n location_type?: string;\n /** @description A URI for a help text that might shed some more light on the error. */\n extended_help?: string;\n /** @description A URI for a report form used by the service to collect data about the error condition. This URI should be preloaded with parameters describing the request. */\n send_report?: string;\n };\n \"delete-product-images-by-productId\": {\n /** @example 25 */\n \"site-id\"?: number;\n /** @example 100258 */\n \"product-id\"?: string;\n /** @example 1,2 */\n \"image-ids\"?: unknown[];\n };\n };\n responses: {\n /** detected objects response */\n \"ion-detected-objects\": {\n content: {\n \"application/json\": components[\"schemas\"][\"ion-detected-objects\"];\n };\n };\n /** success */\n \"visual-product-search\": {\n content: {\n \"application/json\": components[\"schemas\"][\"visual-product-search\"];\n };\n };\n /** success */\n \"ion-visual-product-search\": {\n content: {\n \"application/json\": components[\"schemas\"][\"ion-visual-product-search\"];\n };\n };\n /** success */\n \"visual-product-recommendation\": {\n content: {\n \"application/json\": components[\"schemas\"][\"visual-product-recommendations\"];\n };\n };\n /** Authentication Error */\n \"authentication-error\": {\n content: {\n \"application/json\": unknown;\n };\n };\n /** Authorization Error */\n \"authorization-error\": {\n content: {\n \"application/json\": unknown;\n };\n };\n /** an error occurred */\n error: {\n content: {\n \"application/json\": components[\"schemas\"][\"error_response\"];\n };\n };\n };\n parameters: {\n \"campaign-id\": number;\n campaigns: string;\n \"image-code\": string;\n color: string;\n };\n requestBodies: {\n /** Product data object */\n \"product-annotation\": {\n content: {\n \"application/json\": {\n data?: components[\"schemas\"][\"product-data\"];\n images?: components[\"schemas\"][\"product-annotation-images\"][];\n };\n };\n };\n };\n}\n\nexport interface operations {\n /** Return most similar products to input one */\n GetSimilarProductsToInputImage: {\n parameters: {\n path: {\n \"product-id\": string;\n };\n query: {\n \"similar-products-count\"?: number;\n campaigns?: components[\"parameters\"][\"campaigns\"];\n \"image-code\"?: components[\"parameters\"][\"image-code\"];\n color?: components[\"parameters\"][\"color\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"visual-product-recommendation\"];\n /** An exception occurred on load similar products */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n /** Wait timeout exception occured on load similar products */\n 504: {\n content: {\n \"application/json\": unknown;\n };\n };\n };\n };\n /** Return most similar products to input one in specific category */\n GetSimilarProductsToInputImageInSpecificCategory: {\n parameters: {\n path: {\n \"product-id\": string;\n category: string;\n };\n query: {\n \"similar-products-count\": number;\n campaigns?: components[\"parameters\"][\"campaigns\"];\n \"image-code\"?: components[\"parameters\"][\"image-code\"];\n color?: components[\"parameters\"][\"color\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"visual-product-recommendation\"];\n /** An exception occurred on load similar products */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n /** Wait timeout exception occured on load similar products */\n 504: {\n content: {\n \"application/json\": unknown;\n };\n };\n };\n };\n /** Return cross selling products to input one */\n GetCrossSellingProductsToInputImage: {\n parameters: {\n path: {\n \"product-id\": string;\n };\n query: {\n \"cross-selling-products-count\"?: number;\n campaigns?: components[\"parameters\"][\"campaigns\"];\n \"image-code\"?: components[\"parameters\"][\"image-code\"];\n color?: components[\"parameters\"][\"color\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"visual-product-search\"];\n /** An exception occurred on load similar products */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n /** Wait timeout exception occured on load similar products */\n 504: {\n content: {\n \"application/json\": unknown;\n };\n };\n };\n };\n /** Return cross selling products to input one in specific category */\n GetCrossSellingProductsToInputImageInSpecificCategory: {\n parameters: {\n path: {\n \"product-id\": string;\n category: string;\n };\n query: {\n \"cross-selling-products-count\": number;\n campaigns?: components[\"parameters\"][\"campaigns\"];\n \"image-code\"?: components[\"parameters\"][\"image-code\"];\n color?: components[\"parameters\"][\"color\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"visual-product-search\"];\n /** An exception occurred on load similar products */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n /** Wait timeout exception occured on load similar products */\n 504: {\n content: {\n \"application/json\": unknown;\n };\n };\n };\n };\n /** Creates a new product or updates an existing one */\n SetProduct: {\n parameters: {\n path: {\n \"product-id\": string;\n };\n };\n responses: {\n /** success */\n 200: {\n content: {\n \"application/json\": components[\"schemas\"][\"product-annotation\"];\n };\n };\n /** Could not save or publish the product */\n 400: {\n content: {\n \"application/json\": components[\"schemas\"][\"product-annotation-error\"];\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n requestBody: components[\"requestBodies\"][\"product-annotation\"];\n };\n /** Deletes product and its images from a site on a given product id */\n DeleteProduct: {\n parameters: {\n path: {\n \"product-id\": string;\n };\n };\n responses: {\n /** success */\n 200: {\n content: {\n \"application/json\": {\n /** @example success */\n message?: string;\n data?: components[\"schemas\"][\"delete-product-images-by-productId\"];\n };\n };\n };\n /** Could not delete the image */\n 400: {\n content: {\n \"application/json\": {\n /** @example Could not delete the image */\n message?: string;\n data?: components[\"schemas\"][\"delete-image-error\"];\n /** @example exception message */\n debug?: string;\n };\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n /** Unable to find any image of the product */\n 404: {\n content: {\n \"application/json\": {\n /** @example Unable to find any image of the product. */\n message?: string;\n data?: components[\"schemas\"][\"delete-image-error\"];\n };\n };\n };\n };\n };\n /** Starts a reusable search session for a one image. */\n CreateSearchSession: {\n parameters: {\n query: {\n \"campaign-id\"?: components[\"parameters\"][\"campaign-id\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"ion-visual-product-search\"];\n /** ProductSearch exception */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n requestBody: {\n content: {\n \"multipart/form-data\": {\n /** Format: binary */\n image: string;\n };\n };\n };\n };\n /** Starts a search in existing session. */\n SearchInExistingSession: {\n parameters: {\n path: {\n \"search-id\": string;\n };\n query: {\n \"campaign-id\"?: components[\"parameters\"][\"campaign-id\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"ion-visual-product-search\"];\n /** ProductSearch exception */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n };\n /** Starts a search in existing session in specific category. */\n SearchInExistingSessionWithCategory: {\n parameters: {\n path: {\n \"search-id\": string;\n category: string;\n };\n query: {\n \"campaign-id\"?: components[\"parameters\"][\"campaign-id\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"ion-visual-product-search\"];\n /** ProductSearch exception */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n };\n /** Get detected objects of image in existing session. */\n DetectObjectsOfImageInExistingSession: {\n parameters: {\n path: {\n \"search-id\": string;\n };\n query: {\n \"campaign-id\"?: components[\"parameters\"][\"campaign-id\"];\n };\n };\n responses: {\n 200: components[\"responses\"][\"ion-detected-objects\"];\n /** ProductSearch exception */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n };\n /** Upload high resolution image to existing session. */\n UploadHighResolutionImageToExistingSession: {\n parameters: {\n path: {\n \"search-id\": string;\n };\n query: {\n \"campaign-id\"?: components[\"parameters\"][\"campaign-id\"];\n };\n };\n responses: {\n /** success */\n 200: {\n content: {\n \"application/json\": {\n /** @example success */\n message?: string;\n };\n };\n };\n /** ProductSearch exception */\n 400: {\n content: {\n \"application/json\": unknown;\n };\n };\n 401: components[\"responses\"][\"authentication-error\"];\n 403: components[\"responses\"][\"authorization-error\"];\n };\n };\n /**\n * This endpoint predicts the fields of a single product, already existing in your product catalog.\n * In addition to the fields of the products, the response also contains information about the product's images.\n */\n predictProduct: {\n responses: {\n /** OK */\n 200: {\n content: {\n \"application/json\": components[\"schemas\"][\"predicted_product\"];\n };\n };\n /** Bad Request */\n 400: {\n content: {\n \"application/json\": components[\"schemas\"][\"error_response\"];\n };\n };\n /** Unauthorized */\n 401: {\n content: {\n \"application/json\": components[\"schemas\"][\"error_response\"];\n };\n };\n /** Forbidden */\n 403: {\n content: {\n \"application/json\": components[\"schemas\"][\"error_response\"];\n };\n };\n /** Internal Server Error */\n 500: {\n content: {\n \"application/json\": components[\"schemas\"][\"error_response\"];\n };\n };\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"predict_product\"];\n };\n };\n };\n}\n\nexport interface external {}\n"]}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=recommendation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendation.js","sourceRoot":"","sources":["../../src/interfaces/recommendation.ts"],"names":[],"mappings":"","sourcesContent":["import { components } from './generated';\n\nexport interface Interfaces {\n VisualProductSearch: components['schemas']['visual-product-search-object'],\n VisualProductRecommendations: components['schemas']['visual-product-recommendations']\n}\n"]}
@@ -7,3 +7,4 @@ import { makeRequest } from "./request";
7
7
  const sequenceToEither = sequenceT(E.Apply);
8
8
  export const apiGet = (path, data = {}) => pipe(sequenceToEither(getApiPath(), createInitGetRequest), TE.fromEither, TE.chainW(makeRequest(path, data)));
9
9
  export const apiPost = (path, data = {}) => pipe(sequenceToEither(getApiPath(), createInitPostRequest), TE.fromEither, TE.chainW(makeRequest(path, data)));
10
+ //# sourceMappingURL=apiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../src/network/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,IAAY,EACZ,OAAoB,EAAE,EAC2B,EAAE,CACnD,IAAI,CACF,gBAAgB,CAAC,UAAU,EAAE,EAAE,oBAAoB,CAAC,EACpD,EAAE,CAAC,UAAU,EACb,EAAE,CAAC,MAAM,CAAC,WAAW,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CACtC,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,IAAY,EACZ,OAAoB,EAAE,EAC2B,EAAE,CACnD,IAAI,CACF,gBAAgB,CAAC,UAAU,EAAE,EAAE,qBAAqB,CAAC,EACrD,EAAE,CAAC,UAAU,EACb,EAAE,CAAC,MAAM,CAAC,WAAW,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CACtC,CAAC","sourcesContent":["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"]}
@@ -12,3 +12,4 @@ export const fromFile = async (f) => {
12
12
  value: await fileToB64(f),
13
13
  };
14
14
  };
15
+ //# sourceMappingURL=File.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../../../src/network/ion/File.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAO,EAAmB,EAAE,CAC1D,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;EAC9B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;EAChC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;IACnC,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;EACnC,CAAC,CAAC,CAAC;EAEH,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAO,EAAoB,EAAE;EAC1D,OAAO;IACL,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,SAAS,EAAE,CAAC,CAAC,IAAI;IACjB,KAAK,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC;GAC1B,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Valueable } from \"./ValueObject\";\n\ntype IonFileData = {\n name: string;\n mediaType: string;\n};\n\nexport type IonFile = Valueable<string> & IonFileData;\n\nexport const fileToB64 = async (f: File): Promise<string> =>\n new Promise<string>((resolve) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n resolve(reader.result as string);\n });\n\n reader.readAsDataURL(f);\n });\n\nexport const fromFile = async (f: File): Promise<IonFile> => {\n return {\n name: f.name,\n mediaType: f.type,\n value: await fileToB64(f),\n };\n};\n"]}
@@ -62,3 +62,4 @@ export const formRequest = (form, data = {}) => (payload) => pipe(sequenceToEith
62
62
  const [formUrl, initObject] = initialData[1];
63
63
  return makeRequest(formUrl, initObject)([apiPath, payload]);
64
64
  }));
65
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sourceRoot":"","sources":["../../../src/network/ion/Form.ts"],"names":[],"mappings":"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","sourcesContent":["import * as E from \"fp-ts/Either\";\nimport * as TE from \"fp-ts/TaskEither\";\nimport { pipe } from \"fp-ts/lib/function\";\nimport { Valueable } from \"./ValueObject\";\nimport { Link } from \"./Link\";\nimport { ValueObject } from \"./ValueObject\";\nimport { getApiPath } from \"../utils\";\nimport { makeRequest } from \"../request\";\nimport { sequenceToEither } from \"../../utils/either\";\nimport { BasicError } from \"../../error\";\n\ntype FormRelation = \"form\" | \"edit-form\" | \"create-form\" | \"query-form\";\n\nenum FormMemberName {\n desc = \"desc\",\n eform = \"eform\",\n enabled = \"enabled\",\n etype = \"etype\",\n form = \"form\",\n label = \"label\",\n max = \"max\",\n maxlength = \"maxlength\",\n maxsize = \"maxsize\",\n min = \"min\",\n minlength = \"minlength\",\n minsize = \"minsize\",\n mutable = \"mutable\",\n name = \"name\",\n options = \"options\",\n pattern = \"pattern\",\n placeholder = \"placeholder\",\n required = \"required\",\n secret = \"secret\",\n type = \"type\",\n value = \"value\",\n visible = \"visible\",\n}\n\ntype FormMemberObject = {\n [key in FormMemberName]: unknown;\n};\n\ntype FormField = Partial<FormMemberObject>;\n\nexport const checkFormFields = (\n f: FormField[],\n data: Object\n): E.Either<string, Object> => {\n const fields = f.map((x) => x.name) as string[];\n const keys = Object.keys(data);\n const diff = fields.filter((x) => !keys.includes(x));\n\n return diff.length === 0\n ? E.right(data)\n : E.left(`Data should contains fields: ${diff.join(\", \")}`);\n};\n\nexport type FormType = {\n rel: FormRelation[];\n};\n\nexport type Form = Valueable<FormField[]> & Link & FormType;\n\nexport const requestFromForm = (\n form: Form,\n data: Object\n): E.Either<string, [string, RequestInit]> =>\n pipe(\n checkFormFields(form.value, data),\n E.map((checkedData) =>\n form.rel.includes(\"query-form\")\n ? transformGetForm(form, checkedData)\n : transformSendForm(form, checkedData)\n )\n );\n\nconst transformGetForm = (form: Form, data: Object): [string, RequestInit] => {\n const params = new URLSearchParams(Object.entries(data));\n const url = `${form.href}?${params.toString()}`;\n\n return [url, { method: \"GET\" }];\n};\n\nconst transformSendForm = (form: Form, data: Object): [string, RequestInit] => [\n form.href,\n {\n body: JSON.stringify(data),\n method: form.method,\n headers: new Headers({\n \"Content-Type\": \"application/ion+json\",\n }),\n },\n];\n\nexport const formRequest = <T>(form: Form, data: Object = {}) => (\n payload: RequestInit\n) =>\n pipe(\n sequenceToEither(\n getApiPath(),\n pipe(\n requestFromForm(form, data),\n E.mapLeft(\n (error: string): BasicError<string> => {\n return { kind: \"app\", inner: error };\n }\n )\n )\n ),\n TE.fromEither,\n TE.chainW((initialData) => {\n const apiPath = initialData[0];\n const [formUrl, initObject] = initialData[1];\n\n return makeRequest<ValueObject<T>>(\n formUrl,\n initObject\n )([apiPath, payload]);\n })\n );\n"]}
@@ -0,0 +1,44 @@
1
+ import { isRight, isLeft } from "fp-ts/lib/Either";
2
+ import { requestFromForm, checkFormFields } from "./Form";
3
+ it("should check data for form fields array", async () => {
4
+ const form = {
5
+ href: "http://nowhere.com",
6
+ rel: ["query-form"],
7
+ value: [{ name: "foo" }, { name: "bar" }],
8
+ };
9
+ const data = {
10
+ foo: "foo_data",
11
+ bar: "bar_data",
12
+ };
13
+ const result = checkFormFields(form.value, data);
14
+ expect(isRight(result)).toBe(true);
15
+ });
16
+ it("should fails if data not fit with form fields", async () => {
17
+ const form = {
18
+ href: "http://nowhere.com",
19
+ rel: ["query-form"],
20
+ value: [{ name: "foo" }, { name: "bar" }],
21
+ };
22
+ const data = {
23
+ foo: "foo_data",
24
+ };
25
+ const result = checkFormFields(form.value, data);
26
+ expect(isLeft(result)).toBe(true);
27
+ });
28
+ it("should create proper url", async () => {
29
+ const form = {
30
+ href: "http://nowhere.com",
31
+ rel: ["query-form"],
32
+ value: [{ name: "foo" }, { name: "bar" }],
33
+ };
34
+ const data = {
35
+ foo: "foo_data",
36
+ bar: "bar_data",
37
+ };
38
+ const result = requestFromForm(form, data);
39
+ expect(result).toEqual({
40
+ _tag: "Right",
41
+ right: ["http://nowhere.com?foo=foo_data&bar=bar_data", { method: "GET" }],
42
+ });
43
+ });
44
+ //# sourceMappingURL=Form.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.spec.js","sourceRoot":"","sources":["../../../src/network/ion/Form.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAQ,eAAe,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEhE,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;EACvD,MAAM,IAAI,GAAS;IACjB,IAAI,EAAE,oBAAoB;IAC1B,GAAG,EAAE,CAAC,YAAY,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAC1C,CAAC;EAEF,MAAM,IAAI,GAAG;IACX,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;GAChB,CAAC;EAEF,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAEjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;EAC7D,MAAM,IAAI,GAAS;IACjB,IAAI,EAAE,oBAAoB;IAC1B,GAAG,EAAE,CAAC,YAAY,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAC1C,CAAC;EAEF,MAAM,IAAI,GAAG;IACX,GAAG,EAAE,UAAU;GAChB,CAAC;EAEF,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAEjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;EACxC,MAAM,IAAI,GAAS;IACjB,IAAI,EAAE,oBAAoB;IAC1B,GAAG,EAAE,CAAC,YAAY,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAC1C,CAAC;EAEF,MAAM,IAAI,GAAG;IACX,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;GAChB,CAAC;EAEF,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;EAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,CAAC,8CAA8C,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;GAC3E,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { isRight, isLeft } from \"fp-ts/lib/Either\";\nimport { Form, requestFromForm, checkFormFields } from \"./Form\";\n\nit(\"should check data for form fields array\", async () => {\n const form: Form = {\n href: \"http://nowhere.com\",\n rel: [\"query-form\"],\n value: [{ name: \"foo\" }, { name: \"bar\" }],\n };\n\n const data = {\n foo: \"foo_data\",\n bar: \"bar_data\",\n };\n\n const result = checkFormFields(form.value, data);\n\n expect(isRight(result)).toBe(true);\n});\n\nit(\"should fails if data not fit with form fields\", async () => {\n const form: Form = {\n href: \"http://nowhere.com\",\n rel: [\"query-form\"],\n value: [{ name: \"foo\" }, { name: \"bar\" }],\n };\n\n const data = {\n foo: \"foo_data\",\n };\n\n const result = checkFormFields(form.value, data);\n\n expect(isLeft(result)).toBe(true);\n});\n\nit(\"should create proper url\", async () => {\n const form: Form = {\n href: \"http://nowhere.com\",\n rel: [\"query-form\"],\n value: [{ name: \"foo\" }, { name: \"bar\" }],\n };\n\n const data = {\n foo: \"foo_data\",\n bar: \"bar_data\",\n };\n\n const result = requestFromForm(form, data);\n\n expect(result).toEqual({\n _tag: \"Right\",\n right: [\"http://nowhere.com?foo=foo_data&bar=bar_data\", { method: \"GET\" }],\n });\n});\n"]}
@@ -6,3 +6,4 @@ import { makeRequest } from "../request";
6
6
  import { sequenceToEither } from "../../utils/either";
7
7
  export const getLink = (item, path) => pipe(item.links, O.fromNullable, O.chain((linksObject) => O.fromNullable(linksObject[path])));
8
8
  export const linkRequest = (link) => (data) => pipe(sequenceToEither(getApiPath(), createRequestFromMethod(link.method)), TE.fromEither, TE.chainW(makeRequest(link.href, data)));
9
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","sourceRoot":"","sources":["../../../src/network/ion/Link.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAiB,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AActD,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,IAA0B,EAC1B,IAAY,EACI,EAAE,CAClB,IAAI,CACF,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5D,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,IAAU,EAAE,EAAE,CAAC,CAAC,IAAiB,EAAE,EAAE,CAClE,IAAI,CACF,gBAAgB,CAAC,UAAU,EAAE,EAAE,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EACpE,EAAE,CAAC,UAAU,EACb,EAAE,CAAC,MAAM,CAAC,WAAW,CAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACxD,CAAC","sourcesContent":["import { ValueObject } from \"./ValueObject\";\nimport * as O from \"fp-ts/Option\";\nimport * as TE from \"fp-ts/TaskEither\";\nimport { pipe } from \"fp-ts/function\";\nimport { getApiPath, RequestMethod, createRequestFromMethod } from \"../utils\";\nimport { makeRequest } from \"../request\";\nimport { sequenceToEither } from \"../../utils/either\";\n\nexport interface IonLinkParams {\n readonly [param: string]: string;\n}\n\nexport type Link = {\n href: string;\n // for backward compatibility\n readonly method?: RequestMethod;\n // for backward compatibility\n readonly name?: string;\n};\n\nexport const getLink = (\n item: ValueObject<unknown>,\n path: string\n): O.Option<Link> =>\n pipe(\n item.links,\n O.fromNullable,\n O.chain((linksObject) => O.fromNullable(linksObject[path]))\n );\n\nexport const linkRequest = <T>(link: Link) => (data: RequestInit) =>\n pipe(\n sequenceToEither(getApiPath(), createRequestFromMethod(link.method)),\n TE.fromEither,\n TE.chainW(makeRequest<ValueObject<T>>(link.href, data))\n );\n"]}
@@ -21,3 +21,4 @@ export const foldValueObject = (i) => {
21
21
  }
22
22
  }
23
23
  };
24
+ //# sourceMappingURL=ValueObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueObject.js","sourceRoot":"","sources":["../../../src/network/ion/ValueObject.ts"],"names":[],"mappings":"AAEA,IAAK,gBAWJ;AAXD,WAAK,gBAAgB;EACnB,mCAAe,CAAA;EACf,mCAAe,CAAA;EACf,iCAAa,CAAA;EACb,iCAAa,CAAA;EACb,qCAAiB,CAAA;EACjB,uCAAmB,CAAA;EACnB,yCAAqB,CAAA;EACrB,+BAAW,CAAA;EACX,iCAAa,CAAA;EACb,mCAAe,CAAA;AACjB,CAAC,EAXI,gBAAgB,KAAhB,gBAAgB,QAWpB;AAoBD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,CAAiB,EAAK,EAAE;EACzD,QAAQ,CAAC,CAAC,IAAI,EAAE;IACd,KAAK,OAAO,CAAC,CAAC;MACZ,OAAQ,CAAC,CAAC,KAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KAC9C;IACD,OAAO,CAAC,CAAC;MACP,OAAO,CAAC,CAAC,KAAK,CAAC;KAChB;GACF;AACH,CAAC,CAAC","sourcesContent":["import { Link } from \"./Link\";\n\nenum ObjectMemberName {\n eform = \"eform\",\n etype = \"etype\",\n form = \"form\",\n href = \"href\",\n method = \"method\",\n accepts = \"accepts\",\n produces = \"produces\",\n rel = \"rel\",\n type = \"type\",\n value = \"value\",\n}\n\ntype MemberObject = {\n [key in ObjectMemberName]: unknown;\n};\n\nexport type Valueable<T> = {\n readonly value: T;\n};\n\ntype Linked = {\n readonly links: {\n [link: string]: Link;\n };\n};\n\nexport type ValueObject<T> = Valueable<T> &\n Partial<MemberObject> &\n Partial<Linked>;\n\nexport const foldValueObject = <T>(i: ValueObject<T>): T => {\n switch (i.type) {\n case \"array\": {\n return (i.value as any).map(foldValueObject);\n }\n default: {\n return i.value;\n }\n }\n};\n"]}
@@ -17,3 +17,4 @@ export const makeRequest = (path, init) => ([apiPath, options,]) => {
17
17
  const fullOptions = initRequestSemigroup.concat(options, init);
18
18
  return pipe(request(url.toString(), fullOptions), TE.mapLeft(basicErrorFromResponse));
19
19
  };
20
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/network/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAmB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAc,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,GAAG,CAClB,GAAqB,EACrB,UAAuB,EAAE,MAAM,EAAE,KAAK,EAAE,EACL,EAAE,CACrC,EAAE,CAAC,QAAQ,CACT,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EACzB,CAAC,cAAwB,EAAE,EAAE,CAAC,cAAc,CAC7C,CAAC;AAEJ,MAAM,eAAe,GAAG,CACtB,QAAkB,EACiB,EAAE,CACrC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;EAC7C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;EACpB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAExB,SAAS,OAAO,CAAI,CAAW;EAC7B,MAAM,IAAI,GAAc,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EACvC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,GAAqB,EACrB,UAAuB,EAAE,EACG,EAAE,CAC9B,IAAI,CACF,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,EACzB,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,EACzB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAI,CAAC,CAAC,CAAC,CAC/B,CAAC;AAEJ,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,IAAY,EAAE,IAAiB,EAAE,EAAE,CAAC,CAAC,CAClE,OAAO,EACP,OAAO,EACS,EAA0C,EAAE;EAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACnC,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAE/D,OAAO,IAAI,CACT,OAAO,CAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,EACvC,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CACnC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { pipe } from \"fp-ts/lib/function\";\nimport * as TE from \"fp-ts/lib/TaskEither\";\nimport * as T from \"fp-ts/lib/Task\";\nimport { mergeInitRequests, RequestWithPath } from \"./utils\";\nimport { BasicError, basicErrorFromResponse } from \"../error\";\n\nconst safeRequest = (\n url: string | Request,\n request: RequestInit = { method: \"GET\" }\n): TE.TaskEither<Response, Response> =>\n TE.tryCatch(\n () => fetch(url, request),\n (failedResponse: Response) => failedResponse\n );\n\nconst processResponce = (\n response: Response\n): TE.TaskEither<Response, Response> =>\n response.status >= 200 && response.status < 300\n ? TE.right(response)\n : TE.left(response);\n\nfunction getJson<I>(x: Response): TE.TaskEither<Response, I> {\n const task: T.Task<I> = () => x.json();\n return TE.fromTask(task);\n}\n\nexport const request = <I>(\n url: string | Request,\n request: RequestInit = {}\n): TE.TaskEither<Response, I> =>\n pipe(\n safeRequest(url, request),\n TE.chain(processResponce),\n TE.chain((x) => getJson<I>(x))\n );\n\nconst initRequestSemigroup = mergeInitRequests;\n\nexport const makeRequest = <T>(path: string, init: RequestInit) => ([\n apiPath,\n options,\n]: RequestWithPath): TE.TaskEither<BasicError<Response>, T> => {\n const url = new URL(path, apiPath);\n const fullOptions = initRequestSemigroup.concat(options, init);\n\n return pipe(\n request<T>(url.toString(), fullOptions),\n TE.mapLeft(basicErrorFromResponse)\n );\n};\n"]}