@weaverse/react 0.6.4 → 0.6.8

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,10 +1,18 @@
1
1
  import { WeaverseType, Weaverse } from '@weaverse/core';
2
2
  export * from '@weaverse/core';
3
+ import React$1 from 'react';
3
4
 
4
5
  declare const createRootContext: (configs: WeaverseType) => Weaverse;
6
+ declare let WeaverseContext: React$1.Context<Weaverse>;
7
+ declare let WeaverseContextProvider: React$1.Provider<Weaverse>;
8
+ declare let WeaverseContextConsumer: React$1.Consumer<Weaverse>;
5
9
  declare type WeaverseRootPropsType = {
6
10
  context: Weaverse;
7
11
  };
8
12
  declare const WeaverseRoot: ({ context }: WeaverseRootPropsType) => JSX.Element;
9
13
 
10
- export { WeaverseRoot, WeaverseRootPropsType, createRootContext };
14
+ interface WeaverseElementProps {
15
+ children?: React.ReactNode;
16
+ }
17
+
18
+ export { WeaverseContext, WeaverseContextConsumer, WeaverseContextProvider, WeaverseElementProps, WeaverseRoot, WeaverseRootPropsType, createRootContext };
package/dist/index.js CHANGED
@@ -52,6 +52,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
52
52
  // src/index.ts
53
53
  var src_exports = {};
54
54
  __export(src_exports, {
55
+ WeaverseContext: () => WeaverseContext,
56
+ WeaverseContextConsumer: () => WeaverseContextConsumer,
57
+ WeaverseContextProvider: () => WeaverseContextProvider,
55
58
  WeaverseRoot: () => WeaverseRoot,
56
59
  createRootContext: () => createRootContext
57
60
  });
@@ -79,7 +82,15 @@ var base_default = BaseElement;
79
82
  // src/elements/button.tsx
80
83
  var React2 = __toESM(require("react"));
81
84
  var Button = React2.forwardRef((props, ref) => {
82
- const _a = props, { buttonType, css } = _a, rest = __objRest(_a, ["buttonType", "css"]);
85
+ const _a = props, { buttonType, css, openInNewTab = false, target = "" } = _a, rest = __objRest(_a, ["buttonType", "css", "openInNewTab", "target"]);
86
+ if (target) {
87
+ return /* @__PURE__ */ React2.createElement("a", {
88
+ href: target,
89
+ target: openInNewTab ? "_blank" : "_self"
90
+ }, /* @__PURE__ */ React2.createElement("button", __spreadValues({
91
+ ref
92
+ }, rest), props.value));
93
+ }
83
94
  return /* @__PURE__ */ React2.createElement("button", __spreadValues({
84
95
  ref
85
96
  }, rest), props.value);
@@ -114,6 +125,12 @@ var schema2 = {
114
125
  },
115
126
  {
116
127
  type: "duplicate"
128
+ },
129
+ {
130
+ type: "link"
131
+ },
132
+ {
133
+ type: "color"
117
134
  }
118
135
  ],
119
136
  data: {
@@ -123,7 +140,9 @@ var schema2 = {
123
140
  fontSize: "13px",
124
141
  padding: "10px 15px"
125
142
  }
126
- }
143
+ },
144
+ target: "",
145
+ openInNewTab: false
127
146
  }
128
147
  };
129
148
  var button_default = Button;
@@ -161,11 +180,20 @@ var container_default = Container;
161
180
  // src/elements/layout.tsx
162
181
  var import_react3 = __toESM(require("react"));
163
182
  var Layout = (0, import_react3.forwardRef)((props, ref) => {
164
- return /* @__PURE__ */ import_react3.default.createElement("div", __spreadProps(__spreadValues({
165
- ref
166
- }, props), {
167
- children: props.children
168
- }));
183
+ const _a = props, { css, children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["css", "children", "rows", "gap", "rowSize", "columns", "gridSize"]);
184
+ return /* @__PURE__ */ import_react3.default.createElement("section", __spreadValues({
185
+ ref,
186
+ style: {
187
+ "--grid-size": gridSize + "px",
188
+ "--rows": rows,
189
+ "--columns": columns,
190
+ "--gap": gap + "px",
191
+ "--row-size": rowSize + "px",
192
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
193
+ }
194
+ }, rest), /* @__PURE__ */ import_react3.default.createElement("div", {
195
+ "data-layout-content": true
196
+ }, children));
169
197
  });
