@weaverse/core 3.1.6 → 3.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -40,8 +40,196 @@ declare let stitchesUtils: {
40
40
  };
41
41
  };
42
42
 
43
+ // This file is generated from Weaverse Studio
44
+
45
+ type IconName =
46
+ | "accessibility"
47
+ | "activity-square"
48
+ | "alarm-clock-off"
49
+ | "alarm-clock"
50
+ | "alarm-minus"
51
+ | "alarm-plus"
52
+ | "album"
53
+ | "alert-circle"
54
+ | "alert-octagon"
55
+ | "alert-triangle"
56
+ | "align-center-vertical"
57
+ | "align-end-vertical"
58
+ | "align-left"
59
+ | "align-right"
60
+ | "align-start-vertical"
61
+ | "arrow-down-a-z"
62
+ | "arrow-down-narrow-wide"
63
+ | "arrow-left-from-line"
64
+ | "arrow-up-a-z"
65
+ | "arrow-up-narrow-wide"
66
+ | "atom"
67
+ | "blocks"
68
+ | "book-image"
69
+ | "book-marked"
70
+ | "book-text"
71
+ | "book"
72
+ | "box-select"
73
+ | "box"
74
+ | "boxes"
75
+ | "brackets"
76
+ | "calendar-minus"
77
+ | "calendar-plus"
78
+ | "calendar"
79
+ | "check-check"
80
+ | "check-circle"
81
+ | "check"
82
+ | "chevron-down"
83
+ | "chevron-left"
84
+ | "chevron-right"
85
+ | "chevron-up"
86
+ | "chevrons-up-down"
87
+ | "code"
88
+ | "columns-2"
89
+ | "columns-3"
90
+ | "concierge-bell"
91
+ | "contact"
92
+ | "copy"
93
+ | "corner-up-left"
94
+ | "external-link"
95
+ | "eye-off"
96
+ | "eye"
97
+ | "facebook"
98
+ | "file-code-2"
99
+ | "file-plus-2"
100
+ | "file-search"
101
+ | "file-text"
102
+ | "file"
103
+ | "filter"
104
+ | "flag"
105
+ | "flask-conical"
106
+ | "fold-horizontal"
107
+ | "fold-vertical"
108
+ | "folder-open"
109
+ | "folder-plus"
110
+ | "folder-search"
111
+ | "folder"
112
+ | "form-input"
113
+ | "frown"
114
+ | "gallery-horizontal-end"
115
+ | "gauge"
116
+ | "github"
117
+ | "globe"
118
+ | "grid-2x2"
119
+ | "grip-vertical"
120
+ | "hammer"
121
+ | "hard-drive-download"
122
+ | "help-circle"
123
+ | "home"
124
+ | "hourglass"
125
+ | "image-off"
126
+ | "image-plus"
127
+ | "image"
128
+ | "info"
129
+ | "languages"
130
+ | "layers"
131
+ | "layout-dashboard"
132
+ | "layout-grid"
133
+ | "layout-list"
134
+ | "layout-template"
135
+ | "life-buoy"
136
+ | "lightbulb"
137
+ | "link"
138
+ | "linkedin"
139
+ | "list-todo"
140
+ | "loader-2"
141
+ | "loader"
142
+ | "log-out"
143
+ | "map-pinned"
144
+ | "maximize"
145
+ | "message-circle"
146
+ | "message-square"
147
+ | "messages-square"
148
+ | "minimize"
149
+ | "minus"
150
+ | "monitor-play"
151
+ | "monitor"
152
+ | "moon"
153
+ | "more-horizontal"
154
+ | "more-vertical"
155
+ | "mouse-pointer-2"
156
+ | "mouse-pointer-click"
157
+ | "mouse-pointer-square-dashed"
158
+ | "mouse-pointer-square"
159
+ | "mouse-pointer"
160
+ | "mouse"
161
+ | "move-down-left"
162
+ | "move-down-right"
163
+ | "move-down"
164
+ | "move-horizontal"
165
+ | "move-left"
166
+ | "move-right"
167
+ | "move-up-left"
168
+ | "move-up-right"
169
+ | "move-up"
170
+ | "newspaper"
171
+ | "notebook-tabs"
172
+ | "package-check"
173
+ | "package-open"
174
+ | "package"
175
+ | "paintbrush-2"
176
+ | "paintbrush"
177
+ | "palette"
178
+ | "panel-left"
179
+ | "pen"
180
+ | "pencil-line"
181
+ | "pencil"
182
+ | "phone"
183
+ | "plane-landing"
184
+ | "play-circle"
185
+ | "plus-circle"
186
+ | "plus-square"
187
+ | "plus"
188
+ | "presentation"
189
+ | "puzzle"
190
+ | "rocket"
191
+ | "search"
192
+ | "settings"
193
+ | "shield-question"
194
+ | "shopping-bag"
195
+ | "shopping-cart"
196
+ | "shrink"
197
+ | "slack"
198
+ | "sliders-horizontal"
199
+ | "sliders"
200
+ | "smartphone"
201
+ | "sparkles"
202
+ | "star-filled"
203
+ | "star-half-filled"
204
+ | "star"
205
+ | "store"
206
+ | "stretch-vertical"
207
+ | "sun"
208
+ | "tag"
209
+ | "tags"
210
+ | "terminal"
211
+ | "text-cursor-input"
212
+ | "trash"
213
+ | "truck"
214
+ | "twitter"
215
+ | "type"
216
+ | "undo-2"
217
+ | "undo"
218
+ | "upload-cloud"
219
+ | "upload"
220
+ | "user"
221
+ | "users"
222
+ | "video"
223
+ | "wand-2"
224
+ | "wand-sparkles"
225
+ | "x-logo"
226
+ | "x-octagon"
227
+ | "x"
228
+ | "youtube"
229
+ | "zap";
230
+
43
231
  type PlatformTypeEnum = 'shopify-section' | 'shopify-hydrogen' | 'nextjs';
