@weaverse/react 0.7.14 → 0.7.16

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 +88 -585
  2. package/dist/index.mjs +90 -587
  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,
@@ -235,7 +240,6 @@ var countdown_default = Countdown;
235
240
  var import_react5 = __toESM(require("react"));
236
241
  var Image = import_react5.default.forwardRef(
237
242
  (props, ref) => {
238
- let { isDesignMode } = (0, import_react5.useContext)(WeaverseContext);
239
243
  let {
240
244
  src,
241
245
  alt,
@@ -243,38 +247,41 @@ var Image = import_react5.default.forwardRef(
243
247
  objectPosition,
244
248
  onClickAction,
245
249
  openLinkInNewTab,
250
+ linkTo,
246
251
  ...rest
247
252
  } = props;
248
253
  let style = {
249
254
  "--wv-img-object-fit": objectFit,
250
255
  "--wv-img-object-position": objectPosition
251
256
  };
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
- };
257
+ let content = /* @__PURE__ */ import_react5.default.createElement("img", {
258
+ alt,
259
+ "data-blink-src": src
260
+ });
261
+ if (onClickAction === "open-link" && linkTo) {
262
+ let target = openLinkInNewTab ? "_blank" : "_self";
263
+ content = /* @__PURE__ */ import_react5.default.createElement("a", {
264
+ href: linkTo,
265
+ target
266
+ }, content);
267
+ }
260
268
  return /* @__PURE__ */ import_react5.default.createElement("div", {
261
269
  ref,
262
270
  ...rest,
263
- style,
264
- onClick: handleClick
265
- }, /* @__PURE__ */ import_react5.default.createElement("img", {
266
- alt,
267
- src
268
- }));
271
+ style
272
+ }, content);
269
273
  }
270
274
  );
271
- var css3 = {
275
+ var css4 = {
272
276
  "@desktop": {
273
277
  img: {
274
278
  width: "100%",
275
279
  height: "100%",
276
280
  objectFit: "var(--wv-img-object-fit, cover)",
277
281
  objectPosition: "var(--wv-img-object-position, center)"
282
+ },
283
+ "& [data-blink-src]": {
284
+ visibility: "hidden"
278
285
  }
279
286
  }
280
287
  };
@@ -283,8 +290,9 @@ Image.defaultProps = {
283
290
  alt: "Image alt text",
284
291
  objectFit: "cover",
285
292
  objectPosition: "center",
286
- onClickAction: "open-lightbox",
287
- openLinkInNewTab: false
293
+ onClickAction: "open-link",
294
+ openLinkInNewTab: false,
295
+ linkTo: ""
288
296
  };
289
297
  var image_default = Image;
290
298
 
@@ -308,7 +316,7 @@ var Layout = (0, import_react6.forwardRef)((props, ref) => {
308
316
  "data-layout-content": true
309
317
  }, children));
310
318
  });
311
- var css4 = {
319
+ var css5 = {
312
320
  "@desktop": {
313
321
  paddingTop: "16px",
314
322
  paddingBottom: "16px",
@@ -357,7 +365,7 @@ var Map = (0, import_react7.forwardRef)((props, ref) => {
357
365
  style: { pointerEvents: "none" }
358
366
  }));
359
367
  });
360
- var css5 = {};
368
+ var css6 = {};
361
369
  Map.defaultProps = {
362
370
  place: "Hanoi",
363
371
  zoom: 14
@@ -376,7 +384,7 @@ var Text = React8.forwardRef(
376
384
  });
377
385
  }
378
386
  );
379
- var css6 = {
387
+ var css7 = {
380
388
  "@desktop": {
381
389
  padding: "10px",
382
390
  wordBreak: "break-word",
@@ -407,9 +415,12 @@ var Video = (0, import_react8.forwardRef)((props, ref) => {
407
415
  }, /* @__PURE__ */ import_react8.default.createElement("source", {
408
416
  src,
409
417
  type: type || "video/mp4"
418
+ }), /* @__PURE__ */ import_react8.default.createElement("source", {
419
+ src,
420
+ type: "video/ogg"
410
421
  }), "Your browser does not support the video tag."));
411
422
  });