170
198
  var schema4 = {
171
199
  title: "Layout",
@@ -173,20 +201,33 @@ var schema4 = {
173
201
  data: {
174
202
  css: {
175
203
  "@desktop": {
176
- display: "grid !important",
177
- gridTemplateRows: "repeat($row-count, $row-size)",
178
- gridTemplateColumns: "repeat($column-count, 1fr)",
179
- gridGap: "$gap",
180
- minHeight: "104px",
181
- width: "$width",
182
- maxWidth: "$max-width",
183
- margin: "0 auto"
204
+ overflow: "hidden",
205
+ paddingTop: "16px",
206
+ paddingBottom: "16px",
207
+ paddingLeft: "var(--gap)",
208
+ paddingRight: "var(--gap)",
209
+ "> [data-layout-content]": {
210
+ margin: "0 auto",
211
+ display: "grid !important",
212
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
213
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
214
+ gap: "var(--gap)",
215
+ maxWidth: "var(--grid-size)"
216
+ }
184
217
  },
185
218
  "@mobile": {
186
- display: "flex !important",
187
- flexDirection: "column"
219
+ padding: "0",
220
+ "> [data-layout-content]": {
221
+ display: "flex !important",
222
+ flexDirection: "column"
223
+ }
188
224
  }
189
- }
225
+ },
226
+ gridSize: 1224,
227
+ rows: 12,
228
+ columns: 12,
229
+ gap: 16,
230
+ rowSize: 48
190
231
  },
191
232
  settings: []
192
233
  };
@@ -207,7 +248,7 @@ Text.defaultProps = {
207
248
  };
