@weaverse/core 2.3.0 → 2.4.1

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.mts CHANGED
@@ -6,7 +6,7 @@ type AnyFunction = (...args: any[]) => any;
6
6
  declare class EventEmitter {
7
7
  listeners: Set<AnyFunction>;
8
8
  constructor();
9
- subscribe(fn: AnyFunction): void;
9
+ subscribe(fn: AnyFunction): () => void;
10
10
  unsubscribe(fn: AnyFunction): void;
11
11
  emit(data?: any): void;
12
12
  }
@@ -16,7 +16,7 @@ declare class WeaverseItemStore extends EventEmitter {
16
16
  ref: RefObject<HTMLElement>;
17
17
  _store: ElementData;
18
18
  stitchesClass: string;
19
- constructor(intialData: ElementData, weaverse: Weaverse);
19
+ constructor(initialData: ElementData, weaverse: Weaverse);
20
20
  get _id(): string;
21
21
  get _element(): HTMLElement | null;
22
22
  get Element(): any;
@@ -28,31 +28,35 @@ declare class WeaverseItemStore extends EventEmitter {
28
28
  }
29
29
  declare class Weaverse extends EventEmitter {
30
30
  contentRootElement: HTMLElement | null;
31
- itemInstances: Map<any, any>;
31
+ static itemInstances: Map<any, any>;
32
32
  weaverseHost: string;
33
33
  weaverseVersion: string;
34
34
  projectId: string;
35
35
  isDesignMode: boolean;
36
36
  isPreviewMode: boolean;
37
- stitchesInstance: Stitches | any;
37
+ static stitchesInstance: Stitches | any;
38
38
  studioBridge?: any;
39
39
  ItemConstructor: typeof WeaverseItemStore;
40
40
  data: WeaverseProjectDataType;
41
41
  platformType: PlatformTypeEnum;
42
- readonly elementRegistry: Map<any, any>;
42
+ static elementRegistry: Map<any, any>;
43
43
  mediaBreakPoints: BreakPoints;
44
44
  constructor(params: WeaverseCoreParams);
45
45
  /**
46
46
  * Create new `WeaverseItemStore` instance for each item in the project.
47
47
  */
48
48
  initProject: () => void;
49
+ get itemInstances(): Map<any, any>;
49
50
  initStitches: (externalConfig?: stitches.CreateStitches) => void;
51
+ get stitchesInstance(): any;
50
52
  /**
51
53
  * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry
52
54
  */
53
- registerElement(element: {
55
+ static registerElement(element: {
54
56
  type: string;
57
+ [x: string]: any;
55
58
  }): void;
59
+ get elementRegistry(): Map<any, any>;
56
60
  triggerUpdate(): void;
57
61
  refreshAllItems(): void;
58
62
  /**
@@ -183,7 +187,7 @@ type WeaverseResourcePickerData = {
183
187
  type WeaverseImage = {
184
188
  id: string;
185
189
  url: string;
186
- alt: string;
190
+ altText: string;
187
191
  width: number;
188
192
  height: number;
189
193
  };
@@ -212,7 +216,6 @@ type PositionInputValue = "top left" | "top center" | "top right" | "center left
212
216
  type InputType = "blog" | "collection" | "collection-list" | "color" | "datepicker" | "image" | "map-autocomplete" | "position" | "product" | "product-list" | "range" | "richtext" | "select" | "switch" | "text" | "textarea" | "toggle-group";
213
217
  declare global {
214
218
  interface Window {
215
- Blinkloader: any;
216
219
  weaverseStudio: any;
217
220
  }
218
221
  }
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ type AnyFunction = (...args: any[]) => any;
6
6
  declare class EventEmitter {
7
7
  listeners: Set<AnyFunction>;
8
8
  constructor();
9
- subscribe(fn: AnyFunction): void;
9
+ subscribe(fn: AnyFunction): () => void;
10
10
  unsubscribe(fn: AnyFunction): void;
11
11
  emit(data?: any): void;
12
12
  }
@@ -16,7 +16,7 @@ declare class WeaverseItemStore extends EventEmitter {
16
16
  ref: RefObject<HTMLElement>;
17
17
  _store: ElementData;
18
18
  stitchesClass: string;
19
- constructor(intialData: ElementData, weaverse: Weaverse);
19
+ constructor(initialData: ElementData, weaverse: Weaverse);
20
20
  get _id(): string;
21
21
  get _element(): HTMLElement | null;
22
22
  get Element(): any;
@@ -28,31 +28,35 @@ declare class WeaverseItemStore extends EventEmitter {
28
28
  }
29
29
  declare class Weaverse extends EventEmitter {
30
30
  contentRootElement: HTMLElement | null;
31
- itemInstances: Map<any, any>;
31
+ static itemInstances: Map<any, any>;
32
32
  weaverseHost: string;
33
33
  weaverseVersion: string;
34
34
  projectId: string;
35
35
  isDesignMode: boolean;
36
36
  isPreviewMode: boolean;
37
- stitchesInstance: Stitches | any;
37
+ static stitchesInstance: Stitches | any;
38
38
  studioBridge?: any;
39
39
  ItemConstructor: typeof WeaverseItemStore;
40
40
  data: WeaverseProjectDataType;
41
41
  platformType: PlatformTypeEnum;
42
- readonly elementRegistry: Map<any, any>;
42
+ static elementRegistry: Map<any, any>;
43
43
  mediaBreakPoints: BreakPoints;
44
44
  constructor(params: WeaverseCoreParams);
45
45
  /**
46
46
  * Create new `WeaverseItemStore` instance for each item in the project.
47
47
  */
48
48
  initProject: () => void;
49
+ get itemInstances(): Map<any, any>;
49
50
  initStitches: (externalConfig?: stitches.CreateStitches) => void;
51
+ get stitchesInstance(): any;
50
52
  /**
51
53
  * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry
52
54
  */
53
- registerElement(element: {
55
+ static registerElement(element: {
54
56
  type: string;
57
+ [x: string]: any;
55
58
  }): void;
59
+ get elementRegistry(): Map<any, any>;
56
60
  triggerUpdate(): void;
57
61
  refreshAllItems(): void;
58
62
  /**
@@ -183,7 +187,7 @@ type WeaverseResourcePickerData = {
183
187
  type WeaverseImage = {
184
188
  id: string;
185
189
  url: string;
186
- alt: string;
190
+ altText: string;
187
191
  width: number;
188
192
  height: number;
189
193
  };
@@ -212,7 +216,6 @@ type PositionInputValue = "top left" | "top center" | "top right" | "center left
212
216
  type InputType = "blog" | "collection" | "collection-list" | "color" | "datepicker" | "image" | "map-autocomplete" | "position" | "product" | "product-list" | "range" | "richtext" | "select" | "switch" | "text" | "textarea" | "toggle-group";
213
217
  declare global {
214
218
  interface Window {
215
- Blinkloader: any;
216
219
  weaverseStudio: any;
217
220
  }
218
221
  }
package/dist/index.js CHANGED
@@ -80,6 +80,7 @@ var EventEmitter = class {
80
80
  }
81
81
  subscribe(fn) {
82
82
  this.listeners.add(fn);
83
+ return () => this.unsubscribe(fn);
83
84
  }
84
85
  unsubscribe(fn) {
85
86
  this.listeners.delete(fn);
@@ -136,9 +137,9 @@ var WeaverseItemStore = class extends EventEmitter {
136
137
  ref = { current: null };
137
138
  _store = { id: "", type: "" };
138
139
  stitchesClass = "";
139
- constructor(intialData, weaverse) {
140
+ constructor(initialData, weaverse) {
140
141
  super();
141
- let { type, id } = intialData || {};
142
+ let { type, id } = initialData || {};
142
143
  this.weaverse = weaverse;
143
144
  if (id && type) {
144
145
  weaverse.itemInstances.set(id, this);
@@ -153,13 +154,12 @@ var WeaverseItemStore = class extends EventEmitter {
153
154
  return this.ref.current;
154
155
  }
155
156
  get Element() {
156
- return this.weaverse.elementRegistry.get(this._store.type);
157
+ return Weaverse.elementRegistry.get(this._store.type);
157
158
  }
158
159
  get css() {
159
160
  let defaultCss = this.Element?.defaultCss || {};
160
161
  let currentCss = this._store.css || {};
161
- let css = merge(defaultCss, currentCss);
162
- return css;
162
+ return merge(defaultCss, currentCss);
163
163
  }
164
164
  get data() {
165
165
  let css = this.css;
@@ -177,17 +177,17 @@ var WeaverseItemStore = class extends EventEmitter {
177
177
  this.emit(this.data);
178
178
  };
179
179
  };
180
- var Weaverse = class extends EventEmitter {
180
+ var Weaverse = class _Weaverse extends EventEmitter {
181
181
  contentRootElement = null;
182
- itemInstances = /* @__PURE__ */ new Map();
182
+ static itemInstances = /* @__PURE__ */ new Map();
183
183
  weaverseHost = "https://weaverse.io";
184
184
  weaverseVersion = "";
185
185
  projectId = "";
186
186
  isDesignMode = false;
187
187
  isPreviewMode = false;
188
- stitchesInstance;
188
+ static stitchesInstance;
189
189
  studioBridge;
190
- elementRegistry = /* @__PURE__ */ new Map();
190
+ static elementRegistry = /* @__PURE__ */ new Map();
191
191
  mediaBreakPoints = {
192
192
  desktop: "all",
193
193
  // max-width need to subtract 0.02px to prevent bug
@@ -207,7 +207,8 @@ var Weaverse = class extends EventEmitter {
207
207
  * Create new `WeaverseItemStore` instance for each item in the project.
208
208
  */
209
209
  initProject = () => {
210
- let { data, itemInstances, ItemConstructor } = this;
210
+ let { data, ItemConstructor } = this;
211
+ let itemInstances = _Weaverse.itemInstances;
211
212
  if (data?.items) {
212
213
  data.items.forEach((item) => {
213
214
  let itemInstance = itemInstances.get(item.id);
@@ -219,28 +220,35 @@ var Weaverse = class extends EventEmitter {
219
220
  });
220
221
  }
221
222
  };
223
+ get itemInstances() {
224
+ return _Weaverse.itemInstances;
225
+ }
222
226
  initStitches = (externalConfig) => {
223
- this.stitchesInstance = this.stitchesInstance || stitches.createStitches({
227
+ _Weaverse.stitchesInstance = _Weaverse.stitchesInstance || stitches.createStitches({
224
228
  prefix: "weaverse",
225
229
  media: this.mediaBreakPoints,
226
230
  utils: stitchesUtils,
227
231
  ...externalConfig
228
232
  });
229
233
  };
234
+ get stitchesInstance() {
235
+ return _Weaverse.stitchesInstance;
236
+ }
230
237
  /**
231
238
  * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry
232
239
  */
233
- registerElement(element) {
240
+ static registerElement(element) {
234
241
  if (element?.type) {
235
- if (!this.elementRegistry.has(element.type)) {
236
- this.elementRegistry.set(element?.type, element);
237
- } else {
238
- console.warn(`Element with type '${element.type}' already exists.`);
242
+ if (!_Weaverse.elementRegistry.has(element.type)) {
243
+ _Weaverse.elementRegistry.set(element?.type, element);
239
244
  }
240
245
  } else {
241
246
  console.error("Cannot register element without 'type'.");
242
247
  }
243
248
  }
249
+ get elementRegistry() {
250
+ return _Weaverse.elementRegistry;
251
+ }
244
252
  triggerUpdate() {
245
253
  this.emit();
246
254
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core.ts","../src/utils/index.ts","../src/utils/event-emiiter.ts","../src/utils/stitches.ts"],"sourcesContent":["export * from \"./types\"\nexport * from \"./core\"\nexport * from \"./utils\"\n","/*\n @weaverse/core is the core package of Weaverse SDKs, it contains the core logic of Weaverse.\n It is a singleton class that can be used to register item, store project data, trigger update on item or project data, etc.\n ---\n Licensed under MIT License.\n Source: https://github.com/weaverse/sdks\n About Weaverse: https://weaverse.io\n*/\n\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementCSS,\n ElementData,\n PlatformTypeEnum,\n WeaverseCoreParams,\n WeaverseProjectDataType,\n} from \"./types\"\nimport { merge } from \"./utils\"\nimport { EventEmitter } from \"./utils/event-emiiter\"\nimport { stitchesUtils } from \"./utils/stitches\"\n\nexport class WeaverseItemStore extends EventEmitter {\n weaverse: Weaverse\n ref: RefObject<HTMLElement> = { current: null }\n _store: ElementData = { id: \"\", type: \"\" }\n stitchesClass = \"\"\n\n constructor(intialData: ElementData, weaverse: Weaverse) {\n super()\n let { type, id } = intialData || {}\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n } else {\n throw new Error(`'id' and 'type' are required to create a new Weaverse item.`)\n }\n }\n\n get _id() {\n return this._store.id\n }\n\n get _element() {\n return this.ref.current\n }\n\n get Element() {\n return this.weaverse.elementRegistry.get(this._store.type)\n }\n\n get css(): ElementCSS {\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n return css\n }\n\n get data(): ElementData {\n let css = this.css\n return { ...this._store, css }\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n this._store = { ...this.data, ...update }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n this.data = Object.assign(this.data, update)\n this.triggerUpdate()\n return this.data\n }\n\n triggerUpdate = () => {\n this.emit(this.data)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n itemInstances = new Map()\n weaverseHost = \"https://weaverse.io\"\n weaverseVersion = \"\"\n projectId = \"\"\n isDesignMode = false\n isPreviewMode = false\n stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n readonly elementRegistry = new Map()\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug\n // ref: https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n mobile: \"(max-width: 767.98px)\",\n }\n\n constructor(params: WeaverseCoreParams) {\n super()\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n this[key] = v || this[key]\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data, itemInstances, ItemConstructor } = this\n if (data?.items) {\n data.items.forEach((item) => {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n new ItemConstructor(item, this)\n }\n })\n }\n }\n\n initStitches = (externalConfig?: stitches.CreateStitches) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry\n */\n registerElement(element: { type: string }) {\n if (element?.type) {\n if (!this.elementRegistry.has(element.type)) {\n this.elementRegistry.set(element?.type, element)\n } else {\n console.warn(`Element with type '${element.type}' already exists.`)\n }\n } else {\n console.error(\"Cannot register element without 'type'.\")\n }\n }\n\n triggerUpdate() {\n this.emit()\n }\n\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * Reset the project data and re-initialize all items.\n * Used when we need to re-render the project with new data (like applying new template)\n * @param data {WeaverseProjectDataType}\n */\n setProjectData = (data: WeaverseProjectDataType) => {\n this.data = data\n this.initProject()\n }\n}\n","export let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport function loadScript(src: string) {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n","type AnyFunction = (...args: any[]) => any\n\nexport class EventEmitter {\n listeners: Set<AnyFunction>\n constructor() {\n this.listeners = new Set()\n }\n subscribe(fn: AnyFunction) {\n this.listeners.add(fn)\n }\n unsubscribe(fn: AnyFunction) {\n this.listeners.delete(fn)\n }\n emit(data?: any) {\n this.listeners.forEach((fn) => {\n return fn(data)\n })\n }\n}\n","export let stitchesUtils = {\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core.ts","../src/utils/index.ts","../src/utils/event-emiiter.ts","../src/utils/stitches.ts"],"sourcesContent":["export * from \"./types\"\nexport * from \"./core\"\nexport * from \"./utils\"\n","/*\n @weaverse/core is the core package of Weaverse SDKs, it contains the core logic of Weaverse.\n It is a singleton class that can be used to register item, store project data, trigger update on item or project data, etc.\n ---\n Licensed under MIT License.\n Source: https://github.com/weaverse/sdks\n About Weaverse: https://weaverse.io\n*/\n\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementCSS,\n ElementData,\n PlatformTypeEnum,\n WeaverseCoreParams,\n WeaverseProjectDataType,\n} from \"./types\"\nimport { merge } from \"./utils\"\nimport { EventEmitter } from \"./utils/event-emiiter\"\nimport { stitchesUtils } from \"./utils/stitches\"\n\nexport class WeaverseItemStore extends EventEmitter {\n weaverse: Weaverse\n ref: RefObject<HTMLElement> = { current: null }\n _store: ElementData = { id: \"\", type: \"\" }\n stitchesClass = \"\"\n\n constructor(initialData: ElementData, weaverse: Weaverse) {\n super()\n let { type, id } = initialData || {}\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n } else {\n throw new Error(`'id' and 'type' are required to create a new Weaverse item.`)\n }\n }\n\n get _id() {\n return this._store.id\n }\n\n get _element() {\n return this.ref.current\n }\n\n get Element() {\n return Weaverse.elementRegistry.get(this._store.type)\n }\n\n get css(): ElementCSS {\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n return merge(defaultCss, currentCss)\n }\n\n get data(): ElementData {\n let css = this.css\n return { ...this._store, css }\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n this._store = { ...this.data, ...update }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n this.data = Object.assign(this.data, update)\n this.triggerUpdate()\n return this.data\n }\n\n triggerUpdate = () => {\n this.emit(this.data)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = \"https://weaverse.io\"\n weaverseVersion = \"\"\n projectId = \"\"\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug\n // ref: https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n mobile: \"(max-width: 767.98px)\",\n }\n\n constructor(params: WeaverseCoreParams) {\n super()\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n this[key] = v || this[key]\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data, ItemConstructor } = this\n let itemInstances = Weaverse.itemInstances\n if (data?.items) {\n data.items.forEach((item) => {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n new ItemConstructor(item, this)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n\n initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n get stitchesInstance() {\n return Weaverse.stitchesInstance\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry\n */\n static registerElement(element: { type: string; [x: string]: any }) {\n if (element?.type) {\n if (!Weaverse.elementRegistry.has(element.type)) {\n Weaverse.elementRegistry.set(element?.type, element)\n }\n } else {\n console.error(\"Cannot register element without 'type'.\")\n }\n }\n\n get elementRegistry() {\n return Weaverse.elementRegistry\n }\n\n triggerUpdate() {\n this.emit()\n }\n\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * Reset the project data and re-initialize all items.\n * Used when we need to re-render the project with new data (like applying new template)\n * @param data {WeaverseProjectDataType}\n */\n setProjectData = (data: WeaverseProjectDataType) => {\n this.data = data\n this.initProject()\n }\n}\n","export let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport function loadScript(src: string) {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n","type AnyFunction = (...args: any[]) => any\n\nexport class EventEmitter {\n listeners: Set<AnyFunction>\n\n constructor() {\n this.listeners = new Set()\n }\n\n subscribe(fn: AnyFunction) {\n this.listeners.add(fn)\n return () => this.unsubscribe(fn)\n }\n\n unsubscribe(fn: AnyFunction) {\n this.listeners.delete(fn)\n }\n\n emit(data?: any) {\n this.listeners.forEach((fn) => {\n return fn(data)\n })\n }\n}\n","export let stitchesUtils = {\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -38,6 +38,7 @@ var EventEmitter = class {
38
38
  }
39
39
  subscribe(fn) {
40
40
  this.listeners.add(fn);
41
+ return () => this.unsubscribe(fn);
41
42
  }
42
43
  unsubscribe(fn) {
43
44
  this.listeners.delete(fn);
@@ -94,9 +95,9 @@ var WeaverseItemStore = class extends EventEmitter {
94
95
  ref = { current: null };
95
96
  _store = { id: "", type: "" };
96
97
  stitchesClass = "";
97
- constructor(intialData, weaverse) {
98
+ constructor(initialData, weaverse) {
98
99
  super();
99
- let { type, id } = intialData || {};
100
+ let { type, id } = initialData || {};
100
101
  this.weaverse = weaverse;
101
102
  if (id && type) {
102
103
  weaverse.itemInstances.set(id, this);
@@ -111,13 +112,12 @@ var WeaverseItemStore = class extends EventEmitter {
111
112
  return this.ref.current;
112
113
  }
113
114
  get Element() {
114
- return this.weaverse.elementRegistry.get(this._store.type);
115
+ return Weaverse.elementRegistry.get(this._store.type);
115
116
  }
116
117
  get css() {
117
118
  let defaultCss = this.Element?.defaultCss || {};
118
119
  let currentCss = this._store.css || {};
119
- let css = merge(defaultCss, currentCss);
120
- return css;
120
+ return merge(defaultCss, currentCss);
121
121
  }
122
122
  get data() {
123
123
  let css = this.css;
@@ -135,17 +135,17 @@ var WeaverseItemStore = class extends EventEmitter {
135
135
  this.emit(this.data);
136
136
  };
137
137
  };
138
- var Weaverse = class extends EventEmitter {
138
+ var Weaverse = class _Weaverse extends EventEmitter {
139
139
  contentRootElement = null;
140
- itemInstances = /* @__PURE__ */ new Map();
140
+ static itemInstances = /* @__PURE__ */ new Map();
141
141
  weaverseHost = "https://weaverse.io";
142
142
  weaverseVersion = "";
143
143
  projectId = "";
144
144
  isDesignMode = false;
145
145
  isPreviewMode = false;
146
- stitchesInstance;
146
+ static stitchesInstance;
147
147
  studioBridge;
148
- elementRegistry = /* @__PURE__ */ new Map();
148
+ static elementRegistry = /* @__PURE__ */ new Map();
149
149
  mediaBreakPoints = {
150
150
  desktop: "all",
151
151
  // max-width need to subtract 0.02px to prevent bug
@@ -165,7 +165,8 @@ var Weaverse = class extends EventEmitter {
165
165
  * Create new `WeaverseItemStore` instance for each item in the project.
166
166
  */
167
167
  initProject = () => {
168
- let { data, itemInstances, ItemConstructor } = this;
168
+ let { data, ItemConstructor } = this;
169
+ let itemInstances = _Weaverse.itemInstances;
169
170
  if (data?.items) {
170
171
  data.items.forEach((item) => {
171
172
  let itemInstance = itemInstances.get(item.id);
@@ -177,28 +178,35 @@ var Weaverse = class extends EventEmitter {
177
178
  });
178
179
  }
179
180
  };
181
+ get itemInstances() {
182
+ return _Weaverse.itemInstances;
183
+ }
180
184
  initStitches = (externalConfig) => {
181
- this.stitchesInstance = this.stitchesInstance || stitches.createStitches({
185
+ _Weaverse.stitchesInstance = _Weaverse.stitchesInstance || stitches.createStitches({
182
186
  prefix: "weaverse",
183
187
  media: this.mediaBreakPoints,
184
188
  utils: stitchesUtils,
185
189
  ...externalConfig
186
190
  });
187
191
  };
192
+ get stitchesInstance() {
193
+ return _Weaverse.stitchesInstance;
194
+ }
188
195
  /**
189
196
  * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry
190
197
  */
191
- registerElement(element) {
198
+ static registerElement(element) {
192
199
  if (element?.type) {
193
- if (!this.elementRegistry.has(element.type)) {
194
- this.elementRegistry.set(element?.type, element);
195
- } else {
196
- console.warn(`Element with type '${element.type}' already exists.`);
200
+ if (!_Weaverse.elementRegistry.has(element.type)) {
201
+ _Weaverse.elementRegistry.set(element?.type, element);
197
202
  }
198
203
  } else {
199
204
  console.error("Cannot register element without 'type'.");
200
205
  }
201
206
  }
207
+ get elementRegistry() {
208
+ return _Weaverse.elementRegistry;
209
+ }
202
210
  triggerUpdate() {
203
211
  this.emit();
204
212
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core.ts","../src/utils/index.ts","../src/utils/event-emiiter.ts","../src/utils/stitches.ts"],"sourcesContent":["/*\n @weaverse/core is the core package of Weaverse SDKs, it contains the core logic of Weaverse.\n It is a singleton class that can be used to register item, store project data, trigger update on item or project data, etc.\n ---\n Licensed under MIT License.\n Source: https://github.com/weaverse/sdks\n About Weaverse: https://weaverse.io\n*/\n\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementCSS,\n ElementData,\n PlatformTypeEnum,\n WeaverseCoreParams,\n WeaverseProjectDataType,\n} from \"./types\"\nimport { merge } from \"./utils\"\nimport { EventEmitter } from \"./utils/event-emiiter\"\nimport { stitchesUtils } from \"./utils/stitches\"\n\nexport class WeaverseItemStore extends EventEmitter {\n weaverse: Weaverse\n ref: RefObject<HTMLElement> = { current: null }\n _store: ElementData = { id: \"\", type: \"\" }\n stitchesClass = \"\"\n\n constructor(intialData: ElementData, weaverse: Weaverse) {\n super()\n let { type, id } = intialData || {}\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n } else {\n throw new Error(`'id' and 'type' are required to create a new Weaverse item.`)\n }\n }\n\n get _id() {\n return this._store.id\n }\n\n get _element() {\n return this.ref.current\n }\n\n get Element() {\n return this.weaverse.elementRegistry.get(this._store.type)\n }\n\n get css(): ElementCSS {\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n return css\n }\n\n get data(): ElementData {\n let css = this.css\n return { ...this._store, css }\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n this._store = { ...this.data, ...update }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n this.data = Object.assign(this.data, update)\n this.triggerUpdate()\n return this.data\n }\n\n triggerUpdate = () => {\n this.emit(this.data)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n itemInstances = new Map()\n weaverseHost = \"https://weaverse.io\"\n weaverseVersion = \"\"\n projectId = \"\"\n isDesignMode = false\n isPreviewMode = false\n stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n readonly elementRegistry = new Map()\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug\n // ref: https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n mobile: \"(max-width: 767.98px)\",\n }\n\n constructor(params: WeaverseCoreParams) {\n super()\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n this[key] = v || this[key]\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data, itemInstances, ItemConstructor } = this\n if (data?.items) {\n data.items.forEach((item) => {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n new ItemConstructor(item, this)\n }\n })\n }\n }\n\n initStitches = (externalConfig?: stitches.CreateStitches) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry\n */\n registerElement(element: { type: string }) {\n if (element?.type) {\n if (!this.elementRegistry.has(element.type)) {\n this.elementRegistry.set(element?.type, element)\n } else {\n console.warn(`Element with type '${element.type}' already exists.`)\n }\n } else {\n console.error(\"Cannot register element without 'type'.\")\n }\n }\n\n triggerUpdate() {\n this.emit()\n }\n\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * Reset the project data and re-initialize all items.\n * Used when we need to re-render the project with new data (like applying new template)\n * @param data {WeaverseProjectDataType}\n */\n setProjectData = (data: WeaverseProjectDataType) => {\n this.data = data\n this.initProject()\n }\n}\n","export let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport function loadScript(src: string) {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n","type AnyFunction = (...args: any[]) => any\n\nexport class EventEmitter {\n listeners: Set<AnyFunction>\n constructor() {\n this.listeners = new Set()\n }\n subscribe(fn: AnyFunction) {\n this.listeners.add(fn)\n }\n unsubscribe(fn: AnyFunction) {\n this.listeners.delete(fn)\n }\n emit(data?: any) {\n this.listeners.forEach((fn) => {\n return fn(data)\n })\n }\n}\n","export let stitchesUtils = {\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/core.ts","../src/utils/index.ts","../src/utils/event-emiiter.ts","../src/utils/stitches.ts"],"sourcesContent":["/*\n @weaverse/core is the core package of Weaverse SDKs, it contains the core logic of Weaverse.\n It is a singleton class that can be used to register item, store project data, trigger update on item or project data, etc.\n ---\n Licensed under MIT License.\n Source: https://github.com/weaverse/sdks\n About Weaverse: https://weaverse.io\n*/\n\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementCSS,\n ElementData,\n PlatformTypeEnum,\n WeaverseCoreParams,\n WeaverseProjectDataType,\n} from \"./types\"\nimport { merge } from \"./utils\"\nimport { EventEmitter } from \"./utils/event-emiiter\"\nimport { stitchesUtils } from \"./utils/stitches\"\n\nexport class WeaverseItemStore extends EventEmitter {\n weaverse: Weaverse\n ref: RefObject<HTMLElement> = { current: null }\n _store: ElementData = { id: \"\", type: \"\" }\n stitchesClass = \"\"\n\n constructor(initialData: ElementData, weaverse: Weaverse) {\n super()\n let { type, id } = initialData || {}\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n } else {\n throw new Error(`'id' and 'type' are required to create a new Weaverse item.`)\n }\n }\n\n get _id() {\n return this._store.id\n }\n\n get _element() {\n return this.ref.current\n }\n\n get Element() {\n return Weaverse.elementRegistry.get(this._store.type)\n }\n\n get css(): ElementCSS {\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n return merge(defaultCss, currentCss)\n }\n\n get data(): ElementData {\n let css = this.css\n return { ...this._store, css }\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n this._store = { ...this.data, ...update }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n this.data = Object.assign(this.data, update)\n this.triggerUpdate()\n return this.data\n }\n\n triggerUpdate = () => {\n this.emit(this.data)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = \"https://weaverse.io\"\n weaverseVersion = \"\"\n projectId = \"\"\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug\n // ref: https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n mobile: \"(max-width: 767.98px)\",\n }\n\n constructor(params: WeaverseCoreParams) {\n super()\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n this[key] = v || this[key]\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data, ItemConstructor } = this\n let itemInstances = Weaverse.itemInstances\n if (data?.items) {\n data.items.forEach((item) => {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n new ItemConstructor(item, this)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n\n initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n get stitchesInstance() {\n return Weaverse.stitchesInstance\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementRegistry\n */\n static registerElement(element: { type: string; [x: string]: any }) {\n if (element?.type) {\n if (!Weaverse.elementRegistry.has(element.type)) {\n Weaverse.elementRegistry.set(element?.type, element)\n }\n } else {\n console.error(\"Cannot register element without 'type'.\")\n }\n }\n\n get elementRegistry() {\n return Weaverse.elementRegistry\n }\n\n triggerUpdate() {\n this.emit()\n }\n\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * Reset the project data and re-initialize all items.\n * Used when we need to re-render the project with new data (like applying new template)\n * @param data {WeaverseProjectDataType}\n */\n setProjectData = (data: WeaverseProjectDataType) => {\n this.data = data\n this.initProject()\n }\n}\n","export let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport function loadScript(src: string) {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n","type AnyFunction = (...args: any[]) => any\n\nexport class EventEmitter {\n listeners: Set<AnyFunction>\n\n constructor() {\n this.listeners = new Set()\n }\n\n subscribe(fn: AnyFunction) {\n this.listeners.add(fn)\n return () => this.unsubscribe(fn)\n }\n\n unsubscribe(fn: AnyFunction) {\n this.listeners.delete(fn)\n }\n\n emit(data?: any) {\n this.listeners.forEach((fn) => {\n return fn(data)\n })\n }\n}\n","export let stitchesUtils = {\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.3.0",
2
+ "version": "2.4.1",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",