@weaverse/react 0.6.3 → 0.6.6

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);
@@ -108,7 +119,20 @@ var schema2 = {
108
119
  }
109
120
  ],
110
121
  settings: [],
111
- toolbar: [],
122
+ toolbar: [
123
+ {
124
+ type: "delete"
125
+ },
126
+ {
127
+ type: "duplicate"
128
+ },
129
+ {
130
+ type: "link"
131
+ },
132
+ {
133
+ type: "color"
134
+ }
135
+ ],
112
136
  data: {
113
137
  css: {
114
138
  "@desktop": {
@@ -116,7 +140,9 @@ var schema2 = {
116
140
  fontSize: "13px",
117
141
  padding: "10px 15px"
118
142
  }
119
- }
143
+ },
144
+ target: "",
145
+ openInNewTab: false
120
146
  }
121
147
  };
122
148
  var button_default = Button;
@@ -138,7 +164,7 @@ var schema3 = {
138
164
  backgroundColor: "rgba(248,203,203,0.38)",
139
165
  flexDirection: "column",
140
166
  alignItems: "flex-start",
141
- justifyContent: "center",
167
+ justifyContent: "flex-start",
142
168
  textAlign: "left",
143
169
  gridArea: "1 / 1 / 3 / 6",
144
170
  overflow: "hidden",
@@ -154,11 +180,20 @@ var container_default = Container;
154
180
  // src/elements/layout.tsx
155
181
  var import_react3 = __toESM(require("react"));
156
182
  var Layout = (0, import_react3.forwardRef)((props, ref) => {
157
- return /* @__PURE__ */ import_react3.default.createElement("div", __spreadProps(__spreadValues({
158
- ref
159
- }, props), {
160
- children: props.children || "Layout Placeholder"
161
- }));
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));
162
197
  });
163
198
  var schema4 = {
164
199
  title: "Layout",
@@ -166,20 +201,30 @@ var schema4 = {
166
201
  data: {
167
202
  css: {
168
203
  "@desktop": {
169
- display: "grid !important",
170
- gridTemplateRows: "repeat(auto-fill, $rowSize)",
171
- gridTemplateColumns: "repeat($columns, 1fr)",
172
- gridAutoRows: "$sizes$rowSize",
173
- gridGap: "$gap",
174
- minHeight: "104px",
175
- width: "100%",
176
- 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
+ gridGap: "var(--gap)",
215
+ maxWidth: "var(--grid-size)"
216
+ }
177
217
  },
178
218
  "@mobile": {
179
219
  display: "flex !important",
180
220
  flexDirection: "column"
181
221
  }
182
- }
222
+ },
223
+ gridSize: 1224,
224
+ rows: 12,
225
+ columns: 12,
226
+ gap: 16,
227
+ rowSize: 48
183
228
  },
184
229
  settings: []
185
230
  };
@@ -200,7 +245,7 @@ Text.defaultProps = {
200
245
  };