208
249
  var schema5 = {
209
250
  type: "text",
210
- title: "Text Settings",
251
+ title: "Text",
211
252
  settings: [],
212
253
  data: {
213
254
  css: {
@@ -294,7 +335,7 @@ var shortCssObject = (css) => {
294
335
 
295
336
  // src/renderer.tsx
296
337
  var import_core = require("@weaverse/core");
297
- var React7 = __toESM(require("react"));
338
+ var import_react5 = __toESM(require("react"));
298
339
  var createRootContext = (configs) => {
299
340
  const rootContext = new import_core.Weaverse(configs);
300
341
  Object.keys(elements_default).forEach((key) => {
@@ -302,10 +343,13 @@ var createRootContext = (configs) => {
302
343
  });
303
344
  return rootContext;
304
345
  };
346
+ var WeaverseContext = (0, import_react5.createContext)({});
347
+ var WeaverseContextProvider = WeaverseContext.Provider;
348
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
305
349
  var WeaverseRoot = ({ context }) => {
306
350
  var _a;
307
- let [, setData] = React7.useState(context.projectData);
308
- React7.useEffect(() => {
351
+ let [, setData] = (0, import_react5.useState)(context.projectData);
352
+ (0, import_react5.useEffect)(() => {
309
353
  let handleUpdate = () => {
310
354
  setData({});
311
355
  };
@@ -319,17 +363,19 @@ var WeaverseRoot = ({ context }) => {
319
363
  }, []);
320
364
  let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
321
365
  let themeClass = context.stitchesInstance.theme.className;
322
- return /* @__PURE__ */ React7.createElement("div", __spreadValues({
366
+ return /* @__PURE__ */ import_react5.default.createElement("div", __spreadValues({
323
367
  className: `weaverse-content-root ${themeClass}`
324
- }, eventHandlers), /* @__PURE__ */ React7.createElement(RenderItem, {
325
- itemId: context.projectData.rootId || 0,
326
- context
327
- }));
368
+ }, eventHandlers), /* @__PURE__ */ import_react5.default.createElement(WeaverseContextProvider, {
369
+ value: context
370
+ }, /* @__PURE__ */ import_react5.default.createElement(RenderItem, {
371
+ itemId: context.projectData.rootId || 0
372
+ })));
328
373
  };
329
- var Item = ({ itemInstance, elementInstances, context }) => {
330
- let [data, setData] = React7.useState(itemInstance.data);
331
- let _a = data, { id, type, childIds, css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
332
- React7.useEffect(() => {
374
+ var Item = ({ itemInstance, elementInstances }) => {
375
+ var _b;
376
+ let [data, setData] = (0, import_react5.useState)(itemInstance.data);
377
+ let _a = data, { id, type, childIds, css, className: cls = "" } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
378
+ (0, import_react5.useEffect)(() => {
333
379
  let handleUpdate = (update) => {
334
380
  setData(__spreadValues({}, update));
335
381
  };
@@ -343,11 +389,15 @@ var Item = ({ itemInstance, elementInstances, context }) => {
343
389
  itemInstance.unsubscribe(handleUpdate);
344
390
  };
345
391
  }, []);
346
- let realClassName = className;
392
+ let context = (0, import_react5.useContext)(WeaverseContext);
393
+ let className = "";
347
394
  if (css) {
348
395
  let formattedCss = shortCssObject(css);
349
- let selector = context.stitchesInstance.css(formattedCss)().className;
350
- realClassName = realClassName ? `${selector} ${realClassName}` : selector;
396
+ let { className: newClass = "" } = context.stitchesInstance.css(formattedCss)();
397
+ let { stitchesClass } = itemInstance;
398
+ let otherClass = (((_b = itemInstance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
399
+ className = `${cls} ${newClass} ${otherClass}`.trim();
400
+ itemInstance.stitchesClass = newClass;
351
401
  }
352
402
  let element = elementInstances.get(type) || elementInstances.get("base");
353
403
  if (element == null ? void 0 : element.Component) {
@@ -355,41 +405,42 @@ var Item = ({ itemInstance, elementInstances, context }) => {
355
405
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
356
406
  rest.ref = itemInstance.ref;
357
407
  }
358
- return /* @__PURE__ */ React7.createElement(Component, __spreadProps(__spreadValues({
408
+ return /* @__PURE__ */ import_react5.default.createElement(Component, __spreadProps(__spreadValues({
359
409
  key: id,
360
410
  "data-wv-type": type,
361
411
  "data-wv-id": id
362
412
  }, rest), {
363
- className: realClassName
364
- }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ React7.createElement(RenderItem, {
413
+ className
414
+ }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ import_react5.default.createElement(RenderItem, {
365
415
  key: childId,
366
- itemId: childId,
367
- context
416
+ itemId: childId
368
417
  })));
369
418
  }
370
419
  return null;
371
420
  };
372
421
  var RenderItem = ({
373
- itemId,
374
- context
422
+ itemId
375
423
  }) => {
424
+ let context = (0, import_react5.useContext)(WeaverseContext);
376
425
  let { itemInstances, elementInstances } = context;
377
426
  let itemInstance = itemInstances.get(itemId);
378
427
  if (itemInstance) {
379
- return /* @__PURE__ */ React7.createElement(Item, {
428
+ return /* @__PURE__ */ import_react5.default.createElement(Item, {
380
429
  itemInstance,
381
- elementInstances,
382
- context
430
+ elementInstances
383
431
  });
384
432
  }
385
433
  console.warn(`Item instance ${itemId} not found`);
386
- return /* @__PURE__ */ React7.createElement(React7.Fragment, null);
434
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null);
387
435
  };
388
436
 
389
437
  // src/index.ts
390
438
  __reExport(src_exports, require("@weaverse/core"), module.exports);
391
439
  // Annotate the CommonJS export names for ESM import in node:
392
440
  0 && (module.exports = {
441
+ WeaverseContext,
442
+ WeaverseContextConsumer,
443
+ WeaverseContextProvider,
393
444
  WeaverseRoot,
394
445
  createRootContext
395
446
  });
package/dist/index.mjs CHANGED
@@ -52,7 +52,15 @@ var base_default = BaseElement;
52
52
  // src/elements/button.tsx
53
53
  import * as React2 from "react";
54
54
  var Button = React2.forwardRef((props, ref) => {
55
- const _a = props, { buttonType, css } = _a, rest = __objRest(_a, ["buttonType", "css"]);
55
+ const _a = props, { buttonType, css, openInNewTab = false, target = "" } = _a, rest = __objRest(_a, ["buttonType", "css", "openInNewTab", "target"]);
56
+ if (target) {
57
+ return /* @__PURE__ */ React2.createElement("a", {
58
+ href: target,
59
+ target: openInNewTab ? "_blank" : "_self"
60
+ }, /* @__PURE__ */ React2.createElement("button", __spreadValues({
61
+ ref
62
+ }, rest), props.value));
63
+ }
56
64
  return /* @__PURE__ */ React2.createElement("button", __spreadValues({
57
65
  ref
58
66
  }, rest), props.value);
@@ -87,6 +95,12 @@ var schema2 = {
87
95
  },
88
96
  {
89
97
  type: "duplicate"
98
+ },
99
+ {
100
+ type: "link"
101
+ },
102
+ {
103
+ type: "color"
90
104
  }
91
105
  ],
92
106
  data: {
@@ -96,7 +110,9 @@ var schema2 = {
96
110
  fontSize: "13px",
97
111
  padding: "10px 15px"
98
112
  }
99
- }
113
+ },
114
+ target: "",
115
+ openInNewTab: false
100
116
  }
101
117
  };
102
118
  var button_default = Button;
@@ -134,11 +150,20 @@ var container_default = Container;
134
150
  // src/elements/layout.tsx
135
151
  import React4, { forwardRef as forwardRef3 } from "react";
136
152
  var Layout = forwardRef3((props, ref) => {
137
- return /* @__PURE__ */ React4.createElement("div", __spreadProps(__spreadValues({
138
- ref
139
- }, props), {
140
- children: props.children
141
- }));
153
+ const _a = props, { css, children, rows, gap, rowSize, columns, gridSize } = _a, rest = __objRest(_a, ["css", "children", "rows", "gap", "rowSize", "columns", "gridSize"]);
154
+ return /* @__PURE__ */ React4.createElement("section", __spreadValues({
155
+ ref,
156
+ style: {
157
+ "--grid-size": gridSize + "px",
158
+ "--rows": rows,
159
+ "--columns": columns,
160
+ "--gap": gap + "px",
161
+ "--row-size": rowSize + "px",
162
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
163
+ }
164
+ }, rest), /* @__PURE__ */ React4.createElement("div", {
165
+ "data-layout-content": true
166
+ }, children));
142
167
  });
143
168
  var schema4 = {
144
169
  title: "Layout",
@@ -146,20 +171,33 @@ var schema4 = {
146
171
  data: {
147
172
  css: {
148
173
  "@desktop": {
149
- display: "grid !important",
150
- gridTemplateRows: "repeat($row-count, $row-size)",
151
- gridTemplateColumns: "repeat($column-count, 1fr)",
152
- gridGap: "$gap",
153
- minHeight: "104px",
154
- width: "$width",
155
- maxWidth: "$max-width",
156
- margin: "0 auto"
174
+ overflow: "hidden",
175
+ paddingTop: "16px",
176
+ paddingBottom: "16px",
177
+ paddingLeft: "var(--gap)",
178
+ paddingRight: "var(--gap)",
179
+ "> [data-layout-content]": {
180
+ margin: "0 auto",
181
+ display: "grid !important",
182
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
183
+ gridTemplateColumns: "repeat(var(--columns), minmax(0, var(--col-size)))",
184
+ gap: "var(--gap)",
185
+ maxWidth: "var(--grid-size)"
186
+ }
157
187
  },
158
188
  "@mobile": {
159
- display: "flex !important",
160
- flexDirection: "column"
189
+ padding: "0",
190
+ "> [data-layout-content]": {
191
+ display: "flex !important",
192
+ flexDirection: "column"
193
+ }
161
194
  }
162
- }
195
+ },
196
+ gridSize: 1224,
197
+ rows: 12,
198
+ columns: 12,
199
+ gap: 16,
200
+ rowSize: 48
163
201
  },
164
202
  settings: []
165
203
  };
@@ -180,7 +218,7 @@ Text.defaultProps = {
180
218
  };
181
219
  var schema5 = {
182
220
  type: "text",
183
- title: "Text Settings",
221
+ title: "Text",
184
222
  settings: [],
185
223
  data: {
186
224
  css: {
@@ -266,11 +304,8 @@ var shortCssObject = (css) => {
266
304
  };
267
305
 
268
306
  // src/renderer.tsx
269
- import {
270
- isBrowser,
271
- Weaverse
272
- } from "@weaverse/core";
273
- import * as React7 from "react";
307
+ import { isBrowser, Weaverse } from "@weaverse/core";
308
+ import React7, { createContext, useContext, useEffect, useState } from "react";
274
309
  var createRootContext = (configs) => {
275
310
  const rootContext = new Weaverse(configs);
276
311
  Object.keys(elements_default).forEach((key) => {
@@ -278,10 +313,13 @@ var createRootContext = (configs) => {
278
313
  });
279
314
  return rootContext;
280
315
  };
316
+ var WeaverseContext = createContext({});
317
+ var WeaverseContextProvider = WeaverseContext.Provider;
318
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
281
319
  var WeaverseRoot = ({ context }) => {
282
320
  var _a;
283
- let [, setData] = React7.useState(context.projectData);
284
- React7.useEffect(() => {
321
+ let [, setData] = useState(context.projectData);
322
+ useEffect(() => {
285
323
  let handleUpdate = () => {
286
324
  setData({});
287
325
  };
@@ -297,15 +335,17 @@ var WeaverseRoot = ({ context }) => {
297
335
  let themeClass = context.stitchesInstance.theme.className;
298
336
  return /* @__PURE__ */ React7.createElement("div", __spreadValues({
299
337
  className: `weaverse-content-root ${themeClass}`
300
- }, eventHandlers), /* @__PURE__ */ React7.createElement(RenderItem, {
301
- itemId: context.projectData.rootId || 0,
302
- context
303
- }));
338
+ }, eventHandlers), /* @__PURE__ */ React7.createElement(WeaverseContextProvider, {
339
+ value: context
340
+ }, /* @__PURE__ */ React7.createElement(RenderItem, {
341
+ itemId: context.projectData.rootId || 0
342
+ })));
304
343
  };
305
- var Item = ({ itemInstance, elementInstances, context }) => {
306
- let [data, setData] = React7.useState(itemInstance.data);
307
- let _a = data, { id, type, childIds, css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
308
- React7.useEffect(() => {
344
+ var Item = ({ itemInstance, elementInstances }) => {
345
+ var _b;
346
+ let [data, setData] = useState(itemInstance.data);
347
+ let _a = data, { id, type, childIds, css, className: cls = "" } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
348
+ useEffect(() => {
309
349
  let handleUpdate = (update) => {
310
350
  setData(__spreadValues({}, update));
311
351
  };
@@ -319,11 +359,15 @@ var Item = ({ itemInstance, elementInstances, context }) => {
319
359
  itemInstance.unsubscribe(handleUpdate);
320
360
  };
321
361
  }, []);
322
- let realClassName = className;
362
+ let context = useContext(WeaverseContext);
363
+ let className = "";
323
364
  if (css) {
324
365
  let formattedCss = shortCssObject(css);
325
- let selector = context.stitchesInstance.css(formattedCss)().className;
326
- realClassName = realClassName ? `${selector} ${realClassName}` : selector;
366
+ let { className: newClass = "" } = context.stitchesInstance.css(formattedCss)();
367
+ let { stitchesClass } = itemInstance;
368
+ let otherClass = (((_b = itemInstance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
369
+ className = `${cls} ${newClass} ${otherClass}`.trim();
370
+ itemInstance.stitchesClass = newClass;
327
371
  }
328
372
  let element = elementInstances.get(type) || elementInstances.get("base");
329
373
  if (element == null ? void 0 : element.Component) {
@@ -336,26 +380,24 @@ var Item = ({ itemInstance, elementInstances, context }) => {
336
380
  "data-wv-type": type,
337
381
  "data-wv-id": id
338
382
  }, rest), {
339
- className: realClassName
383
+ className
340
384
  }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ React7.createElement(RenderItem, {
341
385
  key: childId,
342
- itemId: childId,
343
- context
386
+ itemId: childId
344
387
  })));
345
388
  }
346
389
  return null;
347
390
  };
348
391
  var RenderItem = ({
349
- itemId,
350
- context
392
+ itemId
351
393
  }) => {
394
+ let context = useContext(WeaverseContext);
352
395
  let { itemInstances, elementInstances } = context;
353
396
  let itemInstance = itemInstances.get(itemId);
354
397
  if (itemInstance) {
355
398
  return /* @__PURE__ */ React7.createElement(Item, {
356
399
  itemInstance,
357
- elementInstances,
358
- context
400
+ elementInstances
359
401
  });
360
402
  }
361
403
  console.warn(`Item instance ${itemId} not found`);
@@ -365,6 +407,9 @@ var RenderItem = ({
365
407
  // src/index.ts
366
408
  export * from "@weaverse/core";
367
409
  export {
410
+ WeaverseContext,
411
+ WeaverseContextConsumer,
412
+ WeaverseContextProvider,
368
413
  WeaverseRoot,
369
414
  createRootContext
370
415
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.4",
2
+ "version": "0.6.8",
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.4"
34
+ "@weaverse/core": "0.6.8"
35
35
  }
36
36
  }