@weaverse/core 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,6 +1,23 @@
1
+ import { CSSProperties } from '@stitches/core';
1
2
  import Stitches from '@stitches/core/types/stitches';
2
3
  import { RefObject } from 'react';
3
4
 
5
+ interface ProjectDataType {
6
+ items: WeaverseElementData[];
7
+ rootId: string | number;
8
+ script: {
9
+ css: string;
10
+ js: string;
11
+ };
12
+ }
13
+ declare type WeaverseType = {
14
+ mediaBreakPoints?: any;
15
+ appUrl?: string;
16
+ projectKey?: string;
17
+ projectData?: ProjectDataType;
18
+ isDesignMode?: boolean;
19
+ ssrMode?: boolean;
20
+ };
4
21
  declare type TODO = any;
5
22
  declare type WeaverseElementMap = {
6
23
  [key: string]: WeaverseElement;
@@ -20,9 +37,24 @@ declare type WeaverseElementSchema = {
20
37
  settings?: WeaverseElementInput[];
21
38
  styles?: WeaverseElementInput[];
22
39
  toolbar?: TODO;
23
- data?: TODO;
40
+ data?: WeaverseElementData;
24
41
  catalog?: WeaverseElementCatalog;
25
42
  };
43
+ declare type WeaverseElementData = {
44
+ id?: string | number;
45
+ type?: string | undefined;
46
+ childIds?: (string | number)[] | undefined;
47
+ css?: WeaverseElementCSS;
48
+ [key: string]: any;
49
+ };
50
+ declare type WeaverseElementCSS = {
51
+ '@desktop'?: CSSProperties | {
52
+ [key: string]: CSSProperties;
53
+ };
54
+ '@mobile'?: CSSProperties | {
55
+ [key: string]: CSSProperties;
56
+ };
57
+ };
26
58
  declare type WeaverseElementInput = {
27
59
  label?: string;
28
60
  type: 'select' | 'checkbox' | 'radio' | 'range' | 'button' | 'image' | 'file' | 'hidden' | 'alignment' | 'color' | 'dimensions' | 'flex' | 'grid' | 'input' | 'switch' | 'spacing' | 'textarea' | 'visibility' | 'border' | 'background' | 'typography' | 'shadow' | 'position' | 'overflow' | 'display' | 'other';
@@ -36,40 +68,15 @@ declare type WeaverseElementInput = {
36
68
  declare global {
37
69
  interface Window {
38
70
  WeaverseStudioBridge: TODO;
71
+ weaverseShopifyProducts: TODO;
39
72
  }
40
73
  }
41
74
 
42
- interface ProjectDataItemType {
43
- type: string;
44
- name?: string;
45
- id: string | number;
46
- description?: string;
47
- childIds?: Array<string | number>;
48
- css?: {
49
- [key: string]: string;
50
- };
51
- }
52
- interface ProjectDataType {
53
- items: ProjectDataItemType[];
54
- rootId: string | number;
55
- }
56
- declare type MediaBreakpoints = {
57
- tablet: string;
58
- mobile: string;
59
- };
60
- declare type WeaverseType = {
61
- [key: string]: any;
62
- appUrl?: string;
63
- projectKey?: string;
64
- projectData?: ProjectDataType;
65
- isDesignMode?: boolean;
66
- };
67
75
  /**
68
76
  * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
69
- * @param itemData {ProjectDataItemType} Weaverse item data
77
+ * @param itemData {WeaverseElementData} Weaverse item data
70
78
  * @param weaverse {Weaverse} Weaverse instance
71
- * Usage:
72
- * ```jsx
79
+ * @example
73
80
  * useEffect(() => {
74
81
  * let handleUpdate = (update: any) => {
75
82
  * setData({...update})
@@ -78,19 +85,19 @@ declare type WeaverseType = {
78
85
  * return () => {
79
86
  * itemInstance.unsubscribe(handleUpdate)
80
87
  * }
81
- * }, [])
82
- * ```
88
+ * }, [])
83
89
  */
84
90
  declare class WeaverseItemStore {
85
91
  listeners: Set<any>;
86
92
  ref: RefObject<HTMLElement>;
87
93
  weaverse: Weaverse;
88
- constructor(itemData: any, weaverse: Weaverse);
89
- _data: any;
94
+ stitchesClass: string;
95
+ constructor(itemData: WeaverseElementData, weaverse: Weaverse);
96
+ _data: WeaverseElementData;
90
97
  get Element(): WeaverseElement;
91
- set data(data: any);
92
- get data(): any;
93
- setData: (data: any) => any;
98
+ set data(data: WeaverseElementData);
99
+ get data(): WeaverseElementData;
100
+ setData: (data: WeaverseElementData) => WeaverseElementData;
94
101
  subscribe: (fn: any) => void;
95
102
  unsubscribe: (fn: any) => void;
96
103
  triggerUpdate: () => void;
@@ -133,6 +140,11 @@ declare class Weaverse {
133
140
  * @type {boolean}
134
141
  */
135
142
  isDesignMode: boolean;
143
+ /**
144
+ * Use in element to optionally render special HTML for hydration
145
+ * @type {boolean}
146
+ */
147
+ ssrMode: boolean;
136
148
  /**
137
149
  * stitches instance for handling CSS stylesheet, media, theme for Weaverse project
138
150
  */
@@ -149,8 +161,10 @@ declare class Weaverse {
149
161
  * @param projectKey {string} Weaverse project key to access project data via API
150
162
  * @param projectData {ProjectDataType} Weaverse project data, by default, user can provide project data via React Component.
151
163
  * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.
164
+ * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not
165
+ * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration
152
166
  */
153
- constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode }?: WeaverseType);
167
+ constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode, ssrMode }?: WeaverseType);
154
168
  /**
155
169
  * register the custom React Component to Weaverse, store it into Weaverse.elementInstances
156
170
  * @param element {WeaverseElement} custom React Component
@@ -158,7 +172,6 @@ declare class Weaverse {
158
172
  registerElement(element: WeaverseElement): void;
159
173
  init(): void;
160
174
  initStitches: () => void;
161
- loadStudio(): void;
162
175
  subscribe(fn: any): void;
163
176
  unsubscribe(fn: any): void;
164
177
  triggerUpdate(): void;
@@ -184,4 +197,4 @@ declare const isReactNative: boolean;
184
197
  declare const isBrowser: boolean;
185
198
  declare const isIframe: boolean;
186
199
 
187
- export { MediaBreakpoints, ProjectDataItemType, ProjectDataType, TODO, Weaverse, WeaverseElement, WeaverseElementCatalog, WeaverseElementInput, WeaverseElementMap, WeaverseElementSchema, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
200
+ export { ProjectDataType, TODO, Weaverse, WeaverseElement, WeaverseElementCSS, WeaverseElementCatalog, WeaverseElementData, WeaverseElementInput, WeaverseElementMap, WeaverseElementSchema, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
package/dist/index.js CHANGED
@@ -44,19 +44,15 @@ __export(src_exports, {
44
44
  });
45
45
  module.exports = __toCommonJS(src_exports);
46
46
 
47
- // src/utils/index.ts
48
- var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
49
- var isBrowser = typeof window !== "undefined" && !isReactNative;
50
- var isIframe = isBrowser && window.top !== window.self;
51
-
52
47
  // src/core.ts
53
48
  var stitches = __toESM(require("@stitches/core"));
54
49
  var WeaverseItemStore = class {
55
- constructor(itemData = {}, weaverse) {
50
+ constructor(itemData, weaverse) {
56
51
  this.listeners = /* @__PURE__ */ new Set();
57
52
  this.ref = {
58
53
  current: null
59
54
  };
55
+ this.stitchesClass = "";
60
56
  this._data = {};
61
57
  this.setData = (data) => {
62
58
  this.data = Object.assign(this.data, data);
@@ -93,17 +89,22 @@ var WeaverseItemStore = class {
93
89
  }
94
90
  };
95
91
  var _Weaverse = class {
96
- constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode } = {}) {
92
+ constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode, ssrMode } = {}) {
97
93
  this.elementInstances = /* @__PURE__ */ new Map();
98
94
  this.itemInstances = /* @__PURE__ */ new Map();
99
95
  this.appUrl = process.env.NODE_ENV === "development" ? "http://localhost:3000" : "https://weaverse.io";
100
96
  this.projectKey = "";
101
97
  this.projectData = {
102
98
  items: [],
103
- rootId: 0
99
+ rootId: 0,
100
+ script: {
101
+ css: "",
102
+ js: ""
103
+ }
104
104
  };
105
105
  this.listeners = /* @__PURE__ */ new Set();
106
106
  this.isDesignMode = false;
107
+ this.ssrMode = false;
107
108
  this.mediaBreakPoints = {
108
109
  desktop: "all",
109
110
  mobile: "(max-width: 767.98px)"
@@ -111,25 +112,14 @@ var _Weaverse = class {
111
112
  this.initStitches = () => {
112
113
  this.stitchesInstance = stitches.createStitches({
113
114
  prefix: "weaverse",
114
- media: this.mediaBreakPoints,
115
- theme: {
116
- sizes: {
117
- "width": "100%",
118
- "max-width": "100%",
119
- "column-count": "16",
120
- "row-count": "12",
121
- "row-size": "48px"
122
- },
123
- space: {
124
- gap: "8px"
125
- }
126
- }
115
+ media: this.mediaBreakPoints
127
116
  });
128
117
  };
129
118
  this.appUrl = appUrl || this.appUrl;
130
119
  this.projectKey = projectKey || this.projectKey;
131
120
  this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
132
121
  this.isDesignMode = isDesignMode || this.isDesignMode;
122
+ this.ssrMode = ssrMode || this.ssrMode;
133
123
  projectData && (this.projectData = projectData);
134
124
  this.init();
135
125
  }
@@ -143,27 +133,9 @@ var _Weaverse = class {
143
133
  }
144
134
  init() {
145
135
  this.initStitches();
146
- this.loadStudio();
147
136
  this.initProjectItemData();
148
137
  this.updateProjectData();
149
138
  }
150
- loadStudio() {
151
- if (this.isDesignMode && isIframe) {
152
- let initStudio = () => {
153
- this.studioBridge = new window.WeaverseStudioBridge(this);
154
- this.triggerUpdate();
155
- };
156
- if (!window.WeaverseStudioBridge) {
157
- const studioBridgeScript = document.createElement("script");
158
- studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
159
- studioBridgeScript.type = "module";
160
- studioBridgeScript.onload = initStudio;
161
- document.body.appendChild(studioBridgeScript);
162
- } else {
163
- initStudio();
164
- }
165
- }
166
- }
167
139
  subscribe(fn) {
168
140
  this.listeners.add(fn);
169
141
  }
@@ -206,6 +178,11 @@ var _Weaverse = class {
206
178
  };
207
179
  var Weaverse = _Weaverse;
208
180
  Weaverse.WeaverseItemStore = WeaverseItemStore;
181
+
182
+ // src/utils/index.ts
183
+ var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
184
+ var isBrowser = typeof window !== "undefined" && !isReactNative;
185
+ var isIframe = isBrowser && window.top !== window.self;
209
186
  // Annotate the CommonJS export names for ESM import in node:
210
187
  0 && (module.exports = {
211
188
  Weaverse,
package/dist/index.mjs CHANGED
@@ -15,19 +15,15 @@ var __spreadValues = (a, b) => {
15
15
  return a;
16
16
  };
17
17
 
18
- // src/utils/index.ts
19
- var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
20
- var isBrowser = typeof window !== "undefined" && !isReactNative;
21
- var isIframe = isBrowser && window.top !== window.self;
22
-
23
18
  // src/core.ts
24
19
  import * as stitches from "@stitches/core";
25
20
  var WeaverseItemStore = class {
26
- constructor(itemData = {}, weaverse) {
21
+ constructor(itemData, weaverse) {
27
22
  this.listeners = /* @__PURE__ */ new Set();
28
23
  this.ref = {
29
24
  current: null
30
25
  };
26
+ this.stitchesClass = "";
31
27
  this._data = {};
32
28
  this.setData = (data) => {
33
29
  this.data = Object.assign(this.data, data);
@@ -64,17 +60,22 @@ var WeaverseItemStore = class {
64
60
  }
65
61
  };
66
62
  var _Weaverse = class {
67
- constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode } = {}) {
63
+ constructor({ appUrl, projectKey, projectData, mediaBreakPoints, isDesignMode, ssrMode } = {}) {
68
64
  this.elementInstances = /* @__PURE__ */ new Map();
69
65
  this.itemInstances = /* @__PURE__ */ new Map();
70
66
  this.appUrl = process.env.NODE_ENV === "development" ? "http://localhost:3000" : "https://weaverse.io";
71
67
  this.projectKey = "";
72
68
  this.projectData = {
73
69
  items: [],
74
- rootId: 0
70
+ rootId: 0,
71
+ script: {
72
+ css: "",
73
+ js: ""
74
+ }
75
75
  };
76
76
  this.listeners = /* @__PURE__ */ new Set();
77
77
  this.isDesignMode = false;
78
+ this.ssrMode = false;
78
79
  this.mediaBreakPoints = {
79
80
  desktop: "all",
80
81
  mobile: "(max-width: 767.98px)"
@@ -82,25 +83,14 @@ var _Weaverse = class {
82
83
  this.initStitches = () => {
83
84
  this.stitchesInstance = stitches.createStitches({
84
85
  prefix: "weaverse",
85
- media: this.mediaBreakPoints,
86
- theme: {
87
- sizes: {
88
- "width": "100%",
89
- "max-width": "100%",
90
- "column-count": "16",
91
- "row-count": "12",
92
- "row-size": "48px"
93
- },
94
- space: {
95
- gap: "8px"
96
- }
97
- }
86
+ media: this.mediaBreakPoints
98
87
  });
99
88
  };
100
89
  this.appUrl = appUrl || this.appUrl;
101
90
  this.projectKey = projectKey || this.projectKey;
102
91
  this.mediaBreakPoints = mediaBreakPoints || this.mediaBreakPoints;
103
92
  this.isDesignMode = isDesignMode || this.isDesignMode;
93
+ this.ssrMode = ssrMode || this.ssrMode;
104
94
  projectData && (this.projectData = projectData);
105
95
  this.init();
106
96
  }
@@ -114,27 +104,9 @@ var _Weaverse = class {
114
104
  }
115
105
  init() {
116
106
  this.initStitches();
117
- this.loadStudio();
118
107
  this.initProjectItemData();
119
108
  this.updateProjectData();
120
109
  }
121
- loadStudio() {
122
- if (this.isDesignMode && isIframe) {
123
- let initStudio = () => {
124
- this.studioBridge = new window.WeaverseStudioBridge(this);
125
- this.triggerUpdate();
126
- };
127
- if (!window.WeaverseStudioBridge) {
128
- const studioBridgeScript = document.createElement("script");
129
- studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
130
- studioBridgeScript.type = "module";
131
- studioBridgeScript.onload = initStudio;
132
- document.body.appendChild(studioBridgeScript);
133
- } else {
134
- initStudio();
135
- }
136
- }
137
- }
138
110
  subscribe(fn) {
139
111
  this.listeners.add(fn);
140
112
  }
@@ -177,6 +149,11 @@ var _Weaverse = class {
177
149
  };
178
150
  var Weaverse = _Weaverse;
179
151
  Weaverse.WeaverseItemStore = WeaverseItemStore;
152
+
153
+ // src/utils/index.ts
154
+ var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
155
+ var isBrowser = typeof window !== "undefined" && !isReactNative;
156
+ var isIframe = isBrowser && window.top !== window.self;
180
157
  export {
181
158
  Weaverse,
182
159
  WeaverseItemStore,
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",