@weaverse/core 1.0.18 → 1.0.19

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,5 +1,5 @@
1
1
  import * as Stitches from '@stitches/core';
2
- import { ForwardRefExoticComponent, RefObject } from 'react';
2
+ import { RefObject, ForwardRefExoticComponent } from 'react';
3
3
  import Stitches$1 from '@stitches/core/types/stitches';
4
4
 
5
5
  declare let stitchesUtils: {
@@ -40,6 +40,127 @@ declare let stitchesUtils: {
40
40
  };
41
41
  };
42
42
 
43
+ /**
44
+ * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
45
+ * @param itemData {ElementData} Weaverse item data
46
+ * @param weaverse {Weaverse} Weaverse instance
47
+ * @example
48
+ * useEffect(() => {
49
+ * let handleUpdate = (update: any) => {
50
+ * setData({...update})
51
+ * }
52
+ * itemInstance.subscribe(handleUpdate)
53
+ * return () => {
54
+ * itemInstance.unsubscribe(handleUpdate)
55
+ * }
56
+ * }, [])
57
+ */
58
+ declare class WeaverseItemStore {
59
+ listeners: Set<any>;
60
+ ref: RefObject<HTMLElement>;
61
+ weaverse: Weaverse;
62
+ stitchesClass: string;
63
+ _data: ElementData;
64
+ _flags: ElementFlags;
65
+ constructor(itemData: ElementData, weaverse: Weaverse);
66
+ get _id(): string;
67
+ get _element(): HTMLElement | null;
68
+ get Element(): WeaverseElement | undefined;
69
+ set data(data: Omit<ElementData, "id" | "type">);
70
+ get data(): ElementData;
71
+ setData: (data: Omit<ElementData, "id" | "type">) => ElementData;
72
+ subscribe: (fn: any) => void;
73
+ unsubscribe: (fn: any) => void;
74
+ triggerUpdate: () => void;
75
+ }
76
+ declare class Weaverse {
77
+ /**
78
+ * The `weaverse-content-root` element of Weaverse SDK
79
+ */
80
+ contentRootElement: HTMLElement | undefined;
81
+ /**
82
+ * For storing, registering element React component from Weaverse or created by user/developer
83
+ */
84
+ elementInstances: Map<string, WeaverseElement>;
85
+ /**
86
+ * list of element/items store to provide data, handle state update, state sharing, etc.
87
+ */
88
+ itemInstances: Map<string | number, WeaverseItemStore>;
89
+ /**
90
+ * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
91
+ * @type {string}
92
+ */
93
+ weaverseHost: string;
94
+ /**
95
+ * Weaverse project key to access project data via API
96
+ * @type {string}
97
+ */
98
+ projectId: string;
99
+ /**
100
+ * Weaverse project data, by default, user can provide project data via React Component:
101
+ * <WeaverseRoot data={data} /> it will be used to server-side rendering
102
+ */
103
+ data: WeaverseProjectDataType;
104
+ /**
105
+ * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot
106
+ * @type {Map<string, (data: any) => void>}
107
+ */
108
+ listeners: Set<any>;
109
+ /**
110
+ * Check whether the sdk is in editor or not.
111
+ * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,
112
+ * else render the preview UI, plain HTML + CSS + React hydrate
113
+ * @type {boolean}
114
+ */
115
+ isDesignMode: boolean;
116
+ /**
117
+ * Check the platform, shopify-section or react-ssr(hydrogen)
118
+ */
119
+ platformType: PlatformTypeEnum;
120
+ /**
121
+ * Check whether the sdk is in preview mode or not
122
+ * @type {boolean}
123
+ */
124
+ isPreviewMode: boolean;
125
+ /**
126
+ * Use in element to optionally render special HTML for hydration
127
+ * @type {boolean}
128
+ */
129
+ ssrMode: boolean;
130
+ /**
131
+ * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project
132
+ */
133
+ stitchesInstance: Stitches$1 | any;
134
+ studioBridge?: any;
135
+ elementSchemas?: ElementSchema[];
136
+ static WeaverseItemStore: typeof WeaverseItemStore;
137
+ mediaBreakPoints: BreakPoints;
138
+ /**
139
+ * constructor
140
+ * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
141
+ * @param projectId {string} Weaverse project key to access project data via API
142
+ * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.
143
+ * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.
144
+ * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not
145
+ * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration
146
+ * @param elementSchemas {Array<ElementSchema>} List of element schemas
147
+ * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
148
+ */
149
+ constructor({ weaverseHost, projectId, data, mediaBreakPoints, isDesignMode, ssrMode, elementSchemas, platformType, }?: WeaverseType);
150
+ init({ weaverseHost, elementSchemas, platformType, projectId, data, mediaBreakPoints, isDesignMode, ssrMode, }?: WeaverseType): void;
151
+ /**
152
+ * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances
153
+ * @param element {WeaverseElement} custom React Component
154
+ */
155
+ registerElement(element: WeaverseElement): void;
156
+ initStitches: () => void;
157
+ subscribe(fn: any): void;
158
+ unsubscribe(fn: any): void;
159
+ triggerUpdate(): void;
160
+ setProjectData(data: WeaverseProjectDataType): void;
161
+ initProjectItemData(): void;
162
+ }
163
+
43
164
  interface WeaverseProjectDataType {
44
165
  items: ElementData[];
45
166
  rootId: string;
@@ -53,7 +174,7 @@ interface BreakPoints {
53
174
  mobile: string;
54
175
  desktop: string;
55
176
  }
56
- type PlatformTypeEnum = "shopify-section" | "react-ssr";
177
+ type PlatformTypeEnum = "shopify-section" | "shopify-hydrogen" | "nextjs";
57
178
  interface WeaverseType {
58
179
  mediaBreakPoints?: BreakPoints;
59
180
  weaverseHost?: string;
@@ -203,132 +324,13 @@ interface DataSortInputConfigs {
203
324
  type InputType = "color" | "datepicker" | "image" | "range" | "select" | "children-sort" | "data-sort" | "switch" | "text" | "textarea" | "toggle-group" | "position" | "product" | "product-list" | "product-swatches" | "text-editor" | "custom.html" | "instagram" | "collection-list" | "collection" | "article-list" | "map-autocomplete";
204
325
  declare global {
205
326
  interface Window {
206
- WeaverseStudioBridge: any;
327
+ createWeaverseStudioBridge: (weaverse: Weaverse) => any;
328
+ weaverseStudioInitialized: boolean;
207
329
  Blinkloader: any;
208
330
  }
209
331
  }
210
332
 
211
- /**
212
- * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
213
- * @param itemData {ElementData} Weaverse item data
214
- * @param weaverse {Weaverse} Weaverse instance
215
- * @example
216
- * useEffect(() => {
217
- * let handleUpdate = (update: any) => {
218
- * setData({...update})
219
- * }
220
- * itemInstance.subscribe(handleUpdate)
221
- * return () => {
222
- * itemInstance.unsubscribe(handleUpdate)
223
- * }
224
- * }, [])
225
- */
226
- declare class WeaverseItemStore {
227
- listeners: Set<any>;
228
- ref: RefObject<HTMLElement>;
229
- weaverse: Weaverse;
230
- stitchesClass: string;
231
- _data: ElementData;
232
- _flags: ElementFlags;
233
- constructor(itemData: ElementData, weaverse: Weaverse);
234
- get _id(): string;
235
- get _element(): HTMLElement | null;
236
- get Element(): WeaverseElement | undefined;
237
- set data(data: Omit<ElementData, "id" | "type">);
238
- get data(): ElementData;
239
- setData: (data: Omit<ElementData, "id" | "type">) => ElementData;
240
- subscribe: (fn: any) => void;
241
- unsubscribe: (fn: any) => void;
242
- triggerUpdate: () => void;
243
- }
244
- declare class Weaverse {
245
- /**
246
- * The `weaverse-content-root` element of Weaverse SDK
247
- */
248
- contentRootElement: HTMLElement | undefined;
249
- /**
250
- * For storing, registering element React component from Weaverse or created by user/developer
251
- */
252
- elementInstances: Map<string, WeaverseElement>;
253
- /**
254
- * list of element/items store to provide data, handle state update, state sharing, etc.
255
- */
256
- itemInstances: Map<string | number, WeaverseItemStore>;
257
- /**
258
- * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
259
- * @type {string}
260
- */
261
- weaverseHost: string;
262
- /**
263
- * Weaverse project key to access project data via API
264
- * @type {string}
265
- */
266
- projectId: string;
267
- /**
268
- * Weaverse project data, by default, user can provide project data via React Component:
269
- * <WeaverseRoot data={data} /> it will be used to server-side rendering
270
- */
271
- data: WeaverseProjectDataType;
272
- /**
273
- * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot
274
- * @type {Map<string, (data: any) => void>}
275
- */
276
- listeners: Set<any>;
277
- /**
278
- * Check whether the sdk is in editor or not.
279
- * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,
280
- * else render the preview UI, plain HTML + CSS + React hydrate
281
- * @type {boolean}
282
- */
283
- isDesignMode: boolean;
284
- /**
285
- * Check the platform, shopify-section or react-ssr(hydrogen)
286
- */
287
- platformType: PlatformTypeEnum;
288
- /**
289
- * Check whether the sdk is in preview mode or not
290
- * @type {boolean}
291
- */
292
- isPreviewMode: boolean;
293
- /**
294
- * Use in element to optionally render special HTML for hydration
295
- * @type {boolean}
296
- */
297
- ssrMode: boolean;
298
- /**
299
- * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project
300
- */
301
- stitchesInstance: Stitches$1 | any;
302
- studioBridge?: any;
303
- elementSchemas?: ElementSchema[];
304
- static WeaverseItemStore: typeof WeaverseItemStore;
305
- mediaBreakPoints: BreakPoints;
306
- /**
307
- * constructor
308
- * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
309
- * @param projectId {string} Weaverse project key to access project data via API
310
- * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.
311
- * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.
312
- * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not
313
- * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration
314
- * @param elementSchemas {Array<ElementSchema>} List of element schemas
315
- * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)
316
- */
317
- constructor({ weaverseHost, projectId, data, mediaBreakPoints, isDesignMode, ssrMode, elementSchemas, platformType, }?: WeaverseType);
318
- init({ weaverseHost, elementSchemas, platformType, projectId, data, mediaBreakPoints, isDesignMode, ssrMode, }?: WeaverseType): void;
319
- loadStudio(version?: string): void;
320
- /**
321
- * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances
322
- * @param element {WeaverseElement} custom React Component
323
- */
324
- registerElement(element: WeaverseElement): void;
325
- initStitches: () => void;
326
- subscribe(fn: any): void;
327
- unsubscribe(fn: any): void;
328
- triggerUpdate(): void;
329
- setProjectData(data: WeaverseProjectDataType): void;
330
- initProjectItemData(): void;
331
- }
333
+ declare let loadScript: (src: string) => Promise<unknown>;
332
334
 
333
335
  declare let isReactNative: boolean;
334
336
  declare let isBrowser: boolean;
@@ -342,4 +344,4 @@ declare function merge(target: Record<string, any>, source: Record<string, any>)
342
344
  [x: string]: any;
343
345
  };
344
346
 
345
- export { AdditionalInputConfigs, AdvancedGroup, AdvancedGroupType, BasicGroup, BasicInput, BreakPoints, CatalogGroup, ChildElement, ChildElementCSS, ChildElementSelector, ChildrenSortInputConfigs, DataSortInputConfigs, ElementCSS, ElementCatalog, ElementData, ElementDataInCatalog, ElementFlags, ElementInspector, ElementSchema, FlagType, GridSize, InputType, ParentType, PlatformTypeEnum, RangeInputConfigs, SelectInputConfigs, SortableItemAction, ToggleGroupConfigs, ToolbarAction, Weaverse, WeaverseCSSProperties, WeaverseElement, WeaverseItemStore, WeaverseProjectDataType, WeaverseType, isBrowser, isIframe, isReactNative, merge };
347
+ export { AdditionalInputConfigs, AdvancedGroup, AdvancedGroupType, BasicGroup, BasicInput, BreakPoints, CatalogGroup, ChildElement, ChildElementCSS, ChildElementSelector, ChildrenSortInputConfigs, DataSortInputConfigs, ElementCSS, ElementCatalog, ElementData, ElementDataInCatalog, ElementFlags, ElementInspector, ElementSchema, FlagType, GridSize, InputType, ParentType, PlatformTypeEnum, RangeInputConfigs, SelectInputConfigs, SortableItemAction, ToggleGroupConfigs, ToolbarAction, Weaverse, WeaverseCSSProperties, WeaverseElement, WeaverseItemStore, WeaverseProjectDataType, WeaverseType, isBrowser, isIframe, isReactNative, loadScript, merge };
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ __export(src_exports, {
35
35
  isBrowser: () => isBrowser,
36
36
  isIframe: () => isIframe,
37
37
  isReactNative: () => isReactNative,
38
+ loadScript: () => loadScript,
38
39
  merge: () => merge
39
40
  });
40
41
  module.exports = __toCommonJS(src_exports);
@@ -42,6 +43,18 @@ module.exports = __toCommonJS(src_exports);
42
43
  // src/core.ts
43
44
  var stitches = __toESM(require("@stitches/core"));
44
45
 
46
+ // src/utils/load-script.ts
47
+ var loadScript = (src) => {
48
+ return new Promise((resolve, reject) => {
49
+ let script = document.createElement("script");
50
+ script.src = src;
51
+ script.onload = resolve;
52
+ script.onerror = reject;
53
+ script.defer = true;
54
+ document.body.appendChild(script);
55
+ });
56
+ };
57
+
45
58
  // src/utils/index.ts
46
59
  var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
47
60
  var isBrowser = typeof window !== "undefined" && !isReactNative;
@@ -263,42 +276,6 @@ var Weaverse = class {
263
276
  this.initProjectItemData();
264
277
  this.initStitches();
265
278
  }
266
- // initialized = false
267
- // initializeData = (data: any) => {
268
- // if (!this.initialized) {
269
- // let { data: d, isDesignMode, id, projectId, weaverseHost } = data
270
- // this.projectId = projectId || this.projectId
271
- // this.weaverseHost = weaverseHost || this.weaverseHost
272
- // this.data = { ...d, pageId: id }
273
- // this.isDesignMode = isDesignMode
274
- // this.initProjectItemData()
275
- // if (this.isDesignMode) {
276
- // this.triggerUpdate()
277
- // this.loadStudio()
278
- // }
279
- // }
280
- // this.initialized = true
281
- // }
282
- loadStudio(version) {
283
- if (isIframe && this.isDesignMode && !this.studioBridge) {
284
- const initStudio = () => {
285
- this.studioBridge = new window.WeaverseStudioBridge(this);
286
- this.triggerUpdate();
287
- clearInterval(i);
288
- };
289
- let i = setInterval(() => {
290
- if (!window.WeaverseStudioBridge) {
291
- let studioBridgeScript = document.createElement("script");
292
- studioBridgeScript.src = `${this.weaverseHost}/assets/studio/studio-bridge.js?v=${version}`;
293
- studioBridgeScript.type = "module";
294
- studioBridgeScript.onload = initStudio;
295
- document.body.appendChild(studioBridgeScript);
296
- } else {
297
- initStudio();
298
- }
299
- }, 2e3);
300
- }
301
- }
302
279
  /**
303
280
  * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances
304
281
  * @param element {WeaverseElement} custom React Component
@@ -346,5 +323,6 @@ Weaverse.WeaverseItemStore = WeaverseItemStore;
346
323
  isBrowser,
347
324
  isIframe,
348
325
  isReactNative,
326
+ loadScript,
349
327
  merge
350
328
  });
package/dist/index.mjs CHANGED
@@ -1,6 +1,18 @@
1
1
  // src/core.ts
2
2
  import * as stitches from "@stitches/core";
3
3
 
4
+ // src/utils/load-script.ts
5
+ var loadScript = (src) => {
6
+ return new Promise((resolve, reject) => {
7
+ let script = document.createElement("script");
8
+ script.src = src;
9
+ script.onload = resolve;
10
+ script.onerror = reject;
11
+ script.defer = true;
12
+ document.body.appendChild(script);
13
+ });
14
+ };
15
+
4
16
  // src/utils/index.ts
5
17
  var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
6
18
  var isBrowser = typeof window !== "undefined" && !isReactNative;
@@ -222,42 +234,6 @@ var Weaverse = class {
222
234
  this.initProjectItemData();
223
235
  this.initStitches();
224
236
  }
225
- // initialized = false
226
- // initializeData = (data: any) => {
227
- // if (!this.initialized) {
228
- // let { data: d, isDesignMode, id, projectId, weaverseHost } = data
229
- // this.projectId = projectId || this.projectId
230
- // this.weaverseHost = weaverseHost || this.weaverseHost
231
- // this.data = { ...d, pageId: id }
232
- // this.isDesignMode = isDesignMode
233
- // this.initProjectItemData()
234
- // if (this.isDesignMode) {
235
- // this.triggerUpdate()
236
- // this.loadStudio()
237
- // }
238
- // }
239
- // this.initialized = true
240
- // }
241
- loadStudio(version) {
242
- if (isIframe && this.isDesignMode && !this.studioBridge) {
243
- const initStudio = () => {
244
- this.studioBridge = new window.WeaverseStudioBridge(this);
245
- this.triggerUpdate();
246
- clearInterval(i);
247
- };
248
- let i = setInterval(() => {
249
- if (!window.WeaverseStudioBridge) {
250
- let studioBridgeScript = document.createElement("script");
251
- studioBridgeScript.src = `${this.weaverseHost}/assets/studio/studio-bridge.js?v=${version}`;
252
- studioBridgeScript.type = "module";
253
- studioBridgeScript.onload = initStudio;
254
- document.body.appendChild(studioBridgeScript);
255
- } else {
256
- initStudio();
257
- }
258
- }, 2e3);
259
- }
260
- }
261
237
  /**
262
238
  * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances
263
239
  * @param element {WeaverseElement} custom React Component
@@ -304,5 +280,6 @@ export {
304
280
  isBrowser,
305
281
  isIframe,
306
282
  isReactNative,
283
+ loadScript,
307
284
  merge
308
285
  };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "version": "1.0.18",
2
+ "version": "1.0.19",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
- "typings": "dist/index.d.ts",
5
+ "types": "dist/index.d.ts",
6
6
  "module": "dist/index.mjs",
7
7
  "publishConfig": {
8
8
  "access": "public"