vviinn-widgets 2.3.1 → 2.4.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 (222) hide show
  1. package/dist/cjs/{app-globals-6b5da080.js → app-globals-2bcc74df.js} +1 -1
  2. package/dist/cjs/cropper-handler.cjs.entry.js +1 -1
  3. package/dist/cjs/{customized-slots-8bc78ad4.js → customized-slots-4202eaf5.js} +1 -1
  4. package/dist/cjs/highlight-box_22.cjs.entry.js +20 -10
  5. package/dist/cjs/{imageSearch.store-042e9f45.js → imageSearch.store-cb2b2cc8.js} +14 -11
  6. package/dist/cjs/{index-5b9a60ac.js → index-44fc16ad.js} +1 -1
  7. package/dist/cjs/{index-553c2b4f.js → index-6771ae25.js} +1 -1
  8. package/dist/cjs/index-e9439500.js +3943 -0
  9. package/dist/cjs/loader.cjs.js +3 -3
  10. package/dist/cjs/vviinn-carousel_3.cjs.entry.js +51 -19
  11. package/dist/cjs/vviinn-error.cjs.entry.js +1 -1
  12. package/dist/cjs/vviinn-preloader.cjs.entry.js +2 -2
  13. package/dist/cjs/vviinn-recommendations-sidebar.cjs.entry.js +2 -2
  14. package/dist/cjs/vviinn-vpr-button.cjs.entry.js +2 -2
  15. package/dist/cjs/vviinn-vps-button.cjs.entry.js +3 -3
  16. package/dist/cjs/vviinn-vps-widget.cjs.entry.js +74 -10
  17. package/dist/cjs/vviinn-widgets.cjs.js +3 -3
  18. package/dist/collection/components/image-search/image-view/image-cropper/image-cropper.js +27 -7
  19. package/dist/collection/components/image-search/search-filters/search-filters.js +24 -1
  20. package/dist/collection/components/vviinn-image-view/vviinn-detected-object/vviinn-detected-object.js +18 -1
  21. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +57 -12
  22. package/dist/collection/components/vviinn-vpr-widget/stories/args.js +8 -8
  23. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-vidget.js +46 -9
  24. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-widget.css +5 -0
  25. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.js +108 -10
  26. package/dist/collection/network/utils.js +1 -1
  27. package/dist/collection/openApi/index.js +27 -0
  28. package/dist/collection/{components/vviinn-vpr-widget/GridMode.js → recommendation/events.js} +0 -0
  29. package/dist/collection/store/store.js +7 -9
  30. package/dist/collection/store/tracking.store.js +3 -0
  31. package/dist/collection/tracking/event.js +3 -0
  32. package/dist/collection/tracking/filter.js +5 -0
  33. package/dist/collection/tracking/index.js +13 -0
  34. package/dist/collection/tracking/models.js +6 -0
  35. package/dist/collection/tracking/product.js +18 -0
  36. package/dist/collection/tracking/search.js +5 -0
  37. package/dist/collection/tracking/widget.js +10 -0
  38. package/dist/esm/{app-globals-90d99f95.js → app-globals-550daa9b.js} +1 -1
  39. package/dist/esm/cropper-handler.entry.js +1 -1
  40. package/dist/esm/{customized-slots-65b2467d.js → customized-slots-80625933.js} +1 -1
  41. package/dist/esm/highlight-box_22.entry.js +20 -10
  42. package/dist/esm/{imageSearch.store-f35e14f8.js → imageSearch.store-1268786d.js} +12 -10
  43. package/dist/esm/{index-ac2e3b9d.js → index-1cf740a8.js} +1 -1
  44. package/dist/esm/{index-d7c7df1c.js → index-c09e56b6.js} +1 -1
  45. package/dist/esm/index-fa27f1df.js +3934 -0
  46. package/dist/esm/loader.js +3 -3
  47. package/dist/esm/vviinn-carousel_3.entry.js +51 -19
  48. package/dist/esm/vviinn-error.entry.js +1 -1
  49. package/dist/esm/vviinn-preloader.entry.js +2 -2
  50. package/dist/esm/vviinn-recommendations-sidebar.entry.js +2 -2
  51. package/dist/esm/vviinn-vpr-button.entry.js +2 -2
  52. package/dist/esm/vviinn-vps-button.entry.js +3 -3
  53. package/dist/esm/vviinn-vps-widget.entry.js +71 -7
  54. package/dist/esm/vviinn-widgets.js +3 -3
  55. package/dist/types/Image/error.d.ts +1 -0
  56. package/dist/types/Image/form.d.ts +1 -0
  57. package/dist/types/Image/fromFile.d.ts +1 -0
  58. package/dist/types/Image/imageToB64.d.ts +1 -0
  59. package/dist/types/Image/index.d.ts +1 -0
  60. package/dist/types/Image/renderPromise.d.ts +1 -0
  61. package/dist/types/Image/resizeImage.d.ts +1 -0
  62. package/dist/types/Image/sizing.d.ts +1 -0
  63. package/dist/types/Image/toFile.d.ts +1 -0
  64. package/dist/types/analytics/GAnalytics.d.ts +1 -0
  65. package/dist/types/analytics/GeneralAnalytics.d.ts +1 -0
  66. package/dist/types/analytics/GtagAnalytics.d.ts +1 -0
  67. package/dist/types/analytics/ProductAnalytics.d.ts +1 -0
  68. package/dist/types/campaign/Campaign.d.ts +1 -0
  69. package/dist/types/campaign/CampaignService.d.ts +1 -0
  70. package/dist/types/campaign/VCSCampaign.d.ts +1 -0
  71. package/dist/types/campaign/VCSCampaignResponse.d.ts +1 -0
  72. package/dist/types/campaign/VCSCampaignService.d.ts +1 -0
  73. package/dist/types/campaign/VPRCampaignResponse.d.ts +1 -0
  74. package/dist/types/campaign/VPRCampaignService.d.ts +1 -0
  75. package/dist/types/components/customized-slots.d.ts +1 -0
  76. package/dist/types/components/image-search/image-view/highlight-box/highlight-box.d.ts +1 -0
  77. package/dist/types/components/image-search/image-view/image-cropper/cropper-handler/cropper-handler.d.ts +1 -0
  78. package/dist/types/components/image-search/image-view/image-cropper/image-cropper.d.ts +4 -0
  79. package/dist/types/components/image-search/search-filters/search-filters.d.ts +4 -0
  80. package/dist/types/components/vviinn-carousel/vviinn-carousel.d.ts +1 -0
  81. package/dist/types/components/vviinn-error/vviinn-empty-results/vviinn-empty-results.d.ts +1 -0
  82. package/dist/types/components/vviinn-error/vviinn-error.d.ts +1 -0
  83. package/dist/types/components/vviinn-error/vviinn-server-error/vviinn-server-error.d.ts +1 -0
  84. package/dist/types/components/vviinn-error/vviinn-wrong-format/vviinn-wrong-format.d.ts +1 -0
  85. package/dist/types/components/vviinn-example-images/vviinn-example-image/vviinn-example-image.d.ts +1 -0
  86. package/dist/types/components/vviinn-example-images/vviinn-example-images.d.ts +1 -0
  87. package/dist/types/components/vviinn-icons/index.d.ts +1 -0
  88. package/dist/types/components/vviinn-image-selector/vviinn-image-selector.d.ts +1 -0
  89. package/dist/types/components/vviinn-image-view/vviinn-detected-object/vviinn-detected-object.d.ts +3 -0
  90. package/dist/types/components/vviinn-image-view/vviinn-image-view.d.ts +1 -0
  91. package/dist/types/components/vviinn-modal/vviinn-modal.d.ts +1 -0
  92. package/dist/types/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-1/vviinn-onboarding-card-1.d.ts +1 -0
  93. package/dist/types/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-2/vviinn-onboarding-card-2.d.ts +1 -0
  94. package/dist/types/components/vviinn-onboarding/onboarding-cards/vviinn-onboarding-card-3/vviinn-onboarding-card-3.d.ts +1 -0
  95. package/dist/types/components/vviinn-onboarding/vviinn-onboarding.d.ts +1 -0
  96. package/dist/types/components/vviinn-overlay/vviinn-overlay.d.ts +1 -0
  97. package/dist/types/components/vviinn-overlayed-modal/vviinn-overlayed-modal.d.ts +1 -0
  98. package/dist/types/components/vviinn-preloader/vviinn-preloader.d.ts +1 -0
  99. package/dist/types/components/vviinn-privacy-badge/vviinn-privacy-badge.d.ts +1 -0
  100. package/dist/types/components/vviinn-product-card/render-helpers.d.ts +1 -0
  101. package/dist/types/components/vviinn-product-card/stories/args.d.ts +1 -0
  102. package/dist/types/components/vviinn-product-card/stories/decorators.d.ts +1 -0
  103. package/dist/types/components/vviinn-product-card/stories/vviinn-product-card.stories.d.ts +1 -0
  104. package/dist/types/components/vviinn-product-card/vviinn-product-card.d.ts +9 -3
  105. package/dist/types/components/vviinn-slider/arrow.d.ts +1 -0
  106. package/dist/types/components/vviinn-slider/vviinn-slide/vviinn-slide.d.ts +1 -0
  107. package/dist/types/components/vviinn-slider/vviinn-slider.d.ts +1 -0
  108. package/dist/types/components/vviinn-teaser/vviinn-teaser.d.ts +1 -0
  109. package/dist/types/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.d.ts +1 -0
  110. package/dist/types/components/vviinn-vpr-button/stories/args.d.ts +1 -0
  111. package/dist/types/components/vviinn-vpr-button/stories/vviinn-vpr-button.stories.d.ts +1 -0
  112. package/dist/types/components/vviinn-vpr-button/vviinn-vpr-button.d.ts +1 -0
  113. package/dist/types/components/vviinn-vpr-widget/stories/args.d.ts +1 -0
  114. package/dist/types/components/vviinn-vpr-widget/stories/decorators.d.ts +1 -0
  115. package/dist/types/components/vviinn-vpr-widget/stories/vviinn-vpr-widget.stories.d.ts +1 -0
  116. package/dist/types/components/vviinn-vpr-widget/token-helpers.d.ts +1 -0
  117. package/dist/types/components/vviinn-vpr-widget/vviinn-vpr-vidget.d.ts +9 -1
  118. package/dist/types/components/vviinn-vps-button/stories/vviinn-vps-button.stories.d.ts +1 -0
  119. package/dist/types/components/vviinn-vps-button/vviinn-vps-button.d.ts +1 -0
  120. package/dist/types/components/vviinn-vps-widget/stories/vviinn-vps-widget.stories.d.ts +1 -0
  121. package/dist/types/components/vviinn-vps-widget/vviinn-vps-widget.d.ts +14 -1
  122. package/dist/types/components.d.ts +10 -4
  123. package/dist/types/cropper/Cropper.d.ts +1 -0
  124. package/dist/types/cropper/Handler.d.ts +1 -0
  125. package/dist/types/dom/index.d.ts +1 -0
  126. package/dist/types/error.d.ts +1 -0
  127. package/dist/types/file/index.d.ts +1 -0
  128. package/dist/types/geometry/Clip.d.ts +1 -0
  129. package/dist/types/geometry/Point.d.ts +1 -0
  130. package/dist/types/geometry/Rectangle.d.ts +1 -0
  131. package/dist/types/geometry/RectangleAlt.d.ts +1 -0
  132. package/dist/types/geometry/Sized.d.ts +1 -0
  133. package/dist/types/global.d.ts +1 -0
  134. package/dist/types/index.d.ts +1 -0
  135. package/dist/types/interfaces/generated.d.ts +1 -0
  136. package/dist/types/interfaces/recommendation.d.ts +1 -0
  137. package/dist/types/network/apiClient.d.ts +1 -0
  138. package/dist/types/network/ion/File.d.ts +1 -0
  139. package/dist/types/network/ion/Form.d.ts +1 -0
  140. package/dist/types/network/ion/Link.d.ts +1 -0
  141. package/dist/types/network/ion/ValueObject.d.ts +1 -0
  142. package/dist/types/network/request.d.ts +1 -0
  143. package/dist/types/network/utils.d.ts +1 -0
  144. package/dist/types/openApi/index.d.ts +6 -0
  145. package/dist/types/recommendation/events.d.ts +6 -0
  146. package/dist/types/recommendation/recommendation.d.ts +1 -0
  147. package/dist/types/searchSession/searchSession.d.ts +1 -0
  148. package/dist/types/sentry.d.ts +1 -0
  149. package/dist/types/slider/GridMode.d.ts +1 -0
  150. package/dist/types/store/file-processing.d.ts +1 -0
  151. package/dist/types/store/imageSearch.store.d.ts +1 -0
  152. package/dist/types/store/store.d.ts +8 -6
  153. package/dist/types/store/tracking.store.d.ts +4 -0
  154. package/dist/types/stories/image-selector.stories.d.ts +1 -0
  155. package/dist/types/stories/image-view.stories.d.ts +1 -0
  156. package/dist/types/stories/modal.stories.d.ts +1 -0
  157. package/dist/types/stories/onboarding.stories.d.ts +1 -0
  158. package/dist/types/stories/overlay.stories.d.ts +1 -0
  159. package/dist/types/stories/overlayedModal.stories.d.ts +1 -0
  160. package/dist/types/stories/privacy-badge.stories.d.ts +1 -0
  161. package/dist/types/stories/slider.stories.d.ts +1 -0
  162. package/dist/types/stories/teaser.stories.d.ts +1 -0
  163. package/dist/types/stories/vps-widget.stories.d.ts +1 -0
  164. package/dist/types/stories/vviinn-product.stories.d.ts +1 -0
  165. package/dist/types/tracking/event.d.ts +4 -0
  166. package/dist/types/tracking/filter.d.ts +3 -0
  167. package/dist/types/tracking/index.d.ts +9 -0
  168. package/dist/types/tracking/models.d.ts +13 -0
  169. package/dist/types/tracking/product.d.ts +7 -0
  170. package/dist/types/tracking/search.d.ts +3 -0
  171. package/dist/types/tracking/widget.d.ts +5 -0
  172. package/dist/types/utils/collections/collectionsUtils.d.ts +1 -0
  173. package/dist/types/utils/either.d.ts +1 -0
  174. package/dist/types/utils/enum/enumUtils.d.ts +1 -0
  175. package/dist/types/utils/event/Events.d.ts +1 -0
  176. package/dist/types/utils/number/index.d.ts +1 -0
  177. package/dist/types/utils/option/option.d.ts +1 -0
  178. package/dist/types/utils/semigroup/semigroupDiff.d.ts +1 -0
  179. package/dist/types/utils/token/tokenUtils.d.ts +1 -0
  180. package/dist/vviinn-widgets/{p-e882fbeb.js → p-07125f64.js} +1 -1
  181. package/dist/vviinn-widgets/{p-935b4f49.entry.js → p-27ede517.entry.js} +1 -1
  182. package/dist/vviinn-widgets/{p-320844ea.entry.js → p-314e40b3.entry.js} +1 -1
  183. package/dist/vviinn-widgets/p-316abc01.js +1 -0
  184. package/dist/vviinn-widgets/{p-b0243e84.entry.js → p-4bdb3027.entry.js} +1 -1
  185. package/dist/vviinn-widgets/{p-4530ca32.entry.js → p-5535163a.entry.js} +1 -1
  186. package/dist/vviinn-widgets/{p-80f0d4e0.js → p-78b65f70.js} +1 -1
  187. package/dist/vviinn-widgets/{p-e362fa80.entry.js → p-86ae782f.entry.js} +1 -1
  188. package/dist/vviinn-widgets/p-89f2c19a.entry.js +1 -0
  189. package/dist/vviinn-widgets/{p-b4b46a70.js → p-8e25b838.js} +1 -1
  190. package/dist/vviinn-widgets/p-94aa8705.entry.js +1 -0
  191. package/dist/vviinn-widgets/{p-679ea2ce.js → p-97af45f0.js} +1 -1
  192. package/{www/build/p-55491d9b.js → dist/vviinn-widgets/p-c5e6ec4f.js} +1 -1
  193. package/dist/vviinn-widgets/{p-a5b69a48.entry.js → p-c63fb46b.entry.js} +1 -1
  194. package/{www/build/p-1c141479.entry.js → dist/vviinn-widgets/p-dd7cac6e.entry.js} +1 -1
  195. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  196. package/package.json +11 -3
  197. package/www/build/{p-e882fbeb.js → p-07125f64.js} +1 -1
  198. package/www/build/{p-935b4f49.entry.js → p-27ede517.entry.js} +1 -1
  199. package/www/build/{p-320844ea.entry.js → p-314e40b3.entry.js} +1 -1
  200. package/www/build/p-316abc01.js +1 -0
  201. package/www/build/{p-b0243e84.entry.js → p-4bdb3027.entry.js} +1 -1
  202. package/www/build/{p-4530ca32.entry.js → p-5535163a.entry.js} +1 -1
  203. package/www/build/{p-80f0d4e0.js → p-78b65f70.js} +1 -1
  204. package/www/build/{p-e362fa80.entry.js → p-86ae782f.entry.js} +1 -1
  205. package/www/build/p-89f2c19a.entry.js +1 -0
  206. package/www/build/{p-b4b46a70.js → p-8e25b838.js} +1 -1
  207. package/www/build/p-94aa8705.entry.js +1 -0
  208. package/www/build/p-961822d3.js +125 -0
  209. package/www/build/{p-679ea2ce.js → p-97af45f0.js} +1 -1
  210. package/{dist/vviinn-widgets/p-55491d9b.js → www/build/p-c5e6ec4f.js} +1 -1
  211. package/www/build/{p-a5b69a48.entry.js → p-c63fb46b.entry.js} +1 -1
  212. package/{dist/vviinn-widgets/p-1c141479.entry.js → www/build/p-dd7cac6e.entry.js} +1 -1
  213. package/www/build/p-e0153ae2.css +6 -0
  214. package/www/build/vviinn-widgets.esm.js +1 -1
  215. package/www/index.html +1 -107
  216. package/dist/types/components/vviinn-vpr-widget/GridMode.d.ts +0 -1
  217. package/dist/vviinn-widgets/p-6239a782.entry.js +0 -1
  218. package/dist/vviinn-widgets/p-757849fd.entry.js +0 -1
  219. package/www/build/p-4379b1c2.js +0 -1
  220. package/www/build/p-6239a782.entry.js +0 -1
  221. package/www/build/p-757849fd.entry.js +0 -1
  222. package/www/build/p-a67898be.css +0 -1
