@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 +11 -8
- package/dist/index.d.ts +11 -8
- package/dist/index.js +24 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
140
|
+
constructor(initialData, weaverse) {
|
|
140
141
|
super();
|
|
141
|
-
let { type, id } =
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 (!
|
|
236
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSA,eAA0B;;;ACTnB,IAAI,gBAAgB,OAAO,cAAc,YAAY,UAAU,YAAY;AAC3E,IAAI,YAAY,OAAO,WAAW,eAAe,CAAC;AAClD,IAAI,WAAW,aAAa,OAAO,QAAQ,OAAO;AAOlD,SAAS,MAAM,QAA6B,QAA6B;AAC9E,MAAI,IAAI,EAAE,GAAI,UAAU,CAAC,EAAG;AAE5B,WAAS,OAAO,OAAO,KAAK,MAAM,GAAG;AACnC,QAAI,OAAO,GAAG,aAAa,UAAU,CAAC,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAChE,aAAO,OAAO,OAAO,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC;AAAA,IACvD;AAAA,EACF;AAGA,SAAO,OAAO,KAAK,CAAC,GAAG,MAAM;AAC7B,SAAO;AACT;AAEO,SAAS,WAAW,KAAa;AACtC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,aAAa,SAAS,cAAc,eAAe,GAAG,IAAI;AAC9D,QAAI,YAAY;AACd,aAAO,QAAQ,IAAI;AAAA,IACrB;AACA,QAAI,SAAS,SAAS,cAAc,QAAQ;AAC5C,WAAO,MAAM;AACb,WAAO,SAAS;AAChB,WAAO,UAAU;AACjB,WAAO,QAAQ;AACf,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,CAAC;AACH;;;AClCO,IAAM,eAAN,MAAmB;AAAA,EACxB;AAAA,EAEA,cAAc;AACZ,SAAK,YAAY,oBAAI,IAAI;AAAA,EAC3B;AAAA,EAEA,UAAU,IAAiB;AACzB,SAAK,UAAU,IAAI,EAAE;AACrB,WAAO,MAAM,KAAK,YAAY,EAAE;AAAA,EAClC;AAAA,EAEA,YAAY,IAAiB;AAC3B,SAAK,UAAU,OAAO,EAAE;AAAA,EAC1B;AAAA,EAEA,KAAK,MAAY;AACf,SAAK,UAAU,QAAQ,CAAC,OAAO;AAC7B,aAAO,GAAG,IAAI;AAAA,IAChB,CAAC;AAAA,EACH;AACF;;;ACvBO,IAAI,gBAAgB;AAAA,EACzB,GAAG,CAAC,WAAmB;AAAA,IACrB,QAAQ;AAAA,EACV;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,WAAW;AAAA,EACb;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,aAAa;AAAA,EACf;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,cAAc;AAAA,EAChB;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,YAAY;AAAA,EACd;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,WAAW;AAAA,IACX,cAAc;AAAA,EAChB;AAAA,EACA,MAAM,CAAC,WAAmB;AAAA,IACxB,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AAAA,EACA,IAAI,CAAC,WAAmB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AACF;;;AHZO,IAAM,oBAAN,cAAgC,aAAa;AAAA,EAClD;AAAA,EACA,MAA8B,EAAE,SAAS,KAAK;AAAA,EAC9C,SAAsB,EAAE,IAAI,IAAI,MAAM,GAAG;AAAA,EACzC,gBAAgB;AAAA,EAEhB,YAAY,aAA0B,UAAoB;AACxD,UAAM;AACN,QAAI,EAAE,MAAM,GAAG,IAAI,eAAe,CAAC;AACnC,SAAK,WAAW;AAChB,QAAI,MAAM,MAAM;AACd,eAAS,cAAc,IAAI,IAAI,IAAI;AAAA,IACrC,OAAO;AACL,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,IAAI,MAAM;AACR,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,SAAS,gBAAgB,IAAI,KAAK,OAAO,IAAI;AAAA,EACtD;AAAA,EAEA,IAAI,MAAkB;AACpB,QAAI,aAAa,KAAK,SAAS,cAAc,CAAC;AAC9C,QAAI,aAAa,KAAK,OAAO,OAAO,CAAC;AACrC,WAAO,MAAM,YAAY,UAAU;AAAA,EACrC;AAAA,EAEA,IAAI,OAAoB;AACtB,QAAI,MAAM,KAAK;AACf,WAAO,EAAE,GAAG,KAAK,QAAQ,IAAI;AAAA,EAC/B;AAAA,EAEA,IAAI,KAAK,QAA0C;AACjD,SAAK,SAAS,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO;AAAA,EAC1C;AAAA,EAEA,UAAU,CAAC,WAA6C;AACtD,SAAK,OAAO,OAAO,OAAO,KAAK,MAAM,MAAM;AAC3C,SAAK,cAAc;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB,MAAM;AACpB,SAAK,KAAK,KAAK,IAAI;AAAA,EACrB;AACF;AAEO,IAAM,WAAN,MAAM,kBAAiB,aAAa;AAAA,EACzC,qBAAyC;AAAA,EACzC,OAAO,gBAAgB,oBAAI,IAAI;AAAA,EAC/B,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP;AAAA,EAKA,OAAO,kBAAkB,oBAAI,IAAI;AAAA,EAEjC,mBAAgC;AAAA,IAC9B,SAAS;AAAA;AAAA;AAAA,IAGT,QAAQ;AAAA,EACV;AAAA,EAEA,YAAY,QAA4B;AACtC,UAAM;AACN,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;AACzC,UAAI,MAAM;AACV,WAAK,GAAG,IAAI,KAAK,KAAK,GAAG;AAAA,IAC3B,CAAC;AACD,SAAK,YAAY;AACjB,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,MAAM;AAClB,QAAI,EAAE,MAAM,gBAAgB,IAAI;AAChC,QAAI,gBAAgB,UAAS;AAC7B,QAAI,MAAM,OAAO;AACf,WAAK,MAAM,QAAQ,CAAC,SAAS;AAC3B,YAAI,eAAe,cAAc,IAAI,KAAK,EAAE;AAC5C,YAAI,cAAc;AAChB,uBAAa,QAAQ,IAAI;AAAA,QAC3B,OAAO;AACL,cAAI,gBAAgB,MAAM,IAAI;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,UAAS;AAAA,EAClB;AAAA,EAEA,eAAe,CAAC,mBAA6C;AAC3D,cAAS,mBACP,UAAS,oBACA,wBAAe;AAAA,MACtB,QAAQ;AAAA,MACR,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AAAA,EACL;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAO,UAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,SAA6C;AAClE,QAAI,SAAS,MAAM;AACjB,UAAI,CAAC,UAAS,gBAAgB,IAAI,QAAQ,IAAI,GAAG;AAC/C,kBAAS,gBAAgB,IAAI,SAAS,MAAM,OAAO;AAAA,MACrD;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,yCAAyC;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,UAAS;AAAA,EAClB;AAAA,EAEA,gBAAgB;AACd,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,kBAAkB;AAChB,SAAK,cAAc,QAAQ,CAAC,SAAS;AACnC,WAAK,cAAc;AAAA,IACrB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,CAAC,SAAkC;AAClD,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACnB;AACF;","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(
|
|
98
|
+
constructor(initialData, weaverse) {
|
|
98
99
|
super();
|
|
99
|
-
let { type, id } =
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 (!
|
|
194
|
-
|
|
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
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -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