@weaverse/react 0.7.13 → 0.7.15

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 (3) hide show
  1. package/dist/index.js +119 -79
  2. package/dist/index.mjs +139 -99
  3. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -60,16 +60,17 @@ Button.defaultProps = {
60
60
  text: "Shop now",
61
61
  clickAction: "none",
62
62
  linkTo: "",
63
- openInNewTab: false,
64
- css: {
65
- "@desktop": {
66
- borderRadius: "72px",
67
- border: "none",
68
- backgroundColor: "#0F71FF",
69
- color: "#fff",
70
- fontSize: "13px",
71
- padding: "10px 20px"
72
- }
63
+ openInNewTab: false
64
+ };
65
+ var css = {
66
+ "@desktop": {
67
+ borderRadius: "72px",
68
+ border: "none",
69
+ backgroundColor: "#0F71FF",
70
+ color: "#fff",
71
+ fontSize: "13px",
72
+ padding: "10px 20px",
73
+ textDecoration: "none"
73
74
  }
74
75
  };
75
76
  var button_default = Button;
@@ -85,7 +86,7 @@ var Container = (0, import_react.forwardRef)(
85
86
  }, children);
86
87
  }
87
88
  );
88
- var css = {
89
+ var css2 = {
89
90
  "@desktop": {
90
91
  alignItems: "flex-start",
91
92
  backgroundColor: "rgba(248,203,203,0.38)",
@@ -122,10 +123,12 @@ var WeaverseContextConsumer = WeaverseContext.Consumer;
122
123
  // src/elements/countdown/timer-block.tsx
123
124
  var import_react3 = __toESM(require("react"));
124
125
  function TimerBlock({ value, label }) {
125
- return /* @__PURE__ */ import_react3.default.createElement("div", null, /* @__PURE__ */ import_react3.default.createElement("div", {
126
- className: "wv-countdown-number"
126
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
127
+ className: "wv-cd-block"
128
+ }, /* @__PURE__ */ import_react3.default.createElement("div", {
129
+ className: "wv-cd-number"
127
130
  }, value.toString().padStart(2, "0")), label && /* @__PURE__ */ import_react3.default.createElement("div", {
128
- className: "wv-countdown-label"
131
+ className: "wv-cd-label"
129
132
  }, label));
130
133
  }
131
134
 
@@ -173,6 +176,7 @@ var Countdown = (0, import_react4.forwardRef)(
173
176
  );
174
177
  if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
175
178
  window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
179
+ clearInterval(flag);
176
180
  }
177
181
  setRemaining(remainingTime);
178
182
  }, 1e3);
@@ -190,13 +194,13 @@ var Countdown = (0, import_react4.forwardRef)(
190
194
  }, /* @__PURE__ */ import_react4.default.createElement(TimerBlock, {
191
195
  label: showLabel ? time : "",
192
196
  value: timer[time]
193
- }), time !== "seconds" && /* @__PURE__ */ import_react4.default.createElement("span", {
194
- className: `wv-countdown-number ${showColon ? "" : "hidden"}`
195
- }, ":"));
197
+ }), time !== "seconds" && /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("span", {
198
+ className: `wv-cd-number ${showColon ? "" : "hidden"}`
199
+ }, ":")));
196
200
  }));
197
201
  }
198
202
  );
