@weaverse/react 0.7.15 → 0.7.17

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
@@ -238,34 +238,6 @@ var countdown_default = Countdown;
238
238
 
239
239
  // src/elements/image.tsx
240
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
- }
269
241
  var Image = import_react5.default.forwardRef(
270
242
  (props, ref) => {
271
243
  let {
@@ -308,7 +280,7 @@ var css4 = {
308
280
  objectFit: "var(--wv-img-object-fit, cover)",
309
281
  objectPosition: "var(--wv-img-object-position, center)"
310
282
  },
311
- "> [data-blink-src]": {
283
+ "& [data-blink-src]": {
312
284
  visibility: "hidden"
313
285
  }
314
286
  }
@@ -327,7 +299,18 @@ var image_default = Image;
327
299
  // src/elements/layout.tsx
328
300
  var import_react6 = __toESM(require("react"));
329
301
  var Layout = (0, import_react6.forwardRef)((props, ref) => {
330
- let { children, rows, gap, rowSize, columns, gridSize, ...rest } = props;
302
+ let {
303
+ children,
304
+ rows,
305
+ gap,
306
+ rowSize,
307
+ columns,
308
+ gridSize,
309
+ backgroundColor,
310
+ backgroundImage,
311
+ objectFit,
312
+ ...rest
313
+ } = props;
331
314
  let style = {
332
315
  "--grid-size": gridSize + "px",
333
316
  "--rows": rows,
@@ -340,10 +323,30 @@ var Layout = (0, import_react6.forwardRef)((props, ref) => {
340
323
  ref,
341
324
  ...rest,
342
325
  style
343
- }, /* @__PURE__ */ import_react6.default.createElement("div", {
326
+ }, /* @__PURE__ */ import_react6.default.createElement(LayoutBackground, {
327
+ imgUrl: backgroundImage,
328
+ bgColor: backgroundColor,
329
+ objectFit
330
+ }), /* @__PURE__ */ import_react6.default.createElement("div", {
344
331
  "data-layout-content": true
345
332
  }, children));
346
333
  });
334
+ var LayoutBackground = (props) => {
335
+ let { bgColor, imgUrl, objectFit } = props;
336
+ let style = {
337
+ ["--bg-color"]: bgColor,
338
+ ["--object-fit"]: objectFit
339
+ };
340
+ return imgUrl || bgColor ? /* @__PURE__ */ import_react6.default.createElement("div", {
341
+ "data-wv-bg": true,
342
+ style
343
+ }, imgUrl && /* @__PURE__ */ import_react6.default.createElement("img", {
344
+ width: "100%",
345
+ height: "100%",
346
+ "data-blink-src": imgUrl,
347
+ alt: "wv-layout-background"
348
+ })) : null;
349
+ };
347
350
  var css5 = {
348
351
  "@desktop": {
349
352
  paddingTop: "16px",
@@ -367,6 +370,18 @@ var css5 = {
367
370
  }
368
371
  }
369
372
  };
373
+ var permanentCss = {
374
+ "@desktop": {
375
+ "[data-wv-bg]": {
376
+ position: "absolute",
377
+ inset: 0,
378
+ backgroundColor: "var(--bg-color)"
379
+ },
380
+ img: {
381
+ objectFit: "var(--object-fit, cover)"
382
+ }
383
+ }
384
+ };
370
385
  Layout.defaultProps = {
371
386
  gridSize: 1224,
372
387
  rows: 12,
@@ -477,7 +492,7 @@ var Placeholder = (0, import_react9.forwardRef)(
477
492
  (props, ref) => {
478
493
  let { element, children, ...rest } = props;
479
494
  return /* @__PURE__ */ import_react9.default.createElement("div", {
480
- "data-wv-type": "placeholder",
495
+ "data-wv-placeholder": true,
481
496
  style: { display: "none" },
482
497
  ref,
483
498
  ...rest
@@ -570,480 +585,6 @@ Instagram.defaultProps = {
570
585
  };
571
586
  var instagram_default = Instagram;
572
587
 
573
- // src/elements/accordion/index.tsx
574
- var import_react11 = __toESM(require("react"));
575
- var AccordionContext = (0, import_react11.createContext)({
576
- iconName: "arrow",
577
- active: [],
578
- setActive: () => {
579
- }
580
- });
581
- var Accordion = (0, import_react11.forwardRef)(
582
- (props, ref) => {
583
- const { iconName, children, ...rest } = props;
584
- const [active, setActive] = (0, import_react11.useState)([]);
585
- const setOpenAccordion = (id) => {
586
- if (active.includes(id)) {
587
- setActive(active.filter((_id) => _id !== id));
588
- } else {
589
- setActive([...active, id]);
590
- }
591
- };
592
- return /* @__PURE__ */ import_react11.default.createElement("div", {
593
- ref,
594
- ...rest
595
- }, /* @__PURE__ */ import_react11.default.createElement(AccordionContext.Provider, {
596
- value: { active, setActive: setOpenAccordion, iconName }
597
- }, children));
598
- }
599
- );
600
- var css10 = {
601
- "@desktop": {
602
- display: "flex",
603
- flexDirection: "column",
604
- gap: 4
605
- }
606
- };
607
- Accordion.defaultProps = {
608
- iconName: "arrow"
609
- };
610
- var accordion_default = Accordion;
611
-
612
- // src/elements/accordion/AccordionWrapper.tsx
613
- var import_react13 = __toESM(require("react"));
614
-
615
- // src/elements/accordion/Icon.tsx
616
- var import_react12 = __toESM(require("react"));
617
- var ICONS = {
618
- caret: {
619
- animationType: "rotate90",
620
- css: {
621
- position: "absolute!important",
622
- left: 5,
623
- top: 2,
624
- width: 0,
625
- height: 0,
626
- borderTop: "6px solid transparent",
627
- borderBottom: "6px solid transparent",
628
- borderLeft: "6px solid #1F2A37"
629
- }
630
- },
631
- arrow: {
632
- animationType: "rotate90",
633
- css: {
634
- border: "solid #1F2A37",
635
- borderWidth: "0 1px 1px 0",
636
- display: "inline-block",
637
- transform: "rotate(-45deg) translate(15%, -15%)",
638
- padding: 4
639
- }
640
- },
641
- plus: {
642
- animationType: "custom",
643
- css: {
644
- display: "inline-block",
645
- top: -6,
646
- width: 15,
647
- height: 1,
648
- backgroundColor: "#1F2A37",
649
- "&:after": {
650
- position: "absolute",
651
- content: "",
652
- top: -7,
653
- left: 7,
654
- width: 1,
655
- height: 15,
656
- backgroundColor: "#1F2A37",
657
- transition: "all 0.3s ease-in-out 0s"
658
- },
659
- "&.active": {
660
- "&:after": {
661
- transform: "rotate(90deg)"
662
- }
663
- }
664
- }
665
- }
666
- };
667
- var rotateAnimation = {
668
- transition: "all 0.3s ease-in-out 0s",
669
- transform: "rotate(90deg)"
670
- };
671
- function Icon(props) {
672
- let { name, active = false, style, ...rest } = props;
673
- let { stitchesInstance } = (0, import_react12.useContext)(WeaverseContext);
674
- const { animationType, css: css17 } = ICONS[name];
675
- if (active && animationType === "rotate90") {
676
- style = { ...rotateAnimation, ...style };
677
- }
678
- let { className } = stitchesInstance.css(css17)();
679
- if (active)
680
- className += " active";
681
- return /* @__PURE__ */ import_react12.default.createElement("span", {
682
- style,
683
- ...rest
684
- }, /* @__PURE__ */ import_react12.default.createElement("i", {
685
- className
686
- }));
687
- }
688
- var Icon_default = Icon;
689
-
690
- // src/elements/accordion/AccordionWrapper.tsx
691
- var AccordionWrapper = (0, import_react13.forwardRef)((props, ref) => {
692
- const { ["data-wv-id"]: wvId, name, children, ...rest } = props;
693
- const { iconName, active, setActive } = (0, import_react13.useContext)(AccordionContext);
694
- const isActive = active.includes(wvId);
695
- return /* @__PURE__ */ import_react13.default.createElement("div", {
696
- ref,
697
- ...rest
698
- }, /* @__PURE__ */ import_react13.default.createElement("div", {
699
- onClick: () => setActive(wvId),
700
- className: `wv-acc-header ${isActive ? "active" : ""}`
701
- }, /* @__PURE__ */ import_react13.default.createElement("span", null, name), /* @__PURE__ */ import_react13.default.createElement(Icon_default, {
702
- className: "wv-acc-icon",
703
- active: isActive,
704
- name: iconName
705
- })), children);
706
- });
707
- var css11 = {
708
- "@desktop": {
709
- maxHeight: "100%",
710
- ".wv-acc-icon": {
711
- position: "absolute",
712
- right: 16,
713
- width: 16,
714
- height: 16,
715
- transition: "all 0.3s ease-in-out 0s"
716
- },
717
- ".wv-acc-header": {
718
- display: "flex",
719
- alignItems: "center",
720
- borderRadius: 4,
721
- padding: 12,
722
- marginBottom: 4,
723
- border: "1px solid #76A9FA",
724
- cursor: "pointer",
725
- '&.active + [data-wv-type="accordion.content"]': {
726
- maxHeight: "var(--max-height, inherit)"
727
- }
728
- }
729
- }
730
- };
731
- AccordionWrapper.defaultProps = {
732
- name: "Accordion item"
733
- };
734
- var AccordionWrapper_default = AccordionWrapper;
735
-
736
- // src/elements/accordion/AccordionContent.tsx
737
- var import_react14 = __toESM(require("react"));
738
- var AccordionContent = (0, import_react14.forwardRef)(
739
- (props, ref) => {
740
- const { rows, columns, gap, rowSize, children, ...rest } = props;
741
- let style = {
742
- "--rows": rows,
743
- "--columns": columns,
744
- "--gap": gap + "px",
745
- "--row-size": rowSize + "px",
746
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
747
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px"
748
- };
749
- return /* @__PURE__ */ import_react14.default.createElement("div", {
750
- ref,
751
- ...rest,
752
- style
753
- }, import_react14.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react14.default.createElement(Placeholder_default, {
754
- element: "Accordion Content"
755
- }, "Drag and drop an element here."));
756
- }
757
- );
758
- var css12 = {
759
- "@desktop": {
760
- width: "100%",
761
- maxWidth: "var(--grid-size)",
762
- display: "grid",
763
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
764
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
765
- gap: "var(--gap)",
766
- overflow: "hidden",
767
- maxHeight: 0,
768
- transition: "all var(--transition-duration, 0.3s) ease-in-out",
769
- borderRadius: 4
770
- }
771
- };
772
- AccordionContent.defaultProps = {
773
- rows: 3,
774
- columns: 12,
775
- gap: 4,
776
- rowSize: 48
777
- };
778
- var AccordionContent_default = AccordionContent;
779
-
780
- // src/elements/tab/index.tsx
781
- var import_react16 = __toESM(require("react"));
782
-
783
- // src/elements/tab/TabHeaderWrapper.tsx
784
- var import_react15 = __toESM(require("react"));
785
- function TabHeader(props) {
786
- const { wvId } = props;
787
- const { active, setActive } = (0, import_react15.useContext)(TabContext);
788
- const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
789
- const instance = itemInstances.get(wvId);
790
- let [data, setData] = (0, import_react15.useState)(instance.data);
791
- (0, import_react15.useEffect)(() => {
792
- let update = (data2) => setData({ ...data2 });
793
- instance.subscribe(update);
794
- }, []);
795
- return /* @__PURE__ */ import_react15.default.createElement("div", {
796
- onClick: () => setActive(wvId),
797
- className: `wv-tab-header${active === wvId ? " active" : ""}`
798
- }, data.name);
799
- }
800
- function TabHeaderWrapper(props) {
801
- const { itemInstances } = (0, import_react15.useContext)(WeaverseContext);
802
- const instance = itemInstances.get(props.wvId);
803
- const data = instance.data;
804
- const childIds = data.childIds;
805
- return /* @__PURE__ */ import_react15.default.createElement("div", {
806
- className: "wv-tab-header-wrapper"
807
- }, childIds.map((id) => /* @__PURE__ */ import_react15.default.createElement(TabHeader, {
808
- key: id,
809
- wvId: id
810
- })));
811
- }
812
-
813
- // src/elements/tab/index.tsx
814
- var TabContext = (0, import_react16.createContext)({
815
- active: null,
816
- setActive: () => {
817
- }
818
- });
819
- var Tab = (0, import_react16.forwardRef)((props, ref) => {
820
- var _a, _b, _c;
821
- const wvId = props["data-wv-id"];
822
- const { fullWidthTabHeader, children, ...rest } = props;
823
- 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;
824
- const [active, setActive] = (0, import_react16.useState)(defaultActive);
825
- const setOpenTab = (id) => {
826
- if (id !== active) {
827
- setActive(id);
828
- }
829
- };
830
- return /* @__PURE__ */ import_react16.default.createElement("div", {
831
- ref,
832
- ...rest,
833
- style: {
834
- "--tab-width": fullWidthTabHeader ? "100%" : "auto"
835
- }
836
- }, /* @__PURE__ */ import_react16.default.createElement(TabContext.Provider, {
837
- value: { active, setActive: setOpenTab }
838
- }, /* @__PURE__ */ import_react16.default.createElement(TabHeaderWrapper, {
839
- wvId
840
- }), children));
841
- });
842
- var css13 = {
843
- "@desktop": {
844
- display: "flex",
845
- flexDirection: "column",
846
- gap: 4,
847
- "& .wv-tab-header-wrapper": {
848
- width: "100%",
849
- display: "flex",
850
- marginBottom: 10
851
- },
852
- "& .wv-tab-header": {
853
- backgroundColor: "#fff",
854
- padding: "15px 24px",
855
- border: "1px solid #E4E7EB",
856
- cursor: "pointer",
857
- textAlign: "center",
858
- width: "var(--tab-width, auto)",
859
- "&.active": {
860
- backgroundColor: "#E4E7EB"
861
- }
862
- }
863
- }
864
- };
865
- Tab.defaultProps = {
866
- fullWidthTabHeader: false
867
- };
868
- var tab_default = Tab;
869
-
870
- // src/elements/tab/TabContent.tsx
871
- var import_react17 = __toESM(require("react"));
872
- var TabContent = (0, import_react17.forwardRef)(
873
- (props, ref) => {
874
- const { active } = (0, import_react17.useContext)(TabContext);
875
- const wvId = props["data-wv-id"];
876
- const { rows, columns, gap, rowSize, children, ...rest } = props;
877
- let style = {
878
- "--rows": rows,
879
- "--columns": columns,
880
- "--gap": gap + "px",
881
- "--row-size": rowSize + "px",
882
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
883
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
884
- "--content-active": active === wvId ? "grid" : "none"
885
- };
886
- return /* @__PURE__ */ import_react17.default.createElement("div", {
887
- ref,
888
- ...rest,
889
- style
890
- }, import_react17.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react17.default.createElement(Placeholder_default, {
891
- element: "Tab Content"
892
- }, "Drag and drop an element here."));
893
- }
894
- );
895
- var css14 = {
896
- "@desktop": {
897
- width: "100%",
898
- maxWidth: "var(--grid-size)",
899
- display: "var(--content-active, none)",
900
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
901
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
902
- gap: "var(--gap)",
903
- borderRadius: 4
904
- }
905
- };
906
- TabContent.defaultProps = {
907
- rows: 3,
908
- columns: 12,
909
- gap: 4,
910
- rowSize: 48,
911
- name: "Tab header"
912
- };
913
- var TabContent_default = TabContent;
914
-
915
- // src/elements/slider/index.tsx
916
- var import_react18 = __toESM(require("react"));
917
- var import_carousel = require("nuka-carousel/lib/carousel");
918
- var Slider = (0, import_react18.forwardRef)((props, ref) => {
919
- const { isDesignMode } = (0, import_react18.useContext)(WeaverseContext);
920
- const { autoplay, delay, children, ...rest } = props;
921
- return /* @__PURE__ */ import_react18.default.createElement("div", {
922
- ...rest,
923
- ref
924
- }, /* @__PURE__ */ import_react18.default.createElement(import_carousel.Carousel, {
925
- dragging: false,
926
- renderCenterLeftControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
927
- className: "wv-slider-btn",
928
- onClick: props2.previousSlide,
929
- disabled: (isDesignMode || !autoplay) && props2.currentSlide === 0
930
- }, /* @__PURE__ */ import_react18.default.createElement("i", {
931
- className: "wv-slider-arrow wv-slider-arrow-left"
932
- })),
933
- renderCenterRightControls: (props2) => /* @__PURE__ */ import_react18.default.createElement("button", {
934
- className: "wv-slider-btn",
935
- onClick: props2.nextSlide,
936
- disabled: (isDesignMode || !autoplay) && props2.slideCount === props2.currentSlide
937
- }, /* @__PURE__ */ import_react18.default.createElement("i", {
938
- className: "wv-slider-arrow wv-slider-arrow-right"
939
- })),
940
- wrapAround: !isDesignMode,
941
- autoplay: !isDesignMode && autoplay,
942
- autoplayInterval: delay * 1e3
943
- }, children));
944
- });
945
- var css15 = {
946
- "@desktop": {
947
- "& .wv-slider-btn": {
948
- borderRadius: "100%",
949
- width: 40,
950
- height: 40,
951
- background: "#fff",
952
- border: "none",
953
- cursor: "pointer",
954
- "&[disabled]": {
955
- cursor: "not-allowed"
956
- },
957
- "&:hover .wv-slider-arrow": {
958
- borderColor: "#999"
959
- },
960
- "& .wv-slider-arrow": {
961
- border: "solid black",
962
- borderWidth: "0 1px 1px 0",
963
- display: "inline-block",
964
- padding: 5
965
- },
966
- "& .wv-slider-arrow-right": {
967
- transform: "rotate(-45deg)",
968
- marginRight: 5
969
- },
970
- "& .wv-slider-arrow-left": {
971
- transform: "rotate(135deg)",
972
- marginLeft: 5
973
- }
974
- }
975
- }
976
- };
977
- Slider.defaultProps = {
978
- fullWidth: true,
979
- autoplay: true,
980
- delay: 3
981
- };
982
- var slider_default = Slider;
983
-
984
- // src/elements/slider/SliderContent.tsx
985
- var import_react19 = __toESM(require("react"));
986
- var SliderContent = (0, import_react19.forwardRef)(
987
- (props, ref) => {
988
- const { isDesignMode } = (0, import_react19.useContext)(WeaverseContext);
989
- const {
990
- mediaUrl,
991
- targetLink,
992
- openInNewTab,
993
- rows,
994
- columns,
995
- gap,
996
- rowSize,
997
- children,
998
- ...rest
999
- } = props;
1000
- let style = {
1001
- "--rows": rows,
1002
- "--columns": columns,
1003
- "--gap": gap + "px",
1004
- "--row-size": rowSize + "px",
1005
- "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))",
1006
- "--max-height": rows * rowSize + gap * (rowSize - 1) + "px",
1007
- "--background-url": `url(${mediaUrl}`
1008
- };
1009
- const handleClick = () => {
1010
- if (!isDesignMode && targetLink) {
1011
- window.open(targetLink, openInNewTab ? "_blank" : "_self");
1012
- }
1013
- };
1014
- return /* @__PURE__ */ import_react19.default.createElement("div", {
1015
- ...rest,
1016
- style,
1017
- onClick: handleClick
1018
- }, import_react19.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react19.default.createElement(Placeholder_default, {
1019
- element: "Slider Content"
1020
- }, "Drag and drop an element here."));
1021
- }
1022
- );
1023
- var css16 = {
1024
- "@desktop": {
1025
- width: "100%",
1026
- maxWidth: "var(--grid-size)",
1027
- display: "grid",
1028
- gridTemplateRows: "repeat(var(--rows), var(--row-size))",
1029
- gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
1030
- gap: "var(--gap)",
1031
- borderRadius: 4,
1032
- backgroundImage: "var(--background-url, none)"
1033
- }
1034
- };
1035
- SliderContent.defaultProps = {
1036
- name: "Slider",
1037
- mediaUrl: "",
1038
- openInNewTab: false,
1039
- targetLink: "https://myshop.com",
1040
- rows: 4,
1041
- columns: 12,
1042
- gap: 4,
1043
- rowSize: 48
1044
- };
1045
- var SliderContent_default = SliderContent;
1046
-
1047
588
  // src/elements/index.ts
1048
589
  var SharedComponents = {
1049
590
  Placeholder: Placeholder_default
@@ -1077,7 +618,8 @@ var Elements = {
1077
618
  Layout: {
1078
619
  Component: layout_default,
1079
620
  type: "layout",
1080
- defaultCss: css5
621
+ defaultCss: css5,
622
+ permanentCss
1081
623
  },
1082
624
  Map: {
1083
625
  Component: map_default,
@@ -1093,59 +635,24 @@ var Elements = {
1093
635
  Component: video_default,
1094
636
  type: "video",
1095
637
  defaultCss: css8
1096
- },
1097
- Accordion: {
1098
- Component: accordion_default,
1099
- type: "accordion",
1100
- defaultCss: css10
1101
- },
1102
- AccordionWrapper: {
1103
- Component: AccordionWrapper_default,
1104
- type: "accordion.wrapper",
1105
- defaultCss: css11
1106
- },
1107
- AccordionContent: {
1108
- Component: AccordionContent_default,
1109
- type: "accordion.content",
1110
- defaultCss: css12
1111
- },
1112
- Tab: {
1113
- Component: tab_default,
1114
- type: "tab",
1115
- defaultCss: css13
1116
- },
1117
- TabContent: {
1118
- Component: TabContent_default,
1119
- type: "tab.content",
1120
- defaultCss: css14
1121
- },
1122
- Slider: {
1123
- Component: slider_default,
1124
- type: "slider",
1125
- defaultCss: css15
1126
- },
1127
- SliderContent: {
1128
- Component: SliderContent_default,
1129
- type: "slider.content",
1130
- defaultCss: css16
1131
638
  }
1132
639
  };
1133
640
 
1134
641
  // src/renderer.tsx
1135
- var import_core3 = require("@weaverse/core");
1136
- var import_react20 = __toESM(require("react"));
642
+ var import_core2 = require("@weaverse/core");
643
+ var import_react11 = __toESM(require("react"));
1137
644
 
1138
645
  // src/utils/index.ts
1139
- function shortCssObject(css17) {
646
+ function shortCssObject(css10) {
1140
647
  return {
1141
- "@desktop": css17["@desktop"],
1142
- "@mobile": css17["@mobile"]
648
+ "@desktop": css10["@desktop"],
649
+ "@mobile": css10["@mobile"]
1143
650
  };
1144
651
  }
1145
652
  var permanentClasses = {};
1146
653
  function generateItemClass(instance, stitchesInstance) {
1147
654
  var _a, _b;
1148
- let { css: css17, type, className: cls = "" } = instance.data;
655
+ let { css: css10, type, className: cls = "" } = instance.data;
1149
656
  let className = "";
1150
657
  let permanentClass = "";
1151
658
  let perCss = (_a = instance.Element) == null ? void 0 : _a.permanentCss;
@@ -1159,8 +666,8 @@ function generateItemClass(instance, stitchesInstance) {
1159
666
  }
1160
667
  }
1161
668
  className = permanentClass;
1162
- if (css17) {
1163
- let formattedCss = shortCssObject(css17);
669
+ if (css10) {
670
+ let formattedCss = shortCssObject(css10);
1164
671
  let { className: newClass = "" } = stitchesInstance.css(formattedCss)();
1165
672
  let { stitchesClass } = instance;
1166
673
  let otherClass = (((_b = instance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
@@ -1173,41 +680,44 @@ function generateItemClass(instance, stitchesInstance) {
1173
680
  // src/renderer.tsx
1174
681
  var WeaverseRoot = ({ context }) => {
1175
682
  var _a, _b;
1176
- let [, setData] = (0, import_react20.useState)(context.projectData);
1177
- let rootRef = (0, import_react20.useRef)();
1178
- let update = () => setData({});
1179
- (0, import_react20.useEffect)(() => {
1180
- context.subscribe(update);
683
+ let [, setData] = (0, import_react11.useState)(context.projectData);
684
+ let rootRef = (0, import_react11.useRef)();
685
+ let renderRoot = () => setData({});
686
+ (0, import_react11.useEffect)(() => {
687
+ context.subscribe(renderRoot);
1181
688
  context.contentRootElement = rootRef.current;
1182
689
  return () => {
1183
- context.unsubscribe(update);
690
+ context.unsubscribe(renderRoot);
1184
691
  };
1185
692
  }, []);
1186
693
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
1187
694
  let themeClass = context.stitchesInstance.theme.className;
1188
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react20.default.createElement("div", {
1189
- className: `weaverse-content-root ${themeClass}`,
1190
- ...eventHandlers,
1191
- ref: rootRef
1192
- }, /* @__PURE__ */ import_react20.default.createElement(WeaverseContextProvider, {
1193
- value: context
1194
- }, /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
1195
- id: context.projectData.rootId
1196
- }))) : null;
695
+ if ((_b = context.projectData) == null ? void 0 : _b.rootId) {
696
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
697
+ className: `weaverse-content-root ${themeClass}`,
698
+ ...eventHandlers,
699
+ ref: rootRef
700
+ }, /* @__PURE__ */ import_react11.default.createElement(WeaverseContextProvider, {
701
+ value: context
702
+ }, /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
703
+ id: context.projectData.rootId
704
+ })));
705
+ }
706
+ return null;
1197
707
  };
1198
708
  var ItemComponent = ({ instance }) => {
1199
- let { stitchesInstance, elementInstances } = (0, import_react20.useContext)(WeaverseContext);
1200
- let [data, setData] = (0, import_react20.useState)(instance.data);
1201
- let { id, type, childIds = [], css: css17, className, ...rest } = data;
1202
- (0, import_react20.useEffect)(() => {
1203
- let update = (data2) => setData({ ...data2 });
1204
- instance.subscribe(update);
1205
- if (import_core3.isBrowser && !instance.ref.current) {
709
+ let { stitchesInstance, elementInstances } = (0, import_react11.useContext)(WeaverseContext);
710
+ let [data, setData] = (0, import_react11.useState)(instance.data);
711
+ let { id, type, childIds = [], css: css10, className, ...rest } = data;
712
+ (0, import_react11.useEffect)(() => {
713
+ let render = (data2) => setData({ ...data2 });
714
+ instance.subscribe(render);
715
+ if (import_core2.isBrowser && !instance.ref.current) {
1206
716
  Object.assign(instance.ref, {
1207
717
  current: document.querySelector(`[data-wv-id="${id}"]`)
1208
718
  });
1209
719
  }
1210
- return () => instance.unsubscribe(update);
720
+ return () => instance.unsubscribe(render);
1211
721
  }, []);
1212
722
  let Element = elementInstances.get(type);
1213
723
  if (Element == null ? void 0 : Element.Component) {
@@ -1215,29 +725,31 @@ var ItemComponent = ({ instance }) => {
1215
725
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1216
726
  rest.ref = instance.ref;
1217
727
  }
1218
- return /* @__PURE__ */ import_react20.default.createElement(Component, {
728
+ return /* @__PURE__ */ import_react11.default.createElement(Component, {
1219
729
  key: id,
1220
730
  "data-wv-type": type,
1221
731
  "data-wv-id": id,
1222
732
  className: generateItemClass(instance, stitchesInstance),
1223
733
  ...rest
1224
- }, childIds.map((id2) => /* @__PURE__ */ import_react20.default.createElement(ItemInstance, {
734
+ }, childIds.map((id2) => /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
1225
735
  key: id2,
1226
736
  id: id2
1227
737
  })));
738
+ } else {
739
+ console.log(`Unknown element: ${type}`);
740
+ return null;
1228
741
  }
1229
- return null;
1230
742
  };
1231
743
  var ItemInstance = ({ id }) => {
1232
- let context = (0, import_react20.useContext)(WeaverseContext);
744
+ let context = (0, import_react11.useContext)(WeaverseContext);
1233
745
  let { itemInstances } = context;
1234
746
  let instance = itemInstances.get(id);
1235
747
  if (!instance) {
1236
- return /* @__PURE__ */ import_react20.default.createElement("div", {
748
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
1237
749
  style: { display: "none" }
1238
750
  }, "Item instance ", id, " not found");
1239
751
  }
1240
- return /* @__PURE__ */ import_react20.default.createElement(ItemComponent, {
752
+ return /* @__PURE__ */ import_react11.default.createElement(ItemComponent, {
1241
753
  instance
1242
754
  });
1243
755
  };