201
246
  var schema5 = {
202
247
  type: "text",
203
- title: "Text Settings",
248
+ title: "Text",
204
249
  settings: [],
205
250
  data: {
206
251
  css: {
@@ -219,6 +264,35 @@ var schema5 = {
219
264
  };
220
265
  var text_default = Text;
221
266
 
267
+ // src/elements/image.tsx
268
+ var import_react4 = __toESM(require("react"));
269
+ var Image = import_react4.default.forwardRef(function Image2(props, ref) {
270
+ let _a = props, { src, alt, children } = _a, rest = __objRest(_a, ["src", "alt", "children"]);
271
+ return /* @__PURE__ */ import_react4.default.createElement("img", __spreadProps(__spreadValues({
272
+ ref
273
+ }, rest), {
274
+ alt,
275
+ src
276
+ }));
277
+ });
278
+ Image.defaultProps = {
279
+ src: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
280
+ alt: "weaverse image element"
281
+ };
282
+ var schema6 = {
283
+ settings: [],
284
+ type: "image",
285
+ title: "Image",
286
+ data: {
287
+ css: {
288
+ "@desktop": {
289
+ padding: "10px"
290
+ }
291
+ }
292
+ }
293
+ };
294
+ var image_default = Image;
295
+
222
296
  // src/elements/index.ts
223
297
  var elements = {
224
298
  Button: {
@@ -240,6 +314,10 @@ var elements = {
240
314
  Container: {
241
315
  Component: container_default,
242
316
  schema: schema3
317
+ },
318
+ Image: {
319
+ Component: image_default,
320
+ schema: schema6
243
321
  }
244
322
  };
245
323
  var elements_default = elements;
@@ -254,7 +332,7 @@ var shortCssObject = (css) => {
254
332
 
255
333
  // src/renderer.tsx
256
334
  var import_core = require("@weaverse/core");
257
- var React6 = __toESM(require("react"));
335
+ var import_react5 = __toESM(require("react"));
258
336
  var createRootContext = (configs) => {
259
337
  const rootContext = new import_core.Weaverse(configs);
260
338
  Object.keys(elements_default).forEach((key) => {
@@ -262,10 +340,13 @@ var createRootContext = (configs) => {
262
340
  });
263
341
  return rootContext;
264
342
  };
343
+ var WeaverseContext = (0, import_react5.createContext)({});
344
+ var WeaverseContextProvider = WeaverseContext.Provider;
345
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
265
346
  var WeaverseRoot = ({ context }) => {
266
347
  var _a;
267
- let [, setData] = React6.useState(context.projectData);
268
- React6.useEffect(() => {
348
+ let [, setData] = (0, import_react5.useState)(context.projectData);
349
+ (0, import_react5.useEffect)(() => {
269
350
  let handleUpdate = () => {
270
351
  setData({});
271
352
  };
@@ -277,19 +358,21 @@ var WeaverseRoot = ({ context }) => {
277
358
  context.unsubscribe(handleUpdate);
278
359
  };
279
360
  }, []);
280
- let handleProps = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.handleProps) || {};
361
+ let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
281
362
  let themeClass = context.stitchesInstance.theme.className;
282
- return /* @__PURE__ */ React6.createElement("div", __spreadValues({
363
+ return /* @__PURE__ */ import_react5.default.createElement("div", __spreadValues({
283
364
  className: `weaverse-content-root ${themeClass}`
284
- }, handleProps), /* @__PURE__ */ React6.createElement(RenderItem, {
285
- itemId: context.projectData.rootId || 0,
286
- context
287
- }));
365
+ }, eventHandlers), /* @__PURE__ */ import_react5.default.createElement(WeaverseContextProvider, {
366
+ value: context
367
+ }, /* @__PURE__ */ import_react5.default.createElement(RenderItem, {
368
+ itemId: context.projectData.rootId || 0
369
+ })));
288
370
  };
289
- var Item = ({ itemInstance, elementInstances, context }) => {
290
- let [data, setData] = React6.useState(itemInstance.data);
291
- let _a = data, { id, type, childIds, css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
292
- React6.useEffect(() => {
371
+ var Item = ({ itemInstance, elementInstances }) => {
372
+ var _b;
373
+ let [data, setData] = (0, import_react5.useState)(itemInstance.data);
374
+ let _a = data, { id, type, childIds, css, className: cls = "" } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
375
+ (0, import_react5.useEffect)(() => {
293
376
  let handleUpdate = (update) => {
294
377
  setData(__spreadValues({}, update));
295
378
  };
@@ -303,11 +386,15 @@ var Item = ({ itemInstance, elementInstances, context }) => {
303
386
  itemInstance.unsubscribe(handleUpdate);
304
387
  };
305
388
  }, []);
306
- let realClassName = className;
389
+ let context = (0, import_react5.useContext)(WeaverseContext);
390
+ let className = "";
307
391
  if (css) {
308
392
  let formattedCss = shortCssObject(css);
309
- let selector = context.stitchesInstance.css(formattedCss)().className;
310
- realClassName = realClassName ? `${selector} ${realClassName}` : selector;
393
+ let { className: newClass = "" } = context.stitchesInstance.css(formattedCss)();
394
+ let { stitchesClass } = itemInstance;
395
+ let otherClass = (((_b = itemInstance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
396
+ className = `${cls} ${newClass} ${otherClass}`.trim();
397
+ itemInstance.stitchesClass = newClass;
311
398
  }
312
399
  let element = elementInstances.get(type) || elementInstances.get("base");
313
400
  if (element == null ? void 0 : element.Component) {
@@ -315,41 +402,42 @@ var Item = ({ itemInstance, elementInstances, context }) => {
315
402
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
316
403
  rest.ref = itemInstance.ref;
317
404
  }
318
- return /* @__PURE__ */ React6.createElement(Component, __spreadProps(__spreadValues({
405
+ return /* @__PURE__ */ import_react5.default.createElement(Component, __spreadProps(__spreadValues({
319
406
  key: id,
320
407
  "data-wv-type": type,
321
408
  "data-wv-id": id
322
409
  }, rest), {
323
- className: realClassName
324
- }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ React6.createElement(RenderItem, {
410
+ className
411
+ }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ import_react5.default.createElement(RenderItem, {
325
412
  key: childId,
326
- itemId: childId,
327
- context
413
+ itemId: childId
328
414
  })));
329
415
  }
330
416
  return null;
331
417
  };
332
418
  var RenderItem = ({
333
- itemId,
334
- context
419
+ itemId
335
420
  }) => {
421
+ let context = (0, import_react5.useContext)(WeaverseContext);
336
422
  let { itemInstances, elementInstances } = context;
337
423
  let itemInstance = itemInstances.get(itemId);
338
424
  if (itemInstance) {
339
- return /* @__PURE__ */ React6.createElement(Item, {
425
+ return /* @__PURE__ */ import_react5.default.createElement(Item, {
340
426
  itemInstance,
341
- elementInstances,
342
- context
427
+ elementInstances
343
428
  });
344
429
  }
345
430
  console.warn(`Item instance ${itemId} not found`);
346
- return /* @__PURE__ */ React6.createElement(React6.Fragment, null);
431
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null);
347
432
  };
348
433
 
349
434
  // src/index.ts
350
435
  __reExport(src_exports, require("@weaverse/core"), module.exports);
351
436
  // Annotate the CommonJS export names for ESM import in node:
352
437
  0 && (module.exports = {
438
+ WeaverseContext,
439
+ WeaverseContextConsumer,
440
+ WeaverseContextProvider,
353
441
  WeaverseRoot,
354
442
  createRootContext
355
443
  });
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);
@@ -81,7 +89,20 @@ var schema2 = {
81
89
  }
82
90
  ],
83
91
  settings: [],
84
- toolbar: [],
92
+ toolbar: [
93
+ {
94
+ type: "delete"
95
+ },
96
+ {
97
+ type: "duplicate"
98
+ },
99
+ {
100
+ type: "link"
101
+ },
102
+ {
103
+ type: "color"
104
+ }
105
+ ],
85
106
  data: {
86
107
  css: {
87
108
  "@desktop": {
@@ -89,7 +110,9 @@ var schema2 = {
89
110
  fontSize: "13px",
90
111
  padding: "10px 15px"
91
112
  }
92
- }
113
+ },
114
+ target: "",
115
+ openInNewTab: false
93
116
  }
94
117
  };
95
118
  var button_default = Button;
@@ -111,7 +134,7 @@ var schema3 = {
111
134
  backgroundColor: "rgba(248,203,203,0.38)",
112
135
  flexDirection: "column",
113
136
  alignItems: "flex-start",
114
- justifyContent: "center",
137
+ justifyContent: "flex-start",
115
138
  textAlign: "left",
116
139
  gridArea: "1 / 1 / 3 / 6",
117
140
  overflow: "hidden",
@@ -127,11 +150,20 @@ var container_default = Container;
127
150
  // src/elements/layout.tsx
128
151
  import React4, { forwardRef as forwardRef3 } from "react";
129
152
  var Layout = forwardRef3((props, ref) => {
130
- return /* @__PURE__ */ React4.createElement("div", __spreadProps(__spreadValues({
131
- ref
132
- }, props), {
133
- children: props.children || "Layout Placeholder"
134
- }));
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));
135
167
  });
136
168
  var schema4 = {
137
169
  title: "Layout",
@@ -139,20 +171,30 @@ var schema4 = {
139
171
  data: {
140
172
  css: {
141
173
  "@desktop": {
142
- display: "grid !important",
143
- gridTemplateRows: "repeat(auto-fill, $rowSize)",
144
- gridTemplateColumns: "repeat($columns, 1fr)",
145
- gridAutoRows: "$sizes$rowSize",
146
- gridGap: "$gap",
147
- minHeight: "104px",
148
- width: "100%",
149
- 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
+ gridGap: "var(--gap)",
185
+ maxWidth: "var(--grid-size)"
186
+ }
150
187
  },
151
188
  "@mobile": {
152
189
  display: "flex !important",
153
190
  flexDirection: "column"
154
191
  }
155
- }
192
+ },
193
+ gridSize: 1224,
194
+ rows: 12,
195
+ columns: 12,
196
+ gap: 16,
197
+ rowSize: 48
156
198
  },
157
199
  settings: []
158
200
  };
@@ -173,7 +215,7 @@ Text.defaultProps = {
173
215
  };
174
216
  var schema5 = {
175
217
  type: "text",
176
- title: "Text Settings",
218
+ title: "Text",
177
219
  settings: [],
178
220
  data: {
179
221
  css: {
@@ -192,6 +234,35 @@ var schema5 = {
192
234
  };
193
235
  var text_default = Text;
194
236
 
237
+ // src/elements/image.tsx
238
+ import React6 from "react";
239
+ var Image = React6.forwardRef(function Image2(props, ref) {
240
+ let _a = props, { src, alt, children } = _a, rest = __objRest(_a, ["src", "alt", "children"]);
241
+ return /* @__PURE__ */ React6.createElement("img", __spreadProps(__spreadValues({
242
+ ref
243
+ }, rest), {
244
+ alt,
245
+ src
246
+ }));
247
+ });
248
+ Image.defaultProps = {
249
+ src: "https://ucarecdn.com/48d73272-3fe3-43f6-8b5b-22b68fc5a8c8/section.png",
250
+ alt: "weaverse image element"
251
+ };
252
+ var schema6 = {
253
+ settings: [],
254
+ type: "image",
255
+ title: "Image",
256
+ data: {
257
+ css: {
258
+ "@desktop": {
259
+ padding: "10px"
260
+ }
261
+ }
262
+ }
263
+ };
264
+ var image_default = Image;
265
+
195
266
  // src/elements/index.ts
196
267
  var elements = {
197
268
  Button: {
@@ -213,6 +284,10 @@ var elements = {
213
284
  Container: {
214
285
  Component: container_default,
215
286
  schema: schema3
287
+ },
288
+ Image: {
289
+ Component: image_default,
290
+ schema: schema6
216
291
  }
217
292
  };
218
293
  var elements_default = elements;
@@ -226,11 +301,8 @@ var shortCssObject = (css) => {
226
301
  };
227
302
 
228
303
  // src/renderer.tsx
229
- import {
230
- isBrowser,
231
- Weaverse
232
- } from "@weaverse/core";
233
- import * as React6 from "react";
304
+ import { isBrowser, Weaverse } from "@weaverse/core";
305
+ import React7, { createContext, useContext, useEffect, useState } from "react";
234
306
  var createRootContext = (configs) => {
235
307
  const rootContext = new Weaverse(configs);
236
308
  Object.keys(elements_default).forEach((key) => {
@@ -238,10 +310,13 @@ var createRootContext = (configs) => {
238
310
  });
239
311
  return rootContext;
240
312
  };
313
+ var WeaverseContext = createContext({});
314
+ var WeaverseContextProvider = WeaverseContext.Provider;
315
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
241
316
  var WeaverseRoot = ({ context }) => {
242
317
  var _a;
243
- let [, setData] = React6.useState(context.projectData);
244
- React6.useEffect(() => {
318
+ let [, setData] = useState(context.projectData);
319
+ useEffect(() => {
245
320
  let handleUpdate = () => {
246
321
  setData({});
247
322
  };
@@ -253,19 +328,21 @@ var WeaverseRoot = ({ context }) => {
253
328
  context.unsubscribe(handleUpdate);
254
329
  };
255
330
  }, []);
256
- let handleProps = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.handleProps) || {};
331
+ let eventHandlers = ((_a = context == null ? void 0 : context.studioBridge) == null ? void 0 : _a.eventHandlers) || {};
257
332
  let themeClass = context.stitchesInstance.theme.className;
258
- return /* @__PURE__ */ React6.createElement("div", __spreadValues({
333
+ return /* @__PURE__ */ React7.createElement("div", __spreadValues({
259
334
  className: `weaverse-content-root ${themeClass}`
260
- }, handleProps), /* @__PURE__ */ React6.createElement(RenderItem, {
261
- itemId: context.projectData.rootId || 0,
262
- context
263
- }));
335
+ }, eventHandlers), /* @__PURE__ */ React7.createElement(WeaverseContextProvider, {
336
+ value: context
337
+ }, /* @__PURE__ */ React7.createElement(RenderItem, {
338
+ itemId: context.projectData.rootId || 0
339
+ })));
264
340
  };
265
- var Item = ({ itemInstance, elementInstances, context }) => {
266
- let [data, setData] = React6.useState(itemInstance.data);
267
- let _a = data, { id, type, childIds, css, className } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
268
- React6.useEffect(() => {
341
+ var Item = ({ itemInstance, elementInstances }) => {
342
+ var _b;
343
+ let [data, setData] = useState(itemInstance.data);
344
+ let _a = data, { id, type, childIds, css, className: cls = "" } = _a, rest = __objRest(_a, ["id", "type", "childIds", "css", "className"]);
345
+ useEffect(() => {
269
346
  let handleUpdate = (update) => {
270
347
  setData(__spreadValues({}, update));
271
348
  };
@@ -279,11 +356,15 @@ var Item = ({ itemInstance, elementInstances, context }) => {
279
356
  itemInstance.unsubscribe(handleUpdate);
280
357
  };
281
358
  }, []);
282
- let realClassName = className;
359
+ let context = useContext(WeaverseContext);
360
+ let className = "";
283
361
  if (css) {
284
362
  let formattedCss = shortCssObject(css);
285
- let selector = context.stitchesInstance.css(formattedCss)().className;
286
- realClassName = realClassName ? `${selector} ${realClassName}` : selector;
363
+ let { className: newClass = "" } = context.stitchesInstance.css(formattedCss)();
364
+ let { stitchesClass } = itemInstance;
365
+ let otherClass = (((_b = itemInstance.ref.current) == null ? void 0 : _b.className) || "").replace(stitchesClass, "").replace(cls, "").trim();
366
+ className = `${cls} ${newClass} ${otherClass}`.trim();
367
+ itemInstance.stitchesClass = newClass;
287
368
  }
288
369
  let element = elementInstances.get(type) || elementInstances.get("base");
289
370
  if (element == null ? void 0 : element.Component) {
@@ -291,40 +372,41 @@ var Item = ({ itemInstance, elementInstances, context }) => {
291
372
  if (Component.$$typeof === Symbol.for("react.forward_ref")) {
292
373
  rest.ref = itemInstance.ref;
293
374
  }
294
- return /* @__PURE__ */ React6.createElement(Component, __spreadProps(__spreadValues({
375
+ return /* @__PURE__ */ React7.createElement(Component, __spreadProps(__spreadValues({
295
376
  key: id,
296
377
  "data-wv-type": type,
297
378
  "data-wv-id": id
298
379
  }, rest), {
299
- className: realClassName
300
- }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ React6.createElement(RenderItem, {
380
+ className
381
+ }), Array.isArray(childIds) && childIds.map((childId) => /* @__PURE__ */ React7.createElement(RenderItem, {
301
382
  key: childId,
302
- itemId: childId,
303
- context
383
+ itemId: childId
304
384
  })));
305
385
  }
306
386
  return null;
307
387
  };
308
388
  var RenderItem = ({
309
- itemId,
310
- context
389
+ itemId
311
390
  }) => {
391
+ let context = useContext(WeaverseContext);
312
392
  let { itemInstances, elementInstances } = context;
313
393
  let itemInstance = itemInstances.get(itemId);
314
394
  if (itemInstance) {
315
- return /* @__PURE__ */ React6.createElement(Item, {
395
+ return /* @__PURE__ */ React7.createElement(Item, {
316
396
  itemInstance,
317
- elementInstances,
318
- context
397
+ elementInstances
319
398
  });
320
399
  }
321
400
  console.warn(`Item instance ${itemId} not found`);
322
- return /* @__PURE__ */ React6.createElement(React6.Fragment, null);
401
+ return /* @__PURE__ */ React7.createElement(React7.Fragment, null);
323
402
  };
324
403
 
325
404
  // src/index.ts
326
405
  export * from "@weaverse/core";
327
406
  export {
407
+ WeaverseContext,
408
+ WeaverseContextConsumer,
409
+ WeaverseContextProvider,
328
410
  WeaverseRoot,
329
411
  createRootContext
330
412
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.3",
2
+ "version": "0.6.6",
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.3"
34
+ "@weaverse/core": "0.6.6"
35
35
  }
36
36
  }