@weaverse/react 0.7.16 → 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.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as react from 'react';
2
2
  import { ReactElement, ReactNode, CSSProperties } from 'react';
3
- import { ElementsMap, WeaverseType, Weaverse, ElementCSS, WeaverseItemStore } from '@weaverse/core';
3
+ import { WeaverseElement, WeaverseType, Weaverse, ElementCSS, WeaverseItemStore } from '@weaverse/core';
4
4
  export * from '@weaverse/core';
5
5
 
6
6
  declare const SharedComponents: {
7
7
  Placeholder: react.ForwardRefExoticComponent<PlaceholderProps & react.RefAttributes<HTMLDivElement>>;
8
8
  };
9
- declare const Elements: ElementsMap;
9
+ declare const Elements: Record<string, WeaverseElement>;
10
10
 
11
11
  declare let createRootContext: (configs: WeaverseType) => Weaverse;
12
12
  declare let WeaverseContext: react.Context<Weaverse>;
@@ -55,7 +55,12 @@ interface GridContentElementProps extends WeaverseElementProps {
55
55
  gap: number;
56
56
  rowSize: number;
57
57
  }
58
- interface LayoutElementProps extends GridContentElementProps {
58
+ interface BackgroundDataProps {
59
+ backgroundColor?: string;
60
+ backgroundImage?: string;
61
+ objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
62
+ }
63
+ interface LayoutElementProps extends BackgroundDataProps, GridContentElementProps {
59
64
  gridSize: number;
60
65
  }
61
66
  interface MapElementProps extends WeaverseElementProps {
package/dist/index.js CHANGED
@@ -299,7 +299,18 @@ var image_default = Image;
299
299
  // src/elements/layout.tsx
300
300
  var import_react6 = __toESM(require("react"));
301
301
  var Layout = (0, import_react6.forwardRef)((props, ref) => {
302
- 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;
303
314
  let style = {
304
315
  "--grid-size": gridSize + "px",
305
316
  "--rows": rows,
@@ -312,10 +323,30 @@ var Layout = (0, import_react6.forwardRef)((props, ref) => {
312
323
  ref,
313
324
  ...rest,
314
325
  style
315
- }, /* @__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", {
316
331
  "data-layout-content": true
317
332
  }, children));
318
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
+ };
319
350
  var css5 = {
320
351
  "@desktop": {
321
352
  paddingTop: "16px",
@@ -339,6 +370,18 @@ var css5 = {
339
370
  }
340
371
  }
341
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
+ };
342
385
  Layout.defaultProps = {
343
386
  gridSize: 1224,
344
387
  rows: 12,
@@ -449,7 +492,7 @@ var Placeholder = (0, import_react9.forwardRef)(
449
492
  (props, ref) => {
450
493
  let { element, children, ...rest } = props;
451
494
  return /* @__PURE__ */ import_react9.default.createElement("div", {
452
- "data-wv-type": "placeholder",
495
+ "data-wv-placeholder": true,
453
496
  style: { display: "none" },
454
497
  ref,
455
498
  ...rest
@@ -575,7 +618,8 @@ var Elements = {
575
618
  Layout: {
576
619
  Component: layout_default,
577
620
  type: "layout",
578
- defaultCss: css5
621
+ defaultCss: css5,
622
+ permanentCss
579
623
  },
580
624
  Map: {
581
625
  Component: map_default,
@@ -638,39 +682,42 @@ var WeaverseRoot = ({ context }) => {
638
682
  var _a, _b;
639
683
  let [, setData] = (0, import_react11.useState)(context.projectData);
640
684
  let rootRef = (0, import_react11.useRef)();
641
- let update = () => setData({});
685
+ let renderRoot = () => setData({});
642
686
  (0, import_react11.useEffect)(() => {
643
- context.subscribe(update);
687
+ context.subscribe(renderRoot);
644
688
  context.contentRootElement = rootRef.current;
645
689
  return () => {
646
- context.unsubscribe(update);
690
+ context.unsubscribe(renderRoot);
647
691
  };
648
692
  }, []);
649
693
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
650
694
  let themeClass = context.stitchesInstance.theme.className;
651
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ import_react11.default.createElement("div", {
652
- className: `weaverse-content-root ${themeClass}`,
653
- ...eventHandlers,
654
- ref: rootRef
655
- }, /* @__PURE__ */ import_react11.default.createElement(WeaverseContextProvider, {
656
- value: context
657
- }, /* @__PURE__ */ import_react11.default.createElement(ItemInstance, {
658
- id: context.projectData.rootId
659
- }))) : 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;
660
707
  };
661
708
  var ItemComponent = ({ instance }) => {
662
709
  let { stitchesInstance, elementInstances } = (0, import_react11.useContext)(WeaverseContext);
663
710
  let [data, setData] = (0, import_react11.useState)(instance.data);
664
711
  let { id, type, childIds = [], css: css10, className, ...rest } = data;
665
712
  (0, import_react11.useEffect)(() => {
666
- let update = (data2) => setData({ ...data2 });
667
- instance.subscribe(update);
713
+ let render = (data2) => setData({ ...data2 });
714
+ instance.subscribe(render);
668
715
  if (import_core2.isBrowser && !instance.ref.current) {
669
716
  Object.assign(instance.ref, {
670
717
  current: document.querySelector(`[data-wv-id="${id}"]`)
671
718
  });
672
719
  }
673
- return () => instance.unsubscribe(update);
720
+ return () => instance.unsubscribe(render);
674
721
  }, []);
675
722
  let Element = elementInstances.get(type);
676
723
  if (Element == null ? void 0 : Element.Component) {
@@ -688,8 +735,10 @@ var ItemComponent = ({ instance }) => {
688
735
  key: id2,
689
736
  id: id2
690
737
  })));
738
+ } else {
739
+ console.log(`Unknown element: ${type}`);
740
+ return null;
691
741
  }
692
- return null;
693
742
  };
694
743
  var ItemInstance = ({ id }) => {
695
744
  let context = (0, import_react11.useContext)(WeaverseContext);
package/dist/index.mjs CHANGED
@@ -260,7 +260,18 @@ var image_default = Image;
260
260
  // src/elements/layout.tsx
261
261
  import React6, { forwardRef as forwardRef4 } from "react";
262
262
  var Layout = forwardRef4((props, ref) => {
263
- let { children, rows, gap, rowSize, columns, gridSize, ...rest } = props;
263
+ let {
264
+ children,
265
+ rows,
266
+ gap,
267
+ rowSize,
268
+ columns,
269
+ gridSize,
270
+ backgroundColor,
271
+ backgroundImage,
272
+ objectFit,
273
+ ...rest
274
+ } = props;
264
275
  let style = {
265
276
  "--grid-size": gridSize + "px",
266
277
  "--rows": rows,
@@ -273,10 +284,30 @@ var Layout = forwardRef4((props, ref) => {
273
284
  ref,
274
285
  ...rest,
275
286
  style
276
- }, /* @__PURE__ */ React6.createElement("div", {
287
+ }, /* @__PURE__ */ React6.createElement(LayoutBackground, {
288
+ imgUrl: backgroundImage,
289
+ bgColor: backgroundColor,
290
+ objectFit
291
+ }), /* @__PURE__ */ React6.createElement("div", {
277
292
  "data-layout-content": true
278
293
  }, children));
279
294
  });
295
+ var LayoutBackground = (props) => {
296
+ let { bgColor, imgUrl, objectFit } = props;
297
+ let style = {
298
+ ["--bg-color"]: bgColor,
299
+ ["--object-fit"]: objectFit
300
+ };
301
+ return imgUrl || bgColor ? /* @__PURE__ */ React6.createElement("div", {
302
+ "data-wv-bg": true,
303
+ style
304
+ }, imgUrl && /* @__PURE__ */ React6.createElement("img", {
305
+ width: "100%",
306
+ height: "100%",
307
+ "data-blink-src": imgUrl,
308
+ alt: "wv-layout-background"
309
+ })) : null;
310
+ };
280
311
  var css5 = {
281
312
  "@desktop": {
282
313
  paddingTop: "16px",
@@ -300,6 +331,18 @@ var css5 = {
300
331
  }
301
332
  }
302
333
  };
334
+ var permanentCss = {
335
+ "@desktop": {
336
+ "[data-wv-bg]": {
337
+ position: "absolute",
338
+ inset: 0,
339
+ backgroundColor: "var(--bg-color)"
340
+ },
341
+ img: {
342
+ objectFit: "var(--object-fit, cover)"
343
+ }
344
+ }
345
+ };
303
346
  Layout.defaultProps = {
304
347
  gridSize: 1224,
305
348
  rows: 12,
@@ -410,7 +453,7 @@ var Placeholder = forwardRef8(
410
453
  (props, ref) => {
411
454
  let { element, children, ...rest } = props;
412
455
  return /* @__PURE__ */ React10.createElement("div", {
413
- "data-wv-type": "placeholder",
456
+ "data-wv-placeholder": true,
414
457
  style: { display: "none" },
415
458
  ref,
416
459
  ...rest
@@ -536,7 +579,8 @@ var Elements = {
536
579
  Layout: {
537
580
  Component: layout_default,
538
581
  type: "layout",
539
- defaultCss: css5
582
+ defaultCss: css5,
583
+ permanentCss
540
584
  },
541
585
  Map: {
542
586
  Component: map_default,
@@ -599,39 +643,42 @@ var WeaverseRoot = ({ context }) => {
599
643
  var _a, _b;
600
644
  let [, setData] = useState2(context.projectData);
601
645
  let rootRef = useRef();
602
- let update = () => setData({});
646
+ let renderRoot = () => setData({});
603
647
  useEffect3(() => {
604
- context.subscribe(update);
648
+ context.subscribe(renderRoot);
605
649
  context.contentRootElement = rootRef.current;
606
650
  return () => {
607
- context.unsubscribe(update);
651
+ context.unsubscribe(renderRoot);
608
652
  };
609
653
  }, []);
610
654
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
611
655
  let themeClass = context.stitchesInstance.theme.className;
612
- return ((_b = context.projectData) == null ? void 0 : _b.rootId) ? /* @__PURE__ */ React12.createElement("div", {
613
- className: `weaverse-content-root ${themeClass}`,
614
- ...eventHandlers,
615
- ref: rootRef
616
- }, /* @__PURE__ */ React12.createElement(WeaverseContextProvider, {
617
- value: context
618
- }, /* @__PURE__ */ React12.createElement(ItemInstance, {
619
- id: context.projectData.rootId
620
- }))) : null;
656
+ if ((_b = context.projectData) == null ? void 0 : _b.rootId) {
657
+ return /* @__PURE__ */ React12.createElement("div", {
658
+ className: `weaverse-content-root ${themeClass}`,
659
+ ...eventHandlers,
660
+ ref: rootRef
661
+ }, /* @__PURE__ */ React12.createElement(WeaverseContextProvider, {
662
+ value: context
663
+ }, /* @__PURE__ */ React12.createElement(ItemInstance, {
664
+ id: context.projectData.rootId
665
+ })));
666
+ }
667
+ return null;
621
668
  };
622
669
  var ItemComponent = ({ instance }) => {
623
670
  let { stitchesInstance, elementInstances } = useContext3(WeaverseContext);
624
671
  let [data, setData] = useState2(instance.data);
625
672
  let { id, type, childIds = [], css: css10, className, ...rest } = data;
626
673
  useEffect3(() => {
627
- let update = (data2) => setData({ ...data2 });
628
- instance.subscribe(update);
674
+ let render = (data2) => setData({ ...data2 });
675
+ instance.subscribe(render);
629
676
  if (isBrowser && !instance.ref.current) {
630
677
  Object.assign(instance.ref, {
631
678
  current: document.querySelector(`[data-wv-id="${id}"]`)
632
679
  });
633
680
  }
634
- return () => instance.unsubscribe(update);
681
+ return () => instance.unsubscribe(render);
635
682
  }, []);
636
683
  let Element = elementInstances.get(type);
637
684
  if (Element == null ? void 0 : Element.Component) {
@@ -649,8 +696,10 @@ var ItemComponent = ({ instance }) => {
649
696
  key: id2,
650
697
  id: id2
651
698
  })));
699
+ } else {
700
+ console.log(`Unknown element: ${type}`);
701
+ return null;
652
702
  }
653
- return null;
654
703
  };
655
704
  var ItemInstance = ({ id }) => {
656
705
  let context = useContext3(WeaverseContext);
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.16",
2
+ "version": "0.7.17",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -31,7 +31,7 @@
31
31
  "name": "@weaverse/react",
32
32
  "author": "Weaverse Team",
33
33
  "dependencies": {
34
- "@weaverse/core": "0.7.16",
34
+ "@weaverse/core": "0.7.17",
35
35
  "nuka-carousel": "^5.4.0"
36
36
  }
37
37
  }