@weaverse/react 0.1.7 → 0.1.11

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.
@@ -1,8 +1,3 @@
1
1
  import React from 'react';
2
- export declare const BaseElement: {
3
- ({ tag, children, ...props }: any): React.DetailedReactHTMLElement<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
4
- configs: {
5
- type: string;
6
- };
7
- };
2
+ export declare const BaseElement: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
8
3
  export default BaseElement;
@@ -1,17 +1,3 @@
1
- export declare const Button: {
2
- (props: any): JSX.Element;
3
- defaultProps: {
4
- style: {
5
- backgroundColor: string;
6
- borderRadius: string;
7
- fontSize: string;
8
- padding: string;
9
- };
10
- type: string;
11
- tag: string;
12
- };
13
- configs: {
14
- type: string;
15
- };
16
- };
1
+ import * as React from 'react';
2
+ export declare const Button: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
17
3
  export default Button;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ declare function Grid(props: any): JSX.Element;
3
+ declare namespace Grid {
4
+ var defaultProps: {
5
+ style: {
6
+ display: string;
7
+ gridTemplate: string;
8
+ };
9
+ type: string;
10
+ };
11
+ }
12
+ export default Grid;
@@ -1,26 +1,8 @@
1
1
  /// <reference types="react" />
2
+ import Grid from './grid';
2
3
  declare const elements: {
3
- Button: {
4
- (props: any): JSX.Element;
5
- defaultProps: {
6
- style: {
7
- backgroundColor: string;
8
- borderRadius: string;
9
- fontSize: string;
10
- padding: string;
11
- };
12
- type: string;
13
- tag: string;
14
- };
15
- configs: {
16
- type: string;
17
- };
18
- };
19
- BaseElement: {
20
- ({ tag, children, ...props }: any): import("react").DetailedReactHTMLElement<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
21
- configs: {
22
- type: string;
23
- };
24
- };
4
+ Button: import("react").ForwardRefExoticComponent<Pick<any, string | number | symbol> & import("react").RefAttributes<unknown>>;
5
+ BaseElement: import("react").ForwardRefExoticComponent<Pick<any, string | number | symbol> & import("react").RefAttributes<unknown>>;
6
+ Grid: typeof Grid;
25
7
  };
26
8
  export default elements;
package/dist/index.d.ts CHANGED
@@ -1,7 +1 @@
1
- import { Weaverse, WeaverseType } from './core';
2
- declare const createRootContext: (configs: WeaverseType) => Weaverse;
3
- declare const WeaverseRoot: ({ context, defaultData }: {
4
- context: Weaverse;
5
- defaultData: any;
6
- }) => JSX.Element;
7
- export { createRootContext, WeaverseRoot };
1
+ export { WeaverseRoot, createRootContext } from './renderer';
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { Weaverse, WeaverseType } from '@weaverse/core';
3
+ export declare const createRootContext: (configs: WeaverseType) => Weaverse;
4
+ export declare const WeaverseRoot: ({ context, defaultData }: {
5
+ context: Weaverse;
6
+ defaultData: any;
7
+ }) => JSX.Element;
@@ -6,7 +6,7 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
6
6
 
7
7
  var React = require('react');
8
8
  var React__default = _interopDefault(React);
9
- var fetch = _interopDefault(require('isomorphic-unfetch'));
9
+ var core = require('@weaverse/core');
10
10
 