412
- var css7 = {
423
+ var css8 = {
413
424
  "@desktop": {
414
425
  video: {
415
426
  height: "100%",
@@ -420,7 +431,7 @@ var css7 = {
420
431
  };
421
432
  Video.defaultProps = {
422
433
  src: "https://youtu.be/wM-NT6hcw48",
423
- poster: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
434
+ poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
424
435
  loop: false,
425
436
  type: "video/mp4",
426
437
  controls: false,
@@ -504,7 +515,7 @@ var Instagram = (0, import_react10.forwardRef)(
504
515
  })));
505
516
  }
506
517
  );
507
- var css8 = {
518
+ var css9 = {
508
519
  "@desktop": {
509
520
  ".wv-ig-media-container": {
510
521
  overflow: "hidden",
@@ -531,480 +542,6 @@ Instagram.defaultProps = {
531
542
  };
532
543
  var instagram_default = Instagram;
533
544
 
534
- // src/elements/accordion/index.tsx
535
- var import_react11 = __toESM(require("react"));
536
- var AccordionContext = (0, import_react11.createContext)({
537
- iconName: "arrow",
538
- active: [],
539
- setActive: () => {
540
- }
541
- });
542
- var Accordion = (0, import_react11.forwardRef)(
543
- (props, ref) => {
544
- const { iconName, children, ...rest } = props;
545
- const [active, setActive] = (0, import_react11.useState)([]);
546
- const setOpenAccordion = (id) => {
547
- if (active.includes(id)) {
548
- setActive(active.filter((_id) => _id !== id));
549
- } else {
550
- setActive([...active, id]);
551
- }
552
- };
553
- return /* @__PURE__ */ import_react11.default.createElement("div", {
554
- ref,
555
- ...rest
556
- }, /* @__PURE__ */ import_react11.default.createElement(AccordionContext.Provider, {
557
- value: { active, setActive: setOpenAccordion, iconName }
558
- }, children));
559
- }
560
- );
561
- var css9 = {
562
- "@desktop": {
563
- display: "flex",
564
- flexDirection: "column",
565
- gap: 4
566
- }
567
- };
568
- Accordion.defaultProps = {
569
- iconName: "arrow"
570
- };
571
- var accordion_default = Accordion;
572
-
573
- // src/elements/accordion/AccordionWrapper.tsx
574
- var import_react13 = __toESM(require("react"));
575
-
576
- // src/elements/accordion/Icon.tsx
577
- var import_react12 = __toESM(require("react"));
578
- var ICONS = {
579
- caret: {
580
- animationType: "rotate90",
581
- css: {
582
- position: "absolute!important",
583
- left: 5,
584
- top: 2,
585
- width: 0,
586
- height: 0,
587
- borderTop: "6px solid transparent",
588
- borderBottom: "6px solid transparent",
589
- borderLeft: "6px solid #1F2A37"
590
- }
591
- },
592
- arrow: {
593
- animationType: "rotate90",
594
- css: {
595
- border: "solid #1F2A37",
596
- borderWidth: "0 1px 1px 0",
597
- display: "inline-block",
598
- transform: "rotate(-45deg) translate(15%, -15%)",
599
- padding: 4
600
- }
601
- },
602
- plus: {
603
- animationType: "custom",
604
- css: {
605
- display: "inline-block",
606
- top: -6,
607
- width: 15,
608
- height: 1,
609
- backgroundColor: "#1F2A37",
610
- "&:after": {
611
- position: "absolute",
612
- content: "",
613
- top: -7,
614
- left: 7,
615
- width: 1,
616
- height: 15,
617
- backgroundColor: "#1F2A37",
618
- transition: "all 0.3s ease-in-out 0s"
619
- },
620
- "&.active": {
621
- "&:after": {
622
- transform: "rotate(90deg)"
623
- }
624
- }
625
- }
626
- }
627
- };
628
- var rotateAnimation = {
629
- transition: "all 0.3s ease-in-out 0s",
630
- transform: "rotate(90deg)"
631
- };
632
- function Icon(props) {
633
- let { name, active = false, style, ...rest } = props;
634
- let { stitchesInstance } = (0, import_react12.useContext)(WeaverseContext);
635
- const { animationType, css: css16 } = ICONS[name];
636
- if (active && animationType === "rotate90") {
637
- style = { ...rotateAnimation, ...style };
638
- }
639
- let { className } = stitchesInstance.css(css16)();
640
- if (active)
641
- className += " active";
642
- return /* @__PURE__ */ import_react12.default.createElement("span", {
643
- style,
644
- ...rest
645
- }, /* @__PURE__ */ import_react12.default.createElement("i", {
646
- className
647
- }));
648
- }
649
- var Icon_default = Icon;
650
-
651
- // src/elements/accordion/AccordionWrapper.tsx
652
- var AccordionWrapper = (0, import_react13.forwardRef)((props, ref) => {
653
- const { ["data-wv-id"]: wvId, name, children, ...rest } = props;
654
- const { iconName, active, setActive } = (0, import_react13.useContext)(AccordionContext);
655
- const isActive = active.includes(wvId);
656
- return /* @__PURE__ */ import_react13.default.createElement("div", {
657
- ref,
658
- ...rest
659
- }, /* @__PURE__ */ import_react13.default.createElement("div", {
660
- onClick: () => setActive(wvId),
661
- className: `wv-acc-header ${isActive ? "active" : ""}`
662
- }, /* @__PURE__ */ import_react13.default.createElement("span", null, name), /* @__PURE__ */ import_react13.default.createElement(Icon_default, {
663
- className: "wv-acc-icon",
664
- active: isActive,
665
- name: iconName
666
- })), children);
667
- });
668
- var css10 = {
669
- "@desktop": {
670
- maxHeight: "100%",
671
- ".wv-acc-icon": {
672
- position: "absolute",
673
- right: 16,
674
- width: 16,
675
- height: 16,
676
- transition: "all 0.3s ease-in-out 0s"
677
- },
678
- ".wv-acc-header": {
679
- display: "flex",
680
- alignItems: "center",
681
- borderRadius: 4,
682
- padding: 12,
683
- marginBottom: 4,
684
- border: "1px solid #76A9FA",
685
- cursor: "pointer",
686
- '&.active + [data-wv-type="accordion.content"]': {
687
- maxHeight: "var(--max-height, inherit)"
688
- }
689
- }
690
- }
691
- };
692
- AccordionWrapper.defaultProps = {
693
- name: "Accordion item"
694
- };
695
- var AccordionWrapper_default = AccordionWrapper;
696
-
697
- // src/elements/accordion/AccordionContent.tsx
698
- var import_react14 = __toESM(require("react"));
699
- var AccordionContent = (0, import_react14.forwardRef)(
700
- (props, ref) => {
701
- const { rows, columns, gap, rowSize, children, ...rest } = props;
702
- let style = {
703
- "--rows": rows,
704
- "--columns": columns,
705
- "--gap": gap + "px",
706
- "--row-size": rowSize + "px",
707
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
708
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px"
709
- };
710
- return /* @__PURE__ */ import_react14.default.createElement("div", {
711
- ref,
712
- ...rest,
713
- style
714
- }, import_react14.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react14.default.createElement(Placeholder_default, {
715
- element: "Accordion Content"
716
- }, "Drag and drop an element here."));
717
- }
718
- );
719
- var css11 = {
720
- "@desktop": {
721
- width: "100%",
722
- maxWidth: "var(--grid-size)",
723
- display: "grid",
724
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
725
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
726
- gap: "var(--gap)",
727
- overflow: "hidden",
728
- maxHeight: 0,
729
- transition: "all var(--transition-duration, 0.3s) ease-in-out",
730
- borderRadius: 4
731
- }
732
- };
733
- AccordionContent.defaultProps = {
734
- rows: 3,
735
- columns: 12,
736
- gap: 4,
737
- rowSize: 48
738
- };
739
- var AccordionContent_default = AccordionContent;
740
-
741
- // src/elements/tab/index.tsx
742
- var import_react16 = __toESM(require("react"));
743
-
744
- // src/elements/tab/TabHeaderWrapper.tsx
745
- var import_react15 = __toESM(require("react"));
746
- function TabHeader(props) {
747
- const { wvId } = props;
748
- const { active, setActive } = (0, import_react15.useContext)(TabContext);
749
- const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
750
- const instance = itemInstances.get(wvId);
751
- let [data, setData] = (0, import_react15.useState)(instance.data);
752
- (0, import_react15.useEffect)(() => {
753
- let update = (data2) => setData({ ...data2 });
754
- instance.subscribe(update);
755
- }, []);
756
- return /* @__PURE__ */ import_react15.default.createElement("div", {
757
- onClick: () => setActive(wvId),
758
- className: `wv-tab-header${active === wvId ? " active" : ""}`
759
- }, data.name);
760
- }
761
- function TabHeaderWrapper(props) {
762
- const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
763
- const instance = itemInstances.get(props.wvId);
764
- const data = instance.data;
765
- const childIds = data.childIds;
766
- return /* @__PURE__ */ import_react15.default.createElement("div", {
767
- className: "wv-tab-header-wrapper"
768
- }, childIds.map((id) => /* @__PURE__ */ import_react15.default.createElement(TabHeader, {
769
- key: id,
770
- wvId: id
771
- })));
772
- }
773
-
774
- // src/elements/tab/index.tsx
775
- var TabContext = (0, import_react16.createContext)({
776
- active: null,
777
- setActive: () => {
778
- }
779
- });
780
- var Tab = (0, import_react16.forwardRef)((props, ref) => {
781
- var _a, _b, _c;
782
- const wvId = props["data-wv-id"];
783
- const { fullWidthTabHeader, children, ...rest } = props;
784
- const defaultActive = (_c = (_b = (_a = import_react16.default.Children.toArray(children)) == null ? void 0 : _a[0]) == null ? void 0 : _b.props) == null ? void 0 : _c.id;
785
- const [active, setActive] = (0, import_react16.useState)(defaultActive);
786
- const setOpenTab = (id) => {
787
- if (id !== active) {
788
- setActive(id);
789
- }
790
- };
791
- return /* @__PURE__ */ import_react16.default.createElement("div", {
792
- ref,
793
- ...rest,
794
- style: {
795
- "--tab-width": fullWidthTabHeader ? "100%" : "auto"
796
- }
797
- }, /* @__PURE__ */ import_react16.default.createElement(TabContext.Provider, {
798
- value: { active, setActive: setOpenTab }
799
- }, /* @__PURE__ */ import_react16.default.createElement(TabHeaderWrapper, {
800
- wvId
801
- }), children));
802
- });
803
- var css12 = {
804
- "@desktop": {
805
- display: "flex",
806
- flexDirection: "column",
807
- gap: 4,
808
- "& .wv-tab-header-wrapper": {
809
- width: "100%",
810
- display: "flex",
811
- marginBottom: 10
812
- },
813
- "& .wv-tab-header": {
814
- backgroundColor: "#fff",
815
- padding: "15px 24px",
816
- border: "1px solid #E4E7EB",
817
- cursor: "pointer",
818
- textAlign: "center",
819
- width: "var(--tab-width, auto)",
820
- "&.active": {
821
- backgroundColor: "#E4E7EB"
822
- }
823
- }
824
- }
825
- };
826
- Tab.defaultProps = {
827
- fullWidthTabHeader: false
828
- };
829
- var tab_default = Tab;
830
-
831
- // src/elements/tab/TabContent.tsx
832
- var import_react17 = __toESM(require("react"));
833
- var TabContent = (0, import_react17.forwardRef)(
834
- (props, ref) => {
835
- const { active } = (0, import_react17.useContext)(TabContext);
836
- const wvId = props["data-wv-id"];
837
- const { rows, columns, gap, rowSize, children, ...rest } = props;
838
- let style = {
839
- "--rows": rows,
840
- "--columns": columns,
841
- "--gap": gap + "px",
842
- "--row-size": rowSize + "px",
843
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
844
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
845
- "--content-active": active === wvId ? "grid" : "none"
846
- };
847
- return /* @__PURE__ */ import_react17.default.createElement("div", {
848
- ref,
849
- ...rest,
850
- style
851
- }, import_react17.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react17.default.createElement(Placeholder_default, {
852
- element: "Tab Content"
853
- }, "Drag and drop an element here."));
854
- }
855
- );
856
- var css13 = {
857
- "@desktop": {
858
- width: "100%",
859
- maxWidth: "var(--grid-size)",
860
- display: "var(--content-active, none)",
861
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
862
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
863
- gap: "var(--gap)",
864
- borderRadius: 4
865
- }
866
- };
867
- TabContent.defaultProps = {
868
- rows: 3,
869
- columns: 12,
870
- gap: 4,
871
- rowSize: 48,
872
- name: "Tab header"
873
- };
874
- var TabContent_default = TabContent;
875
-
876
- // src/elements/slider/index.tsx
877
- var import_react18 = __toESM(require("react"));
878
- var import_carousel = require("nuka-carousel/lib/carousel");
879
- var Slider = (0, import_react18.forwardRef)((props, ref) => {
880
- const { isDesignMode } = (0, import_react18.useContext)(WeaverseContext);
881
- const { autoplay, delay, children, ...rest } = props;
882
- return /* @__PURE__ */ import_react18.default.createElement("div", {
883
- ...rest,
884
- ref
885
- }, /* @__PURE__ */ import_react18.default.createElement(import_carousel.Carousel, {
886
- dragging: false,
887
- renderCenterLeftControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
888
- className: "wv-slider-btn",
889
- onClick: props2.previousSlide,
890
- disabled: (isDesignMode || !autoplay) && props2.currentSlide === 0
891
- }, /* @__PURE__ */ import_react18.default.createElement("i", {
892
- className: "wv-slider-arrow wv-slider-arrow-left"
893
- })),
894
- renderCenterRightControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
895
- className: "wv-slider-btn",
896
- onClick: props2.nextSlide,
897
- disabled: (isDesignMode || !autoplay) && props2.slideCount === props2.currentSlide
898
- }, /* @__PURE__ */ import_react18.default.createElement("i", {
899
- className: "wv-slider-arrow wv-slider-arrow-right"
900
- })),
901
- wrapAround: !isDesignMode,
902
- autoplay: !isDesignMode && autoplay,
903
- autoplayInterval: delay * 1e3
904
- }, children));
905
- });
906
- var css14 = {
907
- "@desktop": {
908
- "& .wv-slider-btn": {
909
- borderRadius: "100%",
910
- width: 40,
911
- height: 40,
912
- background: "#fff",
913
- border: "none",
914
- cursor: "pointer",
915
- "&[disabled]": {
916
- cursor: "not-allowed"
917
- },
918
- "&:hover .wv-slider-arrow": {
919
- borderColor: "#999"
920
- },
921
- "& .wv-slider-arrow": {
922
- border: "solid black",
923
- borderWidth: "0 1px 1px 0",
924
- display: "inline-block",
925
- padding: 5
926
- },
927
- "& .wv-slider-arrow-right": {
928
- transform: "rotate(-45deg)",
929
- marginRight: 5
930
- },
931
- "& .wv-slider-arrow-left": {
932
- transform: "rotate(135deg)",
933
- marginLeft: 5
934
- }
935
- }
936
- }
937
- };
938
- Slider.defaultProps = {
939
- fullWidth: true,
940
- autoplay: true,
941
- delay: 3
942
- };
943
- var slider_default = Slider;
944
-
945
- // src/elements/slider/SliderContent.tsx
946
- var import_react19 = __toESM(require("react"));
947
- var SliderContent = (0, import_react19.forwardRef)(
948
- (props, ref) => {
949
- const { isDesignMode } = (0, import_react19.useContext)(WeaverseContext);
950
- const {
951
- mediaUrl,
952
- targetLink,
953
- openInNewTab,
954
- rows,
955
- columns,
956
- gap,
957
- rowSize,
958
- children,
959
- ...rest
960
- } = props;
961
- let style = {
962
- "--rows": rows,
963
- "--columns": columns,
964
- "--gap": gap + "px",
965
- "--row-size": rowSize + "px",
966
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
967
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
968
- "--background-url": `url(${mediaUrl}`
969
- };
970
- const handleClick = () => {
971
- if (!isDesignMode && targetLink) {
972
- window.open(targetLink, openInNewTab ? "_blank" : "_self");
973
- }
974
- };
975
- return /* @__PURE__ */ import_react19.default.createElement("div", {
976
- ...rest,
977
- style,
978
- onClick: handleClick
979
- }, import_react19.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react19.default.createElement(Placeholder_default, {
980
- element: "Slider Content"
981
- }, "Drag and drop an element here."));
982
- }
983
- );
984
- var css15 = {
985
- "@desktop": {
986
- width: "100%",
987
- maxWidth: "var(--grid-size)",
988
- display: "grid",
989
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
990
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
991
- gap: "var(--gap)",
992
- borderRadius: 4,
993
- backgroundImage: "var(--background-url, none)"
994
- }
995
- };
996
- SliderContent.defaultProps = {
997
- name: "Slider",
998
- mediaUrl: "",
999
- openInNewTab: false,
1000
- targetLink: "https://myshop.com",
1001
- rows: 4,
1002
- columns: 12,
1003
- gap: 4,
1004
- rowSize: 48
1005
- };
1006
- var SliderContent_default = SliderContent;
1007
-
1008
545
  // src/elements/index.ts
