@weaverse/core 3.2.5 → 3.2.7
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 +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +61 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +61 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -124,6 +124,7 @@ type IconName =
|
|
|
124
124
|
| 'loader'
|
|
125
125
|
| 'log-out'
|
|
126
126
|
| 'map-pinned'
|
|
127
|
+
| 'map'
|
|
127
128
|
| 'maximize'
|
|
128
129
|
| 'message-circle'
|
|
129
130
|
| 'message-square'
|
|
@@ -369,7 +370,7 @@ declare class EventEmitter {
|
|
|
369
370
|
constructor();
|
|
370
371
|
subscribe: (fn: AnyFunction) => () => void;
|
|
371
372
|
unsubscribe: (fn: AnyFunction) => void;
|
|
372
|
-
emit: (data
|
|
373
|
+
emit: (data: any) => void;
|
|
373
374
|
}
|
|
374
375
|
|
|
375
376
|
declare class WeaverseItemStore extends EventEmitter {
|
package/dist/index.d.ts
CHANGED
|
@@ -124,6 +124,7 @@ type IconName =
|
|
|
124
124
|
| 'loader'
|
|
125
125
|
| 'log-out'
|
|
126
126
|
| 'map-pinned'
|
|
127
|
+
| 'map'
|
|
127
128
|
| 'maximize'
|
|
128
129
|
| 'message-circle'
|
|
129
130
|
| 'message-square'
|
|
@@ -369,7 +370,7 @@ declare class EventEmitter {
|
|
|
369
370
|
constructor();
|
|
370
371
|
subscribe: (fn: AnyFunction) => () => void;
|
|
371
372
|
unsubscribe: (fn: AnyFunction) => void;
|
|
372
|
-
emit: (data
|
|
373
|
+
emit: (data: any) => void;
|
|
373
374
|
}
|
|
374
375
|
|
|
375
376
|
declare class WeaverseItemStore extends EventEmitter {
|
package/dist/index.js
CHANGED
|
@@ -42,6 +42,54 @@ module.exports = __toCommonJS(src_exports);
|
|
|
42
42
|
// src/core.ts
|
|
43
43
|
var stitches = __toESM(require("@stitches/core"));
|
|
44
44
|
|
|
45
|
+
// package.json
|
|
46
|
+
var package_default = {
|
|
47
|
+
name: "@weaverse/core",
|
|
48
|
+
author: "Weaverse Team",
|
|
49
|
+
description: "Weaverse Core",
|
|
50
|
+
version: "3.2.7",
|
|
51
|
+
license: "MIT",
|
|
52
|
+
main: "dist/index.js",
|
|
53
|
+
types: "dist/index.d.ts",
|
|
54
|
+
module: "dist/index.mjs",
|
|
55
|
+
repository: {
|
|
56
|
+
url: "git+https://github.com/Weaverse/weaverse.git",
|
|
57
|
+
directory: "packages/core"
|
|
58
|
+
},
|
|
59
|
+
publishConfig: {
|
|
60
|
+
access: "public",
|
|
61
|
+
"@weaverse:registry": "https://registry.npmjs.org"
|
|
62
|
+
},
|
|
63
|
+
files: [
|
|
64
|
+
"dist/*"
|
|
65
|
+
],
|
|
66
|
+
engines: {
|
|
67
|
+
node: ">=18"
|
|
68
|
+
},
|
|
69
|
+
scripts: {
|
|
70
|
+
dev: "tsup --watch",
|
|
71
|
+
build: "tsup",
|
|
72
|
+
clean: "rimraf dist",
|
|
73
|
+
prepublish: "npm run build"
|
|
74
|
+
},
|
|
75
|
+
tsup: {
|
|
76
|
+
entry: [
|
|
77
|
+
"src/index.ts"
|
|
78
|
+
],
|
|
79
|
+
format: [
|
|
80
|
+
"esm",
|
|
81
|
+
"cjs"
|
|
82
|
+
],
|
|
83
|
+
dts: true,
|
|
84
|
+
sourcemap: true,
|
|
85
|
+
clean: true,
|
|
86
|
+
outDir: "dist"
|
|
87
|
+
},
|
|
88
|
+
dependencies: {
|
|
89
|
+
"@stitches/core": "^1.2.8"
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
45
93
|
// src/utils/index.ts
|
|
46
94
|
var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
|
|
47
95
|
var isBrowser = typeof window !== "undefined" && !isReactNative;
|
|
@@ -85,9 +133,9 @@ var EventEmitter = class {
|
|
|
85
133
|
this.listeners.delete(fn);
|
|
86
134
|
};
|
|
87
135
|
emit = (data) => {
|
|
88
|
-
this.listeners
|
|
89
|
-
|
|
90
|
-
}
|
|
136
|
+
for (const fn of this.listeners) {
|
|
137
|
+
fn(data);
|
|
138
|
+
}
|
|
91
139
|
};
|
|
92
140
|
};
|
|
93
141
|
|
|
@@ -184,7 +232,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
184
232
|
contentRootElement = null;
|
|
185
233
|
static itemInstances = /* @__PURE__ */ new Map();
|
|
186
234
|
weaverseHost = "https://studio.weaverse.io";
|
|
187
|
-
weaverseVersion =
|
|
235
|
+
weaverseVersion = package_default.version;
|
|
188
236
|
projectId = "";
|
|
189
237
|
isDesignMode = false;
|
|
190
238
|
isPreviewMode = false;
|
|
@@ -199,10 +247,10 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
199
247
|
};
|
|
200
248
|
constructor(params) {
|
|
201
249
|
super();
|
|
202
|
-
Object.entries(params)
|
|
203
|
-
let key =
|
|
204
|
-
this[key] =
|
|
205
|
-
}
|
|
250
|
+
for (const param of Object.entries(params)) {
|
|
251
|
+
let [key, value] = param;
|
|
252
|
+
this[key] = value || this[key];
|
|
253
|
+
}
|
|
206
254
|
this.initProject();
|
|
207
255
|
_Weaverse.initStitches();
|
|
208
256
|
}
|
|
@@ -216,14 +264,14 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
216
264
|
let { data } = this;
|
|
217
265
|
let itemInstances = _Weaverse.itemInstances;
|
|
218
266
|
if (data?.items) {
|
|
219
|
-
data.items
|
|
267
|
+
for (const item of data.items) {
|
|
220
268
|
let itemInstance = itemInstances.get(item.id);
|
|
221
269
|
if (itemInstance) {
|
|
222
270
|
itemInstance.setData(item);
|
|
223
271
|
} else {
|
|
224
272
|
this.createItemInstance(item);
|
|
225
273
|
}
|
|
226
|
-
}
|
|
274
|
+
}
|
|
227
275
|
}
|
|
228
276
|
};
|
|
229
277
|
get itemInstances() {
|
|
@@ -260,12 +308,12 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
260
308
|
}
|
|
261
309
|
triggerUpdate = () => {
|
|
262
310
|
this.data = { ...this.data };
|
|
263
|
-
this.emit();
|
|
311
|
+
this.emit(this.data);
|
|
264
312
|
};
|
|
265
313
|
refreshAllItems() {
|
|
266
|
-
_Weaverse.itemInstances.
|
|
314
|
+
for (const item of _Weaverse.itemInstances.values()) {
|
|
267
315
|
item.triggerUpdate();
|
|
268
|
-
}
|
|
316
|
+
}
|
|
269
317
|
}
|
|
270
318
|
/**
|
|
271
319
|
* Reset the project data and re-initialize all items.
|
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-emitter.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/weaverse\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-emitter'\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 Object.assign(this._store, initialData)\n } else {\n throw new Error(\n `'id' and 'type' are required to create a new Weaverse item.`,\n )\n }\n this._store.css = this.getDefaultCss()\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 getDefaultCss = (): 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 return this._store\n }\n\n set data(update: Omit<ElementData, 'id' | 'type'>) {\n this._store = { ...this._store, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = update\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\n\n triggerUpdate = () => {\n this.emit(this._store)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = 'https://studio.weaverse.io'\n weaverseVersion = ''\n projectId = ''\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare static ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n static 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 Weaverse.initStitches()\n }\n\n getSnapShot = () => {\n return this.data\n }\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data } = 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 this.createItemInstance(item)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n createItemInstance = (data: ElementData) => {\n return new Weaverse.ItemConstructor(data, this)\n }\n\n static initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: 'weaverse',\n media: Weaverse.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 // make new copy of data to trigger update\n this.data = { ...this.data }\n this.emit()\n }\n\n refreshAllItems() {\n Weaverse.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 =\n 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(\n target: Record<string, any>,\n source: Record<string, any>,\n) {\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":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core.ts","../package.json","../src/utils/index.ts","../src/utils/event-emitter.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/weaverse\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 pkg from '../package.json'\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-emitter'\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 Object.assign(this._store, initialData)\n } else {\n throw new Error(\n `'id' and 'type' are required to create a new Weaverse item.`,\n )\n }\n this._store.css = this.getDefaultCss()\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 getDefaultCss = (): 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 return this._store\n }\n\n set data(update: Omit<ElementData, 'id' | 'type'>) {\n this._store = { ...this._store, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = update\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\n\n triggerUpdate = () => {\n this.emit(this._store)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = 'https://studio.weaverse.io'\n weaverseVersion = pkg.version\n projectId = ''\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare static ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n static 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 for (const param of Object.entries(params)) {\n let [key, value] = param\n this[key] = value || this[key]\n }\n this.initProject()\n Weaverse.initStitches()\n }\n\n getSnapShot = () => {\n return this.data\n }\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data } = 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 // this.createItemInstance(item)\n // }\n // })\n for (const item of data.items) {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n this.createItemInstance(item)\n }\n }\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n createItemInstance = (data: ElementData) => {\n return new Weaverse.ItemConstructor(data, this)\n }\n\n static initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: 'weaverse',\n media: Weaverse.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 // make new copy of data to trigger update\n this.data = { ...this.data }\n this.emit(this.data)\n }\n\n refreshAllItems() {\n for (const item of Weaverse.itemInstances.values()) {\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","{\n \"name\": \"@weaverse/core\",\n \"author\": \"Weaverse Team\",\n \"description\": \"Weaverse Core\",\n \"version\": \"3.2.7\",\n \"license\": \"MIT\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"module\": \"dist/index.mjs\",\n \"repository\": {\n \"url\": \"git+https://github.com/Weaverse/weaverse.git\",\n \"directory\": \"packages/core\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"@weaverse:registry\": \"https://registry.npmjs.org\"\n },\n \"files\": [\n \"dist/*\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"clean\": \"rimraf dist\",\n \"prepublish\": \"npm run build\"\n },\n \"tsup\": {\n \"entry\": [\n \"src/index.ts\"\n ],\n \"format\": [\n \"esm\",\n \"cjs\"\n ],\n \"dts\": true,\n \"sourcemap\": true,\n \"clean\": true,\n \"outDir\": \"dist\"\n },\n \"dependencies\": {\n \"@stitches/core\": \"^1.2.8\"\n }\n}\n","export let isReactNative =\n 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(\n target: Record<string, any>,\n source: Record<string, any>,\n) {\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) => {\n for (const fn of this.listeners) {\n 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
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
// src/core.ts
|
|
2
2
|
import * as stitches from "@stitches/core";
|
|
3
3
|
|
|
4
|
+
// package.json
|
|
5
|
+
var package_default = {
|
|
6
|
+
name: "@weaverse/core",
|
|
7
|
+
author: "Weaverse Team",
|
|
8
|
+
description: "Weaverse Core",
|
|
9
|
+
version: "3.2.7",
|
|
10
|
+
license: "MIT",
|
|
11
|
+
main: "dist/index.js",
|
|
12
|
+
types: "dist/index.d.ts",
|
|
13
|
+
module: "dist/index.mjs",
|
|
14
|
+
repository: {
|
|
15
|
+
url: "git+https://github.com/Weaverse/weaverse.git",
|
|
16
|
+
directory: "packages/core"
|
|
17
|
+
},
|
|
18
|
+
publishConfig: {
|
|
19
|
+
access: "public",
|
|
20
|
+
"@weaverse:registry": "https://registry.npmjs.org"
|
|
21
|
+
},
|
|
22
|
+
files: [
|
|
23
|
+
"dist/*"
|
|
24
|
+
],
|
|
25
|
+
engines: {
|
|
26
|
+
node: ">=18"
|
|
27
|
+
},
|
|
28
|
+
scripts: {
|
|
29
|
+
dev: "tsup --watch",
|
|
30
|
+
build: "tsup",
|
|
31
|
+
clean: "rimraf dist",
|
|
32
|
+
prepublish: "npm run build"
|
|
33
|
+
},
|
|
34
|
+
tsup: {
|
|
35
|
+
entry: [
|
|
36
|
+
"src/index.ts"
|
|
37
|
+
],
|
|
38
|
+
format: [
|
|
39
|
+
"esm",
|
|
40
|
+
"cjs"
|
|
41
|
+
],
|
|
42
|
+
dts: true,
|
|
43
|
+
sourcemap: true,
|
|
44
|
+
clean: true,
|
|
45
|
+
outDir: "dist"
|
|
46
|
+
},
|
|
47
|
+
dependencies: {
|
|
48
|
+
"@stitches/core": "^1.2.8"
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
4
52
|
// src/utils/index.ts
|
|
5
53
|
var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
|
|
6
54
|
var isBrowser = typeof window !== "undefined" && !isReactNative;
|
|
@@ -44,9 +92,9 @@ var EventEmitter = class {
|
|
|
44
92
|
this.listeners.delete(fn);
|
|
45
93
|
};
|
|
46
94
|
emit = (data) => {
|
|
47
|
-
this.listeners
|
|
48
|
-
|
|
49
|
-
}
|
|
95
|
+
for (const fn of this.listeners) {
|
|
96
|
+
fn(data);
|
|
97
|
+
}
|
|
50
98
|
};
|
|
51
99
|
};
|
|
52
100
|
|
|
@@ -143,7 +191,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
143
191
|
contentRootElement = null;
|
|
144
192
|
static itemInstances = /* @__PURE__ */ new Map();
|
|
145
193
|
weaverseHost = "https://studio.weaverse.io";
|
|
146
|
-
weaverseVersion =
|
|
194
|
+
weaverseVersion = package_default.version;
|
|
147
195
|
projectId = "";
|
|
148
196
|
isDesignMode = false;
|
|
149
197
|
isPreviewMode = false;
|
|
@@ -158,10 +206,10 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
158
206
|
};
|
|
159
207
|
constructor(params) {
|
|
160
208
|
super();
|
|
161
|
-
Object.entries(params)
|
|
162
|
-
let key =
|
|
163
|
-
this[key] =
|
|
164
|
-
}
|
|
209
|
+
for (const param of Object.entries(params)) {
|
|
210
|
+
let [key, value] = param;
|
|
211
|
+
this[key] = value || this[key];
|
|
212
|
+
}
|
|
165
213
|
this.initProject();
|
|
166
214
|
_Weaverse.initStitches();
|
|
167
215
|
}
|
|
@@ -175,14 +223,14 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
175
223
|
let { data } = this;
|
|
176
224
|
let itemInstances = _Weaverse.itemInstances;
|
|
177
225
|
if (data?.items) {
|
|
178
|
-
data.items
|
|
226
|
+
for (const item of data.items) {
|
|
179
227
|
let itemInstance = itemInstances.get(item.id);
|
|
180
228
|
if (itemInstance) {
|
|
181
229
|
itemInstance.setData(item);
|
|
182
230
|
} else {
|
|
183
231
|
this.createItemInstance(item);
|
|
184
232
|
}
|
|
185
|
-
}
|
|
233
|
+
}
|
|
186
234
|
}
|
|
187
235
|
};
|
|
188
236
|
get itemInstances() {
|
|
@@ -219,12 +267,12 @@ var Weaverse = class _Weaverse extends EventEmitter {
|
|
|
219
267
|
}
|
|
220
268
|
triggerUpdate = () => {
|
|
221
269
|
this.data = { ...this.data };
|
|
222
|
-
this.emit();
|
|
270
|
+
this.emit(this.data);
|
|
223
271
|
};
|
|
224
272
|
refreshAllItems() {
|
|
225
|
-
_Weaverse.itemInstances.
|
|
273
|
+
for (const item of _Weaverse.itemInstances.values()) {
|
|
226
274
|
item.triggerUpdate();
|
|
227
|
-
}
|
|
275
|
+
}
|
|
228
276
|
}
|
|
229
277
|
/**
|
|
230
278
|
* Reset the project data and re-initialize all items.
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/utils/index.ts","../src/utils/event-emitter.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/weaverse\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-emitter'\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 Object.assign(this._store, initialData)\n } else {\n throw new Error(\n `'id' and 'type' are required to create a new Weaverse item.`,\n )\n }\n this._store.css = this.getDefaultCss()\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 getDefaultCss = (): 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 return this._store\n }\n\n set data(update: Omit<ElementData, 'id' | 'type'>) {\n this._store = { ...this._store, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = update\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\n\n triggerUpdate = () => {\n this.emit(this._store)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = 'https://studio.weaverse.io'\n weaverseVersion = ''\n projectId = ''\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare static ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n static 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 Weaverse.initStitches()\n }\n\n getSnapShot = () => {\n return this.data\n }\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data } = 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 this.createItemInstance(item)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n createItemInstance = (data: ElementData) => {\n return new Weaverse.ItemConstructor(data, this)\n }\n\n static initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: 'weaverse',\n media: Weaverse.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 // make new copy of data to trigger update\n this.data = { ...this.data }\n this.emit()\n }\n\n refreshAllItems() {\n Weaverse.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 =\n 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(\n target: Record<string, any>,\n source: Record<string, any>,\n) {\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":[]}
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../package.json","../src/utils/index.ts","../src/utils/event-emitter.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/weaverse\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 pkg from '../package.json'\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-emitter'\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 Object.assign(this._store, initialData)\n } else {\n throw new Error(\n `'id' and 'type' are required to create a new Weaverse item.`,\n )\n }\n this._store.css = this.getDefaultCss()\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 getDefaultCss = (): 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 return this._store\n }\n\n set data(update: Omit<ElementData, 'id' | 'type'>) {\n this._store = { ...this._store, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = update\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\n\n triggerUpdate = () => {\n this.emit(this._store)\n }\n}\n\nexport class Weaverse extends EventEmitter {\n contentRootElement: HTMLElement | null = null\n static itemInstances = new Map()\n weaverseHost = 'https://studio.weaverse.io'\n weaverseVersion = pkg.version\n projectId = ''\n isDesignMode = false\n isPreviewMode = false\n static stitchesInstance: Stitches | any\n studioBridge?: any\n\n declare static ItemConstructor: typeof WeaverseItemStore\n declare data: WeaverseProjectDataType\n declare platformType: PlatformTypeEnum\n static elementRegistry = new Map()\n\n static 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 for (const param of Object.entries(params)) {\n let [key, value] = param\n this[key] = value || this[key]\n }\n this.initProject()\n Weaverse.initStitches()\n }\n\n getSnapShot = () => {\n return this.data\n }\n /**\n * Create new `WeaverseItemStore` instance for each item in the project.\n */\n initProject = () => {\n let { data } = 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 // this.createItemInstance(item)\n // }\n // })\n for (const item of data.items) {\n let itemInstance = itemInstances.get(item.id)\n if (itemInstance) {\n itemInstance.setData(item)\n } else {\n this.createItemInstance(item)\n }\n }\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\n }\n createItemInstance = (data: ElementData) => {\n return new Weaverse.ItemConstructor(data, this)\n }\n\n static initStitches = (externalConfig?: stitches.CreateStitches) => {\n Weaverse.stitchesInstance =\n Weaverse.stitchesInstance ||\n stitches.createStitches({\n prefix: 'weaverse',\n media: Weaverse.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 // make new copy of data to trigger update\n this.data = { ...this.data }\n this.emit(this.data)\n }\n\n refreshAllItems() {\n for (const item of Weaverse.itemInstances.values()) {\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","{\n \"name\": \"@weaverse/core\",\n \"author\": \"Weaverse Team\",\n \"description\": \"Weaverse Core\",\n \"version\": \"3.2.7\",\n \"license\": \"MIT\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"module\": \"dist/index.mjs\",\n \"repository\": {\n \"url\": \"git+https://github.com/Weaverse/weaverse.git\",\n \"directory\": \"packages/core\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"@weaverse:registry\": \"https://registry.npmjs.org\"\n },\n \"files\": [\n \"dist/*\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"clean\": \"rimraf dist\",\n \"prepublish\": \"npm run build\"\n },\n \"tsup\": {\n \"entry\": [\n \"src/index.ts\"\n ],\n \"format\": [\n \"esm\",\n \"cjs\"\n ],\n \"dts\": true,\n \"sourcemap\": true,\n \"clean\": true,\n \"outDir\": \"dist\"\n },\n \"dependencies\": {\n \"@stitches/core\": \"^1.2.8\"\n }\n}\n","export let isReactNative =\n 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(\n target: Record<string, any>,\n source: Record<string, any>,\n) {\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) => {\n for (const fn of this.listeners) {\n 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":[]}
|