199
- var css2 = {
203
+ var css3 = {
200
204
  "@desktop": {
201
205
  fontFamily: "Inter",
202
206
  fontSize: 36,
@@ -204,11 +208,12 @@ var css2 = {
204
208
  display: "grid",
205
209
  gridAutoFlow: "column",
206
210
  gap: 10,
207
- "& > div": {
211
+ lineHeight: "initial",
212
+ ".wv-cd-block": {
208
213
  width: 48,
209
214
  textAlign: "center"
210
215
  },
211
- ".wv-countdown-label": {
216
+ ".wv-cd-label": {
212
217
  fontSize: 10
213
218
  },
214
219
  "& > span": {
@@ -222,7 +227,7 @@ var css2 = {
222
227
  Countdown.defaultProps = {
223
228
  timerType: "fixed-time",
224
229
  startTime: Date.now(),
225
- endTime: 1661140528e3,
230
+ endTime: 1666756528e3,
226
231
  periods: 90,
227
232
  redirectUrl: "https://myshop.com",
228
233
  openInNewTab: false,
@@ -233,9 +238,36 @@ var countdown_default = Countdown;
233
238
 
234
239
  // src/elements/image.tsx
235
240
  var import_react5 = __toESM(require("react"));
241
+ var import_core2 = require("@weaverse/core");
242
+ var loadUploadCareAdaptiveDelivery = () => {
243
+ if (!window.Blinkloader) {
244
+ console.log("loadUploadCareAdaptiveDelivery");
245
+ (function(src, cb) {
246
+ let s = document.createElement("script");
247
+ s.setAttribute("src", src);
248
+ s.onload = cb;
249
+ (document.head || document.body).appendChild(s);
250
+ })(
251
+ "https://ucarecdn.com/libs/blinkloader/3.x/blinkloader.min.js",
252
+ function() {
253
+ window.Blinkloader.optimize({
254
+ pubkey: "1a22133d1a1bdc089d4c",
255
+ fadeIn: true,
256
+ lazyload: true,
257
+ smartCompression: true,
258
+ responsive: true,
259
+ retina: true,
260
+ webp: true
261
+ });
262
+ }
263
+ );
264
+ }
265
+ };
266
+ if (import_core2.isBrowser) {
267
+ loadUploadCareAdaptiveDelivery();
268
+ }
236
269
  var Image = import_react5.default.forwardRef(
237
270
  (props, ref) => {
238
- let { isDesignMode } = (0, import_react5.useContext)(WeaverseContext);
239
271
  let {
240
272
  src,
241
273
  alt,
@@ -243,38 +275,41 @@ var Image = import_react5.default.forwardRef(
243
275
  objectPosition,
244
276
  onClickAction,
245
277
  openLinkInNewTab,
278
+ linkTo,
246
279
  ...rest
247
280
  } = props;
248
281
  let style = {
249
282
  "--wv-img-object-fit": objectFit,
250
283
  "--wv-img-object-position": objectPosition
251
284
  };
252
- let handleClick = () => {
253
- if (isDesignMode) {
254
- return console.log("Click action:", onClickAction);
255
- }
256
- if (onClickAction) {
257
- console.log("TODO: click action:", onClickAction);
258
- }
259
- };
285
+ let content = /* @__PURE__ */ import_react5.default.createElement("img", {
286
+ alt,
287
+ "data-blink-src": src
288
+ });
289
+ if (onClickAction === "open-link" && linkTo) {
290
+ let target = openLinkInNewTab ? "_blank" : "_self";
291
+ content = /* @__PURE__ */ import_react5.default.createElement("a", {
292
+ href: linkTo,
293
+ target
294
+ }, content);
295
+ }
260
296
  return /* @__PURE__ */ import_react5.default.createElement("div", {
261
297
  ref,
262
298
  ...rest,
263
- style,
264
- onClick: handleClick
265
- }, /* @__PURE__ */ import_react5.default.createElement("img", {
266
- alt,
267
- src
268
- }));
299
+ style
300
+ }, content);
269
301
  }
270
302
  );
271
- var css3 = {
303
+ var css4 = {
272
304
  "@desktop": {
273
305
  img: {
274
306
  width: "100%",
275
307
  height: "100%",
276
308
  objectFit: "var(--wv-img-object-fit, cover)",
277
309
  objectPosition: "var(--wv-img-object-position, center)"
310
+ },
311
+ "> [data-blink-src]": {
312
+ visibility: "hidden"
278
313
  }
279
314
  }
280
315
  };
@@ -283,8 +318,9 @@ Image.defaultProps = {
283
318
  alt: "Image alt text",
284
319
  objectFit: "cover",
285
320
  objectPosition: "center",
286
- onClickAction: "open-lightbox",
287
- openLinkInNewTab: false
321
+ onClickAction: "open-link",
322
+ openLinkInNewTab: false,
323
+ linkTo: ""
288
324
  };
289
325
  var image_default = Image;
290
326
 
@@ -308,7 +344,7 @@ var Layout = (0, import_react6.forwardRef)((props, ref) => {
308
344
  "data-layout-content": true
309
345
  }, children));
310
346
  });
311
- var css4 = {
347
+ var css5 = {
312
348
  "@desktop": {
313
349
  paddingTop: "16px",
314
350
  paddingBottom: "16px",
@@ -357,7 +393,7 @@ var Map = (0, import_react7.forwardRef)((props, ref) => {
357
393
  style: { pointerEvents: "none" }
358
394
  }));
359
395
  });
360
- var css5 = {};
396
+ var css6 = {};
361
397
  Map.defaultProps = {
362
398
  place: "Hanoi",
363
399
  zoom: 14
@@ -376,7 +412,7 @@ var Text = React8.forwardRef(
376
412
  });
377
413
  }
378
414
  );
379
- var css6 = {
415
+ var css7 = {
380
416
  "@desktop": {
381
417
  padding: "10px",
382
418
  wordBreak: "break-word",
@@ -407,9 +443,12 @@ var Video = (0, import_react8.forwardRef)((props, ref) => {
407
443
  }, /* @__PURE__ */ import_react8.default.createElement("source", {
408
444
  src,
409
445
  type: type || "video/mp4"
446
+ }), /* @__PURE__ */ import_react8.default.createElement("source", {
447
+ src,
448
+ type: "video/ogg"
410
449
  }), "Your browser does not support the video tag."));
411
450
  });
412
- var css7 = {
451
+ var css8 = {
413
452
  "@desktop": {
414
453
  video: {
415
454
  height: "100%",
@@ -420,7 +459,7 @@ var css7 = {
420
459
  };
421
460
  Video.defaultProps = {
422
461
  src: "https://youtu.be/wM-NT6hcw48",
423
- poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
462
+ poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
424
463
  loop: false,
425
464
  type: "video/mp4",
426
465
  controls: false,
@@ -504,7 +543,7 @@ var Instagram = (0, import_react10.forwardRef)(
504
543
  })));
505
544
  }
506
545
  );
507
- var css8 = {
546
+ var css9 = {
508
547
  "@desktop": {
509
548
  ".wv-ig-media-container": {
510
549
  overflow: "hidden",
@@ -558,7 +597,7 @@ var Accordion = (0, import_react11.forwardRef)(
558
597
  }, children));
559
598
  }
560
599
  );
561
- var css9 = {
600
+ var css10 = {
562
601
  "@desktop": {
563
602
  display: "flex",
564
603
  flexDirection: "column",
@@ -632,11 +671,11 @@ var rotateAnimation = {
632
671
  function Icon(props) {
633
672
  let { name, active = false, style, ...rest } = props;
634
673
  let { stitchesInstance } = (0, import_react12.useContext)(WeaverseContext);
635
- const { animationType, css: css16 } = ICONS[name];
674
+ const { animationType, css: css17 } = ICONS[name];
636
675
  if (active && animationType === "rotate90") {
637
676
  style = { ...rotateAnimation, ...style };
638
677
  }
639
- let { className } = stitchesInstance.css(css16)();
678
+ let { className } = stitchesInstance.css(css17)();
640
679
  if (active)
641
680
  className += " active";
642
681
  return /* @__PURE__ */ import_react12.default.createElement("span", {
@@ -665,7 +704,7 @@ var AccordionWrapper = (0, import_react13.forwardRef)((props, ref) => {
665
704
  name: iconName
666
705
  })), children);
667
706
  });
668
- var css10 = {
707
+ var css11 = {
669
708
  "@desktop": {
670
709
  maxHeight: "100%",
671
710
  ".wv-acc-icon": {
@@ -716,7 +755,7 @@ var AccordionContent = (0, import_react14.forwardRef)(
716
755
  }, "Drag and drop an element here."));
717
756
  }
718
757
  );
719
- var css11 = {
758
+ var css12 = {
720
759
  "@desktop": {
721
760
  width: "100%",
722
761
  maxWidth: "var(--grid-size)",
@@ -800,7 +839,7 @@ var Tab = (0, import_react16.forwardRef)((props, ref) => {
800
839
  wvId
801
840
  }), children));
802
841
  });
803
- var css12 = {
842
+ var css13 = {
804
843
  "@desktop": {
805
844
  display: "flex",
806
845
  flexDirection: "column",
@@ -853,7 +892,7 @@ var TabContent = (0, import_react17.forwardRef)(
853
892
  }, "Drag and drop an element here."));
854
893
  }
855
894
  );
856
- var css13 = {
895
+ var css14 = {
857
896
  "@desktop": {
858
897
  width: "100%",
859
898
  maxWidth: "var(--grid-size)",
@@ -903,7 +942,7 @@ var Slider = (0, import_react18.forwardRef)((props, ref) => {
903
942
  autoplayInterval: delay * 1e3
904
943
  }, children));
905
944
  });
906
- var css14 = {
945
+ var css15 = {
907
946
  "@desktop": {
908
947
  "& .wv-slider-btn": {
909
948
  borderRadius: "100%",
@@ -981,7 +1020,7 @@ var SliderContent = (0, import_react19.forwardRef)(
981
1020
  }, "Drag and drop an element here."));
982
1021
  }
983
1022
  );
984
- var css15 = {
1023
+ var css16 = {
985
1024
  "@desktop": {
986
1025
  width: "100%",
987
1026
  maxWidth: "var(--grid-size)",
@@ -1013,99 +1052,100 @@ var Elements = {
1013
1052
  Countdown: {
1014
1053
  Component: countdown_default,
1015
1054
  type: "countdown",
1016
- defaultCss: css2
1055
+ defaultCss: css3
1017
1056
  },
1018
1057
  Button: {
1019
1058
  Component: button_default,
1020
- type: "button"
1059
+ type: "button",
1060
+ defaultCss: css
1021
1061
  },
1022
1062
  Container: {
1023
1063
  Component: container_default,
1024
1064
  type: "container",
1025
- defaultCss: css
1065
+ defaultCss: css2
1026
1066
  },
1027
1067
  Image: {
1028
1068
  Component: image_default,
1029
1069
  type: "image",
1030
- defaultCss: css3
1070
+ defaultCss: css4
1031
1071
  },
1032
1072
  Instagram: {
1033
1073
  Component: instagram_default,
1034
1074
  type: "instagram",
1035
- defaultCss: css8
1075
+ defaultCss: css9
1036
1076
  },
1037
1077
  Layout: {
1038
1078
  Component: layout_default,
1039
1079
  type: "layout",
1040
- defaultCss: css4
1080
+ defaultCss: css5
1041
1081
  },
1042
1082
  Map: {
1043
1083
  Component: map_default,
1044
1084
  type: "map",
1045
- defaultCss: css5
1085
+ defaultCss: css6
1046
1086
  },
1047
1087
  Text: {
1048
1088
  Component: text_default,
1049
1089
  type: "text",
1050
- defaultCss: css6
1090
+ defaultCss: css7
1051
1091
  },
1052
1092
  Video: {
1053
1093
  Component: video_default,
1054
1094
  type: "video",
1055
- defaultCss: css7
1095
+ defaultCss: css8
1056
1096
  },
1057
1097
  Accordion: {
1058
1098
  Component: accordion_default,
1059
1099
  type: "accordion",
1060
- defaultCss: css9
1100
+ defaultCss: css10
1061
1101
  },
1062
1102
  AccordionWrapper: {
1063
1103
  Component: AccordionWrapper_default,
1064
1104
  type: "accordion.wrapper",
1065
- defaultCss: css10
1105
+ defaultCss: css11
1066
1106
  },
1067
1107
  AccordionContent: {
1068
1108
  Component: AccordionContent_default,
1069
1109
  type: "accordion.content",
1070
- defaultCss: css11
1110
+ defaultCss: css12
1071
1111
  },
1072
1112
  Tab: {
1073
1113
  Component: tab_default,
1074
1114
  type: "tab",
1075
- defaultCss: css12
1115
+ defaultCss: css13
1076
1116
  },
1077
1117
  TabContent: {
1078
1118
  Component: TabContent_default,
1079
1119
  type: "tab.content",
1080
- defaultCss: css13
1120
+ defaultCss: css14
1081
1121
  },
1082
1122
  Slider: {
1083
1123
  Component: slider_default,
1084
1124
  type: "slider",
1085
- defaultCss: css14
1125
+ defaultCss: css15
1086
1126
  },
1087
1127
  SliderContent: {
1088
1128
  Component: SliderContent_default,
1089
1129
  type: "slider.content",
1090
- defaultCss: css15
1130
+ defaultCss: css16
1091
1131
  }
1092
1132
  };
1093
1133
 
1094
1134
  // src/renderer.tsx
1095
- var import_core2 = require("@weaverse/core");
1135
+ var import_core3 = require("@weaverse/core");
1096
1136
  var import_react20 = __toESM(require("react"));
1097
1137
 
1098
1138
  // src/utils/index.ts
1099
- function shortCssObject(css16) {
1139
+ function shortCssObject(css17) {
1100
1140
  return {
1101
- "@desktop": css16["@desktop"],
1102
- "@mobile": css16["@mobile"]
1141
+ "@desktop": css17["@desktop"],
1142
+ "@mobile": css17["@mobile"]
1103
1143
  };
1104
1144
  }
1105
1145
  var permanentClasses = {};
1106
1146
  function generateItemClass(instance, stitchesInstance) {
1107
1147
  var _a, _b;
1108
- let { css: css16, type, className: cls = "" } = instance.data;
1148
+ let { css: css17, type, className: cls = "" } = instance.data;
1109
1149
  let className = "";
1110
1150
  let permanentClass = "";
1111
1151
  let perCss = (_a = instance.Element) == null ? void 0 : _a.permanentCss;
@@ -1119,8 +1159,8 @@ function generateItemClass(instance, stitchesInstance) {
1119
1159
  }
1120
1160
  }
1121
1161
  className = permanentClass;
1122
- if (css16) {
1123
- let formattedCss = shortCssObject(css16);
1162
+ if (css17) {
1163
+ let formattedCss = shortCssObject(css17);
1124
1164
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
1125
1165
  let { stitchesClass } = instance;
1126
1166
  let otherClass = (((_b = instance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -1158,11 +1198,11 @@ var WeaverseRoot = ({ context }) => {
1158
1198
  var ItemComponent = ({ instance }) => {
1159
1199
  let { stitchesInstance, elementInstances } = (0, import_react20.useContext)(WeaverseContext);
1160
1200
  let [data, setData] = (0, import_react20.useState)(instance.data);
1161
- let { id, type, childIds = [], css: css16, className, ...rest } = data;
1201
+ let { id, type, childIds = [], css: css17, className, ...rest } = data;
1162
1202
  (0, import_react20.useEffect)(() => {
1163
1203
  let update = (data2) => setData({ ...data2 });
1164
1204
  instance.subscribe(update);
1165
- if (import_core2.isBrowser && !instance.ref.current) {
1205
+ if (import_core3.isBrowser && !instance.ref.current) {
1166
1206
  Object.assign(instance.ref, {
1167
1207
  current: document.querySelector(`[data-wv-id="${id}"]`)
1168
1208
  });
package/dist/index.mjs CHANGED
@@ -21,16 +21,17 @@ Button.defaultProps = {
21
21
  text: "Shop now",
22
22
  clickAction: "none",
23
23
  linkTo: "",
24
- openInNewTab: false,
25
- css: {
26
- "@desktop": {
27
- borderRadius: "72px",
28
- border: "none",
29
- backgroundColor: "#0F71FF",
30
- color: "#fff",
31
- fontSize: "13px",
32
- padding: "10px 20px"
33
- }
24
+ openInNewTab: false
25
+ };
26
+ var css = {
27
+ "@desktop": {
28
+ borderRadius: "72px",
29
+ border: "none",
30
+ backgroundColor: "#0F71FF",
31
+ color: "#fff",
32
+ fontSize: "13px",
33
+ padding: "10px 20px",
34
+ textDecoration: "none"
34
35
  }
35
36
  };
36
37
  var button_default = Button;
@@ -46,7 +47,7 @@ var Container = forwardRef2(
46
47
  }, children);
47
48
  }
48
49
  );
49
- var css = {
50
+ var css2 = {
50
51
  "@desktop": {
51
52
  alignItems: "flex-start",
52
53
  backgroundColor: "rgba(248,203,203,0.38)",
@@ -83,10 +84,12 @@ var WeaverseContextConsumer = WeaverseContext.Consumer;
83
84
  // src/elements/countdown/timer-block.tsx
84
85
  import React3 from "react";
85
86
  function TimerBlock({ value, label }) {
86
- return /* @__PURE__ */ React3.createElement("div", null, /* @__PURE__ */ React3.createElement("div", {
87
- className: "wv-countdown-number"
87
+ return /* @__PURE__ */ React3.createElement("div", {
88
+ className: "wv-cd-block"
89
+ }, /* @__PURE__ */ React3.createElement("div", {
90
+ className: "wv-cd-number"
88
91
  }, value.toString().padStart(2, "0")), label && /* @__PURE__ */ React3.createElement("div", {
89
- className: "wv-countdown-label"
92
+ className: "wv-cd-label"
90
93
  }, label));
91
94
  }
92
95
 
@@ -134,6 +137,7 @@ var Countdown = forwardRef3(
134
137
  );
135
138
  if (!isDesignMode && redirectUrl && remainingTime > 0 && remainingTime < 1e3) {
136
139
  window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
140
+ clearInterval(flag);
137
141
  }
138
142
  setRemaining(remainingTime);
139
143
  }, 1e3);
@@ -151,13 +155,13 @@ var Countdown = forwardRef3(
151
155
  }, /* @__PURE__ */ React4.createElement(TimerBlock, {
152
156
  label: showLabel ? time : "",
153
157
  value: timer[time]
154
- }), time !== "seconds" && /* @__PURE__ */ React4.createElement("span", {
155
- className: `wv-countdown-number ${showColon ? "" : "hidden"}`
156
- }, ":"));
158
+ }), time !== "seconds" && /* @__PURE__ */ React4.createElement("div", null, /* @__PURE__ */ React4.createElement("span", {
159
+ className: `wv-cd-number ${showColon ? "" : "hidden"}`
160
+ }, ":")));
157
161
  }));
158
162
  }
159
163
  );
160
- var css2 = {
164
+ var css3 = {
161
165
  "@desktop": {
162
166
  fontFamily: "Inter",
163
167
  fontSize: 36,
@@ -165,11 +169,12 @@ var css2 = {
165
169
  display: "grid",
166
170
  gridAutoFlow: "column",
167
171
  gap: 10,
168
- "& > div": {
172
+ lineHeight: "initial",
173
+ ".wv-cd-block": {
169
174
  width: 48,
170
175
  textAlign: "center"
171
176
  },
172
- ".wv-countdown-label": {
177
+ ".wv-cd-label": {
173
178
  fontSize: 10
174
179
  },
175
180
  "& > span": {
@@ -183,7 +188,7 @@ var css2 = {
183
188
  Countdown.defaultProps = {
184
189
  timerType: "fixed-time",
185
190
  startTime: Date.now(),
186
- endTime: 1661140528e3,
191
+ endTime: 1666756528e3,
187
192
  periods: 90,
188
193
  redirectUrl: "https://myshop.com",
189
194
  openInNewTab: false,
@@ -193,10 +198,37 @@ Countdown.defaultProps = {
193
198
  var countdown_default = Countdown;
194
199
 
195
200
  // src/elements/image.tsx
196
- import React5, { useContext as useContext2 } from "react";
201
+ import React5 from "react";
202
+ import { isBrowser } from "@weaverse/core";
203
+ var loadUploadCareAdaptiveDelivery = () => {
204
+ if (!window.Blinkloader) {
205
+ console.log("loadUploadCareAdaptiveDelivery");
206
+ (function(src, cb) {
207
+ let s = document.createElement("script");
208
+ s.setAttribute("src", src);
209
+ s.onload = cb;
210
+ (document.head || document.body).appendChild(s);
211
+ })(
212
+ "https://ucarecdn.com/libs/blinkloader/3.x/blinkloader.min.js",
213
+ function() {
214
+ window.Blinkloader.optimize({
215
+ pubkey: "1a22133d1a1bdc089d4c",
216
+ fadeIn: true,
217
+ lazyload: true,
218
+ smartCompression: true,
219
+ responsive: true,
220
+ retina: true,
221
+ webp: true
222
+ });
223
+ }
224
+ );
225
+ }
226
+ };
227
+ if (isBrowser) {
228
+ loadUploadCareAdaptiveDelivery();
229
+ }
197
230
  var Image = React5.forwardRef(
198
231
  (props, ref) => {
199
- let { isDesignMode } = useContext2(WeaverseContext);
200
232
  let {
201
233
  src,
202
234
  alt,
@@ -204,38 +236,41 @@ var Image = React5.forwardRef(
204
236
  objectPosition,
205
237
  onClickAction,
206
238
  openLinkInNewTab,
239
+ linkTo,
207
240
  ...rest
208
241
  } = props;
209
242
  let style = {
210
243
  "--wv-img-object-fit": objectFit,
211
244
  "--wv-img-object-position": objectPosition
212
245
  };
213
- let handleClick = () => {
214
- if (isDesignMode) {
215
- return console.log("Click action:", onClickAction);
216
- }
217
- if (onClickAction) {
218
- console.log("TODO: click action:", onClickAction);
219
- }
220
- };
246
+ let content = /* @__PURE__ */ React5.createElement("img", {
247
+ alt,
248
+ "data-blink-src": src
249
+ });
250
+ if (onClickAction === "open-link" && linkTo) {
251
+ let target = openLinkInNewTab ? "_blank" : "_self";
252
+ content = /* @__PURE__ */ React5.createElement("a", {
253
+ href: linkTo,
254
+ target
255
+ }, content);
256
+ }
221
257
  return /* @__PURE__ */ React5.createElement("div", {
222
258
  ref,
223
259
  ...rest,
224
- style,
225
- onClick: handleClick
226
- }, /* @__PURE__ */ React5.createElement("img", {
227
- alt,
228
- src
229
- }));
260
+ style
261
+ }, content);
230
262
  }
231
263
  );
232
- var css3 = {
264
+ var css4 = {
233
265
  "@desktop": {
234
266
  img: {
235
267
  width: "100%",
236
268
  height: "100%",
237
269
  objectFit: "var(--wv-img-object-fit, cover)",
238
270
  objectPosition: "var(--wv-img-object-position, center)"
271
+ },
272
+ "> [data-blink-src]": {
273
+ visibility: "hidden"
239
274
  }
240
275
  }
241
276
  };
@@ -244,8 +279,9 @@ Image.defaultProps = {
244
279
  alt: "Image alt text",
245
280
  objectFit: "cover",
246
281
  objectPosition: "center",
247
- onClickAction: "open-lightbox",
248
- openLinkInNewTab: false
282
+ onClickAction: "open-link",
283
+ openLinkInNewTab: false,
284
+ linkTo: ""
249
285
  };
250
286
  var image_default = Image;
251
287
 
@@ -269,7 +305,7 @@ var Layout = forwardRef4((props, ref) => {
269
305
  "data-layout-content": true
270
306
  }, children));
271
307
  });
272
- var css4 = {
308
+ var css5 = {
273
309
  "@desktop": {
274
310
  paddingTop: "16px",
275
311
  paddingBottom: "16px",
@@ -318,7 +354,7 @@ var Map = forwardRef5((props, ref) => {
318
354
  style: { pointerEvents: "none" }
319
355
  }));
320
356
  });
321
- var css5 = {};
357
+ var css6 = {};
322
358
  Map.defaultProps = {
323
359
  place: "Hanoi",
324
360
  zoom: 14
@@ -337,7 +373,7 @@ var Text = React8.forwardRef(
337
373
  });
338
374
  }
339
375
  );
340
- var css6 = {
376
+ var css7 = {
341
377
  "@desktop": {
342
378
  padding: "10px",
343
379
  wordBreak: "break-word",
@@ -351,9 +387,9 @@ Text.defaultProps = {
351
387
  var text_default = Text;
352
388
 
353
389
  // src/elements/video.tsx
354
- import React9, { forwardRef as forwardRef7, useContext as useContext3 } from "react";
390
+ import React9, { forwardRef as forwardRef7, useContext as useContext2 } from "react";
355
391
  var Video = forwardRef7((props, ref) => {
356
- let { isDesignMode } = useContext3(WeaverseContext);
392
+ let { isDesignMode } = useContext2(WeaverseContext);
357
393
  let { src, type, controls, poster, autoPlay, loop, muted, ...rest } = props;
358
394
  return /* @__PURE__ */ React9.createElement("div", {
359
395
  ref,
@@ -368,9 +404,12 @@ var Video = forwardRef7((props, ref) => {
368
404
  }, /* @__PURE__ */ React9.createElement("source", {
369
405
  src,
370
406
  type: type || "video/mp4"
407
+ }), /* @__PURE__ */ React9.createElement("source", {
408
+ src,
409
+ type: "video/ogg"
371
410
  }), "Your browser does not support the video tag."));
372
411
  });
373
- var css7 = {
412
+ var css8 = {
374
413
  "@desktop": {
375
414
  video: {
376
415
  height: "100%",
@@ -381,7 +420,7 @@ var css7 = {
381
420
  };
382
421
  Video.defaultProps = {
383
422
  src: "https://youtu.be/wM-NT6hcw48",
384
- poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
423
+ poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
385
424
  loop: false,
386
425
  type: "video/mp4",
387
426
  controls: false,
@@ -465,7 +504,7 @@ var Instagram = forwardRef9(
465
504
  })));
466
505
  }
467
506
  );
468
- var css8 = {
507
+ var css9 = {
469
508
  "@desktop": {
470
509
  ".wv-ig-media-container": {
471
510
  overflow: "hidden",
@@ -519,7 +558,7 @@ var Accordion = forwardRef10(
519
558
  }, children));
520
559
  }
521
560
  );
522
- var css9 = {
561
+ var css10 = {
523
562
  "@desktop": {
524
563
  display: "flex",
525
564
  flexDirection: "column",
@@ -532,10 +571,10 @@ Accordion.defaultProps = {
532
571
  var accordion_default = Accordion;
533
572
 
534
573
  // src/elements/accordion/AccordionWrapper.tsx
535
- import React14, { forwardRef as forwardRef11, useContext as useContext5 } from "react";
574
+ import React14, { forwardRef as forwardRef11, useContext as useContext4 } from "react";
536
575
 
537
576
  // src/elements/accordion/Icon.tsx
538
- import React13, { useContext as useContext4 } from "react";
577
+ import React13, { useContext as useContext3 } from "react";
539
578
  var ICONS = {
540
579
  caret: {
541
580
  animationType: "rotate90",
@@ -592,12 +631,12 @@ var rotateAnimation = {
592
631
  };
593
632
  function Icon(props) {
594
633
  let { name, active = false, style, ...rest } = props;
595
- let { stitchesInstance } = useContext4(WeaverseContext);
596
- const { animationType, css: css16 } = ICONS[name];
634
+ let { stitchesInstance } = useContext3(WeaverseContext);
635
+ const { animationType, css: css17 } = ICONS[name];
597
636
  if (active && animationType === "rotate90") {
598
637
  style = { ...rotateAnimation, ...style };
599
638
  }
600
- let { className } = stitchesInstance.css(css16)();
639
+ let { className } = stitchesInstance.css(css17)();
601
640
  if (active)
602
641
  className += " active";
603
642
  return /* @__PURE__ */ React13.createElement("span", {
@@ -612,7 +651,7 @@ var Icon_default = Icon;
612
651
  // src/elements/accordion/AccordionWrapper.tsx
613
652
  var AccordionWrapper = forwardRef11((props, ref) => {
614
653
  const { ["data-wv-id"]: wvId, name, children, ...rest } = props;
615
- const { iconName, active, setActive } = useContext5(AccordionContext);
654
+ const { iconName, active, setActive } = useContext4(AccordionContext);
616
655
  const isActive = active.includes(wvId);
617
656
  return /* @__PURE__ */ React14.createElement("div", {
618
657
  ref,
@@ -626,7 +665,7 @@ var AccordionWrapper = forwardRef11((props, ref) => {
626
665
  name: iconName
627
666
  })), children);
628
667
  });
629
- var css10 = {
668
+ var css11 = {
630
669
  "@desktop": {
631
670
  maxHeight: "100%",
632
671
  ".wv-acc-icon": {
@@ -677,7 +716,7 @@ var AccordionContent = forwardRef12(
677
716
  }, "Drag and drop an element here."));
678
717
  }
679
718
  );
680
- var css11 = {
719
+ var css12 = {
681
720
  "@desktop": {
682
721
  width: "100%",
683
722
  maxWidth: "var(--grid-size)",
@@ -703,11 +742,11 @@ var AccordionContent_default = AccordionContent;
703
742
  import React17, { createContext as createContext3, forwardRef as forwardRef13, useState as useState4 } from "react";
704
743
 
705
744
  // src/elements/tab/TabHeaderWrapper.tsx
706
- import React16, { useContext as useContext6, useEffect as useEffect3, useState as useState3 } from "react";
745
+ import React16, { useContext as useContext5, useEffect as useEffect3, useState as useState3 } from "react";
707
746
  function TabHeader(props) {
708
747
  const { wvId } = props;
709
- const { active, setActive } = useContext6(TabContext);
710
- const { itemInstances } = useContext6(WeaverseContext);
748
+ const { active, setActive } = useContext5(TabContext);
749
+ const { itemInstances } = useContext5(WeaverseContext);
711
750
  const instance = itemInstances.get(wvId);
712
751
  let [data, setData] = useState3(instance.data);
713
752
  useEffect3(() => {
@@ -720,7 +759,7 @@ function TabHeader(props) {
720
759
  }, data.name);
721
760
  }
722
761
  function TabHeaderWrapper(props) {
723
- const { itemInstances } = useContext6(WeaverseContext);
762
+ const { itemInstances } = useContext5(WeaverseContext);
724
763
  const instance = itemInstances.get(props.wvId);
725
764
  const data = instance.data;
726
765
  const childIds = data.childIds;
@@ -761,7 +800,7 @@ var Tab = forwardRef13((props, ref) => {
761
800
  wvId
762
801
  }), children));
763
802
  });
764
- var css12 = {
803
+ var css13 = {
765
804
  "@desktop": {
766
805
  display: "flex",
767
806
  flexDirection: "column",
@@ -790,10 +829,10 @@ Tab.defaultProps = {
790
829
  var tab_default = Tab;
791
830
 
792
831
  // src/elements/tab/TabContent.tsx
793
- import React18, { forwardRef as forwardRef14, useContext as useContext7 } from "react";
832
+ import React18, { forwardRef as forwardRef14, useContext as useContext6 } from "react";
794
833
  var TabContent = forwardRef14(
795
834
  (props, ref) => {
796
- const { active } = useContext7(TabContext);
835
+ const { active } = useContext6(TabContext);
797
836
  const wvId = props["data-wv-id"];
798
837
  const { rows, columns, gap, rowSize, children, ...rest } = props;
799
838
  let style = {
@@ -814,7 +853,7 @@ var TabContent = forwardRef14(
814
853
  }, "Drag and drop an element here."));
815
854
  }
816
855
  );
817
- var css13 = {
856
+ var css14 = {
818
857
  "@desktop": {
819
858
  width: "100%",
820
859
  maxWidth: "var(--grid-size)",
@@ -835,10 +874,10 @@ TabContent.defaultProps = {
835
874
  var TabContent_default = TabContent;
836
875
 
837
876
  // src/elements/slider/index.tsx
838
- import React19, { forwardRef as forwardRef15, useContext as useContext8 } from "react";
877
+ import React19, { forwardRef as forwardRef15, useContext as useContext7 } from "react";
839
878
  import { Carousel } from "nuka-carousel/lib/carousel";
840
879
  var Slider = forwardRef15((props, ref) => {
841
- const { isDesignMode } = useContext8(WeaverseContext);
880
+ const { isDesignMode } = useContext7(WeaverseContext);
842
881
  const { autoplay, delay, children, ...rest } = props;
843
882
  return /* @__PURE__ */ React19.createElement("div", {
844
883
  ...rest,
@@ -864,7 +903,7 @@ var Slider = forwardRef15((props, ref) => {
864
903
  autoplayInterval: delay * 1e3
865
904
  }, children));
866
905
  });
867
- var css14 = {
906
+ var css15 = {
868
907
  "@desktop": {
869
908
  "& .wv-slider-btn": {
870
909
  borderRadius: "100%",
@@ -904,10 +943,10 @@ Slider.defaultProps = {
904
943
  var slider_default = Slider;
905
944
 
906
945
  // src/elements/slider/SliderContent.tsx
907
- import React20, { forwardRef as forwardRef16, useContext as useContext9 } from "react";
946
+ import React20, { forwardRef as forwardRef16, useContext as useContext8 } from "react";
908
947
  var SliderContent = forwardRef16(
909
948
  (props, ref) => {
910
- const { isDesignMode } = useContext9(WeaverseContext);
949
+ const { isDesignMode } = useContext8(WeaverseContext);
911
950
  const {
912
951
  mediaUrl,
913
952
  targetLink,
@@ -942,7 +981,7 @@ var SliderContent = forwardRef16(
942
981
  }, "Drag and drop an element here."));
943
982
  }
944
983
  );
945
- var css15 = {
984
+ var css16 = {
946
985
  "@desktop": {
947
986
  width: "100%",
948
987
  maxWidth: "var(--grid-size)",
@@ -974,99 +1013,100 @@ var Elements = {
974
1013
  Countdown: {
975
1014
  Component: countdown_default,
976
1015
  type: "countdown",
977
- defaultCss: css2
1016
+ defaultCss: css3
978
1017
  },
979
1018
  Button: {
980
1019
  Component: button_default,
981
- type: "button"
1020
+ type: "button",
1021
+ defaultCss: css
982
1022
  },
983
1023
  Container: {
984
1024
  Component: container_default,
985
1025
  type: "container",
986
- defaultCss: css
1026
+ defaultCss: css2
987
1027
  },
988
1028
  Image: {
989
1029
  Component: image_default,
990
1030
  type: "image",
991
- defaultCss: css3
1031
+ defaultCss: css4
992
1032
  },
993
1033
  Instagram: {
994
1034
  Component: instagram_default,
995
1035
  type: "instagram",
996
- defaultCss: css8
1036
+ defaultCss: css9
997
1037
  },
998
1038
  Layout: {
999
1039
  Component: layout_default,
1000
1040
  type: "layout",
1001
- defaultCss: css4
1041
+ defaultCss: css5
1002
1042
  },
1003
1043
  Map: {
1004
1044
  Component: map_default,
1005
1045
  type: "map",
1006
- defaultCss: css5
1046
+ defaultCss: css6
1007
1047
  },
1008
1048
  Text: {
1009
1049
  Component: text_default,
1010
1050
  type: "text",
1011
- defaultCss: css6
1051
+ defaultCss: css7
1012
1052
  },
1013
1053
  Video: {
1014
1054
  Component: video_default,
1015
1055
  type: "video",
1016
- defaultCss: css7
1056
+ defaultCss: css8
1017
1057
  },
1018
1058
  Accordion: {
1019
1059
  Component: accordion_default,
1020
1060
  type: "accordion",
1021
- defaultCss: css9
1061
+ defaultCss: css10
1022
1062
  },
1023
1063
  AccordionWrapper: {
1024
1064
  Component: AccordionWrapper_default,
1025
1065
  type: "accordion.wrapper",
1026
- defaultCss: css10
1066
+ defaultCss: css11
1027
1067
  },
1028
1068
  AccordionContent: {
1029
1069
  Component: AccordionContent_default,
1030
1070
  type: "accordion.content",
1031
- defaultCss: css11
1071
+ defaultCss: css12
1032
1072
  },
1033
1073
  Tab: {
1034
1074
  Component: tab_default,
1035
1075
  type: "tab",
1036
- defaultCss: css12
1076
+ defaultCss: css13
1037
1077
  },
1038
1078
  TabContent: {
1039
1079
  Component: TabContent_default,
1040
1080
  type: "tab.content",
1041
- defaultCss: css13
1081
+ defaultCss: css14
1042
1082
  },
1043
1083
  Slider: {
1044
1084
  Component: slider_default,
1045
1085
  type: "slider",
1046
- defaultCss: css14
1086
+ defaultCss: css15
1047
1087
  },
1048
1088
  SliderContent: {
1049
1089
  Component: SliderContent_default,
1050
1090
  type: "slider.content",
1051
- defaultCss: css15
1091
+ defaultCss: css16
1052
1092
  }
1053
1093
  };
1054
1094
 
1055
1095
  // src/renderer.tsx
1056
- import { isBrowser } from "@weaverse/core";
1057
- import React21, { useContext as useContext10, useEffect as useEffect4, useRef, useState as useState5 } from "react";
1096
+ import { isBrowser as isBrowser2 } from "@weaverse/core";
1097
+ import React21, { useContext as useContext9, useEffect as useEffect4, useRef, useState as useState5 } from "react";
1058
1098
 
1059
1099
  // src/utils/index.ts
1060
- function shortCssObject(css16) {
1100
+ function shortCssObject(css17) {
1061
1101
  return {
1062
- "@desktop": css16["@desktop"],
1063
- "@mobile": css16["@mobile"]
1102
+ "@desktop": css17["@desktop"],
1103
+ "@mobile": css17["@mobile"]
1064
1104
  };
1065
1105
  }
1066
1106
  var permanentClasses = {};
1067
1107
  function generateItemClass(instance, stitchesInstance) {
1068
1108
  var _a, _b;
1069
- let { css: css16, type, className: cls = "" } = instance.data;
1109
+ let { css: css17, type, className: cls = "" } = instance.data;
1070
1110
  let className = "";
1071
1111
  let permanentClass = "";
1072
1112
  let perCss = (_a = instance.Element) == null ? void 0 : _a.permanentCss;
@@ -1080,8 +1120,8 @@ function generateItemClass(instance, stitchesInstance) {
1080
1120
  }
1081
1121
  }
1082
1122
  className = permanentClass;
1083
- if (css16) {
1084
- let formattedCss = shortCssObject(css16);
1123
+ if (css17) {
1124
+ let formattedCss = shortCssObject(css17);
1085
1125
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
1086
1126
  let { stitchesClass } = instance;
1087
1127
  let otherClass = (((_b = instance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -1117,13 +1157,13 @@ var WeaverseRoot = ({ context }) => {
1117
1157
  }))) : null;
1118
1158
  };
1119
1159
  var ItemComponent = ({ instance }) => {
1120
- let { stitchesInstance, elementInstances } = useContext10(WeaverseContext);
1160
+ let { stitchesInstance, elementInstances } = useContext9(WeaverseContext);
1121
1161
  let [data, setData] = useState5(instance.data);
1122
- let { id, type, childIds = [], css: css16, className, ...rest } = data;
1162
+ let { id, type, childIds = [], css: css17, className, ...rest } = data;
1123
1163
  useEffect4(() => {
1124
1164
  let update = (data2) => setData({ ...data2 });
1125
1165
  instance.subscribe(update);
1126
- if (isBrowser && !instance.ref.current) {
1166
+ if (isBrowser2 && !instance.ref.current) {
1127
1167
  Object.assign(instance.ref, {
1128
1168
  current: document.querySelector(`[data-wv-id="${id}"]`)
1129
1169
  });
@@ -1150,7 +1190,7 @@ var ItemComponent = ({ instance }) => {
1150
1190
  return null;
1151
1191
  };
1152
1192
  var ItemInstance = ({ id }) => {
1153
- let context = useContext10(WeaverseContext);
1193
+ let context = useContext9(WeaverseContext);
1154
1194
  let { itemInstances } = context;
1155
1195
  let instance = itemInstances.get(id);
1156
1196
  if (!instance) {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.13",
2
+ "version": "0.7.15",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -31,7 +31,7 @@
31
31
  "name": "@weaverse/react",
32
32
  "author": "Weaverse Team",
33
33
  "dependencies": {
34
- "@weaverse/core": "0.7.13",
34
+ "@weaverse/core": "0.7.15",
35
35
  "nuka-carousel": "^5.4.0"
36
36
  }
37
37
  }