44
- type ToolbarAction = 'general-settings' | 'settings-level-2' | 'duplicate' | 'delete';
232
+ type ToolbarAction = 'general-settings' | 'settings-level-2' | 'duplicate' | 'delete' | 'global-sections';
45
233
  type AdvancedGroupType = 'border' | 'alignment' | 'background' | 'dimensions' | 'spacing' | 'typography' | 'visibility' | 'shadows-and-effects' | 'layout-background';
46
234
  type PositionInputValue = 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right';
47
235
  type InputType = 'blog' | 'collection' | 'collection-list' | 'color' | 'datepicker' | 'image' | 'map-autocomplete' | 'position' | 'product' | 'product-list' | 'range' | 'richtext' | 'select' | 'switch' | 'text' | 'textarea' | 'toggle-group' | 'swatches' | 'metaobject' | 'url';
@@ -132,7 +320,7 @@ interface ToggleGroupConfigs {
132
320
  options?: {
133
321
  value: string;
134
322
  label: string;
135
- icon?: string;
323
+ icon?: IconName;
136
324
  weight?: string;
137
325
  }[];
138
326
  }
@@ -164,7 +352,7 @@ declare class WeaverseItemStore extends EventEmitter {
164
352
  stitchesClass: string;
165
353
  constructor(initialData: ElementData, weaverse: Weaverse);
166
354
  get _id(): string;
167
- get _element(): HTMLElement | null;
355
+ get _element(): HTMLElement;
168
356
  get Element(): any;
169
357
  getDefaultCss: () => ElementCSS;
170
358
  get data(): ElementData;
@@ -195,6 +383,7 @@ declare class Weaverse extends EventEmitter {
195
383
  */
196
384
  initProject: () => void;
197
385
  get itemInstances(): Map<any, any>;
386
+ createItemInstance: (data: ElementData) => WeaverseItemStore;
198
387
  static initStitches: (externalConfig?: Stitches.CreateStitches) => void;
199
388
  get stitchesInstance(): any;
200
389
  /**
package/dist/index.d.ts CHANGED
@@ -40,8 +40,196 @@ declare let stitchesUtils: {
40
40
  };
41
41
  };
42
42
 
43
+ // This file is generated from Weaverse Studio
44
+
45
+ type IconName =
46
+ | "accessibility"
47
+ | "activity-square"
48
+ | "alarm-clock-off"
49
+ | "alarm-clock"
50
+ | "alarm-minus"
51
+ | "alarm-plus"
52
+ | "album"
53
+ | "alert-circle"
54
+ | "alert-octagon"
55
+ | "alert-triangle"
56
+ | "align-center-vertical"
57
+ | "align-end-vertical"
58
+ | "align-left"
59
+ | "align-right"
60
+ | "align-start-vertical"
61
+ | "arrow-down-a-z"
62
+ | "arrow-down-narrow-wide"
63
+ | "arrow-left-from-line"
64
+ | "arrow-up-a-z"
65
+ | "arrow-up-narrow-wide"
66
+ | "atom"
67
+ | "blocks"
68
+ | "book-image"
69
+ | "book-marked"
70
+ | "book-text"
71
+ | "book"
72
+ | "box-select"
73
+ | "box"
74
+ | "boxes"
75
+ | "brackets"
76
+ | "calendar-minus"
77
+ | "calendar-plus"
78
+ | "calendar"
79
+ | "check-check"
80
+ | "check-circle"
81
+ | "check"
82
+ | "chevron-down"
83
+ | "chevron-left"
84
+ | "chevron-right"
85
+ | "chevron-up"
86
+ | "chevrons-up-down"
87
+ | "code"
88
+ | "columns-2"
89
+ | "columns-3"
90
+ | "concierge-bell"
91
+ | "contact"
92
+ | "copy"
93
+ | "corner-up-left"
94
+ | "external-link"
95
+ | "eye-off"
96
+ | "eye"
97
+ | "facebook"
98
+ | "file-code-2"
99
+ | "file-plus-2"
100
+ | "file-search"
101
+ | "file-text"
102
+ | "file"
103
+ | "filter"
104
+ | "flag"
105
+ | "flask-conical"
106
+ | "fold-horizontal"
107
+ | "fold-vertical"
108
+ | "folder-open"
109
+ | "folder-plus"
110
+ | "folder-search"
111
+ | "folder"
112
+ | "form-input"
113
+ | "frown"
114
+ | "gallery-horizontal-end"
115
+ | "gauge"
116
+ | "github"
117
+ | "globe"
118
+ | "grid-2x2"
119
+ | "grip-vertical"
120
+ | "hammer"
121
+ | "hard-drive-download"
122
+ | "help-circle"
123
+ | "home"
124
+ | "hourglass"
125
+ | "image-off"
126
+ | "image-plus"
127
+ | "image"
128
+ | "info"
129
+ | "languages"
130
+ | "layers"
131
+ | "layout-dashboard"
132
+ | "layout-grid"
133
+ | "layout-list"
134
+ | "layout-template"
135
+ | "life-buoy"
136
+ | "lightbulb"
137
+ | "link"
138
+ | "linkedin"
139
+ | "list-todo"
140
+ | "loader-2"
141
+ | "loader"
142
+ | "log-out"
143
+ | "map-pinned"
144
+ | "maximize"
145
+ | "message-circle"
146
+ | "message-square"
147
+ | "messages-square"
148
+ | "minimize"
149
+ | "minus"
150
+ | "monitor-play"
151
+ | "monitor"
152
+ | "moon"
153
+ | "more-horizontal"
154
+ | "more-vertical"
155
+ | "mouse-pointer-2"
156
+ | "mouse-pointer-click"
157
+ | "mouse-pointer-square-dashed"
158
+ | "mouse-pointer-square"
159
+ | "mouse-pointer"
160
+ | "mouse"
161
+ | "move-down-left"
162
+ | "move-down-right"
163
+ | "move-down"
164
+ | "move-horizontal"
165
+ | "move-left"
166
+ | "move-right"
167
+ | "move-up-left"
168
+ | "move-up-right"
169
+ | "move-up"
170
+ | "newspaper"
171
+ | "notebook-tabs"
172
+ | "package-check"
173
+ | "package-open"
174
+ | "package"
175
+ | "paintbrush-2"
176
+ | "paintbrush"
177
+ | "palette"
178
+ | "panel-left"
179
+ | "pen"
180
+ | "pencil-line"
181
+ | "pencil"
182
+ | "phone"
183
+ | "plane-landing"
184
+ | "play-circle"
185
+ | "plus-circle"
186
+ | "plus-square"
187
+ | "plus"
188
+ | "presentation"
189
+ | "puzzle"
190
+ | "rocket"
191
+ | "search"
192
+ | "settings"
193
+ | "shield-question"
194
+ | "shopping-bag"
195
+ | "shopping-cart"
196
+ | "shrink"
197
+ | "slack"
198
+ | "sliders-horizontal"
199
+ | "sliders"
200
+ | "smartphone"
201
+ | "sparkles"
202
+ | "star-filled"
203
+ | "star-half-filled"
204
+ | "star"
205
+ | "store"
206
+ | "stretch-vertical"
207
+ | "sun"
208
+ | "tag"
209
+ | "tags"
210
+ | "terminal"
211
+ | "text-cursor-input"
212
+ | "trash"
213
+ | "truck"
214
+ | "twitter"
215
+ | "type"
216
+ | "undo-2"
217
+ | "undo"
218
+ | "upload-cloud"
219
+ | "upload"
220
+ | "user"
221
+ | "users"
222
+ | "video"
223
+ | "wand-2"
224
+ | "wand-sparkles"
225
+ | "x-logo"
226
+ | "x-octagon"
227
+ | "x"
228
+ | "youtube"
229
+ | "zap";
230
+
43
231
  type PlatformTypeEnum = 'shopify-section' | 'shopify-hydrogen' | 'nextjs';
44
- type ToolbarAction = 'general-settings' | 'settings-level-2' | 'duplicate' | 'delete';
232
+ type ToolbarAction = 'general-settings' | 'settings-level-2' | 'duplicate' | 'delete' | 'global-sections';
45
233
  type AdvancedGroupType = 'border' | 'alignment' | 'background' | 'dimensions' | 'spacing' | 'typography' | 'visibility' | 'shadows-and-effects' | 'layout-background';
46
234
  type PositionInputValue = 'top left' | 'top center' | 'top right' | 'center left' | 'center center' | 'center right' | 'bottom left' | 'bottom center' | 'bottom right';
47
235
  type InputType = 'blog' | 'collection' | 'collection-list' | 'color' | 'datepicker' | 'image' | 'map-autocomplete' | 'position' | 'product' | 'product-list' | 'range' | 'richtext' | 'select' | 'switch' | 'text' | 'textarea' | 'toggle-group' | 'swatches' | 'metaobject' | 'url';
@@ -132,7 +320,7 @@ interface ToggleGroupConfigs {
132
320
  options?: {
133
321
  value: string;
134
322
  label: string;
135
- icon?: string;
323
+ icon?: IconName;
136
324
  weight?: string;
137
325
  }[];
138
326
  }
@@ -164,7 +352,7 @@ declare class WeaverseItemStore extends EventEmitter {
164
352
  stitchesClass: string;
165
353
  constructor(initialData: ElementData, weaverse: Weaverse);
166
354
  get _id(): string;
167
- get _element(): HTMLElement | null;
355
+ get _element(): HTMLElement;
168
356
  get Element(): any;
169
357
  getDefaultCss: () => ElementCSS;
170
358
  get data(): ElementData;
@@ -195,6 +383,7 @@ declare class Weaverse extends EventEmitter {
195
383
  */
196
384
  initProject: () => void;
197
385
  get itemInstances(): Map<any, any>;
386
+ createItemInstance: (data: ElementData) => WeaverseItemStore;
198
387
  static initStitches: (externalConfig?: Stitches.CreateStitches) => void;
199
388
  get stitchesInstance(): any;
200
389
  /**
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -142,7 +141,7 @@ var WeaverseItemStore = class extends EventEmitter {
142
141
  let { type, id } = initialData || {};
143
142
  this.weaverse = weaverse;
144
143
  if (id && type) {
145
- weaverse.itemInstances.set(id, this);
144
+ Weaverse.itemInstances.set(id, this);
146
145
  Object.assign(this._store, initialData);
147
146
  } else {
148
147
  throw new Error(`'id' and 'type' are required to create a new Weaverse item.`);
@@ -167,7 +166,7 @@ var WeaverseItemStore = class extends EventEmitter {
167
166
  return this._store;
168
167
  }
169
168
  set data(update) {
170
- this._store = { ...this.data, ...update };
169
+ this._store = { ...this._store, ...update };
171
170
  }
172
171
  setData = (update) => {
173
172
  this.data = Object.assign(this._store, update);
@@ -176,7 +175,7 @@ var WeaverseItemStore = class extends EventEmitter {
176
175
  };
177
176
  getSnapShot = () => this.data;
178
177
  triggerUpdate = () => {
179
- this.emit(this.data);
178
+ this.emit(this._store);
180
179
  };
181
180
  };
182
181
  var Weaverse = class _Weaverse extends EventEmitter {
@@ -213,7 +212,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
213
212
  */
214
213
  initProject = () => {
215
214
  let { data } = this;
216
- let itemInstances = this.itemInstances;
215
+ let itemInstances = _Weaverse.itemInstances;
217
216
  if (data?.items) {
218
217
  data.items.forEach((item) => {
219
218
  let itemInstance = itemInstances.get(item.id);
@@ -228,6 +227,9 @@ var Weaverse = class _Weaverse extends EventEmitter {
228
227
  get itemInstances() {
229
228
  return _Weaverse.itemInstances;
230
229
  }
230
+ createItemInstance = (data) => {
231
+ return new _Weaverse.ItemConstructor(data, this);
232
+ };
231
233
  static initStitches = (externalConfig) => {
232
234
  _Weaverse.stitchesInstance = _Weaverse.stitchesInstance || stitches.createStitches({
233
235
  prefix: "weaverse",
@@ -259,7 +261,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
259
261
  this.emit();
260
262
  };
261
263
  refreshAllItems() {
262
- this.itemInstances.forEach((item) => {
264
+ _Weaverse.itemInstances.forEach((item) => {
263
265
  item.triggerUpdate();
264
266
  });
265
267
  }
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(`'id' and 'type' are required to create a new Weaverse item.`)\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.data, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = Object.assign(this._store, update)\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\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://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 = this.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 Weaverse.ItemConstructor(item, this)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\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 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":[]}
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(`'id' and 'type' are required to create a new Weaverse item.`)\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 = Object.assign(this._store, 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 new Weaverse.ItemConstructor(item, this)\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 = 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
@@ -100,7 +100,7 @@ var WeaverseItemStore = class extends EventEmitter {
100
100
  let { type, id } = initialData || {};
101
101
  this.weaverse = weaverse;
102
102
  if (id && type) {
103
- weaverse.itemInstances.set(id, this);
103
+ Weaverse.itemInstances.set(id, this);
104
104
  Object.assign(this._store, initialData);
105
105
  } else {
106
106
  throw new Error(`'id' and 'type' are required to create a new Weaverse item.`);
@@ -125,7 +125,7 @@ var WeaverseItemStore = class extends EventEmitter {
125
125
  return this._store;
126
126
  }
127
127
  set data(update) {
128
- this._store = { ...this.data, ...update };
128
+ this._store = { ...this._store, ...update };
129
129
  }
130
130
  setData = (update) => {
131
131
  this.data = Object.assign(this._store, update);
@@ -134,7 +134,7 @@ var WeaverseItemStore = class extends EventEmitter {
134
134
  };
135
135
  getSnapShot = () => this.data;
136
136
  triggerUpdate = () => {
137
- this.emit(this.data);
137
+ this.emit(this._store);
138
138
  };
139
139
  };
140
140
  var Weaverse = class _Weaverse extends EventEmitter {
@@ -171,7 +171,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
171
171
  */
172
172
  initProject = () => {
173
173
  let { data } = this;
174
- let itemInstances = this.itemInstances;
174
+ let itemInstances = _Weaverse.itemInstances;
175
175
  if (data?.items) {
176
176
  data.items.forEach((item) => {
177
177
  let itemInstance = itemInstances.get(item.id);
@@ -186,6 +186,9 @@ var Weaverse = class _Weaverse extends EventEmitter {
186
186
  get itemInstances() {
187
187
  return _Weaverse.itemInstances;
188
188
  }
189
+ createItemInstance = (data) => {
190
+ return new _Weaverse.ItemConstructor(data, this);
191
+ };
189
192
  static initStitches = (externalConfig) => {
190
193
  _Weaverse.stitchesInstance = _Weaverse.stitchesInstance || stitches.createStitches({
191
194
  prefix: "weaverse",
@@ -217,7 +220,7 @@ var Weaverse = class _Weaverse extends EventEmitter {
217
220
  this.emit();
218
221
  };
219
222
  refreshAllItems() {
220
- this.itemInstances.forEach((item) => {
223
+ _Weaverse.itemInstances.forEach((item) => {
221
224
  item.triggerUpdate();
222
225
  });
223
226
  }
@@ -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(`'id' and 'type' are required to create a new Weaverse item.`)\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.data, ...update }\n }\n\n setData = (update: Omit<ElementData, 'id' | 'type'>) => {\n this.data = Object.assign(this._store, update)\n this.triggerUpdate()\n return this.data\n }\n\n getSnapShot = () => this.data\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://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 = this.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 Weaverse.ItemConstructor(item, this)\n }\n })\n }\n }\n\n get itemInstances() {\n return Weaverse.itemInstances\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 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":[]}
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(`'id' and 'type' are required to create a new Weaverse item.`)\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 = Object.assign(this._store, 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 new Weaverse.ItemConstructor(item, this)\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 = 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
@@ -2,7 +2,7 @@
2
2
  "name": "@weaverse/core",
3
3
  "author": "Weaverse Team",
4
4
  "description": "Weaverse Core",
5
- "version": "3.1.6",
5
+ "version": "3.1.8",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",