@@ -28,22 +28,31 @@ export class VviinnProductCard {
28
28
  this.pricePrefix = undefined;
29
29
  this.responsive = false;
30
30
  this.dimmedBackground = false;
31
+ /** @internal */
32
+ this.index = 0;
31
33
  this.imageLoaded = false;
34
+ this.productData = null;
32
35
  this.intersectionObserver = new IntersectionObserver(this.intersectionCallback.bind(this), { threshold: 1.0 });
33
36
  }
37
+ connectedCallback() {
38
+ this.productData = {
39
+ product: this.productId,
40
+ rank: this.index
41
+ };
42
+ }
34
43
  intersectionCallback(data) {
35
44
  if (data.some((entry) => entry.isIntersecting)) {
36
45
  pipe(getAnalyticsModule, O.map((analytics) => analytics.sendImpression(this.getProduct())));
37
- this.recommendationView.emit(this.productId);
46
+ this.recommendationView.emit(this.productData);
38
47
  this.intersectionObserver.disconnect();
39
48
  }
40
49
  }
41
50
  componentDidLoad() {
42
- this.recommendationLoad.emit(this.productId);
51
+ this.recommendationLoad.emit(this.productData);
43
52
  this.intersectionObserver.observe(this.el);
44
53
  const links = this.el.shadowRoot.querySelectorAll("a");
45
54
  links.forEach((link) => link.addEventListener("mousedown", (event) => {
46
- this.recommendationClick.emit(this.productId);
55
+ this.recommendationClick.emit(this.productData);
47
56
  if (window.ga) {
48
57
  event.preventDefault();
49
58
  }
@@ -355,6 +364,27 @@ export class VviinnProductCard {
355
364
  "attribute": "dimmed-background",
356
365
  "reflect": false,
357
366
  "defaultValue": "false"
367
+ },
368
+ "index": {
369
+ "type": "number",
370
+ "mutable": false,
371
+ "complexType": {
372
+ "original": "number",
373
+ "resolved": "number",
374
+ "references": {}
375
+ },
376
+ "required": false,
377
+ "optional": false,
378
+ "docs": {
379
+ "tags": [{
380
+ "text": undefined,
381
+ "name": "internal"
382
+ }],
383
+ "text": ""
384
+ },
385
+ "attribute": "index",
386
+ "reflect": false,
387
+ "defaultValue": "0"
358
388
  }
359
389
  }; }
360
390
  static get states() { return {
@@ -371,9 +401,14 @@ export class VviinnProductCard {
371
401
  "text": "Event fires ones when recommendation rendered on page"
372
402
  },
373
403
  "complexType": {
374
- "original": "string",
375
- "resolved": "string",
376
- "references": {}
404
+ "original": "ProductCardEventData",
405
+ "resolved": "{ product: string; rank: number; }",
406
+ "references": {
407
+ "ProductCardEventData": {
408
+ "location": "import",
409
+ "path": "../../recommendation/events"
410
+ }
411
+ }
377
412
  }
378
413
  }, {
379
414
  "method": "recommendationView",
@@ -386,9 +421,14 @@ export class VviinnProductCard {
386
421
  "text": "Event fires ones when recommendation appears on the viewport"
387
422
  },
388
423
  "complexType": {
389
- "original": "string",
390
- "resolved": "string",
391
- "references": {}
424
+ "original": "ProductCardEventData",
425
+ "resolved": "{ product: string; rank: number; }",
426
+ "references": {
427
+ "ProductCardEventData": {
428
+ "location": "import",
429
+ "path": "../../recommendation/events"
430
+ }
431
+ }
392
432
  }
393
433
  }, {
394
434
  "method": "recommendationClick",
@@ -401,9 +441,14 @@ export class VviinnProductCard {
401
441
  "text": "Event fires ones when user click on deeplink"
402
442
  },
403
443
  "complexType": {
404
- "original": "string",
405
- "resolved": "string",
406
- "references": {}
444
+ "original": "ProductCardEventData",
445
+ "resolved": "{ product: string; rank: number; }",
446
+ "references": {
447
+ "ProductCardEventData": {
448
+ "location": "import",
449
+ "path": "../../recommendation/events"
450
+ }
451
+ }
407
452
  }
408
453
  }, {
409
454
  "method": "productImageLoaded",
@@ -1,5 +1,5 @@
1
1
  export const apiPath = {
2
- name: "Api Path",
2
+ name: "api-path",
3
3
  control: {
4
4
  type: "text",
5
5
  },
@@ -8,19 +8,19 @@ export const apiPath = {
8
8
  },
9
9
  };
10
10
  const token = {
11
- name: "Token",
11
+ name: "token",
12
12
  control: {
13
13
  type: "text",
14
14
  },
15
15
  };
16
16
  const productId = {
17
- name: "Product ID",
17
+ name: "product-id",
18
18
  control: {
19
19
  type: "text",
20
20
  },
21
21
  };
22
22
  const cssUrl = {
23
- name: "CSS URL",
23
+ name: "css-url",
24
24
  description: "Optional for custom CSS. It will overwrite all other settings.",
25
25
  control: {
26
26
  type: "text",
@@ -36,7 +36,7 @@ const analyticsId = {
36
36
  required: false,
37
37
  };
38
38
  export const campaignType = {
39
- name: "Campaign type",
39
+ name: "campaign-type",
40
40
  control: {
41
41
  type: "select",
42
42
  labels: {
@@ -57,7 +57,7 @@ const showTitle = {
57
57
  required: false,
58
58
  };
59
59
  const titleName = {
60
- name: "Section title name",
60
+ name: "block-title",
61
61
  control: {
62
62
  type: "text",
63
63
  },
@@ -74,7 +74,7 @@ const titleFontSize = {
74
74
  required: false,
75
75
  };
76
76
  const showScrollbars = {
77
- name: "Use default scrollbar / pagination",
77
+ name: "show-scroll",
78
78
  description: "Add browser default horizontal scroll bar (in continuity mode) or pagination bullets (in grid mode) to add extra cue for users ",
79
79
  control: {
80
80
  type: "boolean",
@@ -82,7 +82,7 @@ const showScrollbars = {
82
82
  required: false,
83
83
  };
84
84
  const imageWidth = {
85
- name: "Image Width (px)",
85
+ name: "image-width",
86
86
  control: {
87
87
  type: "number",
88
88
  },
@@ -1,12 +1,15 @@
1
- import { Component, Host, h, Prop, State, Element, Watch, Event, Listen } from "@stencil/core";
1
+ import { Component, Host, h, Prop, State, Element, Watch, Event, Listen, } from "@stencil/core";
2
2
  import { pipe } from "fp-ts/lib/function";
3
3
  import * as TE from "fp-ts/lib/TaskEither";
4
4
  import * as E from "fp-ts/lib/Either";
5
5
  import { createBearAuthedHeader } from "./token-helpers";
6
- import state from "../../store/store";
6
+ import { state } from "../../store/store";
7
7
  import { getRecommendationsService } from "../../campaign/CampaignService";
8
8
  import { imageSearchState } from "../../store/imageSearch.store";
9
9
  import { Subject } from "rxjs";
10
+ import { v4 as uuidv4 } from "uuid";
11
+ import { createTrackingApi } from "../../openApi";
12
+ import { createProductViewVprEvent, createWidgetVprEvent, } from "../../tracking";
10
13
  /**
11
14
  * @part product-card - product card itself
12
15
  * @part title - title inside product card
@@ -58,13 +61,35 @@ export class VviinnVprWidget {
58
61
  state.apiPath = newPath;
59
62
  this.getRecommendations();
60
63
  }
61
- lol({ detail }) {
64
+ handleImageLoading({ detail }) {
62
65
  this.productImageLoadedSubject.next(detail);
63
66
  }
67
+ trackRecommendationView({ detail }) {
68
+ const recommendationViewEvent = createProductViewVprEvent(Object.assign({ session_id: this.uiSessionId }, detail));
69
+ this.trackingApi.trackEvent(recommendationViewEvent);
70
+ }
71
+ trackRecommendationClick({ detail }) {
72
+ const recommendationClickEvent = createProductViewVprEvent(Object.assign({ session_id: this.uiSessionId }, detail));
73
+ this.trackingApi.trackEvent(recommendationClickEvent);
74
+ }
64
75
  connectedCallback() {
65
76
  state.apiPath = this.apiPath;
66
77
  state.currencySign = this.currencySign;
67
78
  state.locale = this.locale;
79
+ this.uiSessionId = uuidv4();
80
+ this.trackingApi = createTrackingApi(this.apiPath, this.token);
81
+ const widgetOpenEvent = createWidgetVprEvent({
82
+ action: "open",
83
+ sessionId: this.uiSessionId,
84
+ });
85
+ this.trackingApi.trackEvent(widgetOpenEvent);
86
+ }
87
+ disconnectedCallback() {
88
+ const widgetCloseEvent = createWidgetVprEvent({
89
+ action: "close",
90
+ sessionId: this.uiSessionId,
91
+ });
92
+ this.trackingApi.trackEvent(widgetCloseEvent);
68
93
  }
69
94
  async componentWillLoad() {
70
95
  state.pricePrefix = this.pricePrefix;
@@ -89,9 +114,9 @@ export class VviinnVprWidget {
89
114
  imageSearchState.results = this.recommendations;
90
115
  this.loaded = true;
91
116
  //this.recommendationsLoaded.emit();
92
- this.productIds = this.recommendations.map(r => r.productId);
117
+ this.productIds = this.recommendations.map((r) => r.productId);
93
118
  this.productImageLoadedSubject.subscribe((id) => {
94
- this.productIds = this.productIds.filter(x => x !== id);
119
+ this.productIds = this.productIds.filter((x) => x !== id);
95
120
  if (this.productIds.length === 0) {
96
121
  this.recommendationsLoaded.emit();
97
122
  }
@@ -114,14 +139,14 @@ export class VviinnVprWidget {
114
139
  h("h2", { part: "recommendations-title" }, this.blockTitle),
115
140
  this.useCarousel ? this.renderCarousel() : this.renderResults()));
116
141
  }
117
- renderRecommendation(recommendation) {
118
- return (h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: recommendation.price.sale, responsive: this.mode === "grid", dimmedBackground: this.useDimmedBackgroundInCard() }));
142
+ renderRecommendation(recommendation, index) {
143
+ return (h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: recommendation.price.sale, responsive: this.mode === "grid", dimmedBackground: this.useDimmedBackgroundInCard(), index: index }));
119
144
  }
120
145
  useDimmedBackgroundInCard() {
121
146
  return this.mode === "continuity" || !this.useCarousel;
122
147
  }
123
148
  renderResults() {
124
- return (h("div", { class: "recommendations-grid", part: "recommendations-grid" }, this.recommendations.map((r) => this.renderRecommendation(r))));
149
+ return (h("div", { class: "recommendations-grid", part: "recommendations-grid" }, this.recommendations.map((r, i) => this.renderRecommendation(r, i))));
125
150
  }
126
151
  renderCarousel() {
127
152
  return (h("vviinn-carousel", { mode: this.mode, imageWidth: this.imageWidth, showScroll: this.showScroll, recommendations: this.recommendations }));
@@ -434,7 +459,19 @@ export class VviinnVprWidget {
434
459
  }]; }
435
460
  static get listeners() { return [{
436
461
  "name": "productImageLoaded",
437
- "method": "lol",
462
+ "method": "handleImageLoading",
463
+ "target": undefined,
464
+ "capture": false,
465
+ "passive": false
466
+ }, {
467
+ "name": "recommendationView",
468
+ "method": "trackRecommendationView",
469
+ "target": undefined,
470
+ "capture": false,
471
+ "passive": false
472
+ }, {
473
+ "name": "recommendationClick",
474
+ "method": "trackRecommendationClick",
438
475
  "target": undefined,
439
476
  "capture": false,
440
477
  "passive": false
@@ -1,4 +1,9 @@
1
1
  :host {
2
+ /**
3
+ * @prop --vviinn-carousel-columns: control number of items in grid mode
4
+ * @prop --vviinn-carousel-image-width: control image width in continuity mode
5
+ */
6
+
2
7
  display: grid;
3
8
  grid-gap: 1rem;
4
9
  width: 100%;
@@ -1,8 +1,11 @@
1
- import { Component, Host, h, State, Prop, Element, Watch } from "@stencil/core";
2
- import state from "../../store/store";
1
+ import { Component, Host, h, State, Prop, Element, Watch, Listen, } from "@stencil/core";
2
+ import { state } from "../../store/store";
3
3
  import { imageSearchState } from "../../store/imageSearch.store";
4
4
  import * as O from "fp-ts/lib/Option";
5
5
  import { slotChangeListener } from "../customized-slots";
6
+ import { v4 as uuidv4 } from "uuid";
7
+ import { createTrackingApi } from "../../openApi";
8
+ import { createFilterEvent, createProductViewVpsEvent, createSearchEvent, createWidgetVpsEvent, } from "../../tracking";
6
9
  /**
7
10
  * @prop --color-primary: color used for action button, slider bullets and selected detected object;
8
11
  *
@@ -28,6 +31,8 @@ import { slotChangeListener } from "../customized-slots";
28
31
  */
29
32
  export class VviinnVpsWidget {
30
33
  constructor() {
34
+ /** @internal */
35
+ this.apiPath = "https://api.vviinn.com";
31
36
  /** When true modal window with widget will be shown */
32
37
  this.active = false;
33
38
  /** Currency sign will shown after price */
@@ -37,6 +42,7 @@ export class VviinnVpsWidget {
37
42
  this.slidePosition = 0;
38
43
  this.width = 0;
39
44
  this.wrongImageFormat = false;
45
+ this.imageSource = null;
40
46
  }
41
47
  activeWatcher(value) {
42
48
  if (value) {
@@ -47,6 +53,39 @@ export class VviinnVpsWidget {
47
53
  document.body.style.overflow = this.overflow;
48
54
  }
49
55
  }
56
+ trackRecommendationView({ detail }) {
57
+ const recommendationViewEvent = createProductViewVpsEvent(Object.assign({ sessionId: this.uiSessionId }, detail));
58
+ this.trackingApi.trackEvent(recommendationViewEvent);
59
+ }
60
+ trackRecommendationClick({ detail }) {
61
+ const recommendationClickEvent = createProductViewVpsEvent(Object.assign({ sessionId: this.uiSessionId }, detail));
62
+ this.trackingApi.trackEvent(recommendationClickEvent);
63
+ }
64
+ trachSearchAreaChanges() {
65
+ const searchEvent = createSearchEvent({
66
+ sessionId: this.uiSessionId,
67
+ source: this.imageSource,
68
+ searchArea: "manual-selection",
69
+ });
70
+ this.trackingApi.trackEvent(searchEvent);
71
+ }
72
+ trackDetectedObject() {
73
+ const searchEvent = createSearchEvent({
74
+ sessionId: this.uiSessionId,
75
+ source: this.imageSource,
76
+ searchArea: "attention-point",
77
+ });
78
+ this.trackingApi.trackEvent(searchEvent);
79
+ }
80
+ trackFilter({ detail }) {
81
+ const searchEvent = createFilterEvent({
82
+ sessionId: this.uiSessionId,
83
+ source: this.imageSource,
84
+ kind: "category",
85
+ action: detail,
86
+ });
87
+ this.trackingApi.trackEvent(searchEvent);
88
+ }
50
89
  componentWillLoad() {
51
90
  slotChangeListener(this, this.el);
52
91
  }
@@ -55,14 +94,38 @@ export class VviinnVpsWidget {
55
94
  state.currencySign = this.currencySign;
56
95
  state.locale = this.locale;
57
96
  imageSearchState.token = this.token;
97
+ this.uiSessionId = uuidv4();
98
+ this.trackingApi = createTrackingApi(this.apiPath, this.token);
99
+ const widgetOpenEvent = createWidgetVpsEvent({
100
+ action: "open",
101
+ sessionId: this.uiSessionId,
102
+ });
103
+ this.trackingApi.trackEvent(widgetOpenEvent);
104
+ }
105
+ disconnectedCallback() {
106
+ const widgetOpenEvent = createWidgetVpsEvent({
107
+ action: "close",
108
+ sessionId: this.uiSessionId,
109
+ });
110
+ this.trackingApi.trackEvent(widgetOpenEvent);
58
111
  }
59
- handleImageSelection() {
112
+ handleImageSelection(source) {
113
+ this.imageSource = source;
60
114
  this.slidePosition = 1;
61
115
  const root = this.el.shadowRoot.querySelector("vviinn-overlayed-modal");
62
116
  const overlay = root.shadowRoot.querySelector("vviinn-overlay");
63
117
  const modal = overlay.querySelector("vviinn-modal");
64
118
  const modalBody = modal.shadowRoot.querySelector(".body");
65
119
  modalBody.scrollTop = 0;
120
+ this.trackInitialSearch();
121
+ }
122
+ trackInitialSearch() {
123
+ const searchEvent = createSearchEvent({
124
+ sessionId: this.uiSessionId,
125
+ source: this.imageSource,
126
+ searchArea: "full",
127
+ });
128
+ this.trackingApi.trackEvent(searchEvent);
66
129
  }
67
130
  resetState() {
68
131
  this.resetScroll("onboarding-block");
@@ -103,7 +166,7 @@ export class VviinnVpsWidget {
103
166
  h("vviinn-wrong-format", { class: { hidden: !this.wrongImageFormat }, onActionClick: () => (this.wrongImageFormat = false) }),
104
167
  h("vviinn-server-error", { class: { hidden: !imageSearchState.serverError }, onActionClick: () => (imageSearchState.serverError = false) }),
105
168
  h("vviinn-teaser", { class: { hidden: this.haveErrors() } }),
106
- h("vviinn-image-selector", { class: { hidden: this.haveErrors() }, onImageSelected: () => this.handleImageSelection(), onImageSelectedError: () => (this.wrongImageFormat = true), part: "select-image_button" },
169
+ h("vviinn-image-selector", { class: { hidden: this.haveErrors() }, onImageSelected: () => this.handleImageSelection("upload"), onImageSelectedError: () => (this.wrongImageFormat = true), part: "select-image_button" },
107
170
  h("span", { slot: "upload-button-text", class: "upload-button-content" },
108
171
  h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "29", height: "28", fill: "none" },
109
172
  h("defs", null),
@@ -115,22 +178,25 @@ export class VviinnVpsWidget {
115
178
  h("div", { id: "onboarding-block", class: "start-page_block" },
116
179
  h("div", { class: "onboarding-wrapper" },
117
180
  h("vviinn-onboarding", null),
118
- h("vviinn-example-images", { onImageSelected: () => this.handleImageSelection(), onImageSelectedError: () => this.resetScroll("onboarding-block", "smooth") })))),
181
+ h("vviinn-example-images", { onImageSelected: () => this.handleImageSelection("example"), onImageSelectedError: () => this.resetScroll("onboarding-block", "smooth") })))),
119
182
  h("vviinn-slide", { class: { "results-page": true, active: this.slidePosition == 1 } },
120
183
  h("div", { class: "image-wrapper" },
121
184
  h("vviinn-image-view", null),
122
185
  h("div", { class: "filters-wrapper" },
123
186
  h("div", { class: "filters" }, imageSearchState.filters.map((filter) => (h("search-filters", { filter: filter })))))),
124
187
  h("div", { id: "results-block", class: "products-wrapper" },
125
- h("div", { class: { "nothing-found": true, hidden: imageSearchState.results.length > 0 } },
188
+ h("div", { class: {
189
+ "nothing-found": true,
190
+ hidden: imageSearchState.results.length > 0,
191
+ } },
126
192
  h("vviinn-empty-results", null),
127
193
  h("vviinn-onboarding", null)),
128
194
  h("div", { class: {
129
195
  hidden: imageSearchState.results.length <= 0,
130
196
  products: true,
131
- } }, imageSearchState.results.map((p) => {
197
+ } }, imageSearchState.results.map((p, i) => {
132
198
  var _a;
133
- return (h("vviinn-product-card", { hidden: true, productTitle: p.title, productId: p.productId, brand: p.brand, deeplink: p.deeplink, price: p.price.actual, salePrice: p.price.sale, imageWidth: 160, image: (_a = p.image.thumbnail) !== null && _a !== void 0 ? _a : p.image.original, part: "product-card" }));
199
+ return (h("vviinn-product-card", { hidden: true, productTitle: p.title, productId: p.productId, brand: p.brand, deeplink: p.deeplink, price: p.price.actual, salePrice: p.price.sale, imageWidth: 160, image: (_a = p.image.thumbnail) !== null && _a !== void 0 ? _a : p.image.original, part: "product-card", index: i }));
134
200
  }))))))));
135
201
  }
136
202
  static get is() { return "vviinn-vps-widget"; }
@@ -163,7 +229,7 @@ export class VviinnVpsWidget {
163
229
  "type": "string",
164
230
  "mutable": false,
165
231
  "complexType": {
166
- "original": "string | undefined",
232
+ "original": "string",
167
233
  "resolved": "string",
168
234
  "references": {}
169
235
  },
@@ -177,7 +243,8 @@ export class VviinnVpsWidget {
177
243
  "text": ""
178
244
  },
179
245
  "attribute": "api-path",
180
- "reflect": false
246
+ "reflect": false,
247
+ "defaultValue": "\"https://api.vviinn.com\""
181
248
  },
182
249
  "active": {
183
250
  "type": "boolean",
@@ -244,4 +311,35 @@ export class VviinnVpsWidget {
244
311
  "propName": "active",
245
312
  "methodName": "activeWatcher"
246
313
  }]; }
314
+ static get listeners() { return [{
315
+ "name": "recommendationView",
316
+ "method": "trackRecommendationView",
317
+ "target": undefined,
318
+ "capture": false,
319
+ "passive": false
320
+ }, {
321
+ "name": "recommendationClick",
322
+ "method": "trackRecommendationClick",
323
+ "target": undefined,
324
+ "capture": false,
325
+ "passive": false
326
+ }, {
327
+ "name": "cropperChanged",
328
+ "method": "trachSearchAreaChanges",
329
+ "target": undefined,
330
+ "capture": false,
331
+ "passive": false
332
+ }, {
333
+ "name": "detectedObjectClicked",
334
+ "method": "trackDetectedObject",
335
+ "target": undefined,
336
+ "capture": false,
337
+ "passive": false
338
+ }, {
339
+ "name": "filterSelected",
340
+ "method": "trackFilter",
341
+ "target": undefined,
342
+ "capture": false,
343
+ "passive": false
344
+ }]; }
247
345
  }
@@ -3,7 +3,7 @@ import * as E from "fp-ts/Either";
3
3
  import { pipe } from "fp-ts/function";
4
4
  import * as S from "fp-ts/Semigroup";
5
5
  import * as String from "fp-ts/string";
6
- import state from "../store/store";
6
+ import { state } from "../store/store";
7
7
  import { emptyApiPathError } from "../error";
8
8
  const stringMonoid = O.getMonoid(String.Monoid);
9
9
  export const getApiPath = () => pipe(O.getFirstMonoid().concat(O.fromNullable(state.apiPath), O.fromNullable(`${process.env.API_PATH}`)), E.fromOption(() => emptyApiPathError));
@@ -0,0 +1,27 @@
1
+ import { createConfiguration, DefaultApi, servers, } from "@vviinn/tracking-client-ts";
2
+ const STAGE_SERVER_IDENTIFIER = "stage";
3
+ export const getTrackingServerByApiPath = (apiPath) => isProductionPath(apiPath) ? servers[0] : servers[1];
4
+ export const isProductionPath = (apiPath) => !apiPath.includes(STAGE_SERVER_IDENTIFIER);
5
+ // TODO find way to utilize this function when we will use several openApi clients
6
+ export const createBearerAuth = (token) => {
7
+ const provider = {
8
+ getToken: () => {
9
+ return new Promise((resolve) => resolve(token));
10
+ },
11
+ };
12
+ const bearerConf = {
13
+ tokenProvider: provider,
14
+ };
15
+ return {
16
+ bearerAuth: bearerConf,
17
+ };
18
+ };
19
+ export const createTrackingApi = (apiPath, token) => {
20
+ const baseServer = getTrackingServerByApiPath(apiPath);
21
+ const authMethods = createBearerAuth(token);
22
+ const configuration = {
23
+ baseServer,
24
+ authMethods,
25
+ };
26
+ return new DefaultApi(createConfiguration(configuration));
27
+ };
@@ -1,11 +1,9 @@
1
1
  import { createStore } from "@stencil/store";
2
- const store = createStore({
3
- fallbackStyles: "",
4
- pricePrefix: null,
5
- currencySign: null,
6
- apiPath: undefined,
7
- locale: "de-DE",
2
+ import { trackingStore } from "./tracking.store";
3
+ export const { state, onChange } = createStore(Object.assign({ fallbackStyles: "", pricePrefix: null, currencySign: null, apiPath: null, token: null, locale: "de-DE" }, trackingStore));
4
+ onChange("apiPath", (val) => {
5
+ console.log("apiPathChanged", val);
6
+ });
7
+ onChange("token", (val) => {
8
+ console.log("tokenChanged", val);
8
9
  });
9
- export default store.state;
10
- export const dispose = store.dispose;
11
- export const state = store.state;
@@ -0,0 +1,3 @@
1
+ export const trackingStore = {
2
+ trackingEnabled: true,
3
+ };
@@ -0,0 +1,3 @@
1
+ export const createTrackingEvent = (widget) => (eventData) => {
2
+ return Object.assign(Object.assign({}, eventData), widget);
3
+ };
@@ -0,0 +1,5 @@
1
+ import { FILTER_EVENT_EVENT_TYPE } from "./models";
2
+ export const filterEvent = {
3
+ widget: "VPS",
4
+ typ: FILTER_EVENT_EVENT_TYPE,
5
+ };
@@ -0,0 +1,13 @@
1
+ import { createTrackingEvent } from "./event";
2
+ import { filterEvent } from "./filter";
3
+ import { vprProductClick, vprProductView, vpsProductClick, vpsProductView, } from "./product";
4
+ import { searchEvent } from "./search";
5
+ import { vprWidget, vpsWidget } from "./widget";
6
+ export const createProductViewVprEvent = createTrackingEvent(vprProductView);
7
+ export const createProductViewVpsEvent = createTrackingEvent(vpsProductView);
8
+ export const createProductClickVprEvent = createTrackingEvent(vprProductClick);
9
+ export const createProductClickVpsEvent = createTrackingEvent(vpsProductClick);
10
+ export const createWidgetVprEvent = createTrackingEvent(vprWidget);
11
+ export const createWidgetVpsEvent = createTrackingEvent(vpsWidget);
12
+ export const createSearchEvent = createTrackingEvent(searchEvent);
13
+ export const createFilterEvent = createTrackingEvent(filterEvent);
@@ -0,0 +1,6 @@
1
+ const PRODUCT_CLICK_EVENT_TYPE = "product_click_event";
2
+ const PRODUCT_VIEW_EVENT_TYPE = "product_view_event";
3
+ const FILTER_EVENT_EVENT_TYPE = "filter_event";
4
+ const SEARCH_EVENT_EVENT_TYPE = "search_event";
5
+ const WIDGET_EVENT_EVENT_TYPE = "widget_event";
6
+ export { PRODUCT_CLICK_EVENT_TYPE, PRODUCT_VIEW_EVENT_TYPE, FILTER_EVENT_EVENT_TYPE, SEARCH_EVENT_EVENT_TYPE, WIDGET_EVENT_EVENT_TYPE, };
@@ -0,0 +1,18 @@
1
+ import { PRODUCT_VIEW_EVENT_TYPE, PRODUCT_CLICK_EVENT_TYPE, } from "./models";
2
+ const vprProductView = {
3
+ widget: "VPR",
4
+ typ: PRODUCT_VIEW_EVENT_TYPE,
5
+ };
6
+ const vpsProductView = {
7
+ widget: "VPS",
8
+ typ: PRODUCT_VIEW_EVENT_TYPE,
9
+ };
10
+ const vprProductClick = {
11
+ widget: "VPR",
12
+ typ: PRODUCT_CLICK_EVENT_TYPE,
13
+ };
14
+ const vpsProductClick = {
15
+ widget: "VPS",
16
+ typ: PRODUCT_CLICK_EVENT_TYPE,
17
+ };
18
+ export { vprProductClick, vprProductView, vpsProductClick, vpsProductView };
@@ -0,0 +1,5 @@
1
+ import { SEARCH_EVENT_EVENT_TYPE } from "./models";
2
+ export const searchEvent = {
3
+ widget: "VPS",
4
+ typ: SEARCH_EVENT_EVENT_TYPE,
5
+ };
@@ -0,0 +1,10 @@
1
+ import { WIDGET_EVENT_EVENT_TYPE } from "./models";
2
+ const vprWidget = {
3
+ widget: "VPR",
4
+ typ: WIDGET_EVENT_EVENT_TYPE,
5
+ };
6
+ const vpsWidget = {
7
+ widget: "VPS",
8
+ typ: WIDGET_EVENT_EVENT_TYPE,
9
+ };
10
+ export { vprWidget, vpsWidget };
@@ -1,4 +1,4 @@
1
- import { E as Env } from './index-d7c7df1c.js';
1
+ import { E as Env } from './index-c09e56b6.js';
2
2
 
3
3
  /*! *****************************************************************************
4
4
  Copyright (c) Microsoft Corporation.
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h, H as Host } from './index-d7c7df1c.js';
1
+ import { r as registerInstance, h, H as Host } from './index-c09e56b6.js';
2
2
  import { q as getCursorValue } from './Handler-639a4cb3.js';
3
3
 
4
4
  const cropperHandlerCss = ":host{--size:20px;background:transparent;border:4px solid white;box-sizing:content-box;display:block;height:var(--size);touch-action:none;position:absolute;width:var(--size);z-index:4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host(.disabled){opacity:0.25}:host(.nw-resize){border-bottom:none;border-right:none;top:0;left:0}:host(.ne-resize){border-left:none;border-bottom:none;right:0;top:0}:host(.sw-resize){border-right:none;border-top:none;left:0;bottom:0}:host(.se-resize){border-left:none;border-top:none;bottom:0;right:0}";
@@ -1,4 +1,4 @@
1
- import { h } from './index-d7c7df1c.js';
1
+ import { h } from './index-c09e56b6.js';
2
2
 
3
3
  const defaultSlotsNames = [
4
4
  "vviinn-onboarding-title",