@weaverse/react 0.7.3 → 0.7.7

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.
package/dist/index.js CHANGED
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(src_exports);
37
37
 
38
38
  // src/context.ts
39
39
  var import_core = require("@weaverse/core");
40
- var import_react18 = require("react");
40
+ var import_react20 = require("react");
41
41
 
42
42
  // src/elements/button.tsx
43
43
  var React = __toESM(require("react"));
@@ -257,7 +257,7 @@ var Image = import_react4.default.forwardRef(
257
257
  }
258
258
  );
259
259
  Image.defaultProps = {
260
- src: "https://ucarecdn.com/1cdc9d39-ca62-492e-8ec7-f1a86b241a90/",
260
+ src: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/",
261
261
  alt: "Image alt text",
262
262
  objectFit: "cover",
263
263
  objectPosition: "center",
@@ -427,20 +427,9 @@ var import_react8 = __toESM(require("react"));
427
427
  var Placeholder = (0, import_react8.forwardRef)(
428
428
  (props, ref) => {
429
429
  let { element, children, ...rest } = props;
430
- let style = {
431
- position: "absolute",
432
- height: "100%",
433
- width: "100%",
434
- display: "flex",
435
- flexDirection: "column",
436
- alignItems: "center",
437
- justifyContent: "center",
438
- color: "#374151",
439
- pointerEvents: "none",
440
- zIndex: 1
441
- };
442
430
  return /* @__PURE__ */ import_react8.default.createElement("div", {
443
- style,
431
+ "data-wv-type": "placeholder",
432
+ style: { display: "none" },
444
433
  ref,
445
434
  ...rest
446
435
  }, /* @__PURE__ */ import_react8.default.createElement("div", {
@@ -535,108 +524,190 @@ var instagram_default = Instagram;
535
524
  // src/elements/accordion/index.tsx
536
525
  var import_react10 = __toESM(require("react"));
537
526
  var AccordionContext = (0, import_react10.createContext)({
538
- active: null,
527
+ iconName: "arrow",
528
+ active: [],
539
529
  setActive: () => {
540
530
  }
541
531
  });
542
532
  var Accordion = (0, import_react10.forwardRef)(
543
533
  (props, ref) => {
544
- const { items, children, ...rest } = props;
545
- const [active, setActive] = (0, import_react10.useState)(null);
534
+ const { iconName, children, ...rest } = props;
535
+ const [active, setActive] = (0, import_react10.useState)([]);
546
536
  const setOpenAccordion = (id) => {
547
- if (id === active) {
548
- setActive(null);
537
+ if (active.includes(id)) {
538
+ setActive(active.filter((_id) => _id !== id));
549
539
  } else {
550
- setActive(id);
540
+ setActive([...active, id]);
551
541
  }
552
542
  };
553
543
  return /* @__PURE__ */ import_react10.default.createElement("div", {
554
544
  ref,
555
545
  ...rest
556
546
  }, /* @__PURE__ */ import_react10.default.createElement(AccordionContext.Provider, {
557
- value: { active, setActive: setOpenAccordion }
547
+ value: { active, setActive: setOpenAccordion, iconName }
558
548
  }, children));
559
549
  }
560
550
  );
561
551
  Accordion.defaultProps = {
562
- items: [
563
- {
564
- id: 1,
565
- headerText: "Header 1",
566
- childrenId: true
567
- },
568
- {
569
- id: 2,
570
- headerText: "Header 2"
571
- }
572
- ],
552
+ iconName: "arrow",
573
553
  css: {
574
554
  "@desktop": {
575
555
  display: "flex",
576
556
  flexDirection: "column",
577
- gap: 4,
578
- ".wv-accordion-header": {
579
- borderRadius: 4,
580
- padding: 12,
581
- marginBottom: 4,
582
- border: "1px solid #76A9FA",
583
- "&.active": {
584
- color: "blue"
585
- },
586
- '&.active + [data-wv-type="accordion.content"]': {
587
- maxHeight: "var(--max-height, inherit)"
588
- }
589
- }
557
+ gap: 4
590
558
  }
591
559
  }
592
560
  };
593
561
  var accordion_default = Accordion;
594
562
 
595
563
  // src/elements/accordion/AccordionWrapper.tsx
564
+ var import_react12 = __toESM(require("react"));
565
+
566
+ // src/elements/accordion/Icon.tsx
596
567
  var import_react11 = __toESM(require("react"));
597
- var AccordionWrapper = (0, import_react11.forwardRef)((props, ref) => {
598
- const { ["data-wv-id"]: wvId, headerText, children, ...rest } = props;
599
- const { active, setActive } = (0, import_react11.useContext)(AccordionContext);
600
- return /* @__PURE__ */ import_react11.default.createElement("div", {
568
+ var ICONS = {
569
+ caret: {
570
+ animationType: "rotate90",
571
+ css: {
572
+ position: "absolute!important",
573
+ left: 5,
574
+ top: 2,
575
+ width: 0,
576
+ height: 0,
577
+ borderTop: "6px solid transparent",
578
+ borderBottom: "6px solid transparent",
579
+ borderLeft: "6px solid #1F2A37"
580
+ }
581
+ },
582
+ arrow: {
583
+ animationType: "rotate90",
584
+ css: {
585
+ border: "solid #1F2A37",
586
+ borderWidth: "0 1px 1px 0",
587
+ display: "inline-block",
588
+ transform: "rotate(-45deg) translate(15%, -15%)",
589
+ padding: 4
590
+ }
591
+ },
592
+ plus: {
593
+ animationType: "custom",
594
+ css: {
595
+ display: "inline-block",
596
+ top: -6,
597
+ width: 15,
598
+ height: 1,
599
+ backgroundColor: "#1F2A37",
600
+ "&:after": {
601
+ position: "absolute",
602
+ content: "",
603
+ top: -7,
604
+ left: 7,
605
+ width: 1,
606
+ height: 15,
607
+ backgroundColor: "#1F2A37",
608
+ transition: "all 0.3s ease-in-out 0s"
609
+ },
610
+ "&.active": {
611
+ "&:after": {
612
+ transform: "rotate(90deg)"
613
+ }
614
+ }
615
+ }
616
+ }
617
+ };
618
+ var rotateAnimation = {
619
+ transition: "all 0.3s ease-in-out 0s",
620
+ transform: "rotate(90deg)"
621
+ };
622
+ function Icon(props) {
623
+ let { name, active = false, style, ...rest } = props;
624
+ let { stitchesInstance } = (0, import_react11.useContext)(WeaverseContext);
625
+ const { animationType, css } = ICONS[name];
626
+ if (active && animationType === "rotate90") {
627
+ style = { ...rotateAnimation, ...style };
628
+ }
629
+ let { className } = stitchesInstance.css(css)();
630
+ if (active)
631
+ className += " active";
632
+ return /* @__PURE__ */ import_react11.default.createElement("span", {
633
+ style,
634
+ ...rest
635
+ }, /* @__PURE__ */ import_react11.default.createElement("i", {
636
+ className
637
+ }));
638
+ }
639
+ var Icon_default = Icon;
640
+
641
+ // src/elements/accordion/AccordionWrapper.tsx
642
+ var AccordionWrapper = (0, import_react12.forwardRef)((props, ref) => {
643
+ const { ["data-wv-id"]: wvId, name, children, ...rest } = props;
644
+ const { iconName, active, setActive } = (0, import_react12.useContext)(AccordionContext);
645
+ const isActive = active.includes(wvId);
646
+ return /* @__PURE__ */ import_react12.default.createElement("div", {
601
647
  ref,
602
648
  ...rest
603
- }, /* @__PURE__ */ import_react11.default.createElement("div", {
649
+ }, /* @__PURE__ */ import_react12.default.createElement("div", {
604
650
  onClick: () => setActive(wvId),
605
- className: `wv-accordion-header ${active === wvId ? "active" : ""}`
606
- }, headerText), children);
651
+ className: `wv-acc-header ${isActive ? "active" : ""}`
652
+ }, /* @__PURE__ */ import_react12.default.createElement("span", null, name), /* @__PURE__ */ import_react12.default.createElement(Icon_default, {
653
+ className: "wv-acc-icon",
654
+ active: isActive,
655
+ name: iconName
656
+ })), children);
607
657
  });
608
658
  AccordionWrapper.defaultProps = {
609
- headerText: "Header text",
659
+ name: "Accordion item",
610
660
  css: {
611
661
  "@desktop": {
612
- maxHeight: "100%"
662
+ maxHeight: "100%",
663
+ ".wv-acc-icon": {
664
+ position: "absolute",
665
+ right: 16,
666
+ width: 16,
667
+ height: 16,
668
+ transition: "all 0.3s ease-in-out 0s"
669
+ },
670
+ ".wv-acc-header": {
671
+ display: "flex",
672
+ alignItems: "center",
673
+ borderRadius: 4,
674
+ padding: 12,
675
+ marginBottom: 4,
676
+ border: "1px solid #76A9FA",
677
+ cursor: "pointer",
678
+ '&.active + [data-wv-type="accordion.content"]': {
679
+ maxHeight: "var(--max-height, inherit)"
680
+ }
681
+ }
613
682
  }
614
683
  }
615
684
  };
616
685
  var AccordionWrapper_default = AccordionWrapper;
617
686
 
618
687
  // src/elements/accordion/AccordionContent.tsx
619
- var import_react12 = __toESM(require("react"));
620
- var AccordionContent = (0, import_react12.forwardRef)((props, ref) => {
621
- const { rows, columns, gap, rowSize, children, ...rest } = props;
622
- let style = {
623
- "--rows": rows,
624
- "--columns": columns,
625
- "--gap": gap + "px",
626
- "--row-size": rowSize + "px",
627
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
628
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px"
629
- };
630
- return /* @__PURE__ */ import_react12.default.createElement("div", {
631
- ref,
632
- ...rest,
633
- style
634
- }, import_react12.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react12.default.createElement(Placeholder_default, {
635
- element: "Accordion"
636
- }, "Item Content"));
637
- });
688
+ var import_react13 = __toESM(require("react"));
689
+ var AccordionContent = (0, import_react13.forwardRef)(
690
+ (props, ref) => {
691
+ const { rows, columns, gap, rowSize, children, ...rest } = props;
692
+ let style = {
693
+ "--rows": rows,
694
+ "--columns": columns,
695
+ "--gap": gap + "px",
696
+ "--row-size": rowSize + "px",
697
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
698
+ "--max-height": rows * rowSize + gap * (rowSize - 1) + "px"
699
+ };
700
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
701
+ ref,
702
+ ...rest,
703
+ style
704
+ }, import_react13.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react13.default.createElement(Placeholder_default, {
705
+ element: "Accordion Content"
706
+ }, "Please drag and drop an element here"));
707
+ }
708
+ );
638
709
  AccordionContent.defaultProps = {
639
- rows: 2,
710
+ rows: 3,
640
711
  columns: 12,
641
712
  gap: 4,
642
713
  rowSize: 48,
@@ -658,96 +729,88 @@ AccordionContent.defaultProps = {
658
729
  var AccordionContent_default = AccordionContent;
659
730
 
660
731
  // src/elements/tab/index.tsx
661
- var import_react14 = __toESM(require("react"));
732
+ var import_react15 = __toESM(require("react"));
662
733
 
663
734
  // src/elements/tab/TabHeaderWrapper.tsx
664
- var import_react13 = __toESM(require("react"));
735
+ var import_react14 = __toESM(require("react"));
665
736
  function TabHeader(props) {
666
737
  const { wvId } = props;
667
- const { active, setActive } = (0, import_react13.useContext)(TabContext);
668
- const { itemInstances } = (0, import_react13.useContext)(WeaverseContext);
738
+ const { active, setActive } = (0, import_react14.useContext)(TabContext);
739
+ const { itemInstances } = (0, import_react14.useContext)(WeaverseContext);
669
740
  const instance = itemInstances.get(wvId);
670
- let [data, setData] = (0, import_react13.useState)(instance.data);
671
- (0, import_react13.useEffect)(() => {
741
+ let [data, setData] = (0, import_react14.useState)(instance.data);
742
+ (0, import_react14.useEffect)(() => {
672
743
  let update = (data2) => setData({ ...data2 });
673
744
  instance.subscribe(update);
674
745
  }, []);
675
- const text = data.headerText;
676
- return /* @__PURE__ */ import_react13.default.createElement("div", {
746
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
677
747
  onClick: () => setActive(wvId),
678
748
  className: `wv-tab-header${active === wvId ? " active" : ""}`
679
- }, text);
749
+ }, data.name);
680
750
  }
681
751
  function TabHeaderWrapper(props) {
682
- const { itemInstances } = (0, import_react13.useContext)(WeaverseContext);
752
+ const { itemInstances } = (0, import_react14.useContext)(WeaverseContext);
683
753
  const instance = itemInstances.get(props.wvId);
684
754
  const data = instance.data;
685
755
  const childIds = data.childIds;
686
- return /* @__PURE__ */ import_react13.default.createElement("div", {
687
- className: "wv-tab-headerWrapper"
688
- }, childIds.map((id) => /* @__PURE__ */ import_react13.default.createElement(TabHeader, {
756
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
757
+ className: "wv-tab-header-wrapper"
758
+ }, childIds.map((id) => /* @__PURE__ */ import_react14.default.createElement(TabHeader, {
689
759
  key: id,
690
760
  wvId: id
691
761
  })));
692
762
  }
693
763
 
694
764
  // src/elements/tab/index.tsx
695
- var TabContext = (0, import_react14.createContext)({
765
+ var TabContext = (0, import_react15.createContext)({
696
766
  active: null,
697
767
  setActive: () => {
698
768
  }
699
769
  });
700
- var Tab = (0, import_react14.forwardRef)((props, ref) => {
770
+ var Tab = (0, import_react15.forwardRef)((props, ref) => {
701
771
  var _a, _b, _c;
702
772
  const wvId = props["data-wv-id"];
703
- const { items, children, ...rest } = props;
704
- const defaultActive = (_c = (_b = (_a = import_react14.default.Children.toArray(children)) == null ? void 0 : _a[0]) == null ? void 0 : _b.props) == null ? void 0 : _c.id;
705
- const [active, setActive] = (0, import_react14.useState)(defaultActive);
773
+ const { fullWidthTabHeader, children, ...rest } = props;
774
+ const defaultActive = (_c = (_b = (_a = import_react15.default.Children.toArray(children)) == null ? void 0 : _a[0]) == null ? void 0 : _b.props) == null ? void 0 : _c.id;
775
+ const [active, setActive] = (0, import_react15.useState)(defaultActive);
706
776
  const setOpenTab = (id) => {
707
- if (id === active) {
708
- setActive(null);
709
- } else {
777
+ if (id !== active) {
710
778
  setActive(id);
711
779
  }
712
780
  };
713
- return /* @__PURE__ */ import_react14.default.createElement("div", {
781
+ return /* @__PURE__ */ import_react15.default.createElement("div", {
714
782
  ref,
715
- ...rest
716
- }, /* @__PURE__ */ import_react14.default.createElement(TabContext.Provider, {
783
+ ...rest,
784
+ style: {
785
+ "--tab-width": fullWidthTabHeader ? "100%" : "auto"
786
+ }
787
+ }, /* @__PURE__ */ import_react15.default.createElement(TabContext.Provider, {
717
788
  value: { active, setActive: setOpenTab }
718
- }, /* @__PURE__ */ import_react14.default.createElement(TabHeaderWrapper, {
789
+ }, /* @__PURE__ */ import_react15.default.createElement(TabHeaderWrapper, {
719
790
  wvId
720
791
  }), children));
721
792
  });
722
793
  Tab.defaultProps = {
723
- items: [
724
- {
725
- headerText: "Header 1"
726
- },
727
- {
728
- headerText: "Header 2"
729
- },
730
- {
731
- headerText: "Header 2"
732
- }
733
- ],
794
+ fullWidthTabHeader: false,
734
795
  css: {
735
796
  "@desktop": {
736
797
  display: "flex",
737
798
  flexDirection: "column",
738
799
  gap: 4,
739
- "& .wv-tab-headerWrapper": {
800
+ "& .wv-tab-header-wrapper": {
740
801
  width: "100%",
741
802
  display: "flex",
742
803
  marginBottom: 10
743
804
  },
744
805
  "& .wv-tab-header": {
745
- backgroundColor: "#f0f2f3",
746
- padding: "10px 16px",
806
+ backgroundColor: "#fff",
807
+ padding: "15px 24px",
808
+ border: "1px solid #E4E7EB",
747
809
  cursor: "pointer",
810
+ textAlign: "center",
811
+ width: "var(--tab-width, auto)",
748
812
  "&.active": {
749
- backgroundColor: "#0F71FF",
750
- color: "#fff"
813
+ backgroundColor: "#E4E7EB"
751
814
  }
752
815
  }
753
816
  }
@@ -756,10 +819,10 @@ Tab.defaultProps = {
756
819
  var tab_default = Tab;
757
820
 
758
821
  // src/elements/tab/TabContent.tsx
759
- var import_react15 = __toESM(require("react"));
760
- var TabContent = (0, import_react15.forwardRef)(
822
+ var import_react16 = __toESM(require("react"));
823
+ var TabContent = (0, import_react16.forwardRef)(
761
824
  (props, ref) => {
762
- const { active } = (0, import_react15.useContext)(TabContext);
825
+ const { active } = (0, import_react16.useContext)(TabContext);
763
826
  const wvId = props["data-wv-id"];
764
827
  const { rows, columns, gap, rowSize, children, ...rest } = props;
765
828
  let style = {
@@ -771,20 +834,21 @@ var TabContent = (0, import_react15.forwardRef)(
771
834
  "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
772
835
  "--content-active": active === wvId ? "grid" : "none"
773
836
  };
774
- return /* @__PURE__ */ import_react15.default.createElement("div", {
837
+ return /* @__PURE__ */ import_react16.default.createElement("div", {
775
838
  ref,
776
839
  ...rest,
777
840
  style
778
- }, import_react15.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react15.default.createElement(Placeholder_default, {
779
- element: "Tab"
780
- }, "Item Content"));
841
+ }, import_react16.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react16.default.createElement(Placeholder_default, {
842
+ element: "Tab Content"
843
+ }, "Please drag and drop an element here"));
781
844
  }
782
845
  );
783
846
  TabContent.defaultProps = {
784
- rows: 2,
847
+ rows: 3,
785
848
  columns: 12,
786
849
  gap: 4,
787
850
  rowSize: 48,
851
+ name: "Tab header",
788
852
  css: {
789
853
  "@desktop": {
790
854
  width: "100%",
@@ -800,47 +864,91 @@ TabContent.defaultProps = {
800
864
  var TabContent_default = TabContent;
801
865
 
802
866
  // src/elements/slider/index.tsx
803
- var import_react16 = __toESM(require("react"));
804
- var Carousel = __toESM(require("nuka-carousel"));
805
- var SliderContext = (0, import_react16.createContext)({
806
- active: null,
807
- setActive: () => {
808
- }
809
- });
810
- var Slider = (0, import_react16.forwardRef)((props, ref) => {
811
- var _a, _b, _c;
812
- const { children, ...rest } = props;
813
- 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;
814
- const [active, setActive] = (0, import_react16.useState)(defaultActive);
815
- return /* @__PURE__ */ import_react16.default.createElement("div", {
867
+ var import_react17 = __toESM(require("react"));
868
+ var import_nuka_carousel = __toESM(require("nuka-carousel"));
869
+ var Carousel = import_nuka_carousel.default.default;
870
+ var Slider = (0, import_react17.forwardRef)((props, ref) => {
871
+ const { isDesignMode } = (0, import_react17.useContext)(WeaverseContext);
872
+ const { autoplay, delay, children, ...rest } = props;
873
+ return /* @__PURE__ */ import_react17.default.createElement("div", {
816
874
  ...rest,
817
875
  ref
818
- }, /* @__PURE__ */ import_react16.default.createElement(SliderContext.Provider, {
819
- value: { active, setActive }
820
- }, children), /* @__PURE__ */ import_react16.default.createElement(Carousel.default, null, /* @__PURE__ */ import_react16.default.createElement("div", {
821
- className: "slide"
822
- }, "Hi"), /* @__PURE__ */ import_react16.default.createElement("div", {
823
- className: "slide"
824
- }, "Hieee"), /* @__PURE__ */ import_react16.default.createElement("div", {
825
- className: "slide"
826
- }, "Hixxx"), /* @__PURE__ */ import_react16.default.createElement("div", {
827
- className: "slide"
828
- }, "Hi3")));
876
+ }, /* @__PURE__ */ import_react17.default.createElement(Carousel, {
877
+ dragging: false,
878
+ renderCenterLeftControls: (props2) => /* @__PURE__ */ import_react17.default.createElement("button", {
879
+ className: "wv-slider-btn",
880
+ onClick: props2.previousSlide,
881
+ disabled: (isDesignMode || !autoplay) && props2.currentSlide === 0
882
+ }, /* @__PURE__ */ import_react17.default.createElement("i", {
883
+ className: "wv-slider-arrow wv-slider-arrow-left"
884
+ })),
885
+ renderCenterRightControls: (props2) => /* @__PURE__ */ import_react17.default.createElement("button", {
886
+ className: "wv-slider-btn",
887
+ onClick: props2.nextSlide,
888
+ disabled: (isDesignMode || !autoplay) && props2.slideCount === props2.currentSlide
889
+ }, /* @__PURE__ */ import_react17.default.createElement("i", {
890
+ className: "wv-slider-arrow wv-slider-arrow-right"
891
+ })),
892
+ wrapAround: !isDesignMode,
893
+ autoplay: !isDesignMode && autoplay,
894
+ autoplayInterval: delay * 1e3
895
+ }, children));
829
896
  });
830
897
  Slider.defaultProps = {
898
+ fullWidth: true,
899
+ autoplay: true,
900
+ delay: 3,
831
901
  css: {
832
- "@desktop": {}
902
+ "@desktop": {
903
+ "& .wv-slider-btn": {
904
+ borderRadius: "100%",
905
+ width: 40,
906
+ height: 40,
907
+ background: "#fff",
908
+ border: "none",
909
+ cursor: "pointer",
910
+ "&[disabled]": {
911
+ cursor: "not-allowed"
912
+ },
913
+ "&:hover .wv-slider-arrow": {
914
+ borderColor: "#999"
915
+ },
916
+ "& .wv-slider-arrow": {
917
+ border: "solid black",
918
+ borderWidth: "0 1px 1px 0",
919
+ display: "inline-block",
920
+ padding: 5
921
+ },
922
+ "& .wv-slider-arrow-right": {
923
+ transform: "rotate(-45deg)",
924
+ marginRight: 5
925
+ },
926
+ "& .wv-slider-arrow-left": {
927
+ transform: "rotate(135deg)",
928
+ marginLeft: 5
929
+ }
930
+ }
931
+ }
833
932
  }
834
933
  };
835
934
  var slider_default = Slider;
836
935
 
837
936
  // src/elements/slider/SliderContent.tsx
838
- var import_react17 = __toESM(require("react"));
839
- var SliderContent = (0, import_react17.forwardRef)(
937
+ var import_react18 = __toESM(require("react"));
938
+ var SliderContent = (0, import_react18.forwardRef)(
840
939
  (props, ref) => {
841
- const { active } = (0, import_react17.useContext)(SliderContext);
842
- const wvId = props["data-wv-id"];
843
- const { rows, columns, gap, rowSize, children, ...rest } = props;
940
+ const { isDesignMode } = (0, import_react18.useContext)(WeaverseContext);
941
+ const {
942
+ mediaUrl,
943
+ targetLink,
944
+ openInNewTab,
945
+ rows,
946
+ columns,
947
+ gap,
948
+ rowSize,
949
+ children,
950
+ ...rest
951
+ } = props;
844
952
  let style = {
845
953
  "--rows": rows,
846
954
  "--columns": columns,
@@ -848,19 +956,28 @@ var SliderContent = (0, import_react17.forwardRef)(
848
956
  "--row-size": rowSize + "px",
849
957
  "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
850
958
  "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
851
- "--content-active": active === wvId ? "grid" : "none"
959
+ "--background-url": `url(${mediaUrl}`
852
960
  };
853
- return /* @__PURE__ */ import_react17.default.createElement("div", {
854
- ref,
961
+ const handleClick = () => {
962
+ if (!isDesignMode && targetLink) {
963
+ window.open(targetLink, openInNewTab ? "_blank" : "_self");
964
+ }
965
+ };
966
+ return /* @__PURE__ */ import_react18.default.createElement("div", {
855
967
  ...rest,
856
- style
857
- }, import_react17.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react17.default.createElement(Placeholder_default, {
858
- element: "Slider"
859
- }, "Slider Content"));
968
+ style,
969
+ onClick: handleClick
970
+ }, import_react18.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react18.default.createElement(Placeholder_default, {
971
+ element: "Slider Content"
972
+ }, "Please drag and drop an element here"));
860
973
  }
861
974
  );
862
975
  SliderContent.defaultProps = {
863
- rows: 2,
976
+ name: "Slider",
977
+ mediaUrl: "",
978
+ openInNewTab: false,
979
+ targetLink: "https://myshop.com",
980
+ rows: 4,
864
981
  columns: 12,
865
982
  gap: 4,
866
983
  rowSize: 48,
@@ -868,18 +985,56 @@ SliderContent.defaultProps = {
868
985
  "@desktop": {
869
986
  width: "100%",
870
987
  maxWidth: "var(--grid-size)",
871
- display: "var(--content-active, none)",
988
+ display: "grid",
872
989
  gridTemplateRows: "repeat(var(--rows), var(--row-size))",
873
990
  gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
874
991
  gap: "var(--gap)",
875
- borderRadius: 4
992
+ borderRadius: 4,
993
+ backgroundImage: "var(--background-url, none)"
876
994
  }
877
995
  }
878
996
  };
879
997
  var SliderContent_default = SliderContent;
880
998
 
999
+ // src/elements/custom-html.tsx
1000
+ var import_react19 = __toESM(require("react"));
1001
+ var CustomHTML = (0, import_react19.forwardRef)(
1002
+ (props, ref) => {
1003
+ const { content, children, ...rest } = props;
1004
+ const { isDesignMode } = (0, import_react19.useContext)(WeaverseContext);
1005
+ const style = {
1006
+ "--pointer-events": isDesignMode ? "none" : "auto"
1007
+ };
1008
+ if (!content)
1009
+ return /* @__PURE__ */ import_react19.default.createElement("div", {
1010
+ ref,
1011
+ ...rest
1012
+ }, /* @__PURE__ */ import_react19.default.createElement(Placeholder_default, {
1013
+ element: "Custom HTML"
1014
+ }, "Please add your custom HTML codes."));
1015
+ return /* @__PURE__ */ import_react19.default.createElement("div", {
1016
+ ref,
1017
+ ...rest,
1018
+ style,
1019
+ dangerouslySetInnerHTML: { __html: content }
1020
+ });
1021
+ }
1022
+ );
1023
+ CustomHTML.defaultProps = {
1024
+ content: "",
1025
+ type: "custom.html",
1026
+ css: {
1027
+ "@desktop": {
1028
+ "& > *": {
1029
+ pointerEvents: "var(--pointer-events, unset)"
1030
+ }
1031
+ }
1032
+ }
1033
+ };
1034
+ var custom_html_default = CustomHTML;
1035
+
881
1036
  // src/elements/index.ts
882
- var elements = {
1037
+ var Elements = {
883
1038
  Countdown: {
884
1039
  Component: countdown_default,
885
1040
  type: "countdown"
@@ -943,33 +1098,36 @@ var elements = {
943
1098
  SliderContent: {
944
1099
  Component: SliderContent_default,
945
1100
  type: "slider.content"
1101
+ },
1102
+ CustomHTML: {
1103
+ Component: custom_html_default,
1104
+ type: "custom.html"
946
1105
  }
947
1106
  };
948
- var elements_default = elements;
949
1107
 
950
1108
  // src/context.ts
951
1109
  var createRootContext = (configs) => {
952
1110
  let rootContext = new import_core.Weaverse(configs);
953
- Object.keys(elements_default).forEach((key) => {
954
- rootContext.registerElement(elements_default[key]);
1111
+ Object.keys(Elements).forEach((key) => {
1112
+ rootContext.registerElement(Elements[key]);
955
1113
  });
956
1114
  return rootContext;
957
1115
  };
958
- var WeaverseContext = (0, import_react18.createContext)({});
1116
+ var WeaverseContext = (0, import_react20.createContext)({});
959
1117
  var WeaverseContextProvider = WeaverseContext.Provider;
960
1118
  var WeaverseContextConsumer = WeaverseContext.Consumer;
961
1119
 
962
1120
  // src/renderer.tsx
963
1121
  var import_core2 = require("@weaverse/core");
964
- var import_react19 = __toESM(require("react"));
1122
+ var import_react21 = __toESM(require("react"));
965
1123
 
966
1124
  // src/utils/index.ts
967
- var shortCssObject = (css) => {
1125
+ function shortCssObject(css) {
968
1126
  return {
969
1127
  "@desktop": css["@desktop"],
970
1128
  "@mobile": css["@mobile"]
971
1129
  };
972
- };
1130
+ }
973
1131
  function generateItemClass(instance, stitchesInstance) {
974
1132
  var _a, _b, _c, _d;
975
1133
  let { css, className: cls = "" } = instance.data;
@@ -989,10 +1147,10 @@ function generateItemClass(instance, stitchesInstance) {
989
1147
  // src/renderer.tsx
990
1148
  var WeaverseRoot = ({ context }) => {
991
1149
  var _a, _b;
992
- let [, setData] = (0, import_react19.useState)(context.projectData);
993
- let rootRef = (0, import_react19.useRef)();
1150
+ let [, setData] = (0, import_react21.useState)(context.projectData);
1151
+ let rootRef = (0, import_react21.useRef)();
994
1152
  let update = () => setData({});
995
- (0, import_react19.useEffect)(() => {
1153
+ (0, import_react21.useEffect)(() => {
996
1154
  context.subscribe(update);
997
1155
  context.contentRootElement = rootRef.current;
998
1156
  return () => {
@@ -1001,21 +1159,21 @@ var WeaverseRoot = ({ context }) => {
1001
1159
  }, []);
1002
1160
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
1003
1161
  let themeClass = context.stitchesInstance.theme.className;
1004
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react19.default.createElement("div", {
1162
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react21.default.createElement("div", {
1005
1163
  className: `weaverse-content-root ${themeClass}`,
1006
1164
  ...eventHandlers,
1007
1165
  ref: rootRef
1008
- }, /* @__PURE__ */ import_react19.default.createElement(WeaverseContextProvider, {
1166
+ }, /* @__PURE__ */ import_react21.default.createElement(WeaverseContextProvider, {
1009
1167
  value: context
1010
- }, /* @__PURE__ */ import_react19.default.createElement(ItemInstance, {
1168
+ }, /* @__PURE__ */ import_react21.default.createElement(ItemInstance, {
1011
1169
  id: context.projectData.rootId
1012
1170
  }))) : null;
1013
1171
  };
1014
1172
  var ItemComponent = ({ instance }) => {
1015
- let { stitchesInstance, elementInstances } = (0, import_react19.useContext)(WeaverseContext);
1016
- let [data, setData] = (0, import_react19.useState)(instance.data);
1173
+ let { stitchesInstance, elementInstances } = (0, import_react21.useContext)(WeaverseContext);
1174
+ let [data, setData] = (0, import_react21.useState)(instance.data);
1017
1175
  let { id, type, childIds = [], css, className, ...rest } = data;
1018
- (0, import_react19.useEffect)(() => {
1176
+ (0, import_react21.useEffect)(() => {
1019
1177
  var _a;
1020
1178
  let update = (data2) => setData({ ...data2 });
1021
1179
  instance.subscribe(update);
@@ -1035,13 +1193,13 @@ var ItemComponent = ({ instance }) => {
1035
1193
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1036
1194
  rest.ref = instance.ref;
1037
1195
  }
1038
- return /* @__PURE__ */ import_react19.default.createElement(Component, {
1196
+ return /* @__PURE__ */ import_react21.default.createElement(Component, {
1039
1197
  key: id,
1040
1198
  "data-wv-type": type,
1041
1199
  "data-wv-id": id,
1042
1200
  className: generateItemClass(instance, stitchesInstance),
1043
1201
  ...rest
1044
- }, childIds.map((id2) => /* @__PURE__ */ import_react19.default.createElement(ItemInstance, {
1202
+ }, childIds.map((id2) => /* @__PURE__ */ import_react21.default.createElement(ItemInstance, {
1045
1203
  key: id2,
1046
1204
  id: id2
1047
1205
  })));
@@ -1049,15 +1207,15 @@ var ItemComponent = ({ instance }) => {
1049
1207
  return null;
1050
1208
  };
1051
1209
  var ItemInstance = ({ id }) => {
1052
- let context = (0, import_react19.useContext)(WeaverseContext);
1210
+ let context = (0, import_react21.useContext)(WeaverseContext);
1053
1211
  let { itemInstances } = context;
1054
1212
  let instance = itemInstances.get(id);
1055
1213
  if (!instance) {
1056
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1214
+ return /* @__PURE__ */ import_react21.default.createElement("div", {
1057
1215
  style: { display: "none" }
1058
1216
  }, "Item instance ", id, " not found");
1059
1217
  }
1060
- return /* @__PURE__ */ import_react19.default.createElement(ItemComponent, {
1218
+ return /* @__PURE__ */ import_react21.default.createElement(ItemComponent, {
1061
1219
  instance
1062
1220
  });
1063
1221
  };