11
11
  function _extends() {
12
12
  _extends = Object.assign || function (target) {
@@ -41,214 +41,19 @@ function _objectWithoutPropertiesLoose(source, excluded) {
41
41
  return target;
42
42
  }
43
43
 
44
- var isReactNative = typeof navigator === 'object' && navigator.product === 'ReactNative';
45
- var isBrowser = typeof window !== 'undefined' && !isReactNative;
46
-
47
- // TODO: Implement Weaverse SDK class
48
- var Weaverse = /*#__PURE__*/function () {
49
- function Weaverse(_temp) {
50
- var _this = this;
51
-
52
- var _ref = _temp === void 0 ? {} : _temp,
53
- appUrl = _ref.appUrl,
54
- projectKey = _ref.projectKey,
55
- projectData = _ref.projectData;
56
-
57
- this.elementInstances = new Map();
58
- this.itemInstances = new Map();
59
- this.appUrl = 'http://localhost:3000' ;
60
- this.projectKey = '';
61
- this.projectData = {
62
- items: []
63
- };
64
- this.listeners = new Set();
65
- this.isEditor = false;
66
-
67
- this.handleMessageEvent = function (e) {
68
- var _e$data, _e$data$type;
69
-
70
- if ((_e$data = e.data) != null && (_e$data$type = _e$data.type) != null && _e$data$type.startsWith('weaverse.')) {
71
- var type = e.data.type;
72
-
73
- switch (type) {
74
- case 'weaverse.editor.ready':
75
- _this.isEditor = true;
76
- break;
77
-
78
- case 'weaverse.editor.update':
79
- var payload = e.data.payload;
80
- var itemId = payload.itemId,
81
- background = payload.background;
82
-
83
- var instance = _this.itemInstances.get(itemId);
84
-
85
- if (instance) {
86
- instance.setData({
87
- style: {
88
- background: background
89
- }
90
- });
91
- }
92
-
93
- }
94
- }
95
- };
96
-
97
- this.appUrl = appUrl || this.appUrl;
98
- this.projectKey = projectKey || this.projectKey;
99
- projectData && (this.projectData = projectData);
100
- this.init();
101
- }
102
-
103
- var _proto = Weaverse.prototype;
104
-
105
- _proto.registerElement = function registerElement(name, element) {
106
- this.elementInstances.set(name, element);
107
- };
108
-
109
- _proto.init = function init() {
110
- this.subscribeMessageEvent();
111
- };
112
-
113
- _proto.subscribe = function subscribe(fn) {
114
- this.listeners.add(fn);
115
- };
116
-
117
- _proto.unsubscribe = function unsubscribe(fn) {
118
- this.listeners["delete"](fn);
119
- };
120
-
121
- _proto.triggerUpdate = function triggerUpdate() {
122
- this.listeners.forEach(function (fn) {
123
- return fn();
124
- });
125
- this.triggerEditorUpdate();
126
- };
127
-
128
- _proto.fetchProjectData = function fetchProjectData() {
129
- return fetch(this.appUrl + ("/api/public/" + this.projectKey)).then(function (r) {
130
- return r.json();
131
- });
132
- };
133
-
134
- _proto.updateProjectData = function updateProjectData() {
135
- var _this2 = this;
136
-
137
- if (this.projectKey) {
138
- this.fetchProjectData().then(function (data) {
139
- if (data) {
140
- _this2.projectData = data;
141
-
142
- _this2.initItemData();
143
-
144
- _this2.triggerUpdate();
145
- }
146
- })["catch"](function (err) {
147
- console.error(err);
148
- });
149
- }
150
- };
151
-
152
- _proto.subscribeMessageEvent = function subscribeMessageEvent() {
153
- var _this3 = this;
154
-
155
- if (typeof this.currentFrameSubscription === 'function') {
156
- this.currentFrameSubscription();
157
- }
158
-
159
- isBrowser && window.addEventListener('message', this.handleMessageEvent);
160
-
161
- this.currentFrameSubscription = function () {
162
- isBrowser && window.removeEventListener('message', _this3.handleMessageEvent);
163
- };
164
-
165
- return this.currentFrameSubscription;
166
- };
167
-
168
- _proto.triggerEditorUpdate = function triggerEditorUpdate(type) {
169
- if (type === void 0) {
170
- type = 'weaverse.workspace.init';
171
- }
172
-
173
- if (this.isEditor) {
174
- var _window$top;
175
-
176
- (_window$top = window.top) == null ? void 0 : _window$top.postMessage({
177
- type: type,
178
- payload: {
179
- projectKey: this.projectKey,
180
- projectData: this.projectData
181
- }
182
- }, '*');
183
- }
184
- };
185
-
186
- _proto.initItemData = function initItemData() {
187
- var _this4 = this;
188
-
189
- var data = this.projectData;
190
-
191
- if (data.items) {
192
- data.items.forEach(function (item) {
193
- var itemStore = _this4.itemInstances.get(item.id) || new WeaverseItemStore(item, _this4);
194
-
195
- _this4.itemInstances.set(item.id, itemStore);
196
- });
197
- }
198
- };
199
-
200
- return Weaverse;
201
- }();
202
- var WeaverseItemStore = function WeaverseItemStore(itemData, weaverse) {
203
- var _this5 = this;
204
-
205
- if (itemData === void 0) {
206
- itemData = {};
207
- }
208
-
209
- this.data = {};
210
- this.listeners = new Set();
211
-
212
- this.setData = function (data) {
213
- _this5.data = Object.assign(_this5.data, data);
214
-
215
- _this5.triggerUpdate();
216
- };
217
-
218
- this.subscribe = function (fn) {
219
- _this5.listeners.add(fn);
220
- };
221
-
222
- this.unsubscribe = function (fn) {
223
- _this5.listeners["delete"](fn);
224
- };
225
-
226
- this.triggerUpdate = function () {
227
- _this5.listeners.forEach(function (fn) {
228
- return fn(_this5.data);
229
- });
230
- };
231
-
232
- this.data = itemData;
233
- var _itemData = itemData,
234
- type = _itemData.type;
235
-
236
- if (type) {
237
- this.Component = weaverse.elementInstances.get(type);
238
- }
239
- };
240
-
241
- var Button = function Button(props) {
44
+ var Button = /*#__PURE__*/React.forwardRef(function (props, ref) {
242
45
  var _React$useState = React.useState(0),
243
46
  count = _React$useState[0],
244
47
  setCount = _React$useState[1];
245
48
 
246
- return React.createElement("button", Object.assign({}, props, {
49
+ return React.createElement("button", Object.assign({
50
+ ref: ref
51
+ }, props, {
247
52
  onClick: function onClick() {
248
53
  return setCount(count + 1);
249
54
  }
250
55
  }), "Test Button ", count);
251
- };
56
+ });
252
57
  Button.defaultProps = {
253
58
  style: {
254
59
  backgroundColor: 'green',
@@ -259,43 +64,54 @@ Button.defaultProps = {
259
64
  type: 'button',
260
65
  tag: 'button'
261
66
  };
262
- Button.configs = {
263
- type: 'button'
264
- };
265
67
 
266
68
  var _excluded = ["tag", "children"];
267
- var BaseElement = function BaseElement(_ref) {
268
- var _ref$tag = _ref.tag,
269
- tag = _ref$tag === void 0 ? 'div' : _ref$tag,
69
+ var BaseElement = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
70
+ var tag = _ref.tag,
270
71
  children = _ref.children,
271
72
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
272
73
 
273
- return React__default.createElement(tag, _extends({}, props), children);
74
+ return React__default.createElement(tag, _extends({
75
+ ref: ref
76
+ }, props), children);
77
+ });
78
+ BaseElement.defaultProps = {
79
+ type: 'base',
80
+ tag: 'div',
81
+ style: {}
274
82
  };
275
- BaseElement.configs = {
276
- type: 'base'
83
+
84
+ function Grid(props) {
85
+ return React__default.createElement("div", Object.assign({}, props));
86
+ }
87
+ Grid.defaultProps = {
88
+ style: {
89
+ display: 'grid',
90
+ gridTemplate: '1fr / 1fr'
91
+ },
92
+ type: 'grid'
277
93
  };
278
94
 
279
95
  var elements = {
280
96
  Button: Button,
281
- BaseElement: BaseElement
97
+ BaseElement: BaseElement,
98
+ Grid: Grid
282
99
  };
283
100
 
284
- var _excluded$1 = ["id", "type", "childIds"];
285
-
101
+ var _excluded$1 = ["id", "type", "childIds", "css", "className"];
286
102
  var createRootContext = function createRootContext(configs) {
287
- var rootContext = new Weaverse(configs);
103
+ var rootContext = new core.Weaverse(configs); // Register the element components
104
+
288
105
  Object.keys(elements).forEach(function (key) {
289
- var _Elements$key, _Elements$key$configs;
106
+ var _Elements$key, _Elements$key$default;
290
107
 
291
108
  // @ts-ignore
292
- ((_Elements$key = elements[key]) == null ? void 0 : (_Elements$key$configs = _Elements$key.configs) == null ? void 0 : _Elements$key$configs.type) && rootContext.registerElement(elements[key].configs.type, elements[key]);
109
+ ((_Elements$key = elements[key]) == null ? void 0 : (_Elements$key$default = _Elements$key.defaultProps) == null ? void 0 : _Elements$key$default.type) && rootContext.registerElement(elements[key].defaultProps.type, elements[key]);
293
110
  });
294
111
  return rootContext;
295
112
  };
296
-
297
113
  var WeaverseRoot = function WeaverseRoot(_ref) {
298
- var _context$projectData, _context$projectData$;
114
+ var _context$projectData, _context$projectData$, _context$studioBridge;
299
115
 
300
116
  var context = _ref.context,
301
117
  defaultData = _ref.defaultData;
@@ -305,7 +121,7 @@ var WeaverseRoot = function WeaverseRoot(_ref) {
305
121
 
306
122
  React.useEffect(function () {
307
123
  var handleUpdate = function handleUpdate() {
308
- setData(context.projectData);
124
+ setData(_extends({}, context.projectData));
309
125
  };
310
126
 
311
127
  context.subscribe(handleUpdate);
@@ -320,10 +136,12 @@ var WeaverseRoot = function WeaverseRoot(_ref) {
320
136
  context.initItemData();
321
137
  }
322
138
 
323
- return React.createElement(RenderItem, {
139
+ var handleProps = (context == null ? void 0 : (_context$studioBridge = context.studioBridge) == null ? void 0 : _context$studioBridge.handleProps) || {};
140
+ console.log('handleProps', handleProps);
141
+ return React.createElement("div", Object.assign({}, handleProps), React.createElement(RenderItem, {
324
142
  itemId: 0,
325
143
  context: context
326
- });
144
+ }));
327
145
  };
328
146
 
329
147
  var Item = function Item(_ref2) {
@@ -338,6 +156,8 @@ var Item = function Item(_ref2) {
338
156
  var id = data.id,
339
157
  type = data.type,
340
158
  childIds = data.childIds,
159
+ css = data.css,
160
+ className = data.className,
341
161
  rest = _objectWithoutPropertiesLoose(data, _excluded$1);
342
162
 
343
163
  React.useEffect(function () {
@@ -346,17 +166,40 @@ var Item = function Item(_ref2) {
346
166
  };
347
167
 
348
168
  itemInstance.subscribe(handleUpdate);
169
+
170
+ if (!itemInstance.ref.current && core.isBrowser) {
171
+ Object.assign(itemInstance.ref, {
172
+ current: document.querySelector("[data-wv-id=\"" + id + "\"]")
173
+ });
174
+ }
175
+
349
176
  return function () {
350
177
  itemInstance.unsubscribe(handleUpdate);
351
178
  };
352
179
  }, []);
180
+ var realClassName = className || '';
181
+
182
+ if (css) {
183
+ // let stitches create the style from css object and
184
+ // then return the classname, so we can use it in the render
185
+ var selector = context.stitchesInstance.css(css)().className;
186
+ realClassName += ' ' + selector;
187
+ }
188
+
353
189
  var Component = elementInstances.get(type);
354
190
 
355
191
  if (Component) {
192
+ // @ts-ignore
193
+ if (Component.$$typeof === Symbol["for"]('react.forward_ref')) {
194
+ rest.ref = itemInstance.ref;
195
+ }
196
+
356
197
  return React.createElement(Component, Object.assign({
357
198
  key: id,
358
199
  "data-wv-id": id
359
- }, rest), Array.isArray(childIds) && childIds.map(function (childId) {
200
+ }, rest, {
201
+ className: realClassName
202
+ }), Array.isArray(childIds) && childIds.map(function (childId) {
360
203
  return React.createElement(RenderItem, {
361
204
  key: childId,
362
205
  itemId: childId,
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-react.cjs.development.js","sources":["../src/utils/index.ts","../src/core.ts","../src/elements/button.tsx","../src/elements/base.tsx","../src/elements/index.ts","../src/index.tsx"],"sourcesContent":["export const isReactNative = typeof navigator === 'object' && navigator.product === 'ReactNative'\nexport const isBrowser = typeof window !== 'undefined' && !isReactNative\nexport const isIframe = isBrowser && window.top !== window.self","// TODO: Implement Weaverse SDK class\nimport fetch from 'isomorphic-unfetch'\nimport {isBrowser} from './utils'\n\n\nexport interface ProjectDataItemType {\n\ttype: string\n\tname: string\n\tid: string | number\n}\n\nexport interface ProjectDataType {\n\titems: ProjectDataItemType[]\n}\n\n// const isSheetAccessible = (sheet: CSSStyleSheet) => {\n// \tif (sheet.href && !sheet.href.startsWith(location.origin)) {\n// \t\treturn false\n// \t}\n//\n// \ttry {\n// \t\tsheet.cssRules\n// \t\treturn true\n// \t} catch (e) {\n// \t\treturn false\n// \t}\n// }\n\n// export class WeaverseStyle {\n// \tpublic styleSheets: StyleSheetList\n// \tpublic document: Document\n//\n// \tconstructor(root: Document) {\n// \t\tthis.document = root\n// \t\tthis.styleSheets = this.document.styleSheets\n// \t}\n//\n// \t// Create styleSheet instance that work both on client and server side\n// \tcreateSheet = (root?: Document) => {\n// \t\tlet sheetInstance: any = null\n//\n// \t\tconst reset = () => {\n// \t\t\tconst sheets = Object(root).styleSheets || []\n// \t\t\t// iterate all stylesheets until a hydratable stylesheet is found\n// \t\t\tfor (const sheet of sheets) {\n// \t\t\t\tif (!isSheetAccessible(sheet)) continue\n//\n// \t\t\t\tfor (let index = 0, rules = sheet.cssRules; rules[index]; ++index) {\n// \t\t\t\t\t// /** @type {CSSStyleRule} Possible indicator rule. */\n// \t\t\t\t\tconst check = Object(rules[index])\n// \t\t\t\t\tif (check.selectorText && check.selectorText.includes('@media')) {\n// \t\t\t\t\t\tif (!sheetInstance) sheetInstance = {sheet, reset, rules: sheet.cssRules}\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n//\n// \t\t\t\t}\n//\n// \t\t\t\t// if a hydratable stylesheet is found, stop looking\n// \t\t\t\tif (sheetInstance) break\n// \t\t\t}\n// \t\t\t// if no hydratable stylesheet is found\n// \t\t\tif (!sheetInstance) {\n// \t\t\t\tconst createCSSMediaRule = (sourceCssText: string) => {\n// \t\t\t\t\tlet rule: any = {\n// \t\t\t\t\t\tcssRules: [],\n// \t\t\t\t\t\tinsertRule(cssText: string, index: number) {\n// \t\t\t\t\t\t\tthis.cssRules.splice(index, 0, createCSSMediaRule(cssText))\n// \t\t\t\t\t\t},\n// \t\t\t\t\t\tget cssText() {\n// \t\t\t\t\t\t\treturn sourceCssText === '@media{}' ? `@media{${[].map.call(this.cssRules, (cssRule: any) => cssRule.cssText).join('')}}` : sourceCssText\n// \t\t\t\t\t\t}\n// \t\t\t\t\t}\n// \t\t\t\t\treturn rule\n// \t\t\t\t}\n//\n// \t\t\t\tsheetInstance = {\n// \t\t\t\t\tsheet: root ? (root.head || root).appendChild(root.createElement('style')).sheet : createCSSMediaRule(''),\n// \t\t\t\t\trules: {},\n// \t\t\t\t\treset,\n// \t\t\t\t\ttoString() {\n// \t\t\t\t\t\tconst {cssRules} = sheetInstance.sheet\n// \t\t\t\t\t\treturn [].map\n// \t\t\t\t\t\t\t.call(cssRules, (cssMediaRule: CSSMediaRule, cssRuleIndex) => {\n// \t\t\t\t\t\t\t\tconst {cssText} = cssMediaRule\n//\n// \t\t\t\t\t\t\t\tlet lastRuleCssText = ''\n// \t\t\t\t\t\t\t\tif (cssRules[cssRuleIndex - 1]) {\n// \t\t\t\t\t\t\t\t\tif (!cssMediaRule.cssRules.length) return ''\n//\n// \t\t\t\t\t\t\t\t\tfor (const name in sheetInstance.rules) {\n// \t\t\t\t\t\t\t\t\t\tif (sheetInstance.rules[name].group === cssMediaRule) {\n// \t\t\t\t\t\t\t\t\t\t\treturn `--sxs{--sxs:${[...sheetInstance.rules[name].cache].join(' ')}}${cssText}`\n// \t\t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t\t}\n//\n// \t\t\t\t\t\t\t\t\treturn cssMediaRule.cssRules.length ? `${lastRuleCssText}${cssText}` : ''\n// \t\t\t\t\t\t\t\t}\n//\n// \t\t\t\t\t\t\t\treturn cssText\n// \t\t\t\t\t\t\t})\n// \t\t\t\t\t\t\t.join('')\n// \t\t\t\t\t}\n// \t\t\t\t}\n// \t\t\t}\n// \t\t}\n//\n// \t}\n//\n// }\n\nexport type WeaverseType = {\n\t[key: string]: any\n\tappUrl?: string,\n\tprojectKey?: string,\n\tprojectData?: ProjectDataType\n}\n\nexport class Weaverse {\n\telementInstances = new Map<string, any>()\n\titemInstances = new Map<string | number, WeaverseItemStore>()\n\tappUrl: string = process.env.NODE_ENV === 'development' ? 'http://localhost:3000' : 'https://weaverse.io'\n\tprojectKey: string = ''\n\tprojectData: ProjectDataType = {\n\t\titems: []\n\t}\n\tlisteners: Set<any> = new Set()\n\tisEditor = false\n\tcurrentFrameSubscription: any\n\n\tconstructor({appUrl, projectKey, projectData}: WeaverseType = {}) {\n\t\tthis.appUrl = appUrl || this.appUrl\n\t\tthis.projectKey = projectKey || this.projectKey\n\t\tprojectData && (this.projectData = projectData)\n\t\tthis.init()\n\t}\n\n\tregisterElement(name: string, element: any) {\n\t\tthis.elementInstances.set(name, element)\n\t}\n\n\tinit() {\n\t\tthis.subscribeMessageEvent()\n\t}\n\n\tsubscribe(fn: any) {\n\t\tthis.listeners.add(fn)\n\t}\n\n\tunsubscribe(fn: any) {\n\t\tthis.listeners.delete(fn)\n\t}\n\n\ttriggerUpdate() {\n\t\tthis.listeners.forEach(fn => fn())\n\t\tthis.triggerEditorUpdate()\n\t}\n\n\tfetchProjectData() {\n\t\treturn fetch(this.appUrl + `/api/public/${this.projectKey}`).then(r => r.json())\n\t}\n\n\tupdateProjectData() {\n\t\tif (this.projectKey) {\n\t\t\tthis.fetchProjectData().then(data => {\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.projectData = data\n\t\t\t\t\tthis.initItemData()\n\t\t\t\t\tthis.triggerUpdate()\n\t\t\t\t}\n\t\t\t}).catch(err => {\n\t\t\t\tconsole.error(err)\n\t\t\t})\n\t\t}\n\t}\n\n\tsubscribeMessageEvent() {\n\t\tif (typeof this.currentFrameSubscription === 'function') {\n\t\t\tthis.currentFrameSubscription()\n\t\t}\n\t\tisBrowser && window.addEventListener('message', this.handleMessageEvent)\n\t\tthis.currentFrameSubscription = () => {\n\t\t\tisBrowser && window.removeEventListener('message', this.handleMessageEvent)\n\t\t}\n\t\treturn this.currentFrameSubscription\n\t}\n\n\ttriggerEditorUpdate(type = 'weaverse.workspace.init') {\n\t\tif (this.isEditor) {\n\t\t\twindow.top?.postMessage({\n\t\t\t\ttype, payload: {\n\t\t\t\t\tprojectKey: this.projectKey,\n\t\t\t\t\tprojectData: this.projectData\n\t\t\t\t}\n\t\t\t}, '*')\n\t\t}\n\t}\n\n\thandleMessageEvent = (e: MessageEvent) => {\n\t\tif (e.data?.type?.startsWith('weaverse.')) {\n\t\t\tlet type = e.data.type\n\t\t\tswitch (type) {\n\t\t\t\tcase 'weaverse.editor.ready':\n\t\t\t\t\tthis.isEditor = true\n\t\t\t\t\tbreak\n\t\t\t\tcase 'weaverse.editor.update':\n\t\t\t\t\tlet {payload} = e.data\n\t\t\t\t\tlet {itemId, background} = payload\n\t\t\t\t\tlet instance = this.itemInstances.get(itemId)\n\t\t\t\t\tif (instance) {\n\t\t\t\t\t\tinstance.setData({\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackground\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinitItemData() {\n\t\tlet data = this.projectData\n\t\tif (data.items) {\n\t\t\tdata.items.forEach(item => {\n\t\t\t\tlet itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this)\n\t\t\t\tthis.itemInstances.set(item.id, itemStore)\n\t\t\t})\n\t\t}\n\t}\n}\n\nexport class WeaverseItemStore {\n\tdata: any = {}\n\tlisteners: Set<any> = new Set()\n\tComponent: any\n\n\tconstructor(itemData: any = {}, weaverse: Weaverse) {\n\t\tthis.data = itemData\n\t\tlet {type} = itemData\n\t\tif (type) {\n\t\t\tthis.Component = weaverse.elementInstances.get(type)\n\t\t}\n\t}\n\n\tsetData = (data: any) => {\n\t\tthis.data = Object.assign(this.data, data)\n\t\tthis.triggerUpdate()\n\t}\n\n\tsubscribe = (fn: any) => {\n\t\tthis.listeners.add(fn)\n\t}\n\n\tunsubscribe = (fn: any) => {\n\t\tthis.listeners.delete(fn)\n\t}\n\n\ttriggerUpdate = () => {\n\t\tthis.listeners.forEach(fn => {\n\t\t\treturn fn(this.data)\n\t\t})\n\t}\n\n\n\n\t// addItem(item: any) {\n\t// \tthis.items.push(item)\n\t// \tthis.triggerUpdate()\n\t// }\n\t//\n\t// removeItem(item: any) {\n\t// \tthis.items = this.items.filter(i => i !== item)\n\t// \tthis.triggerUpdate()\n\t// }\n}","import * as React from 'react'\n\nexport const Button = (props: any) => {\n let [count, setCount] = React.useState(0)\n return <button {...props} onClick={() => setCount(count + 1)}>Test Button {count}</button>\n}\n\nButton.defaultProps = {\n style: {\n backgroundColor: 'green',\n borderRadius: '9999px',\n fontSize: '13px',\n padding: '10px 15px'\n },\n type: 'button',\n tag: 'button'\n}\nButton.configs = {\n type: 'button'\n}\n\nexport default Button","import React from 'react'\n\nexport const BaseElement = ({tag = 'div', children, ...props}: any) => {\n return React.createElement(tag, {\n ...props\n }, children)\n}\n\nBaseElement.configs = {\n type: 'base'\n}\nexport default BaseElement\n","import Button from './button'\nimport BaseElement from './base'\n\nconst elements = {\n\tButton,\n\tBaseElement\n}\nexport default elements","import * as React from 'react'\nimport {useEffect} from 'react'\nimport {Weaverse, WeaverseType} from './core'\nimport Elements from './elements'\n\nlet stitches = require('@stitches/core')\n\nconst createRootContext = (configs: WeaverseType) => {\n const rootContext = new Weaverse(configs)\n Object.keys(Elements).forEach(key => {\n // @ts-ignore\n Elements[key]?.configs?.type && rootContext.registerElement(Elements[key].configs.type, Elements[key])\n })\n\n return rootContext\n}\n\nconst WeaverseRoot = ({context, defaultData}: { context: Weaverse, defaultData: any }) => {\n let [, setData] = React.useState<any>(context.projectData)\n useEffect(() => {\n let handleUpdate = () => {\n setData(context.projectData)\n }\n context.subscribe(handleUpdate)\n context.updateProjectData()\n\n return () => {\n context.unsubscribe(handleUpdate)\n }\n }, [])\n if (!context.projectData?.items?.length && defaultData) {\n context.projectData = defaultData\n context.initItemData()\n }\n return <RenderItem itemId={0} context={context}/>\n}\n\n\nconst Item = ({itemInstance, elementInstances, context}: any) => {\n let [data, setData] = React.useState<any>(itemInstance.data)\n let {id, type, childIds, ...rest} = data\n\n useEffect(() => {\n let handleUpdate = (update: any) => {\n setData({...update})\n }\n itemInstance.subscribe(handleUpdate)\n return () => {\n itemInstance.unsubscribe(handleUpdate)\n }\n }, [])\n let Component = elementInstances.get(type)\n if (Component) {\n return <Component key={id} data-wv-id={id} {...rest}>\n {Array.isArray(childIds)\n && childIds.map(childId =>\n <RenderItem\n key={childId}\n itemId={childId}\n context={context}\n />\n )}\n </Component>\n }\n return null\n}\n\n\nconst RenderItem = ({itemId, context}: { itemId: number, context: any }): any => {\n let {itemInstances, elementInstances} = context\n let itemInstance = itemInstances.get(itemId)\n if (itemInstance) {\n return <Item itemInstance={itemInstance} elementInstances={elementInstances} context={context}/>\n }\n return <></>\n}\n\nexport {createRootContext, WeaverseRoot}\n"],"names":["isReactNative","navigator","product","isBrowser","window","Weaverse","appUrl","projectKey","projectData","Map","process","items","Set","e","data","type","startsWith","isEditor","payload","itemId","background","instance","itemInstances","get","setData","style","init","registerElement","name","element","elementInstances","set","subscribeMessageEvent","subscribe","fn","listeners","add","unsubscribe","triggerUpdate","forEach","triggerEditorUpdate","fetchProjectData","fetch","then","r","json","updateProjectData","initItemData","err","console","error","currentFrameSubscription","addEventListener","handleMessageEvent","removeEventListener","top","postMessage","item","itemStore","id","WeaverseItemStore","itemData","weaverse","Object","assign","Component","Button","props","React","count","setCount","onClick","defaultProps","backgroundColor","borderRadius","fontSize","padding","tag","configs","BaseElement","children","createElement","elements","createRootContext","rootContext","keys","Elements","key","WeaverseRoot","context","defaultData","useEffect","handleUpdate","length","RenderItem","Item","itemInstance","childIds","rest","update","Array","isArray","map","childId"],"mappings":"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"}
1
+ {"version":3,"file":"sdk-react.cjs.development.js","sources":["../src/elements/button.tsx","../src/elements/base.tsx","../src/elements/grid.tsx","../src/elements/index.ts","../src/renderer.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport const Button = React.forwardRef((props: any, ref) => {\n let [count, setCount] = React.useState(0)\n return <button ref={ref} {...props} onClick={() => setCount(count + 1)}>Test Button {count}</button>\n})\n\nButton.defaultProps = {\n style: {\n backgroundColor: 'green',\n borderRadius: '9999px',\n fontSize: '13px',\n padding: '10px 15px'\n },\n type: 'button',\n tag: 'button'\n}\n\nexport default Button","import React from 'react'\n\nexport const BaseElement = React.forwardRef((({tag, children, ...props}: any, ref) => {\n return React.createElement(tag, {\n ref,\n ...props\n }, children)\n}))\n\nBaseElement.defaultProps = {\n type: 'base',\n tag: 'div',\n style: {}\n}\nexport default BaseElement\n","import React from 'react'\n\nexport default function Grid(props: any) {\n return <div {...props} />\n}\n\nGrid.defaultProps = {\n style: {\n display: 'grid',\n gridTemplate: '1fr / 1fr'\n },\n type: 'grid'\n}","import Button from './button'\nimport BaseElement from './base'\nimport Grid from './grid'\n\nconst elements = {\n Button,\n BaseElement,\n Grid\n}\nexport default elements","import * as React from 'react'\nimport {isBrowser, Weaverse, WeaverseItemStore, WeaverseType} from '@weaverse/core'\nimport Elements from './elements'\n\nexport const createRootContext = (configs: WeaverseType) => {\n const rootContext = new Weaverse(configs)\n // Register the element components\n Object.keys(Elements).forEach(key => {\n // @ts-ignore\n Elements[key]?.defaultProps?.type && rootContext.registerElement(Elements[key].defaultProps.type, Elements[key])\n })\n return rootContext\n}\n\nexport const WeaverseRoot = ({context, defaultData}: { context: Weaverse, defaultData: any }) => {\n let [, setData] = React.useState<any>(context.projectData)\n React.useEffect(() => {\n let handleUpdate = () => {\n setData({...context.projectData})\n }\n context.subscribe(handleUpdate)\n context.updateProjectData()\n return () => {\n context.unsubscribe(handleUpdate)\n }\n }, [])\n if (!context.projectData?.items?.length && defaultData) {\n context.projectData = defaultData\n context.initItemData()\n }\n let handleProps = context?.studioBridge?.handleProps || {}\n console.log('handleProps', handleProps)\n return <div {...handleProps}>\n <RenderItem itemId={0} context={context}/>\n </div>\n}\n\n\ntype ItemProps = {\n itemInstance: WeaverseItemStore\n elementInstances: Map<string, React.FC>\n context: Weaverse\n}\n\n\nconst Item = ({itemInstance, elementInstances, context}: ItemProps) => {\n let [data, setData] = React.useState<any>(itemInstance.data)\n let {id, type, childIds, css, className, ...rest} = data\n React.useEffect(() => {\n let handleUpdate = (update: any) => {\n setData({...update})\n }\n itemInstance.subscribe(handleUpdate)\n if (!itemInstance.ref.current && isBrowser) {\n Object.assign(itemInstance.ref, {current: document.querySelector(`[data-wv-id=\"${id}\"]`)})\n }\n\n return () => {\n itemInstance.unsubscribe(handleUpdate)\n }\n }, [])\n\n let realClassName = className || ''\n if (css) {\n\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let selector = (context.stitchesInstance.css(css)()).className\n realClassName += ' ' + selector\n }\n let Component = elementInstances.get(type)\n if (Component) {\n // @ts-ignore\n if (Component.$$typeof === Symbol.for('react.forward_ref')) {\n rest.ref = itemInstance.ref\n }\n return <Component key={id} data-wv-id={id} {...rest} className={realClassName}>\n {Array.isArray(childIds)\n && childIds.map(childId =>\n <RenderItem\n key={childId}\n itemId={childId}\n context={context}\n />\n )}\n </Component>\n }\n return null\n}\n\nconst RenderItem = ({itemId, context}: { itemId: number, context: any }): any => {\n let {itemInstances, elementInstances} = context\n let itemInstance = itemInstances.get(itemId)\n if (itemInstance) {\n return <Item itemInstance={itemInstance} elementInstances={elementInstances} context={context}/>\n }\n return <></>\n}\n\n"],"names":["Button","React","props","ref","count","setCount","onClick","defaultProps","style","backgroundColor","borderRadius","fontSize","padding","type","tag","BaseElement","forwardRef","children","createElement","Grid","display","gridTemplate","elements","createRootContext","configs","rootContext","Weaverse","Object","keys","Elements","forEach","key","registerElement","WeaverseRoot","context","defaultData","projectData","setData","handleUpdate","subscribe","updateProjectData","unsubscribe","items","length","initItemData","handleProps","studioBridge","console","log","RenderItem","itemId","Item","itemInstance","elementInstances","data","id","childIds","css","className","rest","update","current","isBrowser","assign","document","querySelector","realClassName","selector","stitchesInstance","Component","get","$$typeof","Symbol","Array","isArray","map","childId","itemInstances"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=t(e),r=t(require("isomorphic-unfetch"));function i(){return(i=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function a(t,e){if(null==t)return{};var n,r,i={},a=Object.keys(t);for(r=0;r<a.length;r++)e.indexOf(n=a[r])>=0||(i[n]=t[n]);return i}var s="object"==typeof navigator&&"ReactNative"===navigator.product,o="undefined"!=typeof window&&!s,c=function(){function t(t){var e=this,n=void 0===t?{}:t,r=n.appUrl,i=n.projectKey,a=n.projectData;this.elementInstances=new Map,this.itemInstances=new Map,this.appUrl="https://weaverse.io",this.projectKey="",this.projectData={items:[]},this.listeners=new Set,this.isEditor=!1,this.handleMessageEvent=function(t){var n,r;if(null!=(n=t.data)&&null!=(r=n.type)&&r.startsWith("weaverse."))switch(t.data.type){case"weaverse.editor.ready":e.isEditor=!0;break;case"weaverse.editor.update":var i=t.data.payload,a=i.background,s=e.itemInstances.get(i.itemId);s&&s.setData({style:{background:a}})}},this.appUrl=r||this.appUrl,this.projectKey=i||this.projectKey,a&&(this.projectData=a),this.init()}var e=t.prototype;return e.registerElement=function(t,e){this.elementInstances.set(t,e)},e.init=function(){this.subscribeMessageEvent()},e.subscribe=function(t){this.listeners.add(t)},e.unsubscribe=function(t){this.listeners.delete(t)},e.triggerUpdate=function(){this.listeners.forEach((function(t){return t()})),this.triggerEditorUpdate()},e.fetchProjectData=function(){return r(this.appUrl+"/api/public/"+this.projectKey).then((function(t){return t.json()}))},e.updateProjectData=function(){var t=this;this.projectKey&&this.fetchProjectData().then((function(e){e&&(t.projectData=e,t.initItemData(),t.triggerUpdate())})).catch((function(t){console.error(t)}))},e.subscribeMessageEvent=function(){var t=this;return"function"==typeof this.currentFrameSubscription&&this.currentFrameSubscription(),o&&window.addEventListener("message",this.handleMessageEvent),this.currentFrameSubscription=function(){o&&window.removeEventListener("message",t.handleMessageEvent)},this.currentFrameSubscription},e.triggerEditorUpdate=function(t){var e;void 0===t&&(t="weaverse.workspace.init"),this.isEditor&&(null==(e=window.top)||e.postMessage({type:t,payload:{projectKey:this.projectKey,projectData:this.projectData}},"*"))},e.initItemData=function(){var t=this,e=this.projectData;e.items&&e.items.forEach((function(e){var n=t.itemInstances.get(e.id)||new u(e,t);t.itemInstances.set(e.id,n)}))},t}(),u=function(t,e){var n=this;void 0===t&&(t={}),this.data={},this.listeners=new Set,this.setData=function(t){n.data=Object.assign(n.data,t),n.triggerUpdate()},this.subscribe=function(t){n.listeners.add(t)},this.unsubscribe=function(t){n.listeners.delete(t)},this.triggerUpdate=function(){n.listeners.forEach((function(t){return t(n.data)}))},this.data=t;var r=t.type;r&&(this.Component=e.elementInstances.get(r))},p=function(t){var n=e.useState(0),r=n[0],i=n[1];return e.createElement("button",Object.assign({},t,{onClick:function(){return i(r+1)}}),"Test Button ",r)};p.defaultProps={style:{backgroundColor:"green",borderRadius:"9999px",fontSize:"13px",padding:"10px 15px"},type:"button",tag:"button"},p.configs={type:"button"};var d=["tag","children"],l=function(t){var e=t.tag,r=void 0===e?"div":e,s=t.children,o=a(t,d);return n.createElement(r,i({},o),s)};l.configs={type:"base"};var f={Button:p,BaseElement:l},h=["id","type","childIds"],v=function(t){var n=t.itemInstance,r=t.elementInstances,s=t.context,o=e.useState(n.data),c=o[0],u=o[1],p=c.id,d=c.type,l=c.childIds,f=a(c,h);e.useEffect((function(){var t=function(t){u(i({},t))};return n.subscribe(t),function(){n.unsubscribe(t)}}),[]);var v=r.get(d);return v?e.createElement(v,Object.assign({key:p,"data-wv-id":p},f),Array.isArray(l)&&l.map((function(t){return e.createElement(g,{key:t,itemId:t,context:s})}))):null},g=function(t){var n=t.context,r=n.elementInstances,i=n.itemInstances.get(t.itemId);return i?e.createElement(v,{itemInstance:i,elementInstances:r,context:n}):e.createElement(e.Fragment,null)};exports.WeaverseRoot=function(t){var n,r,i=t.context,a=t.defaultData,s=e.useState(i.projectData)[1];return e.useEffect((function(){var t=function(){s(i.projectData)};return i.subscribe(t),i.updateProjectData(),function(){i.unsubscribe(t)}}),[]),null!=(n=i.projectData)&&null!=(r=n.items)&&r.length||!a||(i.projectData=a,i.initItemData()),e.createElement(g,{itemId:0,context:i})},exports.createRootContext=function(t){var e=new c(t);return Object.keys(f).forEach((function(t){var n,r;(null==(n=f[t])||null==(r=n.configs)?void 0:r.type)&&e.registerElement(f[t].configs.type,f[t])})),e};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),r=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@weaverse/core");function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function c(e,t){if(null==e)return{};var r,n,a={},c=Object.keys(e);for(n=0;n<c.length;n++)t.indexOf(r=c[n])>=0||(a[r]=e[r]);return a}var s=t.forwardRef((function(e,r){var n=t.useState(0),a=n[0],c=n[1];return t.createElement("button",Object.assign({ref:r},e,{onClick:function(){return c(a+1)}}),"Test Button ",a)}));s.defaultProps={style:{backgroundColor:"green",borderRadius:"9999px",fontSize:"13px",padding:"10px 15px"},type:"button",tag:"button"};var o=["tag","children"],u=r.forwardRef((function(e,t){var n=e.tag,s=e.children,u=c(e,o);return r.createElement(n,a({ref:t},u),s)}));function i(e){return r.createElement("div",Object.assign({},e))}u.defaultProps={type:"base",tag:"div",style:{}},i.defaultProps={style:{display:"grid",gridTemplate:"1fr / 1fr"},type:"grid"};var l={Button:s,BaseElement:u,Grid:i},f=["id","type","childIds","css","className"],d=function(e){var r=e.itemInstance,s=e.elementInstances,o=e.context,u=t.useState(r.data),i=u[0],l=u[1],d=i.id,m=i.type,v=i.childIds,b=i.css,g=i.className,y=c(i,f);t.useEffect((function(){var e=function(e){l(a({},e))};return r.subscribe(e),!r.ref.current&&n.isBrowser&&Object.assign(r.ref,{current:document.querySelector('[data-wv-id="'+d+'"]')}),function(){r.unsubscribe(e)}}),[]);var j=g||"";b&&(j+=" "+o.stitchesInstance.css(b)().className);var x=s.get(m);return x?(x.$$typeof===Symbol.for("react.forward_ref")&&(y.ref=r.ref),t.createElement(x,Object.assign({key:d,"data-wv-id":d},y,{className:j}),Array.isArray(v)&&v.map((function(e){return t.createElement(p,{key:e,itemId:e,context:o})})))):null},p=function(e){var r=e.context,n=r.elementInstances,a=r.itemInstances.get(e.itemId);return a?t.createElement(d,{itemInstance:a,elementInstances:n,context:r}):t.createElement(t.Fragment,null)};exports.WeaverseRoot=function(e){var r,n,c,s=e.context,o=e.defaultData,u=t.useState(s.projectData)[1];t.useEffect((function(){var e=function(){u(a({},s.projectData))};return s.subscribe(e),s.updateProjectData(),function(){s.unsubscribe(e)}}),[]),null!=(r=s.projectData)&&null!=(n=r.items)&&n.length||!o||(s.projectData=o,s.initItemData());var i=(null==s||null==(c=s.studioBridge)?void 0:c.handleProps)||{};return console.log("handleProps",i),t.createElement("div",Object.assign({},i),t.createElement(p,{itemId:0,context:s}))},exports.createRootContext=function(e){var t=new n.Weaverse(e);return Object.keys(l).forEach((function(e){var r,n;(null==(r=l[e])||null==(n=r.defaultProps)?void 0:n.type)&&t.registerElement(l[e].defaultProps.type,l[e])})),t};
2
2
  //# sourceMappingURL=sdk-react.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-react.cjs.production.min.js","sources":["../src/utils/index.ts","../src/core.ts","../src/elements/button.tsx","../src/elements/base.tsx","../src/elements/index.ts","../src/index.tsx"],"sourcesContent":["export const isReactNative = typeof navigator === 'object' && navigator.product === 'ReactNative'\nexport const isBrowser = typeof window !== 'undefined' && !isReactNative\nexport const isIframe = isBrowser && window.top !== window.self","// TODO: Implement Weaverse SDK class\nimport fetch from 'isomorphic-unfetch'\nimport {isBrowser} from './utils'\n\n\nexport interface ProjectDataItemType {\n\ttype: string\n\tname: string\n\tid: string | number\n}\n\nexport interface ProjectDataType {\n\titems: ProjectDataItemType[]\n}\n\n// const isSheetAccessible = (sheet: CSSStyleSheet) => {\n// \tif (sheet.href && !sheet.href.startsWith(location.origin)) {\n// \t\treturn false\n// \t}\n//\n// \ttry {\n// \t\tsheet.cssRules\n// \t\treturn true\n// \t} catch (e) {\n// \t\treturn false\n// \t}\n// }\n\n// export class WeaverseStyle {\n// \tpublic styleSheets: StyleSheetList\n// \tpublic document: Document\n//\n// \tconstructor(root: Document) {\n// \t\tthis.document = root\n// \t\tthis.styleSheets = this.document.styleSheets\n// \t}\n//\n// \t// Create styleSheet instance that work both on client and server side\n// \tcreateSheet = (root?: Document) => {\n// \t\tlet sheetInstance: any = null\n//\n// \t\tconst reset = () => {\n// \t\t\tconst sheets = Object(root).styleSheets || []\n// \t\t\t// iterate all stylesheets until a hydratable stylesheet is found\n// \t\t\tfor (const sheet of sheets) {\n// \t\t\t\tif (!isSheetAccessible(sheet)) continue\n//\n// \t\t\t\tfor (let index = 0, rules = sheet.cssRules; rules[index]; ++index) {\n// \t\t\t\t\t// /** @type {CSSStyleRule} Possible indicator rule. */\n// \t\t\t\t\tconst check = Object(rules[index])\n// \t\t\t\t\tif (check.selectorText && check.selectorText.includes('@media')) {\n// \t\t\t\t\t\tif (!sheetInstance) sheetInstance = {sheet, reset, rules: sheet.cssRules}\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n//\n// \t\t\t\t}\n//\n// \t\t\t\t// if a hydratable stylesheet is found, stop looking\n// \t\t\t\tif (sheetInstance) break\n// \t\t\t}\n// \t\t\t// if no hydratable stylesheet is found\n// \t\t\tif (!sheetInstance) {\n// \t\t\t\tconst createCSSMediaRule = (sourceCssText: string) => {\n// \t\t\t\t\tlet rule: any = {\n// \t\t\t\t\t\tcssRules: [],\n// \t\t\t\t\t\tinsertRule(cssText: string, index: number) {\n// \t\t\t\t\t\t\tthis.cssRules.splice(index, 0, createCSSMediaRule(cssText))\n// \t\t\t\t\t\t},\n// \t\t\t\t\t\tget cssText() {\n// \t\t\t\t\t\t\treturn sourceCssText === '@media{}' ? `@media{${[].map.call(this.cssRules, (cssRule: any) => cssRule.cssText).join('')}}` : sourceCssText\n// \t\t\t\t\t\t}\n// \t\t\t\t\t}\n// \t\t\t\t\treturn rule\n// \t\t\t\t}\n//\n// \t\t\t\tsheetInstance = {\n// \t\t\t\t\tsheet: root ? (root.head || root).appendChild(root.createElement('style')).sheet : createCSSMediaRule(''),\n// \t\t\t\t\trules: {},\n// \t\t\t\t\treset,\n// \t\t\t\t\ttoString() {\n// \t\t\t\t\t\tconst {cssRules} = sheetInstance.sheet\n// \t\t\t\t\t\treturn [].map\n// \t\t\t\t\t\t\t.call(cssRules, (cssMediaRule: CSSMediaRule, cssRuleIndex) => {\n// \t\t\t\t\t\t\t\tconst {cssText} = cssMediaRule\n//\n// \t\t\t\t\t\t\t\tlet lastRuleCssText = ''\n// \t\t\t\t\t\t\t\tif (cssRules[cssRuleIndex - 1]) {\n// \t\t\t\t\t\t\t\t\tif (!cssMediaRule.cssRules.length) return ''\n//\n// \t\t\t\t\t\t\t\t\tfor (const name in sheetInstance.rules) {\n// \t\t\t\t\t\t\t\t\t\tif (sheetInstance.rules[name].group === cssMediaRule) {\n// \t\t\t\t\t\t\t\t\t\t\treturn `--sxs{--sxs:${[...sheetInstance.rules[name].cache].join(' ')}}${cssText}`\n// \t\t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t\t}\n//\n// \t\t\t\t\t\t\t\t\treturn cssMediaRule.cssRules.length ? `${lastRuleCssText}${cssText}` : ''\n// \t\t\t\t\t\t\t\t}\n//\n// \t\t\t\t\t\t\t\treturn cssText\n// \t\t\t\t\t\t\t})\n// \t\t\t\t\t\t\t.join('')\n// \t\t\t\t\t}\n// \t\t\t\t}\n// \t\t\t}\n// \t\t}\n//\n// \t}\n//\n// }\n\nexport type WeaverseType = {\n\t[key: string]: any\n\tappUrl?: string,\n\tprojectKey?: string,\n\tprojectData?: ProjectDataType\n}\n\nexport class Weaverse {\n\telementInstances = new Map<string, any>()\n\titemInstances = new Map<string | number, WeaverseItemStore>()\n\tappUrl: string = process.env.NODE_ENV === 'development' ? 'http://localhost:3000' : 'https://weaverse.io'\n\tprojectKey: string = ''\n\tprojectData: ProjectDataType = {\n\t\titems: []\n\t}\n\tlisteners: Set<any> = new Set()\n\tisEditor = false\n\tcurrentFrameSubscription: any\n\n\tconstructor({appUrl, projectKey, projectData}: WeaverseType = {}) {\n\t\tthis.appUrl = appUrl || this.appUrl\n\t\tthis.projectKey = projectKey || this.projectKey\n\t\tprojectData && (this.projectData = projectData)\n\t\tthis.init()\n\t}\n\n\tregisterElement(name: string, element: any) {\n\t\tthis.elementInstances.set(name, element)\n\t}\n\n\tinit() {\n\t\tthis.subscribeMessageEvent()\n\t}\n\n\tsubscribe(fn: any) {\n\t\tthis.listeners.add(fn)\n\t}\n\n\tunsubscribe(fn: any) {\n\t\tthis.listeners.delete(fn)\n\t}\n\n\ttriggerUpdate() {\n\t\tthis.listeners.forEach(fn => fn())\n\t\tthis.triggerEditorUpdate()\n\t}\n\n\tfetchProjectData() {\n\t\treturn fetch(this.appUrl + `/api/public/${this.projectKey}`).then(r => r.json())\n\t}\n\n\tupdateProjectData() {\n\t\tif (this.projectKey) {\n\t\t\tthis.fetchProjectData().then(data => {\n\t\t\t\tif (data) {\n\t\t\t\t\tthis.projectData = data\n\t\t\t\t\tthis.initItemData()\n\t\t\t\t\tthis.triggerUpdate()\n\t\t\t\t}\n\t\t\t}).catch(err => {\n\t\t\t\tconsole.error(err)\n\t\t\t})\n\t\t}\n\t}\n\n\tsubscribeMessageEvent() {\n\t\tif (typeof this.currentFrameSubscription === 'function') {\n\t\t\tthis.currentFrameSubscription()\n\t\t}\n\t\tisBrowser && window.addEventListener('message', this.handleMessageEvent)\n\t\tthis.currentFrameSubscription = () => {\n\t\t\tisBrowser && window.removeEventListener('message', this.handleMessageEvent)\n\t\t}\n\t\treturn this.currentFrameSubscription\n\t}\n\n\ttriggerEditorUpdate(type = 'weaverse.workspace.init') {\n\t\tif (this.isEditor) {\n\t\t\twindow.top?.postMessage({\n\t\t\t\ttype, payload: {\n\t\t\t\t\tprojectKey: this.projectKey,\n\t\t\t\t\tprojectData: this.projectData\n\t\t\t\t}\n\t\t\t}, '*')\n\t\t}\n\t}\n\n\thandleMessageEvent = (e: MessageEvent) => {\n\t\tif (e.data?.type?.startsWith('weaverse.')) {\n\t\t\tlet type = e.data.type\n\t\t\tswitch (type) {\n\t\t\t\tcase 'weaverse.editor.ready':\n\t\t\t\t\tthis.isEditor = true\n\t\t\t\t\tbreak\n\t\t\t\tcase 'weaverse.editor.update':\n\t\t\t\t\tlet {payload} = e.data\n\t\t\t\t\tlet {itemId, background} = payload\n\t\t\t\t\tlet instance = this.itemInstances.get(itemId)\n\t\t\t\t\tif (instance) {\n\t\t\t\t\t\tinstance.setData({\n\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\tbackground\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tinitItemData() {\n\t\tlet data = this.projectData\n\t\tif (data.items) {\n\t\t\tdata.items.forEach(item => {\n\t\t\t\tlet itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this)\n\t\t\t\tthis.itemInstances.set(item.id, itemStore)\n\t\t\t})\n\t\t}\n\t}\n}\n\nexport class WeaverseItemStore {\n\tdata: any = {}\n\tlisteners: Set<any> = new Set()\n\tComponent: any\n\n\tconstructor(itemData: any = {}, weaverse: Weaverse) {\n\t\tthis.data = itemData\n\t\tlet {type} = itemData\n\t\tif (type) {\n\t\t\tthis.Component = weaverse.elementInstances.get(type)\n\t\t}\n\t}\n\n\tsetData = (data: any) => {\n\t\tthis.data = Object.assign(this.data, data)\n\t\tthis.triggerUpdate()\n\t}\n\n\tsubscribe = (fn: any) => {\n\t\tthis.listeners.add(fn)\n\t}\n\n\tunsubscribe = (fn: any) => {\n\t\tthis.listeners.delete(fn)\n\t}\n\n\ttriggerUpdate = () => {\n\t\tthis.listeners.forEach(fn => {\n\t\t\treturn fn(this.data)\n\t\t})\n\t}\n\n\n\n\t// addItem(item: any) {\n\t// \tthis.items.push(item)\n\t// \tthis.triggerUpdate()\n\t// }\n\t//\n\t// removeItem(item: any) {\n\t// \tthis.items = this.items.filter(i => i !== item)\n\t// \tthis.triggerUpdate()\n\t// }\n}","import * as React from 'react'\n\nexport const Button = (props: any) => {\n let [count, setCount] = React.useState(0)\n return <button {...props} onClick={() => setCount(count + 1)}>Test Button {count}</button>\n}\n\nButton.defaultProps = {\n style: {\n backgroundColor: 'green',\n borderRadius: '9999px',\n fontSize: '13px',\n padding: '10px 15px'\n },\n type: 'button',\n tag: 'button'\n}\nButton.configs = {\n type: 'button'\n}\n\nexport default Button","import React from 'react'\n\nexport const BaseElement = ({tag = 'div', children, ...props}: any) => {\n return React.createElement(tag, {\n ...props\n }, children)\n}\n\nBaseElement.configs = {\n type: 'base'\n}\nexport default BaseElement\n","import Button from './button'\nimport BaseElement from './base'\n\nconst elements = {\n\tButton,\n\tBaseElement\n}\nexport default elements","import * as React from 'react'\nimport {useEffect} from 'react'\nimport {Weaverse, WeaverseType} from './core'\nimport Elements from './elements'\n\nlet stitches = require('@stitches/core')\n\nconst createRootContext = (configs: WeaverseType) => {\n const rootContext = new Weaverse(configs)\n Object.keys(Elements).forEach(key => {\n // @ts-ignore\n Elements[key]?.configs?.type && rootContext.registerElement(Elements[key].configs.type, Elements[key])\n })\n\n return rootContext\n}\n\nconst WeaverseRoot = ({context, defaultData}: { context: Weaverse, defaultData: any }) => {\n let [, setData] = React.useState<any>(context.projectData)\n useEffect(() => {\n let handleUpdate = () => {\n setData(context.projectData)\n }\n context.subscribe(handleUpdate)\n context.updateProjectData()\n\n return () => {\n context.unsubscribe(handleUpdate)\n }\n }, [])\n if (!context.projectData?.items?.length && defaultData) {\n context.projectData = defaultData\n context.initItemData()\n }\n return <RenderItem itemId={0} context={context}/>\n}\n\n\nconst Item = ({itemInstance, elementInstances, context}: any) => {\n let [data, setData] = React.useState<any>(itemInstance.data)\n let {id, type, childIds, ...rest} = data\n\n useEffect(() => {\n let handleUpdate = (update: any) => {\n setData({...update})\n }\n itemInstance.subscribe(handleUpdate)\n return () => {\n itemInstance.unsubscribe(handleUpdate)\n }\n }, [])\n let Component = elementInstances.get(type)\n if (Component) {\n return <Component key={id} data-wv-id={id} {...rest}>\n {Array.isArray(childIds)\n && childIds.map(childId =>\n <RenderItem\n key={childId}\n itemId={childId}\n context={context}\n />\n )}\n </Component>\n }\n return null\n}\n\n\nconst RenderItem = ({itemId, context}: { itemId: number, context: any }): any => {\n let {itemInstances, elementInstances} = context\n let itemInstance = itemInstances.get(itemId)\n if (itemInstance) {\n return <Item itemInstance={itemInstance} elementInstances={elementInstances} context={context}/>\n }\n return <></>\n}\n\nexport {createRootContext, WeaverseRoot}\n"],"names":["isReactNative","navigator","product","isBrowser","window","Weaverse","appUrl","projectKey","projectData","Map","items","Set","e","data","_e$data","type","_e$data$type","startsWith","_this","isEditor","payload","background","instance","itemInstances","get","itemId","setData","style","this","init","registerElement","name","element","elementInstances","set","subscribeMessageEvent","subscribe","fn","listeners","add","unsubscribe","triggerUpdate","forEach","triggerEditorUpdate","fetchProjectData","fetch","then","r","json","updateProjectData","_this2","initItemData","err","console","error","currentFrameSubscription","addEventListener","handleMessageEvent","removeEventListener","_this3","top","postMessage","item","itemStore","_this4","id","WeaverseItemStore","itemData","weaverse","_this5","Object","assign","Component","Button","props","React","count","setCount","onClick","defaultProps","backgroundColor","borderRadius","fontSize","padding","tag","configs","BaseElement","children","createElement","elements","Item","itemInstance","context","childIds","rest","useEffect","handleUpdate","update","key","Array","isArray","map","childId","RenderItem","defaultData","_context$projectData","_context$projectData$","length","rootContext","keys","Elements"],"mappings":"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"}
1
+ {"version":3,"file":"sdk-react.cjs.production.min.js","sources":["../src/elements/button.tsx","../src/elements/base.tsx","../src/elements/grid.tsx","../src/elements/index.ts","../src/renderer.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport const Button = React.forwardRef((props: any, ref) => {\n let [count, setCount] = React.useState(0)\n return <button ref={ref} {...props} onClick={() => setCount(count + 1)}>Test Button {count}</button>\n})\n\nButton.defaultProps = {\n style: {\n backgroundColor: 'green',\n borderRadius: '9999px',\n fontSize: '13px',\n padding: '10px 15px'\n },\n type: 'button',\n tag: 'button'\n}\n\nexport default Button","import React from 'react'\n\nexport const BaseElement = React.forwardRef((({tag, children, ...props}: any, ref) => {\n return React.createElement(tag, {\n ref,\n ...props\n }, children)\n}))\n\nBaseElement.defaultProps = {\n type: 'base',\n tag: 'div',\n style: {}\n}\nexport default BaseElement\n","import React from 'react'\n\nexport default function Grid(props: any) {\n return <div {...props} />\n}\n\nGrid.defaultProps = {\n style: {\n display: 'grid',\n gridTemplate: '1fr / 1fr'\n },\n type: 'grid'\n}","import Button from './button'\nimport BaseElement from './base'\nimport Grid from './grid'\n\nconst elements = {\n Button,\n BaseElement,\n Grid\n}\nexport default elements","import * as React from 'react'\nimport {isBrowser, Weaverse, WeaverseItemStore, WeaverseType} from '@weaverse/core'\nimport Elements from './elements'\n\nexport const createRootContext = (configs: WeaverseType) => {\n const rootContext = new Weaverse(configs)\n // Register the element components\n Object.keys(Elements).forEach(key => {\n // @ts-ignore\n Elements[key]?.defaultProps?.type && rootContext.registerElement(Elements[key].defaultProps.type, Elements[key])\n })\n return rootContext\n}\n\nexport const WeaverseRoot = ({context, defaultData}: { context: Weaverse, defaultData: any }) => {\n let [, setData] = React.useState<any>(context.projectData)\n React.useEffect(() => {\n let handleUpdate = () => {\n setData({...context.projectData})\n }\n context.subscribe(handleUpdate)\n context.updateProjectData()\n return () => {\n context.unsubscribe(handleUpdate)\n }\n }, [])\n if (!context.projectData?.items?.length && defaultData) {\n context.projectData = defaultData\n context.initItemData()\n }\n let handleProps = context?.studioBridge?.handleProps || {}\n console.log('handleProps', handleProps)\n return <div {...handleProps}>\n <RenderItem itemId={0} context={context}/>\n </div>\n}\n\n\ntype ItemProps = {\n itemInstance: WeaverseItemStore\n elementInstances: Map<string, React.FC>\n context: Weaverse\n}\n\n\nconst Item = ({itemInstance, elementInstances, context}: ItemProps) => {\n let [data, setData] = React.useState<any>(itemInstance.data)\n let {id, type, childIds, css, className, ...rest} = data\n React.useEffect(() => {\n let handleUpdate = (update: any) => {\n setData({...update})\n }\n itemInstance.subscribe(handleUpdate)\n if (!itemInstance.ref.current && isBrowser) {\n Object.assign(itemInstance.ref, {current: document.querySelector(`[data-wv-id=\"${id}\"]`)})\n }\n\n return () => {\n itemInstance.unsubscribe(handleUpdate)\n }\n }, [])\n\n let realClassName = className || ''\n if (css) {\n\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let selector = (context.stitchesInstance.css(css)()).className\n realClassName += ' ' + selector\n }\n let Component = elementInstances.get(type)\n if (Component) {\n // @ts-ignore\n if (Component.$$typeof === Symbol.for('react.forward_ref')) {\n rest.ref = itemInstance.ref\n }\n return <Component key={id} data-wv-id={id} {...rest} className={realClassName}>\n {Array.isArray(childIds)\n && childIds.map(childId =>\n <RenderItem\n key={childId}\n itemId={childId}\n context={context}\n />\n )}\n </Component>\n }\n return null\n}\n\nconst RenderItem = ({itemId, context}: { itemId: number, context: any }): any => {\n let {itemInstances, elementInstances} = context\n let itemInstance = itemInstances.get(itemId)\n if (itemInstance) {\n return <Item itemInstance={itemInstance} elementInstances={elementInstances} context={context}/>\n }\n return <></>\n}\n\n"],"names":["Button","React","props","ref","count","setCount","onClick","defaultProps","style","backgroundColor","borderRadius","fontSize","padding","type","tag","BaseElement","forwardRef","children","createElement","Grid","display","gridTemplate","elements","Item","itemInstance","elementInstances","context","data","setData","id","childIds","css","className","rest","handleUpdate","update","subscribe","current","isBrowser","Object","assign","document","querySelector","unsubscribe","realClassName","stitchesInstance","Component","get","$$typeof","Symbol","key","Array","isArray","map","childId","RenderItem","itemId","itemInstances","defaultData","projectData","updateProjectData","_context$projectData","items","_context$projectData$","length","initItemData","handleProps","studioBridge","console","log","configs","rootContext","Weaverse","keys","Elements","forEach","registerElement"],"mappings":"mgBAEO,IAAMA,EAASC,cAAiB,SAACC,EAAYC,SAC1BF,WAAe,GAAlCG,OAAOC,cACLJ,wCAAQE,IAAKA,GAASD,GAAOI,QAAS,kBAAMD,EAASD,EAAQ,qBAAiBA,MAGvFJ,EAAOO,aAAe,CAClBC,MAAO,CACHC,gBAAiB,QACjBC,aAAc,SACdC,SAAU,OACVC,QAAS,aAEbC,KAAM,SACNC,IAAK,mCCbIC,EAAcd,EAAMe,YAAY,WAAiCb,OAA/BW,IAAAA,IAAKG,IAAAA,SAAaf,gBACxDD,EAAMiB,cAAcJ,KACzBX,IAAAA,GACGD,GACFe,eCJmBE,EAAKjB,UACpBD,uCAASC,IDMlBa,EAAYR,aAAe,CACzBM,KAAM,OACNC,IAAK,MACLN,MAAO,ICNTW,EAAKZ,aAAe,CAClBC,MAAO,CACLY,QAAS,OACTC,aAAc,aAEhBR,KAAM,YCPFS,EAAW,CACftB,OAAAA,EACAe,YAAAA,EACAI,KAAAA,gDCsCII,EAAO,gBAAEC,IAAAA,aAAcC,IAAAA,iBAAkBC,IAAAA,UACvBzB,WAAoBuB,EAAaG,MAAlDA,OAAMC,OACNC,EAA+CF,EAA/CE,GAAIhB,EAA2Cc,EAA3Cd,KAAMiB,EAAqCH,EAArCG,SAAUC,EAA2BJ,EAA3BI,IAAKC,EAAsBL,EAAtBK,UAAcC,IAAQN,KACpD1B,aAAgB,eACViC,EAAe,SAACC,GAClBP,OAAYO,YAEdX,EAAaY,UAAUF,IAClBV,EAAarB,IAAIkC,SAAWC,aAC/BC,OAAOC,OAAOhB,EAAarB,IAAK,CAACkC,QAASI,SAASC,8BAA8Bb,UAG5E,WACLL,EAAamB,YAAYT,MAE1B,QAECU,EAAgBZ,GAAa,GAC7BD,IAKFa,GAAiB,IADDlB,EAAQmB,iBAAiBd,IAAIA,EAA7BL,GAAqCM,eAGnDc,EAAYrB,EAAiBsB,IAAIlC,UACjCiC,GAEEA,EAAUE,WAAaC,WAAW,uBACpChB,EAAK9B,IAAMqB,EAAarB,KAEnBF,gBAAC6C,iBAAUI,IAAKrB,eAAgBA,GAAQI,GAAMD,UAAWY,IAC7DO,MAAMC,QAAQtB,IACJA,EAASuB,KAAI,SAAAC,UACRrD,gBAACsD,GACOL,IAAKI,EACLE,OAAQF,EACR5B,QAASA,SAK9B,MAGH6B,EAAa,gBAAU7B,IAAAA,QACPD,EAAoBC,EAApBD,iBAChBD,EADoCE,EAAnC+B,cAC4BV,MAFdS,eAGfhC,EACKvB,gBAACsB,GAAKC,aAAcA,EAAcC,iBAAkBA,EAAkBC,QAASA,IAEjFzB,uDAlFmB,sBAAEyB,IAAAA,QAASgC,IAAAA,YAC9B9B,EAAW3B,WAAoByB,EAAQiC,gBAC9C1D,aAAgB,eACViC,EAAe,WACjBN,OAAYF,EAAQiC,sBAEtBjC,EAAQU,UAAUF,GAClBR,EAAQkC,oBACD,WACLlC,EAAQiB,YAAYT,MAErB,aACER,EAAQiC,uBAARE,EAAqBC,QAArBC,EAA4BC,SAAUN,IACzChC,EAAQiC,YAAcD,EACtBhC,EAAQuC,oBAENC,SAAcxC,YAAAA,EAASyC,uBAAcD,cAAe,UACxDE,QAAQC,IAAI,cAAeH,GACpBjE,uCAASiE,GACdjE,gBAACsD,GAAWC,OAAQ,EAAG9B,QAASA,gCA7BH,SAAC4C,OAC1BC,EAAc,IAAIC,WAASF,UAEjC/B,OAAOkC,KAAKC,GAAUC,SAAQ,SAAAzB,qBAE5BwB,EAASxB,gBAAM3C,uBAAcM,OAAQ0D,EAAYK,gBAAgBF,EAASxB,GAAK3C,aAAaM,KAAM6D,EAASxB,OAEtGqB"}