@weaverse/react 0.6.24 → 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
@@ -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
  }
@@ -434,10 +469,9 @@ var Placeholder_default = Placeholder;
434
469
  // src/elements/instagram.tsx
435
470
  var INSTAGRAM_API = "https://graph.instagram.com";
436
471
  var Instagram = (0, import_react9.forwardRef)((props, ref) => {
437
- const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
438
- const [media, setMedia] = (0, import_react9.useState)([]);
439
- const [error, setError] = (0, import_react9.useState)(null);
440
- 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);
441
475
  (0, import_react9.useEffect)(() => {
442
476
  if (token) {
443
477
  let params = new URLSearchParams({
@@ -463,7 +497,7 @@ var Instagram = (0, import_react9.forwardRef)((props, ref) => {
463
497
  }
464
498
  let style = {
465
499
  "--wv-ig-images-per-row": imagesPerRow,
466
- "--wv-ig-images-gap": gap
500
+ "--wv-ig-images-gap": gap + "px"
467
501
  };
468
502
  return /* @__PURE__ */ import_react9.default.createElement("div", __spreadProps(__spreadValues({
469
503
  ref
@@ -472,15 +506,15 @@ var Instagram = (0, import_react9.forwardRef)((props, ref) => {
472
506
  }), /* @__PURE__ */ import_react9.default.createElement("div", {
473
507
  className: "wv-ig-media-container"
474
508
  }, media.slice(0, numberOfImages).map((item) => {
475
- let linkProps;
476
- if (!isDesignMode) {
477
- linkProps = { href: item.permalink, target: "_blank" };
478
- }
479
- return /* @__PURE__ */ import_react9.default.createElement("a", __spreadValues({
480
- key: item.id
481
- }, linkProps), /* @__PURE__ */ import_react9.default.createElement("img", {
482
- alt: item.caption,
483
- 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
484
518
  }));
485
519
  })));
486
520
  });
@@ -725,7 +759,7 @@ function generateItemClass(instance, stitchesInstance) {
725
759
 
726
760
  // src/renderer.tsx
727
761
  var WeaverseRoot = ({ context }) => {
728
- var _a;
762
+ var _a, _b;
729
763
  let [, setData] = (0, import_react14.useState)(context.projectData);
730
764
  let rootRef = (0, import_react14.useRef)();
731
765
  (0, import_react14.useEffect)(() => {
@@ -741,15 +775,15 @@ var WeaverseRoot = ({ context }) => {
741
775
  }, []);
742
776
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
743
777
  let themeClass = context.stitchesInstance.theme.className;
744
- return /* @__PURE__ */ import_react14.default.createElement("div", __spreadProps(__spreadValues({
778
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react14.default.createElement("div", __spreadProps(__spreadValues({
745
779
  className: `weaverse-content-root ${themeClass}`
746
780
  }, eventHandlers), {
747
781
  ref: rootRef
748
782
  }), /* @__PURE__ */ import_react14.default.createElement(WeaverseContextProvider, {
749
783
  value: context
750
784
  }, /* @__PURE__ */ import_react14.default.createElement(ItemInstance, {
751
- id: context.projectData.rootId || 0
752
- })));
785
+ id: context.projectData.rootId
786
+ }))) : null;
753
787
  };
754
788
  var ItemComponent = ({ instance }) => {
755
789
  let { stitchesInstance, elementInstances } = (0, import_react14.useContext)(WeaverseContext);
package/dist/index.mjs CHANGED
@@ -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,7 +409,7 @@ 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";
@@ -404,10 +439,9 @@ var Placeholder_default = Placeholder;
404
439
  // src/elements/instagram.tsx
405
440
  var INSTAGRAM_API = "https://graph.instagram.com";
406
441
  var Instagram = forwardRef9((props, ref) => {
407
- const _a = props, { token, username, numberOfImages, imagesPerRow, gap } = _a, rest = __objRest(_a, ["token", "username", "numberOfImages", "imagesPerRow", "gap"]);
408
- const [media, setMedia] = useState([]);
409
- const [error, setError] = useState(null);
410
- 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);
411
445
  useEffect2(() => {
412
446
  if (token) {
413
447
  let params = new URLSearchParams({
@@ -433,7 +467,7 @@ var Instagram = forwardRef9((props, ref) => {
433
467
  }
434
468
  let style = {
435
469
  "--wv-ig-images-per-row": imagesPerRow,
436
- "--wv-ig-images-gap": gap
470
+ "--wv-ig-images-gap": gap + "px"
437
471
  };
438
472
  return /* @__PURE__ */ React11.createElement("div", __spreadProps(__spreadValues({
439
473
  ref
@@ -442,15 +476,15 @@ var Instagram = forwardRef9((props, ref) => {
442
476
  }), /* @__PURE__ */ React11.createElement("div", {
443
477
  className: "wv-ig-media-container"
444
478
  }, media.slice(0, numberOfImages).map((item) => {
445
- let linkProps;
446
- if (!isDesignMode) {
447
- linkProps = { href: item.permalink, target: "_blank" };
448
- }
449
- return /* @__PURE__ */ React11.createElement("a", __spreadValues({
450
- key: item.id
451
- }, linkProps), /* @__PURE__ */ React11.createElement("img", {
452
- alt: item.caption,
453
- 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
454
488
  }));
455
489
  })));
456
490
  });
@@ -695,7 +729,7 @@ function generateItemClass(instance, stitchesInstance) {
695
729
 
696
730
  // src/renderer.tsx
697
731
  var WeaverseRoot = ({ context }) => {
698
- var _a;
732
+ var _a, _b;
699
733
  let [, setData] = useState3(context.projectData);
700
734
  let rootRef = useRef();
701
735
  useEffect3(() => {
@@ -711,15 +745,15 @@ var WeaverseRoot = ({ context }) => {
711
745
  }, []);
712
746
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
713
747
  let themeClass = context.stitchesInstance.theme.className;
714
- return /* @__PURE__ */ React15.createElement("div", __spreadProps(__spreadValues({
748
+ return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ React15.createElement("div", __spreadProps(__spreadValues({
715
749
  className: `weaverse-content-root ${themeClass}`
716
750
  }, eventHandlers), {
717
751
  ref: rootRef
718
752
  }), /* @__PURE__ */ React15.createElement(WeaverseContextProvider, {
719
753
  value: context
720
754
  }, /* @__PURE__ */ React15.createElement(ItemInstance, {
721
- id: context.projectData.rootId || 0
722
- })));
755
+ id: context.projectData.rootId
756
+ }))) : null;
723
757
  };
724
758
  var ItemComponent = ({ instance }) => {
725
759
  let { stitchesInstance, elementInstances } = useContext5(WeaverseContext);
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.24",
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.24"
34
+ "@weaverse/core": "0.6.26"
35
35
  }
36
36
  }