@weaverse/react 0.6.22 → 0.6.26

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.d.ts CHANGED
@@ -18,8 +18,9 @@ declare type WeaverseRootPropsType = {
18
18
  declare type ItemComponentProps = {
19
19
  instance: InstanceType<typeof WeaverseItemStore>;
20
20
  };
21
- interface PlaceholderProps extends WeaverseElementProps {
21
+ interface PlaceholderProps {
22
22
  element: string;
23
+ children: ReactElement | ReactElement[] | ReactNode | ReactNode[];
23
24
  }
24
25
  interface ButtonElementProps extends WeaverseElementProps {
25
26
  value: string;
@@ -33,6 +34,11 @@ interface ContainerElementProps extends WeaverseElementProps {
33
34
  interface ImageElementProps extends WeaverseElementProps {
34
35
  src: string;
35
36
  alt: string;
37
+ objectFit: 'contain' | 'cover';
38
+ objectPosition: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'center left' | 'center right' | 'top left' | 'top right' | 'bottom left' | 'bottom right';
39
+ onClickAction: 'none' | 'open-lightbox' | 'open-link';
40
+ linkTo?: string;
41
+ openLinkInNewTab?: boolean;
36
42
  }
37
43
  interface LayoutElementProps extends WeaverseElementProps {
38
44
  gridSize: number;
@@ -87,6 +93,6 @@ declare type InstagramMedia = {
87
93
  caption: string;
88
94
  };
89
95
 
90
- declare let WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element;
96
+ declare let WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element | null;
91
97
 
92
98
  export { ButtonElementProps, ContainerElementProps, CountdownElementProps, CountdownTimeKey, ImageElementProps, InstagramElementProps, InstagramMedia, ItemComponentProps, LayoutElementProps, MapElementProps, PlaceholderProps, TextElementProps, TimerBlockProps, VideoElementProps, WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
package/dist/index.js CHANGED
@@ -62,7 +62,7 @@ module.exports = __toCommonJS(src_exports);
62
62
 
63
63
  // src/context.ts
64
64
  var import_core = require("@weaverse/core");
65
- var import_react10 = require("react");
65
+ var import_react13 = require("react");
66
66
 
67
67
  // src/elements/button.tsx
68
68
  var React = __toESM(require("react"));
@@ -224,7 +224,7 @@ Countdown.defaultProps = {
224
224
  width: 48,
225
225
  textAlign: "center"
226
226
  },
227
- "& .wv-countdown-label": {
227
+ ".wv-countdown-label": {
228
228
  fontSize: 10
229
229
  },
230
230
  "& > span": {
@@ -241,23 +241,58 @@ var countdown_default = Countdown;
241
241
  // src/elements/image.tsx
242
242
  var import_react4 = __toESM(require("react"));
243
243
  var Image = import_react4.default.forwardRef((props, ref) => {
244
- let _a = props, { src, alt } = _a, rest = __objRest(_a, ["src", "alt"]);
245
- return /* @__PURE__ */ import_react4.default.createElement("div", __spreadValues({
244
+ let { isDesignMode } = (0, import_react4.useContext)(WeaverseContext);
245
+ let _a = props, {
246
+ src,
247
+ alt,
248
+ objectFit,
249
+ objectPosition,
250
+ onClickAction,
251
+ openLinkInNewTab
252
+ } = _a, rest = __objRest(_a, [
253
+ "src",
254
+ "alt",
255
+ "objectFit",
256
+ "objectPosition",
257
+ "onClickAction",
258
+ "openLinkInNewTab"
259
+ ]);
260
+ let style = {
261
+ "--wv-img-object-fit": objectFit,
262
+ "--wv-img-object-position": objectPosition
263
+ };
264
+ let handleClick = () => {
265
+ if (isDesignMode) {
266
+ return console.log("Click action:", onClickAction);
267
+ }
268
+ if (onClickAction) {
269
+ console.log("TODO: click action:", onClickAction);
270
+ }
271
+ };
272
+ return /* @__PURE__ */ import_react4.default.createElement("div", __spreadProps(__spreadValues({
246
273
  ref
247
- }, rest), /* @__PURE__ */ import_react4.default.createElement("img", {
274
+ }, rest), {
275
+ style,
276
+ onClick: handleClick
277
+ }), /* @__PURE__ */ import_react4.default.createElement("img", {
248
278
  alt,
249
279
  src
250
280
  }));
251
281
  });
252
282
  Image.defaultProps = {
253
283
  src: "https://ucarecdn.com/1cdc9d39-ca62-492e-8ec7-f1a86b241a90/",
254
- alt: "weaverse image element",
284
+ alt: "Image alt text",
285
+ objectFit: "cover",
286
+ objectPosition: "center",
287
+ onClickAction: "open-lightbox",
288
+ openLinkInNewTab: false,
255
289
  css: {
256
290
  "@desktop": {
257
291
  img: {
258
292
  width: "100%",
259
293
  height: "100%",
260
- objectFit: "cover"
294
+ objectFit: "var(--wv-img-object-fit, cover)",
295
+ objectPosition: "var(--wv-img-object-position, center)"
261
296
  }
262
297
  }
263
298
  }
@@ -411,12 +446,16 @@ var import_react8 = __toESM(require("react"));
411
446
  var Placeholder = (0, import_react8.forwardRef)((props, ref) => {
412
447
  let _a = props, { element, children } = _a, rest = __objRest(_a, ["element", "children"]);
413
448
  let style = {
449
+ position: "absolute",
414
450
  height: "100%",
451
+ width: "100%",
415
452
  display: "flex",
416
453
  flexDirection: "column",
417
454
  alignItems: "center",
418
455
  justifyContent: "center",
419
- color: "#374151"
456
+ color: "#374151",
457
+ pointerEvents: "none",
458
+ zIndex: 1
420
459
  };
421
460
  return /* @__PURE__ */ import_react8.default.createElement("div", __spreadValues({
422
461
  style,
@@ -430,10 +469,9 @@ var Placeholder_default = Placeholder;
430
469
  // src/elements/instagram.tsx
431
470
  var INSTAGRAM_API = "https://graph.instagram.com";
432
471
  var Instagram = (0, import_react9.forwardRef)((props, ref) => {
433
- const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
434
- const [media, setMedia] = (0, import_react9.useState)([]);
435
- const [error, setError] = (0, import_react9.useState)(null);
436
- let { isDesignMode } = (0, import_react9.useContext)(WeaverseContext);
472
+ let _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
473
+ let [media, setMedia] = (0, import_react9.useState)([]);
474
+ let [error, setError] = (0, import_react9.useState)(null);
437
475
  (0, import_react9.useEffect)(() => {
438
476
  if (token) {
439
477
  let params = new URLSearchParams({
@@ -459,7 +497,7 @@ var Instagram = (0, import_react9.forwardRef)((props, ref) => {
459
497
  }
460
498
  let style = {
461
499
  "--wv-ig-images-per-row": imagesPerRow,
462
- "--wv-ig-images-gap": gap
500
+ "--wv-ig-images-gap": gap + "px"
463
501
  };
464
502
  return /* @__PURE__ */ import_react9.default.createElement("div", __spreadProps(__spreadValues({
465
503
  ref
@@ -468,15 +506,15 @@ var Instagram = (0, import_react9.forwardRef)((props, ref) => {
468
506
  }), /* @__PURE__ */ import_react9.default.createElement("div", {
469
507
  className: "wv-ig-media-container"
470
508
  }, media.slice(0, numberOfImages).map((item) => {
471
- let linkProps;
472
- if (!isDesignMode) {
473
- linkProps = { href: item.permalink, target: "_blank" };
474
- }
475
- return /* @__PURE__ */ import_react9.default.createElement("a", __spreadValues({
476
- key: item.id
477
- }, linkProps), /* @__PURE__ */ import_react9.default.createElement("img", {
478
- alt: item.caption,
479
- src: item.media_url
509
+ let { id, permalink, caption, media_url } = item;
510
+ return /* @__PURE__ */ import_react9.default.createElement("a", {
511
+ key: id,
512
+ href: permalink,
513
+ target: "_blank",
514
+ rel: "noreferrer"
515
+ }, /* @__PURE__ */ import_react9.default.createElement("img", {
516
+ alt: caption,
517
+ src: media_url
480
518
  }));
481
519
  })));
482
520
  });
@@ -507,6 +545,126 @@ Instagram.defaultProps = {
507
545
  };
508
546
  var instagram_default = Instagram;
509
547
 
548
+ // src/elements/accordion/index.tsx
549
+ var import_react10 = __toESM(require("react"));
550
+ var AccordionContext = (0, import_react10.createContext)({
551
+ active: null,
552
+ setActive: () => {
553
+ }
554
+ });
555
+ var Accordion = (0, import_react10.forwardRef)((props, ref) => {
556
+ const _a = props, { items, children } = _a, rest = __objRest(_a, ["items", "children"]);
557
+ const [active, setActive] = (0, import_react10.useState)(null);
558
+ const setOpenAccordion = (id) => {
559
+ if (id === active) {
560
+ setActive(null);
561
+ } else {
562
+ setActive(id);
563
+ }
564
+ };
565
+ console.info("9779 active", active);
566
+ return /* @__PURE__ */ import_react10.default.createElement("div", __spreadValues({
567
+ ref
568
+ }, rest), /* @__PURE__ */ import_react10.default.createElement(AccordionContext.Provider, {
569
+ value: { active, setActive: setOpenAccordion }
570
+ }, children));
571
+ });
572
+ Accordion.defaultProps = {
573
+ items: [
574
+ {
575
+ id: 1,
576
+ headerText: "Header 1",
577
+ childrenId: true
578
+ },
579
+ {
580
+ id: 2,
581
+ headerText: "Header 2"
582
+ }
583
+ ],
584
+ css: {
585
+ "@desktop": {
586
+ display: "flex",
587
+ flexDirection: "column",
588
+ gap: 4,
589
+ ".wv-accordion-header": {
590
+ borderRadius: 4,
591
+ padding: 4,
592
+ marginBottom: 4,
593
+ backgroundColor: "#aaa",
594
+ "&.active": {
595
+ color: "blue"
596
+ },
597
+ '&.active + [data-wv-type="accordion.content"]': {
598
+ display: "grid"
599
+ }
600
+ }
601
+ }
602
+ }
603
+ };
604
+ var accordion_default = Accordion;
605
+
606
+ // src/elements/accordion/AccordionWrapper.tsx
607
+ var import_react11 = __toESM(require("react"));
608
+ var AccordionWrapper = (0, import_react11.forwardRef)((props, ref) => {
609
+ const _a = props, { wrapperId, headerText, children } = _a, rest = __objRest(_a, ["wrapperId", "headerText", "children"]);
610
+ const { active, setActive } = (0, import_react11.useContext)(AccordionContext);
611
+ return /* @__PURE__ */ import_react11.default.createElement("div", __spreadValues({
612
+ ref
613
+ }, rest), /* @__PURE__ */ import_react11.default.createElement("div", {
614
+ onClick: () => setActive(wrapperId),
615
+ className: `wv-accordion-header ${active === wrapperId ? "active" : ""}`
616
+ }, headerText, " #", wrapperId), children);
617
+ });
618
+ AccordionWrapper.defaultProps = {
619
+ wrapperId: 1,
620
+ headerText: "Header 1",
621
+ css: {
622
+ "@desktop": {
623
+ maxHeight: "100%"
624
+ }
625
+ }
626
+ };
627
+ var AccordionWrapper_default = AccordionWrapper;
628
+
629
+ // src/elements/accordion/AccordionContent.tsx
630
+ var import_react12 = __toESM(require("react"));
631
+ var AccordionContent = (0, import_react12.forwardRef)((props, ref) => {
632
+ const _a = props, { rows, columns, gap, rowSize, children } = _a, rest = __objRest(_a, ["rows", "columns", "gap", "rowSize", "children"]);
633
+ let style = {
634
+ "--rows": rows,
635
+ "--columns": columns,
636
+ "--gap": gap + "px",
637
+ "--row-size": rowSize + "px",
638
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
639
+ };
640
+ return /* @__PURE__ */ import_react12.default.createElement("div", __spreadProps(__spreadValues({
641
+ ref
642
+ }, rest), {
643
+ style
644
+ }), import_react12.default.Children.count(children) > 0 ? children : /* @__PURE__ */ import_react12.default.createElement(Placeholder_default, {
645
+ element: "Accordion"
646
+ }, "Item Content"));
647
+ });
648
+ AccordionContent.defaultProps = {
649
+ rows: 2,
650
+ columns: 12,
651
+ gap: 4,
652
+ rowSize: 48,
653
+ css: {
654
+ "@desktop": {
655
+ width: "100%",
656
+ maxWidth: "var(--grid-size)",
657
+ backgroundColor: "#DDD",
658
+ display: "none",
659
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
660
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
661
+ gap: "var(--gap)",
662
+ borderRadius: 4
663
+ }
664
+ }
665
+ };
666
+ var AccordionContent_default = AccordionContent;
667
+
510
668
  // src/elements/index.ts
511
669
  var elements = {
512
670
  Countdown: {
@@ -544,6 +702,18 @@ var elements = {
544
702
  Video: {
545
703
  Component: video_default,
546
704
  type: "video"
705
+ },
706
+ Accordion: {
707
+ Component: accordion_default,
708
+ type: "accordion"
709
+ },
710
+ AccordionWrapper: {
711
+ Component: AccordionWrapper_default,
712
+ type: "accordion.wrapper"
713
+ },
714
+ AccordionContent: {
715
+ Component: AccordionContent_default,
716
+ type: "accordion.content"
547
717
  }
548
718
  };
549
719
  var elements_default = elements;
@@ -556,13 +726,13 @@ var createRootContext = (configs) => {
556
726
  });
557
727
  return rootContext;
558
728
  };
559
- var WeaverseContext = (0, import_react10.createContext)({});
729
+ var WeaverseContext = (0, import_react13.createContext)({});
560
730
  var WeaverseContextProvider = WeaverseContext.Provider;
561
731
  var WeaverseContextConsumer = WeaverseContext.Consumer;
562
732
 
563
733
  // src/renderer.tsx
564
734
  var import_core2 = require("@weaverse/core");
565
- var import_react11 = __toESM(require("react"));
735
+ var import_react14 = __toESM(require("react"));
566
736
 
567
737
  // src/utils/index.ts
568
738
  var shortCssObject = (css) => {
@@ -589,10 +759,10 @@ function generateItemClass(instance, stitchesInstance) {
589
759
 
590
760
  // src/renderer.tsx
591
761
  var WeaverseRoot = ({ context }) => {
592
- var _a;
593
- let [, setData] = (0, import_react11.useState)(context.projectData);
594
- let rootRef = (0, import_react11.useRef)();
595
- (0, import_react11.useEffect)(() => {
762
+ var _a, _b;
763
+ let [, setData] = (0, import_react14.useState)(context.projectData);
764
+ let rootRef = (0, import_react14.useRef)();
765
+ (0, import_react14.useEffect)(() => {
596
766
  let update = () => setData({});
597
767
  context.subscribe(update);
598
768
  if (context.projectData) {
@@ -605,21 +775,21 @@ var WeaverseRoot = ({ context }) => {
605
775
  }, []);
606
776
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
607
777
  let themeClass = context.stitchesInstance.theme.className;
608
- return /* @__PURE__ */ import_react11.default.createElement("div", __spreadProps(__spreadValues({
778
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react14.default.createElement("div", __spreadProps(__spreadValues({
609
779
  className: `weaverse-content-root ${themeClass}`
610
780
  }, eventHandlers), {
611
781
  ref: rootRef
612
- }), /* @__PURE__ */ import_react11.default.createElement(WeaverseContextProvider, {
782
+ }), /* @__PURE__ */ import_react14.default.createElement(WeaverseContextProvider, {
613
783
  value: context
614
- }, /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
615
- id: context.projectData.rootId || 0
616
- })));
784
+ }, /* @__PURE__ */ import_react14.default.createElement(ItemInstance, {
785
+ id: context.projectData.rootId
786
+ }))) : null;
617
787
  };
618
788
  var ItemComponent = ({ instance }) => {
619
- let { stitchesInstance, elementInstances } = (0, import_react11.useContext)(WeaverseContext);
620
- let [data, setData] = (0, import_react11.useState)(instance.data);
789
+ let { stitchesInstance, elementInstances } = (0, import_react14.useContext)(WeaverseContext);
790
+ let [data, setData] = (0, import_react14.useState)(instance.data);
621
791
  let _a = data, { id, type, childIds = [], css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
622
- (0, import_react11.useEffect)(() => {
792
+ (0, import_react14.useEffect)(() => {
623
793
  var _a2;
624
794
  let update = (data2) => setData(__spreadValues({}, data2));
625
795
  instance.subscribe(update);
@@ -639,12 +809,12 @@ var ItemComponent = ({ instance }) => {
639
809
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
640
810
  rest.ref = instance.ref;
641
811
  }
642
- return /* @__PURE__ */ import_react11.default.createElement(Component, __spreadValues({
812
+ return /* @__PURE__ */ import_react14.default.createElement(Component, __spreadValues({
643
813
  key: id,
644
814
  "data-wv-type": type,
645
815
  "data-wv-id": id,
646
816
  className: generateItemClass(instance, stitchesInstance)
647
- }, rest), childIds.map((id2) => /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
817
+ }, rest), childIds.map((id2) => /* @__PURE__ */ import_react14.default.createElement(ItemInstance, {
648
818
  key: id2,
649
819
  id: id2
650
820
  })));
@@ -652,15 +822,15 @@ var ItemComponent = ({ instance }) => {
652
822
  return null;
653
823
  };
654
824
  var ItemInstance = ({ id }) => {
655
- let context = (0, import_react11.useContext)(WeaverseContext);
825
+ let context = (0, import_react14.useContext)(WeaverseContext);
656
826
  let { itemInstances } = context;
657
827
  let instance = itemInstances.get(id);
658
828
  if (!instance) {
659
- return /* @__PURE__ */ import_react11.default.createElement("div", {
829
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
660
830
  style: { display: "none" }
661
831
  }, "Item instance ", id, " not found");
662
832
  }
663
- return /* @__PURE__ */ import_react11.default.createElement(ItemComponent, {
833
+ return /* @__PURE__ */ import_react14.default.createElement(ItemComponent, {
664
834
  instance
665
835
  });
666
836
  };
package/dist/index.mjs CHANGED
@@ -32,7 +32,7 @@ var __objRest = (source, exclude) => {
32
32
 
33
33
  // src/context.ts
34
34
  import { Weaverse } from "@weaverse/core";
35
- import { createContext } from "react";
35
+ import { createContext as createContext2 } from "react";
36
36
 
37
37
  // src/elements/button.tsx
38
38
  import * as React from "react";
@@ -194,7 +194,7 @@ Countdown.defaultProps = {
194
194
  width: 48,
195
195
  textAlign: "center"
196
196
  },
197
- "& .wv-countdown-label": {
197
+ ".wv-countdown-label": {
198
198
  fontSize: 10
199
199
  },
200
200
  "& > span": {
@@ -209,25 +209,60 @@ Countdown.defaultProps = {
209
209
  var countdown_default = Countdown;
210
210
 
211
211
  // src/elements/image.tsx
212
- import React5 from "react";
212
+ import React5, { useContext as useContext2 } from "react";
213
213
  var Image = React5.forwardRef((props, ref) => {
214
- let _a = props, { src, alt } = _a, rest = __objRest(_a, ["src", "alt"]);
215
- return /* @__PURE__ */ React5.createElement("div", __spreadValues({
214
+ let { isDesignMode } = useContext2(WeaverseContext);
215
+ let _a = props, {
216
+ src,
217
+ alt,
218
+ objectFit,
219
+ objectPosition,
220
+ onClickAction,
221
+ openLinkInNewTab
222
+ } = _a, rest = __objRest(_a, [
223
+ "src",
224
+ "alt",
225
+ "objectFit",
226
+ "objectPosition",
227
+ "onClickAction",
228
+ "openLinkInNewTab"
229
+ ]);
230
+ let style = {
231
+ "--wv-img-object-fit": objectFit,
232
+ "--wv-img-object-position": objectPosition
233
+ };
234
+ let handleClick = () => {
235
+ if (isDesignMode) {
236
+ return console.log("Click action:", onClickAction);
237
+ }
238
+ if (onClickAction) {
239
+ console.log("TODO: click action:", onClickAction);
240
+ }
241
+ };
242
+ return /* @__PURE__ */ React5.createElement("div", __spreadProps(__spreadValues({
216
243
  ref
217
- }, rest), /* @__PURE__ */ React5.createElement("img", {
244
+ }, rest), {
245
+ style,
246
+ onClick: handleClick
247
+ }), /* @__PURE__ */ React5.createElement("img", {
218
248
  alt,
219
249
  src
220
250
  }));
221
251
  });
222
252
  Image.defaultProps = {
223
253
  src: "https://ucarecdn.com/1cdc9d39-ca62-492e-8ec7-f1a86b241a90/",
224
- alt: "weaverse image element",
254
+ alt: "Image alt text",
255
+ objectFit: "cover",
256
+ objectPosition: "center",
257
+ onClickAction: "open-lightbox",
258
+ openLinkInNewTab: false,
225
259
  css: {
226
260
  "@desktop": {
227
261
  img: {
228
262
  width: "100%",
229
263
  height: "100%",
230
- objectFit: "cover"
264
+ objectFit: "var(--wv-img-object-fit, cover)",
265
+ objectPosition: "var(--wv-img-object-position, center)"
231
266
  }
232
267
  }
233
268
  }
@@ -335,9 +370,9 @@ Text.defaultProps = {
335
370
  var text_default = Text;
336
371
 
337
372
  // src/elements/video.tsx
338
- import React9, { forwardRef as forwardRef7, useContext as useContext2 } from "react";
373
+ import React9, { forwardRef as forwardRef7, useContext as useContext3 } from "react";
339
374
  var Video = forwardRef7((props, ref) => {
340
- let { isDesignMode } = useContext2(WeaverseContext);
375
+ let { isDesignMode } = useContext3(WeaverseContext);
341
376
  let _a = props, { src, type, controls, poster, autoPlay, loop, muted } = _a, rest = __objRest(_a, ["src", "type", "controls", "poster", "autoPlay", "loop", "muted"]);
342
377
  return /* @__PURE__ */ React9.createElement("div", __spreadValues({
343
378
  ref
@@ -374,19 +409,23 @@ Video.defaultProps = {
374
409
  var video_default = Video;
375
410
 
376
411
  // src/elements/instagram.tsx
377
- import React11, { forwardRef as forwardRef9, useContext as useContext3, useEffect as useEffect2, useState } from "react";
412
+ import React11, { forwardRef as forwardRef9, useEffect as useEffect2, useState } from "react";
378
413
 
379
414
  // src/elements/shared/Placeholder.tsx
380
415
  import React10, { forwardRef as forwardRef8 } from "react";
381
416
  var Placeholder = forwardRef8((props, ref) => {
382
417
  let _a = props, { element, children } = _a, rest = __objRest(_a, ["element", "children"]);
383
418
  let style = {
419
+ position: "absolute",
384
420
  height: "100%",
421
+ width: "100%",
385
422
  display: "flex",
386
423
  flexDirection: "column",
387
424
  alignItems: "center",
388
425
  justifyContent: "center",
389
- color: "#374151"
426
+ color: "#374151",
427
+ pointerEvents: "none",
428
+ zIndex: 1
390
429
  };
391
430
  return /* @__PURE__ */ React10.createElement("div", __spreadValues({
392
431
  style,
@@ -400,10 +439,9 @@ var Placeholder_default = Placeholder;
400
439
  // src/elements/instagram.tsx
401
440
  var INSTAGRAM_API = "https://graph.instagram.com";
402
441
  var Instagram = forwardRef9((props, ref) => {
403
- const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
404
- const [media, setMedia] = useState([]);
405
- const [error, setError] = useState(null);
406
- let { isDesignMode } = useContext3(WeaverseContext);
442
+ let _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
443
+ let [media, setMedia] = useState([]);
444
+ let [error, setError] = useState(null);
407
445
  useEffect2(() => {
408
446
  if (token) {
409
447
  let params = new URLSearchParams({
@@ -429,7 +467,7 @@ var Instagram = forwardRef9((props, ref) => {
429
467
  }
430
468
  let style = {
431
469
  "--wv-ig-images-per-row": imagesPerRow,
432
- "--wv-ig-images-gap": gap
470
+ "--wv-ig-images-gap": gap + "px"
433
471
  };
434
472
  return /* @__PURE__ */ React11.createElement("div", __spreadProps(__spreadValues({
435
473
  ref
@@ -438,15 +476,15 @@ var Instagram = forwardRef9((props, ref) => {
438
476
  }), /* @__PURE__ */ React11.createElement("div", {
439
477
  className: "wv-ig-media-container"
440
478
  }, media.slice(0, numberOfImages).map((item) => {
441
- let linkProps;
442
- if (!isDesignMode) {
443
- linkProps = { href: item.permalink, target: "_blank" };
444
- }
445
- return /* @__PURE__ */ React11.createElement("a", __spreadValues({
446
- key: item.id
447
- }, linkProps), /* @__PURE__ */ React11.createElement("img", {
448
- alt: item.caption,
449
- src: item.media_url
479
+ let { id, permalink, caption, media_url } = item;
480
+ return /* @__PURE__ */ React11.createElement("a", {
481
+ key: id,
482
+ href: permalink,
483
+ target: "_blank",
484
+ rel: "noreferrer"
485
+ }, /* @__PURE__ */ React11.createElement("img", {
486
+ alt: caption,
487
+ src: media_url
450
488
  }));
451
489
  })));
452
490
  });
@@ -477,6 +515,126 @@ Instagram.defaultProps = {
477
515
  };
478
516
  var instagram_default = Instagram;
479
517
 
518
+ // src/elements/accordion/index.tsx
519
+ import React12, { createContext, forwardRef as forwardRef10, useState as useState2 } from "react";
520
+ var AccordionContext = createContext({
521
+ active: null,
522
+ setActive: () => {
523
+ }
524
+ });
525
+ var Accordion = forwardRef10((props, ref) => {
526
+ const _a = props, { items, children } = _a, rest = __objRest(_a, ["items", "children"]);
527
+ const [active, setActive] = useState2(null);
528
+ const setOpenAccordion = (id) => {
529
+ if (id === active) {
530
+ setActive(null);
531
+ } else {
532
+ setActive(id);
533
+ }
534
+ };
535
+ console.info("9779 active", active);
536
+ return /* @__PURE__ */ React12.createElement("div", __spreadValues({
537
+ ref
538
+ }, rest), /* @__PURE__ */ React12.createElement(AccordionContext.Provider, {
539
+ value: { active, setActive: setOpenAccordion }
540
+ }, children));
541
+ });
542
+ Accordion.defaultProps = {
543
+ items: [
544
+ {
545
+ id: 1,
546
+ headerText: "Header 1",
547
+ childrenId: true
548
+ },
549
+ {
550
+ id: 2,
551
+ headerText: "Header 2"
552
+ }
553
+ ],
554
+ css: {
555
+ "@desktop": {
556
+ display: "flex",
557
+ flexDirection: "column",
558
+ gap: 4,
559
+ ".wv-accordion-header": {
560
+ borderRadius: 4,
561
+ padding: 4,
562
+ marginBottom: 4,
563
+ backgroundColor: "#aaa",
564
+ "&.active": {
565
+ color: "blue"
566
+ },
567
+ '&.active + [data-wv-type="accordion.content"]': {
568
+ display: "grid"
569
+ }
570
+ }
571
+ }
572
+ }
573
+ };
574
+ var accordion_default = Accordion;
575
+
576
+ // src/elements/accordion/AccordionWrapper.tsx
577
+ import React13, { forwardRef as forwardRef11, useContext as useContext4 } from "react";
578
+ var AccordionWrapper = forwardRef11((props, ref) => {
579
+ const _a = props, { wrapperId, headerText, children } = _a, rest = __objRest(_a, ["wrapperId", "headerText", "children"]);
580
+ const { active, setActive } = useContext4(AccordionContext);
581
+ return /* @__PURE__ */ React13.createElement("div", __spreadValues({
582
+ ref
583
+ }, rest), /* @__PURE__ */ React13.createElement("div", {
584
+ onClick: () => setActive(wrapperId),
585
+ className: `wv-accordion-header ${active === wrapperId ? "active" : ""}`
586
+ }, headerText, " #", wrapperId), children);
587
+ });
588
+ AccordionWrapper.defaultProps = {
589
+ wrapperId: 1,
590
+ headerText: "Header 1",
591
+ css: {
592
+ "@desktop": {
593
+ maxHeight: "100%"
594
+ }
595
+ }
596
+ };
597
+ var AccordionWrapper_default = AccordionWrapper;
598
+
599
+ // src/elements/accordion/AccordionContent.tsx
600
+ import React14, { forwardRef as forwardRef12 } from "react";
601
+ var AccordionContent = forwardRef12((props, ref) => {
602
+ const _a = props, { rows, columns, gap, rowSize, children } = _a, rest = __objRest(_a, ["rows", "columns", "gap", "rowSize", "children"]);
603
+ let style = {
604
+ "--rows": rows,
605
+ "--columns": columns,
606
+ "--gap": gap + "px",
607
+ "--row-size": rowSize + "px",
608
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
609
+ };
610
+ return /* @__PURE__ */ React14.createElement("div", __spreadProps(__spreadValues({
611
+ ref
612
+ }, rest), {
613
+ style
614
+ }), React14.Children.count(children) > 0 ? children : /* @__PURE__ */ React14.createElement(Placeholder_default, {
615
+ element: "Accordion"
616
+ }, "Item Content"));
617
+ });
618
+ AccordionContent.defaultProps = {
619
+ rows: 2,
620
+ columns: 12,
621
+ gap: 4,
622
+ rowSize: 48,
623
+ css: {
624
+ "@desktop": {
625
+ width: "100%",
626
+ maxWidth: "var(--grid-size)",
627
+ backgroundColor: "#DDD",
628
+ display: "none",
629
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
630
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
631
+ gap: "var(--gap)",
632
+ borderRadius: 4
633
+ }
634
+ }
635
+ };
636
+ var AccordionContent_default = AccordionContent;
637
+
480
638
  // src/elements/index.ts
481
639
  var elements = {
482
640
  Countdown: {
@@ -514,6 +672,18 @@ var elements = {
514
672
  Video: {
515
673
  Component: video_default,
516
674
  type: "video"
675
+ },
676
+ Accordion: {
677
+ Component: accordion_default,
678
+ type: "accordion"
679
+ },
680
+ AccordionWrapper: {
681
+ Component: AccordionWrapper_default,
682
+ type: "accordion.wrapper"
683
+ },
684
+ AccordionContent: {
685
+ Component: AccordionContent_default,
686
+ type: "accordion.content"
517
687
  }
518
688
  };
519
689
  var elements_default = elements;
@@ -526,13 +696,13 @@ var createRootContext = (configs) => {
526
696
  });
527
697
  return rootContext;
528
698
  };
529
- var WeaverseContext = createContext({});
699
+ var WeaverseContext = createContext2({});
530
700
  var WeaverseContextProvider = WeaverseContext.Provider;
531
701
  var WeaverseContextConsumer = WeaverseContext.Consumer;
532
702
 
533
703
  // src/renderer.tsx
534
704
  import { isBrowser } from "@weaverse/core";
535
- import React12, { useContext as useContext4, useEffect as useEffect3, useRef, useState as useState2 } from "react";
705
+ import React15, { useContext as useContext5, useEffect as useEffect3, useRef, useState as useState3 } from "react";
536
706
 
537
707
  // src/utils/index.ts
538
708
  var shortCssObject = (css) => {
@@ -559,8 +729,8 @@ function generateItemClass(instance, stitchesInstance) {
559
729
 
560
730
  // src/renderer.tsx
561
731
  var WeaverseRoot = ({ context }) => {
562
- var _a;
563
- let [, setData] = useState2(context.projectData);
732
+ var _a, _b;
733
+ let [, setData] = useState3(context.projectData);
564
734
  let rootRef = useRef();
565
735
  useEffect3(() => {
566
736
  let update = () => setData({});
@@ -575,19 +745,19 @@ var WeaverseRoot = ({ context }) => {
575
745
  }, []);
576
746
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
577
747
  let themeClass = context.stitchesInstance.theme.className;
578
- return /* @__PURE__ */ React12.createElement("div", __spreadProps(__spreadValues({
748
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ React15.createElement("div", __spreadProps(__spreadValues({
579
749
  className: `weaverse-content-root ${themeClass}`
580
750
  }, eventHandlers), {
581
751
  ref: rootRef
582
- }), /* @__PURE__ */ React12.createElement(WeaverseContextProvider, {
752
+ }), /* @__PURE__ */ React15.createElement(WeaverseContextProvider, {
583
753
  value: context
584
- }, /* @__PURE__ */ React12.createElement(ItemInstance, {
585
- id: context.projectData.rootId || 0
586
- })));
754
+ }, /* @__PURE__ */ React15.createElement(ItemInstance, {
755
+ id: context.projectData.rootId
756
+ }))) : null;
587
757
  };
588
758
  var ItemComponent = ({ instance }) => {
589
- let { stitchesInstance, elementInstances } = useContext4(WeaverseContext);
590
- let [data, setData] = useState2(instance.data);
759
+ let { stitchesInstance, elementInstances } = useContext5(WeaverseContext);
760
+ let [data, setData] = useState3(instance.data);
591
761
  let _a = data, { id, type, childIds = [], css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
592
762
  useEffect3(() => {
593
763
  var _a2;
@@ -609,12 +779,12 @@ var ItemComponent = ({ instance }) => {
609
779
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
610
780
  rest.ref = instance.ref;
611
781
  }
612
- return /* @__PURE__ */ React12.createElement(Component, __spreadValues({
782
+ return /* @__PURE__ */ React15.createElement(Component, __spreadValues({
613
783
  key: id,
614
784
  "data-wv-type": type,
615
785
  "data-wv-id": id,
616
786
  className: generateItemClass(instance, stitchesInstance)
617
- }, rest), childIds.map((id2) => /* @__PURE__ */ React12.createElement(ItemInstance, {
787
+ }, rest), childIds.map((id2) => /* @__PURE__ */ React15.createElement(ItemInstance, {
618
788
  key: id2,
619
789
  id: id2
620
790
  })));
@@ -622,15 +792,15 @@ var ItemComponent = ({ instance }) => {
622
792
  return null;
623
793
  };
624
794
  var ItemInstance = ({ id }) => {
625
- let context = useContext4(WeaverseContext);
795
+ let context = useContext5(WeaverseContext);
626
796
  let { itemInstances } = context;
627
797
  let instance = itemInstances.get(id);
628
798
  if (!instance) {
629
- return /* @__PURE__ */ React12.createElement("div", {
799
+ return /* @__PURE__ */ React15.createElement("div", {
630
800
  style: { display: "none" }
631
801
  }, "Item instance ", id, " not found");
632
802
  }
633
- return /* @__PURE__ */ React12.createElement(ItemComponent, {
803
+ return /* @__PURE__ */ React15.createElement(ItemComponent, {
634
804
  instance
635
805
  });
636
806
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.22",
2
+ "version": "0.6.26",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -31,6 +31,6 @@
31
31
  "name": "@weaverse/react",
32
32
  "author": "Weaverse Team",
33
33
  "dependencies": {
34
- "@weaverse/core": "0.6.22"
34
+ "@weaverse/core": "0.6.26"
35
35
  }
36
36
  }