1009
546
  var SharedComponents = {
1010
547
  Placeholder: Placeholder_default
@@ -1013,99 +550,65 @@ var Elements = {
1013
550
  Countdown: {
1014
551
  Component: countdown_default,
1015
552
  type: "countdown",
1016
- defaultCss: css2
553
+ defaultCss: css3
1017
554
  },
1018
555
  Button: {
1019
556
  Component: button_default,
1020
- type: "button"
557
+ type: "button",
558
+ defaultCss: css
1021
559
  },
1022
560
  Container: {
1023
561
  Component: container_default,
1024
562
  type: "container",
1025
- defaultCss: css
563
+ defaultCss: css2
1026
564
  },
1027
565
  Image: {
1028
566
  Component: image_default,
1029
567
  type: "image",
1030
- defaultCss: css3
568
+ defaultCss: css4
1031
569
  },
1032
570
  Instagram: {
1033
571
  Component: instagram_default,
1034
572
  type: "instagram",
1035
- defaultCss: css8
573
+ defaultCss: css9
1036
574
  },
1037
575
  Layout: {
1038
576
  Component: layout_default,
1039
577
  type: "layout",
1040
- defaultCss: css4
578
+ defaultCss: css5
1041
579
  },
1042
580
  Map: {
1043
581
  Component: map_default,
1044
582
  type: "map",
1045
- defaultCss: css5
583
+ defaultCss: css6
1046
584
  },
1047
585
  Text: {
1048
586
  Component: text_default,
1049
587
  type: "text",
1050
- defaultCss: css6
588
+ defaultCss: css7
1051
589
  },
1052
590
  Video: {
1053
591
  Component: video_default,
1054
592
  type: "video",
1055
- defaultCss: css7
1056
- },
1057
- Accordion: {
1058
- Component: accordion_default,
1059
- type: "accordion",
1060
- defaultCss: css9
1061
- },
1062
- AccordionWrapper: {
1063
- Component: AccordionWrapper_default,
1064
- type: "accordion.wrapper",
1065
- defaultCss: css10
1066
- },
1067
- AccordionContent: {
1068
- Component: AccordionContent_default,
1069
- type: "accordion.content",
1070
- defaultCss: css11
1071
- },
1072
- Tab: {
1073
- Component: tab_default,
1074
- type: "tab",
1075
- defaultCss: css12
1076
- },
1077
- TabContent: {
1078
- Component: TabContent_default,
1079
- type: "tab.content",
1080
- defaultCss: css13
1081
- },
1082
- Slider: {
1083
- Component: slider_default,
1084
- type: "slider",
1085
- defaultCss: css14
1086
- },
1087
- SliderContent: {
1088
- Component: SliderContent_default,
1089
- type: "slider.content",
1090
- defaultCss: css15
593
+ defaultCss: css8
1091
594
  }
1092
595
  };
1093
596
 
1094
597
  // src/renderer.tsx
1095
598
  var import_core2 = require("@weaverse/core");
1096
- var import_react20 = __toESM(require("react"));
599
+ var import_react11 = __toESM(require("react"));
1097
600
 
1098
601
  // src/utils/index.ts
1099
- function shortCssObject(css16) {
602
+ function shortCssObject(css10) {
1100
603
  return {
1101
- "@desktop": css16["@desktop"],
1102
- "@mobile": css16["@mobile"]
604
+ "@desktop": css10["@desktop"],
605
+ "@mobile": css10["@mobile"]
1103
606
  };
1104
607
  }
1105
608
  var permanentClasses = {};
1106
609
  function generateItemClass(instance, stitchesInstance) {
1107
610
  var _a, _b;
1108
- let { css: css16, type, className: cls = "" } = instance.data;
611
+ let { css: css10, type, className: cls = "" } = instance.data;
1109
612
  let className = "";
1110
613
  let permanentClass = "";
1111
614
  let perCss = (_a = instance.Element) == null ? void 0 : _a.permanentCss;
@@ -1119,8 +622,8 @@ function generateItemClass(instance, stitchesInstance) {
1119
622
  }
1120
623
  }
1121
624
  className = permanentClass;
1122
- if (css16) {
1123
- let formattedCss = shortCssObject(css16);
625
+ if (css10) {
626
+ let formattedCss = shortCssObject(css10);
1124
627
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
1125
628
  let { stitchesClass } = instance;
1126
629
  let otherClass = (((_b = instance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -1133,10 +636,10 @@ function generateItemClass(instance, stitchesInstance) {
1133
636
  // src/renderer.tsx
1134
637
  var WeaverseRoot = ({ context }) => {
1135
638
  var _a, _b;
1136
- let [, setData] = (0, import_react20.useState)(context.projectData);
1137
- let rootRef = (0, import_react20.useRef)();
639
+ let [, setData] = (0, import_react11.useState)(context.projectData);
640
+ let rootRef = (0, import_react11.useRef)();
1138
641
  let update = () => setData({});
1139
- (0, import_react20.useEffect)(() => {
642
+ (0, import_react11.useEffect)(() => {
1140
643
  context.subscribe(update);
1141
644
  context.contentRootElement = rootRef.current;
1142
645
  return () => {
@@ -1145,21 +648,21 @@ var WeaverseRoot = ({ context }) => {
1145
648
  }, []);
1146
649
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
1147
650
  let themeClass = context.stitchesInstance.theme.className;
1148
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react20.default.createElement("div", {
651
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react11.default.createElement("div", {
1149
652
  className: `weaverse-content-root ${themeClass}`,
1150
653
  ...eventHandlers,
1151
654
  ref: rootRef
1152
- }, /* @__PURE__ */ import_react20.default.createElement(WeaverseContextProvider, {
655
+ }, /* @__PURE__ */ import_react11.default.createElement(WeaverseContextProvider, {
1153
656
  value: context
1154
- }, /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
657
+ }, /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
1155
658
  id: context.projectData.rootId
1156
659
  }))) : null;
1157
660
  };
1158
661
  var ItemComponent = ({ instance }) => {
1159
- let { stitchesInstance, elementInstances } = (0, import_react20.useContext)(WeaverseContext);
1160
- let [data, setData] = (0, import_react20.useState)(instance.data);
1161
- let { id, type, childIds = [], css: css16, className, ...rest } = data;
1162
- (0, import_react20.useEffect)(() => {
662
+ let { stitchesInstance, elementInstances } = (0, import_react11.useContext)(WeaverseContext);
663
+ let [data, setData] = (0, import_react11.useState)(instance.data);
664
+ let { id, type, childIds = [], css: css10, className, ...rest } = data;
665
+ (0, import_react11.useEffect)(() => {
1163
666
  let update = (data2) => setData({ ...data2 });
1164
667
  instance.subscribe(update);
1165
668
  if (import_core2.isBrowser && !instance.ref.current) {
@@ -1175,13 +678,13 @@ var ItemComponent = ({ instance }) => {
1175
678
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1176
679
  rest.ref = instance.ref;
1177
680
  }
1178
- return /* @__PURE__ */ import_react20.default.createElement(Component, {
681
+ return /* @__PURE__ */ import_react11.default.createElement(Component, {
1179
682
  key: id,
1180
683
  "data-wv-type": type,
1181
684
  "data-wv-id": id,
1182
685
  className: generateItemClass(instance, stitchesInstance),
1183
686
  ...rest
1184
- }, childIds.map((id2) => /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
687
+ }, childIds.map((id2) => /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
1185
688
  key: id2,
1186
689
  id: id2
1187
690
  })));
@@ -1189,15 +692,15 @@ var ItemComponent = ({ instance }) => {
1189
692
  return null;
1190
693
  };
1191
694
  var ItemInstance = ({ id }) => {
1192
- let context = (0, import_react20.useContext)(WeaverseContext);
695
+ let context = (0, import_react11.useContext)(WeaverseContext);
1193
696
  let { itemInstances } = context;
1194
697
  let instance = itemInstances.get(id);
1195
698
  if (!instance) {
1196
- return /* @__PURE__ */ import_react20.default.createElement("div", {
699
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
1197
700
  style: { display: "none" }
1198
701
  }, "Item instance ", id, " not found");
1199
702
  }
1200
- return /* @__PURE__ */ import_react20.default.createElement(ItemComponent, {
703
+ return /* @__PURE__ */ import_react11.default.createElement(ItemComponent, {
1201
704
  instance
1202
705
  });
1203
706
  };