@weaverse/react 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 +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +32 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -2,6 +2,7 @@ import { Weaverse, WeaverseItemStore, ElementCSS } from '@weaverse/core';
|
|
|
2
2
|
export * from '@weaverse/core';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import react__default, { ReactElement, ReactNode } from 'react';
|
|
5
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
declare let WeaverseContext: react.Context<Weaverse>;
|
|
7
8
|
declare let WeaverseContextProvider: react.Provider<Weaverse>;
|
|
@@ -20,7 +21,7 @@ interface WeaverseElementProps extends Partial<ReactElement> {
|
|
|
20
21
|
css?: ElementCSS;
|
|
21
22
|
children?: ReactElement | ReactElement[] | ReactNode | ReactNode[];
|
|
22
23
|
className?: string;
|
|
23
|
-
|
|
24
|
+
'data-wv-id'?: string;
|
|
24
25
|
}
|
|
25
26
|
type WeaverseRootPropsType = {
|
|
26
27
|
context: Weaverse;
|
|
@@ -29,6 +30,6 @@ type ItemComponentProps = {
|
|
|
29
30
|
instance: InstanceType<typeof WeaverseItemStore>;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
declare let WeaverseRoot: react__default.MemoExoticComponent<({ context }: WeaverseRootPropsType) =>
|
|
33
|
+
declare let WeaverseRoot: react__default.MemoExoticComponent<({ context }: WeaverseRootPropsType) => react_jsx_runtime.JSX.Element>;
|
|
33
34
|
|
|
34
35
|
export { type ItemComponentProps, WeaverseContext, WeaverseContextProvider, type WeaverseElementProps, WeaverseItemContext, WeaverseRoot, type WeaverseRootPropsType, useChildInstances, useItemInstance, useParentInstance, usePixel, useWeaverse };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Weaverse, WeaverseItemStore, ElementCSS } from '@weaverse/core';
|
|
|
2
2
|
export * from '@weaverse/core';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import react__default, { ReactElement, ReactNode } from 'react';
|
|
5
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
declare let WeaverseContext: react.Context<Weaverse>;
|
|
7
8
|
declare let WeaverseContextProvider: react.Provider<Weaverse>;
|
|
@@ -20,7 +21,7 @@ interface WeaverseElementProps extends Partial<ReactElement> {
|
|
|
20
21
|
css?: ElementCSS;
|
|
21
22
|
children?: ReactElement | ReactElement[] | ReactNode | ReactNode[];
|
|
22
23
|
className?: string;
|
|
23
|
-
|
|
24
|
+
'data-wv-id'?: string;
|
|
24
25
|
}
|
|
25
26
|
type WeaverseRootPropsType = {
|
|
26
27
|
context: Weaverse;
|
|
@@ -29,6 +30,6 @@ type ItemComponentProps = {
|
|
|
29
30
|
instance: InstanceType<typeof WeaverseItemStore>;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
declare let WeaverseRoot: react__default.MemoExoticComponent<({ context }: WeaverseRootPropsType) =>
|
|
33
|
+
declare let WeaverseRoot: react__default.MemoExoticComponent<({ context }: WeaverseRootPropsType) => react_jsx_runtime.JSX.Element>;
|
|
33
34
|
|
|
34
35
|
export { type ItemComponentProps, WeaverseContext, WeaverseContextProvider, type WeaverseElementProps, WeaverseItemContext, WeaverseRoot, type WeaverseRootPropsType, useChildInstances, useItemInstance, useParentInstance, usePixel, useWeaverse };
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ var useItemInstance = (id) => {
|
|
|
60
60
|
let { id: currentId } = (0, import_react2.useContext)(WeaverseItemContext);
|
|
61
61
|
let instance = import_core.Weaverse.itemInstances.get(id || currentId);
|
|
62
62
|
if (!instance) {
|
|
63
|
-
console.
|
|
63
|
+
console.log(`Item instance ${id} not found`);
|
|
64
64
|
return null;
|
|
65
65
|
}
|
|
66
66
|
return instance;
|
|
@@ -82,22 +82,23 @@ var useChildInstances = (id) => {
|
|
|
82
82
|
};
|
|
83
83
|
var fetchingKey = "";
|
|
84
84
|
function usePixel(context) {
|
|
85
|
-
let { projectId, pageId, weaverseHost } = context;
|
|
85
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
86
86
|
(0, import_react2.useEffect)(() => {
|
|
87
|
-
if (!projectId || !pageId || !weaverseHost) return;
|
|
87
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
88
88
|
let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`;
|
|
89
89
|
if (fetchingKey === currentKey) return;
|
|
90
90
|
fetchingKey = currentKey;
|
|
91
91
|
let url = `${weaverseHost}/api/public/px`;
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
let img = new Image();
|
|
93
|
+
img.onload = () => {
|
|
94
|
+
};
|
|
95
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
95
96
|
}, []);
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
// src/renderer.tsx
|
|
99
|
-
var import_react3 = __toESM(require("react"));
|
|
100
100
|
var import_clsx2 = __toESM(require("clsx"));
|
|
101
|
+
var import_react3 = __toESM(require("react"));
|
|
101
102
|
|
|
102
103
|
// src/utils/css.ts
|
|
103
104
|
var import_clsx = __toESM(require("clsx"));
|
|
@@ -135,6 +136,8 @@ function generateItemClassName(instance, stitchesInstance) {
|
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
// src/renderer.tsx
|
|
139
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
140
|
+
var import_react4 = require("react");
|
|
138
141
|
var reactVersion = Number(import_react3.default.version.split(".")[0]);
|
|
139
142
|
var WeaverseRoot = (0, import_react3.memo)(({ context }) => {
|
|
140
143
|
let data = (0, import_react3.useSyncExternalStore)(
|
|
@@ -150,22 +153,22 @@ var WeaverseRoot = (0, import_react3.memo)(({ context }) => {
|
|
|
150
153
|
let eventHandlers = context?.studioBridge?.eventHandlers || {};
|
|
151
154
|
let themeClass = context.stitchesInstance.theme.className;
|
|
152
155
|
if (context.projectId) {
|
|
153
|
-
return /* @__PURE__ */
|
|
156
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
154
157
|
"div",
|
|
155
158
|
{
|
|
156
159
|
className: `weaverse-content-root ${themeClass}`,
|
|
157
160
|
...eventHandlers,
|
|
158
161
|
ref: rootRef,
|
|
159
162
|
"data-weaverse-project-id": context.projectId,
|
|
160
|
-
"data-weaverse-template-id": data.id
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
163
|
+
"data-weaverse-template-id": data.id,
|
|
164
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WeaverseContextProvider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
165
|
+
ItemInstance,
|
|
166
|
+
{
|
|
167
|
+
id: context.data.rootId || context.projectId,
|
|
168
|
+
parentId: ""
|
|
169
|
+
}
|
|
170
|
+
) })
|
|
171
|
+
}
|
|
169
172
|
);
|
|
170
173
|
}
|
|
171
174
|
return null;
|
|
@@ -199,7 +202,7 @@ var ItemComponent = (0, import_react3.memo)(({ instance }) => {
|
|
|
199
202
|
current: document.querySelector(`[data-wv-id="${id}"]`)
|
|
200
203
|
});
|
|
201
204
|
}
|
|
202
|
-
}, [instance]);
|
|
205
|
+
}, [instance, id]);
|
|
203
206
|
if (__hidden) {
|
|
204
207
|
return null;
|
|
205
208
|
}
|
|
@@ -209,8 +212,8 @@ var ItemComponent = (0, import_react3.memo)(({ instance }) => {
|
|
|
209
212
|
if (Component.$$typeof === Symbol.for("react.forward_ref") || reactVersion > 18) {
|
|
210
213
|
rest.ref = instance.ref;
|
|
211
214
|
}
|
|
212
|
-
let renderChildren = (children?.length ? children : childIds?.length ? childIds.map((cid) => ({ id: cid })) : []).map((item, index) => /* @__PURE__ */
|
|
213
|
-
return /* @__PURE__ */
|
|
215
|
+
let renderChildren = (children?.length ? children : childIds?.length ? childIds.map((cid) => ({ id: cid })) : []).map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ItemInstance, { id: item.id, parentId: id }, `${item.id}-${index}`));
|
|
216
|
+
return /* @__PURE__ */ (0, import_react4.createElement)(
|
|
214
217
|
Component,
|
|
215
218
|
{
|
|
216
219
|
...rest,
|
|
@@ -224,19 +227,22 @@ var ItemComponent = (0, import_react3.memo)(({ instance }) => {
|
|
|
224
227
|
children: renderChildren.length ? renderChildren : void 0
|
|
225
228
|
}
|
|
226
229
|
);
|
|
227
|
-
} else {
|
|
228
|
-
instance._store.deleted = true;
|
|
229
|
-
console.log(`\u274C Unknown element: ${type}`);
|
|
230
|
-
return null;
|
|
231
230
|
}
|
|
231
|
+
instance._store.deleted = true;
|
|
232
|
+
console.log(`\u274C Unknown element: ${type}`);
|
|
233
|
+
return null;
|
|
232
234
|
});
|
|
233
235
|
var ItemInstance = (0, import_react3.memo)(
|
|
234
236
|
({ id, parentId }) => {
|
|
235
237
|
let instance = useItemInstance(id);
|
|
236
238
|
if (!instance) {
|
|
237
|
-
return /* @__PURE__ */
|
|
239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "none" }, children: [
|
|
240
|
+
"Item instance ",
|
|
241
|
+
id,
|
|
242
|
+
" not found"
|
|
243
|
+
] });
|
|
238
244
|
}
|
|
239
|
-
return /* @__PURE__ */
|
|
245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WeaverseItemContext.Provider, { value: { parentId, id }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ItemComponent, { instance }, id) });
|
|
240
246
|
}
|
|
241
247
|
);
|
|
242
248
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/hooks.ts","../src/renderer.tsx","../src/utils/css.ts"],"sourcesContent":["export * from '@weaverse/core'\nexport * from './context'\nexport * from './hooks'\nexport * from './renderer'\nexport * from './types'\n","import { type Weaverse } from '@weaverse/core'\nimport { createContext } from 'react'\n\nexport let WeaverseContext = createContext<Weaverse>({} as Weaverse)\nexport let WeaverseContextProvider = WeaverseContext.Provider\nexport let WeaverseItemContext = createContext<{\n id: string\n parentId: string\n}>({ id: '', parentId: '' })\n","import { Weaverse, type WeaverseItemStore } from '@weaverse/core'\nimport { useContext, useEffect } from 'react'\n\nimport { WeaverseContext, WeaverseItemContext } from '~/context'\n\nexport function useWeaverse<T = Weaverse>() {\n let weaverse = useContext(WeaverseContext)\n return weaverse as T\n}\n\nexport let useItemInstance = (id?: string) => {\n let { id: currentId } = useContext(WeaverseItemContext)\n let instance = Weaverse.itemInstances.get(id || currentId)\n if (!instance) {\n console.warn(`Item instance ${id} not found`)\n return null\n }\n return instance as WeaverseItemStore\n}\n\nexport let useParentInstance = () => {\n let { parentId } = useContext(WeaverseItemContext)\n return useItemInstance(parentId || '')\n}\n\nexport let useChildInstances = (id?: string) => {\n let currentInstance = useItemInstance(id)\n if (!currentInstance) return []\n let { itemInstances } = Weaverse\n\n let {\n data: { children },\n } = currentInstance\n return children.map(({ id }: { id: string }) => {\n return itemInstances.get(id)\n }) as WeaverseItemStore[]\n}\n\nlet fetchingKey = ''\n\nexport function usePixel(context: Weaverse) {\n // @ts-expect-error\n let { projectId, pageId, weaverseHost } = context\n\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost) return\n let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`\n if (fetchingKey === currentKey) return\n fetchingKey = currentKey\n let url = `${weaverseHost}/api/public/px`\n let xhr = new XMLHttpRequest()\n xhr.open('POST', url, true)\n xhr.send(JSON.stringify({ projectId, pageId }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","/* eslint-disable react/no-children-prop */\nimport React, { memo, useEffect, useRef, useSyncExternalStore } from 'react'\nimport clsx from 'clsx'\n\nimport { WeaverseContextProvider, WeaverseItemContext } from './context'\nimport type { ItemComponentProps, WeaverseRootPropsType } from './types'\nimport { generateItemClassName } from './utils/css'\n\nimport { useItemInstance, usePixel, useWeaverse } from '~/hooks'\n\nlet reactVersion = Number(React.version.split('.')[0])\n\nexport let WeaverseRoot = memo(({ context }: WeaverseRootPropsType) => {\n let data = useSyncExternalStore(\n context.subscribe,\n context.getSnapShot,\n context.getSnapShot,\n )\n let rootRef = useRef<HTMLElement>()\n\n useEffect(() => {\n context.contentRootElement = rootRef.current\n }, [context])\n usePixel(context)\n\n let eventHandlers = context?.studioBridge?.eventHandlers || {}\n let themeClass = context.stitchesInstance.theme.className\n\n if (context.projectId) {\n return (\n <div\n className={`weaverse-content-root ${themeClass}`}\n {...eventHandlers}\n ref={rootRef}\n data-weaverse-project-id={context.projectId}\n data-weaverse-template-id={data.id}\n >\n <WeaverseContextProvider value={context}>\n <ItemInstance\n id={context.data.rootId || context.projectId}\n parentId={''}\n />\n </WeaverseContextProvider>\n </div>\n )\n }\n return null\n})\n\nconst ItemComponent = memo(({ instance }: ItemComponentProps) => {\n let context = useWeaverse()\n let { stitchesInstance, elementRegistry, platformType } = context\n let data = useSyncExternalStore(\n instance.subscribe,\n instance.getSnapShot,\n instance.getSnapShot,\n )\n let {\n id,\n type,\n childIds = [],\n children = [],\n parentId,\n createdAt,\n updatedAt,\n deletedAt,\n css,\n __hidden,\n // Need to get rid of this `data` property\n data: _,\n ...rest\n } = data\n\n useEffect(() => {\n if (!instance.ref.current) {\n // Fallback `ref` if the element isn't created by `React.forwardRef`\n Object.assign(instance.ref, {\n current: document.querySelector(`[data-wv-id=\"${id}\"]`),\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instance])\n\n if (__hidden) {\n return null\n }\n\n let Element = elementRegistry.get(type)\n\n if (Element?.Component) {\n let Component = Element.Component\n if (\n Component.$$typeof === Symbol.for('react.forward_ref') ||\n reactVersion > 18\n ) {\n rest.ref = instance.ref\n }\n let renderChildren = (\n children?.length\n ? children\n : childIds?.length\n ? childIds.map((cid: string) => ({ id: cid }))\n : []\n ).map((item: { id: string }, index: number) => (\n <ItemInstance key={item.id + '-' + index} id={item.id} parentId={id} />\n ))\n\n return (\n <Component\n {...rest}\n key={id}\n data-wv-type={type}\n data-wv-id={id}\n className={clsx(\n platformType !== 'shopify-hydrogen' &&\n generateItemClassName(instance, stitchesInstance),\n rest.data?.className,\n )}\n children={renderChildren.length ? renderChildren : undefined}\n />\n )\n } else {\n instance._store.deleted = true\n console.log(`❌ Unknown element: ${type}`)\n return null\n }\n})\n\nlet ItemInstance = memo(\n ({ id, parentId }: { id: string; parentId: string }) => {\n let instance = useItemInstance(id)\n if (!instance) {\n return <div style={{ display: 'none' }}>Item instance {id} not found</div>\n }\n return (\n <WeaverseItemContext.Provider value={{ parentId, id }}>\n <ItemComponent key={id} instance={instance} />\n </WeaverseItemContext.Provider>\n )\n },\n)\n","import type Stitches from '@stitches/react/types/stitches'\nimport type { ElementCSS, WeaverseItemStore } from '@weaverse/core'\nimport clsx from 'clsx'\n\n// Make the css data formatted to correct order (desktop, tablet, mobile)\nfunction formatCSS(css: ElementCSS) {\n return {\n '@desktop': css['@desktop'],\n '@mobile': css['@mobile'],\n }\n}\n\nlet permanentClasses: Record<string, string> = {}\nexport function generateItemClassName(\n instance: WeaverseItemStore,\n stitchesInstance: Stitches,\n) {\n let { css, type, className: cls = '' } = instance.data\n let className = ''\n let permanentClass = ''\n let perCss = instance.Element?.permanentCss\n if (perCss) {\n if (type in permanentClasses) {\n permanentClass = permanentClasses[type]\n } else {\n // @ts-ignore\n let { className: perCls } = stitchesInstance.css(perCss)()\n Object.assign(permanentClasses, { [type]: perCls })\n permanentClass = perCls\n }\n }\n className = permanentClass\n if (css) {\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let formattedCss = formatCSS(css)\n let newStitchesClass = stitchesInstance.css(formattedCss)().className || ''\n let { stitchesClass = '' } = instance\n let otherClass = (instance.ref.current?.className || '')\n .replace(stitchesClass, '')\n .replace(cls, '')\n .replace(permanentClass, '')\n .trim()\n className = clsx(permanentClass, cls, newStitchesClass, otherClass)\n instance.stitchesClass = newStitchesClass\n }\n return className\n}\n"],"mappings":"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","names":["import_react","id","import_react","import_clsx","clsx","React","clsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/hooks.ts","../src/renderer.tsx","../src/utils/css.ts"],"sourcesContent":["export * from '@weaverse/core'\nexport * from './context'\nexport * from './hooks'\nexport * from './renderer'\nexport * from './types'\n","import type { Weaverse } from '@weaverse/core'\nimport { createContext } from 'react'\n\nexport let WeaverseContext = createContext<Weaverse>({} as Weaverse)\nexport let WeaverseContextProvider = WeaverseContext.Provider\nexport let WeaverseItemContext = createContext<{\n id: string\n parentId: string\n}>({ id: '', parentId: '' })\n","import { Weaverse, type WeaverseItemStore } from '@weaverse/core'\nimport { useContext, useEffect } from 'react'\nimport { WeaverseContext, WeaverseItemContext } from '~/context'\n\nexport function useWeaverse<T = Weaverse>() {\n let weaverse = useContext(WeaverseContext)\n return weaverse as T\n}\n\nexport let useItemInstance = (id?: string) => {\n let { id: currentId } = useContext(WeaverseItemContext)\n let instance = Weaverse.itemInstances.get(id || currentId)\n if (!instance) {\n console.log(`Item instance ${id} not found`)\n return null\n }\n return instance as WeaverseItemStore\n}\n\nexport let useParentInstance = () => {\n let { parentId } = useContext(WeaverseItemContext)\n return useItemInstance(parentId || '')\n}\n\nexport let useChildInstances = (id?: string) => {\n let currentInstance = useItemInstance(id)\n if (!currentInstance) return []\n let { itemInstances } = Weaverse\n\n let {\n data: { children },\n } = currentInstance\n return children.map(({ id }: { id: string }) => {\n return itemInstances.get(id)\n }) as WeaverseItemStore[]\n}\n\nlet fetchingKey = ''\n\nexport function usePixel(context: Weaverse) {\n // @ts-expect-error - ignore\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`\n if (fetchingKey === currentKey) return\n fetchingKey = currentKey\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import clsx from 'clsx'\nimport React, { memo, useEffect, useRef, useSyncExternalStore } from 'react'\n\nimport { WeaverseContextProvider, WeaverseItemContext } from './context'\nimport type { ItemComponentProps, WeaverseRootPropsType } from './types'\nimport { generateItemClassName } from './utils/css'\n\nimport { useItemInstance, usePixel, useWeaverse } from '~/hooks'\n\nlet reactVersion = Number(React.version.split('.')[0])\n\nexport let WeaverseRoot = memo(({ context }: WeaverseRootPropsType) => {\n let data = useSyncExternalStore(\n context.subscribe,\n context.getSnapShot,\n context.getSnapShot,\n )\n let rootRef = useRef<HTMLElement>()\n\n useEffect(() => {\n context.contentRootElement = rootRef.current\n }, [context])\n usePixel(context)\n\n let eventHandlers = context?.studioBridge?.eventHandlers || {}\n let themeClass = context.stitchesInstance.theme.className\n\n if (context.projectId) {\n return (\n <div\n className={`weaverse-content-root ${themeClass}`}\n {...eventHandlers}\n ref={rootRef}\n data-weaverse-project-id={context.projectId}\n data-weaverse-template-id={data.id}\n >\n <WeaverseContextProvider value={context}>\n <ItemInstance\n id={context.data.rootId || context.projectId}\n parentId={''}\n />\n </WeaverseContextProvider>\n </div>\n )\n }\n return null\n})\n\nconst ItemComponent = memo(({ instance }: ItemComponentProps) => {\n let context = useWeaverse()\n let { stitchesInstance, elementRegistry, platformType } = context\n let data = useSyncExternalStore(\n instance.subscribe,\n instance.getSnapShot,\n instance.getSnapShot,\n )\n let {\n id,\n type,\n childIds = [],\n children = [],\n parentId,\n createdAt,\n updatedAt,\n deletedAt,\n css,\n __hidden,\n // Need to get rid of this `data` property\n data: _,\n ...rest\n } = data\n\n useEffect(() => {\n if (!instance.ref.current) {\n // Fallback `ref` if the element isn't created by `React.forwardRef`\n Object.assign(instance.ref, {\n current: document.querySelector(`[data-wv-id=\"${id}\"]`),\n })\n }\n }, [instance, id])\n\n if (__hidden) {\n return null\n }\n\n let Element = elementRegistry.get(type)\n\n if (Element?.Component) {\n let Component = Element.Component\n if (\n Component.$$typeof === Symbol.for('react.forward_ref') ||\n reactVersion > 18\n ) {\n rest.ref = instance.ref\n }\n let renderChildren = (\n children?.length\n ? children\n : childIds?.length\n ? childIds.map((cid: string) => ({ id: cid }))\n : []\n ).map((item: { id: string }, index: number) => (\n <ItemInstance key={`${item.id}-${index}`} id={item.id} parentId={id} />\n ))\n\n return (\n <Component\n {...rest}\n key={id}\n data-wv-type={type}\n data-wv-id={id}\n className={clsx(\n platformType !== 'shopify-hydrogen' &&\n generateItemClassName(instance, stitchesInstance),\n rest.data?.className,\n )}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={renderChildren.length ? renderChildren : undefined}\n />\n )\n }\n instance._store.deleted = true\n console.log(`❌ Unknown element: ${type}`)\n return null\n})\n\nlet ItemInstance = memo(\n ({ id, parentId }: { id: string; parentId: string }) => {\n let instance = useItemInstance(id)\n if (!instance) {\n return <div style={{ display: 'none' }}>Item instance {id} not found</div>\n }\n return (\n <WeaverseItemContext.Provider value={{ parentId, id }}>\n <ItemComponent key={id} instance={instance} />\n </WeaverseItemContext.Provider>\n )\n },\n)\n","import type Stitches from '@stitches/react/types/stitches'\nimport type { ElementCSS, WeaverseItemStore } from '@weaverse/core'\nimport clsx from 'clsx'\n\n// Make the css data formatted to correct order (desktop, tablet, mobile)\nfunction formatCSS(css: ElementCSS) {\n return {\n '@desktop': css['@desktop'],\n '@mobile': css['@mobile'],\n }\n}\n\nlet permanentClasses: Record<string, string> = {}\nexport function generateItemClassName(\n instance: WeaverseItemStore,\n stitchesInstance: Stitches,\n) {\n let { css, type, className: cls = '' } = instance.data\n let className = ''\n let permanentClass = ''\n let perCss = instance.Element?.permanentCss\n if (perCss) {\n if (type in permanentClasses) {\n permanentClass = permanentClasses[type]\n } else {\n // @ts-ignore\n let { className: perCls } = stitchesInstance.css(perCss)()\n Object.assign(permanentClasses, { [type]: perCls })\n permanentClass = perCls\n }\n }\n className = permanentClass\n if (css) {\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let formattedCss = formatCSS(css)\n let newStitchesClass = stitchesInstance.css(formattedCss)().className || ''\n let { stitchesClass = '' } = instance\n let otherClass = (instance.ref.current?.className || '')\n .replace(stitchesClass, '')\n .replace(cls, '')\n .replace(permanentClass, '')\n .trim()\n className = clsx(permanentClass, cls, newStitchesClass, otherClass)\n instance.stitchesClass = newStitchesClass\n }\n return className\n}\n"],"mappings":"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","names":["import_react","id","import_clsx","import_react","clsx","import_react","React","clsx"]}
|
package/dist/index.mjs
CHANGED
|
@@ -18,7 +18,7 @@ var useItemInstance = (id) => {
|
|
|
18
18
|
let { id: currentId } = useContext(WeaverseItemContext);
|
|
19
19
|
let instance = Weaverse.itemInstances.get(id || currentId);
|
|
20
20
|
if (!instance) {
|
|
21
|
-
console.
|
|
21
|
+
console.log(`Item instance ${id} not found`);
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
24
|
return instance;
|
|
@@ -40,22 +40,23 @@ var useChildInstances = (id) => {
|
|
|
40
40
|
};
|
|
41
41
|
var fetchingKey = "";
|
|
42
42
|
function usePixel(context) {
|
|
43
|
-
let { projectId, pageId, weaverseHost } = context;
|
|
43
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
44
44
|
useEffect(() => {
|
|
45
|
-
if (!projectId || !pageId || !weaverseHost) return;
|
|
45
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
46
46
|
let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`;
|
|
47
47
|
if (fetchingKey === currentKey) return;
|
|
48
48
|
fetchingKey = currentKey;
|
|
49
49
|
let url = `${weaverseHost}/api/public/px`;
|
|
50
|
-
let
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
let img = new Image();
|
|
51
|
+
img.onload = () => {
|
|
52
|
+
};
|
|
53
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
53
54
|
}, []);
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
// src/renderer.tsx
|
|
57
|
-
import React, { memo, useEffect as useEffect2, useRef, useSyncExternalStore } from "react";
|
|
58
58
|
import clsx2 from "clsx";
|
|
59
|
+
import React, { memo, useEffect as useEffect2, useRef, useSyncExternalStore } from "react";
|
|
59
60
|
|
|
60
61
|
// src/utils/css.ts
|
|
61
62
|
import clsx from "clsx";
|
|
@@ -93,6 +94,8 @@ function generateItemClassName(instance, stitchesInstance) {
|
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
// src/renderer.tsx
|
|
97
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
98
|
+
import { createElement } from "react";
|
|
96
99
|
var reactVersion = Number(React.version.split(".")[0]);
|
|
97
100
|
var WeaverseRoot = memo(({ context }) => {
|
|
98
101
|
let data = useSyncExternalStore(
|
|
@@ -108,22 +111,22 @@ var WeaverseRoot = memo(({ context }) => {
|
|
|
108
111
|
let eventHandlers = context?.studioBridge?.eventHandlers || {};
|
|
109
112
|
let themeClass = context.stitchesInstance.theme.className;
|
|
110
113
|
if (context.projectId) {
|
|
111
|
-
return /* @__PURE__ */
|
|
114
|
+
return /* @__PURE__ */ jsx(
|
|
112
115
|
"div",
|
|
113
116
|
{
|
|
114
117
|
className: `weaverse-content-root ${themeClass}`,
|
|
115
118
|
...eventHandlers,
|
|
116
119
|
ref: rootRef,
|
|
117
120
|
"data-weaverse-project-id": context.projectId,
|
|
118
|
-
"data-weaverse-template-id": data.id
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
121
|
+
"data-weaverse-template-id": data.id,
|
|
122
|
+
children: /* @__PURE__ */ jsx(WeaverseContextProvider, { value: context, children: /* @__PURE__ */ jsx(
|
|
123
|
+
ItemInstance,
|
|
124
|
+
{
|
|
125
|
+
id: context.data.rootId || context.projectId,
|
|
126
|
+
parentId: ""
|
|
127
|
+
}
|
|
128
|
+
) })
|
|
129
|
+
}
|
|
127
130
|
);
|
|
128
131
|
}
|
|
129
132
|
return null;
|
|
@@ -157,7 +160,7 @@ var ItemComponent = memo(({ instance }) => {
|
|
|
157
160
|
current: document.querySelector(`[data-wv-id="${id}"]`)
|
|
158
161
|
});
|
|
159
162
|
}
|
|
160
|
-
}, [instance]);
|
|
163
|
+
}, [instance, id]);
|
|
161
164
|
if (__hidden) {
|
|
162
165
|
return null;
|
|
163
166
|
}
|
|
@@ -167,8 +170,8 @@ var ItemComponent = memo(({ instance }) => {
|
|
|
167
170
|
if (Component.$$typeof === Symbol.for("react.forward_ref") || reactVersion > 18) {
|
|
168
171
|
rest.ref = instance.ref;
|
|
169
172
|
}
|
|
170
|
-
let renderChildren = (children?.length ? children : childIds?.length ? childIds.map((cid) => ({ id: cid })) : []).map((item, index) => /* @__PURE__ */
|
|
171
|
-
return /* @__PURE__ */
|
|
173
|
+
let renderChildren = (children?.length ? children : childIds?.length ? childIds.map((cid) => ({ id: cid })) : []).map((item, index) => /* @__PURE__ */ jsx(ItemInstance, { id: item.id, parentId: id }, `${item.id}-${index}`));
|
|
174
|
+
return /* @__PURE__ */ createElement(
|
|
172
175
|
Component,
|
|
173
176
|
{
|
|
174
177
|
...rest,
|
|
@@ -182,19 +185,22 @@ var ItemComponent = memo(({ instance }) => {
|
|
|
182
185
|
children: renderChildren.length ? renderChildren : void 0
|
|
183
186
|
}
|
|
184
187
|
);
|
|
185
|
-
} else {
|
|
186
|
-
instance._store.deleted = true;
|
|
187
|
-
console.log(`\u274C Unknown element: ${type}`);
|
|
188
|
-
return null;
|
|
189
188
|
}
|
|
189
|
+
instance._store.deleted = true;
|
|
190
|
+
console.log(`\u274C Unknown element: ${type}`);
|
|
191
|
+
return null;
|
|
190
192
|
});
|
|
191
193
|
var ItemInstance = memo(
|
|
192
194
|
({ id, parentId }) => {
|
|
193
195
|
let instance = useItemInstance(id);
|
|
194
196
|
if (!instance) {
|
|
195
|
-
return /* @__PURE__ */
|
|
197
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "none" }, children: [
|
|
198
|
+
"Item instance ",
|
|
199
|
+
id,
|
|
200
|
+
" not found"
|
|
201
|
+
] });
|
|
196
202
|
}
|
|
197
|
-
return /* @__PURE__ */
|
|
203
|
+
return /* @__PURE__ */ jsx(WeaverseItemContext.Provider, { value: { parentId, id }, children: /* @__PURE__ */ jsx(ItemComponent, { instance }, id) });
|
|
198
204
|
}
|
|
199
205
|
);
|
|
200
206
|
export {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/hooks.ts","../src/renderer.tsx","../src/utils/css.ts"],"sourcesContent":["export * from '@weaverse/core'\nexport * from './context'\nexport * from './hooks'\nexport * from './renderer'\nexport * from './types'\n","import { type Weaverse } from '@weaverse/core'\nimport { createContext } from 'react'\n\nexport let WeaverseContext = createContext<Weaverse>({} as Weaverse)\nexport let WeaverseContextProvider = WeaverseContext.Provider\nexport let WeaverseItemContext = createContext<{\n id: string\n parentId: string\n}>({ id: '', parentId: '' })\n","import { Weaverse, type WeaverseItemStore } from '@weaverse/core'\nimport { useContext, useEffect } from 'react'\n\nimport { WeaverseContext, WeaverseItemContext } from '~/context'\n\nexport function useWeaverse<T = Weaverse>() {\n let weaverse = useContext(WeaverseContext)\n return weaverse as T\n}\n\nexport let useItemInstance = (id?: string) => {\n let { id: currentId } = useContext(WeaverseItemContext)\n let instance = Weaverse.itemInstances.get(id || currentId)\n if (!instance) {\n console.warn(`Item instance ${id} not found`)\n return null\n }\n return instance as WeaverseItemStore\n}\n\nexport let useParentInstance = () => {\n let { parentId } = useContext(WeaverseItemContext)\n return useItemInstance(parentId || '')\n}\n\nexport let useChildInstances = (id?: string) => {\n let currentInstance = useItemInstance(id)\n if (!currentInstance) return []\n let { itemInstances } = Weaverse\n\n let {\n data: { children },\n } = currentInstance\n return children.map(({ id }: { id: string }) => {\n return itemInstances.get(id)\n }) as WeaverseItemStore[]\n}\n\nlet fetchingKey = ''\n\nexport function usePixel(context: Weaverse) {\n // @ts-expect-error\n let { projectId, pageId, weaverseHost } = context\n\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost) return\n let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`\n if (fetchingKey === currentKey) return\n fetchingKey = currentKey\n let url = `${weaverseHost}/api/public/px`\n let xhr = new XMLHttpRequest()\n xhr.open('POST', url, true)\n xhr.send(JSON.stringify({ projectId, pageId }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","/* eslint-disable react/no-children-prop */\nimport React, { memo, useEffect, useRef, useSyncExternalStore } from 'react'\nimport clsx from 'clsx'\n\nimport { WeaverseContextProvider, WeaverseItemContext } from './context'\nimport type { ItemComponentProps, WeaverseRootPropsType } from './types'\nimport { generateItemClassName } from './utils/css'\n\nimport { useItemInstance, usePixel, useWeaverse } from '~/hooks'\n\nlet reactVersion = Number(React.version.split('.')[0])\n\nexport let WeaverseRoot = memo(({ context }: WeaverseRootPropsType) => {\n let data = useSyncExternalStore(\n context.subscribe,\n context.getSnapShot,\n context.getSnapShot,\n )\n let rootRef = useRef<HTMLElement>()\n\n useEffect(() => {\n context.contentRootElement = rootRef.current\n }, [context])\n usePixel(context)\n\n let eventHandlers = context?.studioBridge?.eventHandlers || {}\n let themeClass = context.stitchesInstance.theme.className\n\n if (context.projectId) {\n return (\n <div\n className={`weaverse-content-root ${themeClass}`}\n {...eventHandlers}\n ref={rootRef}\n data-weaverse-project-id={context.projectId}\n data-weaverse-template-id={data.id}\n >\n <WeaverseContextProvider value={context}>\n <ItemInstance\n id={context.data.rootId || context.projectId}\n parentId={''}\n />\n </WeaverseContextProvider>\n </div>\n )\n }\n return null\n})\n\nconst ItemComponent = memo(({ instance }: ItemComponentProps) => {\n let context = useWeaverse()\n let { stitchesInstance, elementRegistry, platformType } = context\n let data = useSyncExternalStore(\n instance.subscribe,\n instance.getSnapShot,\n instance.getSnapShot,\n )\n let {\n id,\n type,\n childIds = [],\n children = [],\n parentId,\n createdAt,\n updatedAt,\n deletedAt,\n css,\n __hidden,\n // Need to get rid of this `data` property\n data: _,\n ...rest\n } = data\n\n useEffect(() => {\n if (!instance.ref.current) {\n // Fallback `ref` if the element isn't created by `React.forwardRef`\n Object.assign(instance.ref, {\n current: document.querySelector(`[data-wv-id=\"${id}\"]`),\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instance])\n\n if (__hidden) {\n return null\n }\n\n let Element = elementRegistry.get(type)\n\n if (Element?.Component) {\n let Component = Element.Component\n if (\n Component.$$typeof === Symbol.for('react.forward_ref') ||\n reactVersion > 18\n ) {\n rest.ref = instance.ref\n }\n let renderChildren = (\n children?.length\n ? children\n : childIds?.length\n ? childIds.map((cid: string) => ({ id: cid }))\n : []\n ).map((item: { id: string }, index: number) => (\n <ItemInstance key={item.id + '-' + index} id={item.id} parentId={id} />\n ))\n\n return (\n <Component\n {...rest}\n key={id}\n data-wv-type={type}\n data-wv-id={id}\n className={clsx(\n platformType !== 'shopify-hydrogen' &&\n generateItemClassName(instance, stitchesInstance),\n rest.data?.className,\n )}\n children={renderChildren.length ? renderChildren : undefined}\n />\n )\n } else {\n instance._store.deleted = true\n console.log(`❌ Unknown element: ${type}`)\n return null\n }\n})\n\nlet ItemInstance = memo(\n ({ id, parentId }: { id: string; parentId: string }) => {\n let instance = useItemInstance(id)\n if (!instance) {\n return <div style={{ display: 'none' }}>Item instance {id} not found</div>\n }\n return (\n <WeaverseItemContext.Provider value={{ parentId, id }}>\n <ItemComponent key={id} instance={instance} />\n </WeaverseItemContext.Provider>\n )\n },\n)\n","import type Stitches from '@stitches/react/types/stitches'\nimport type { ElementCSS, WeaverseItemStore } from '@weaverse/core'\nimport clsx from 'clsx'\n\n// Make the css data formatted to correct order (desktop, tablet, mobile)\nfunction formatCSS(css: ElementCSS) {\n return {\n '@desktop': css['@desktop'],\n '@mobile': css['@mobile'],\n }\n}\n\nlet permanentClasses: Record<string, string> = {}\nexport function generateItemClassName(\n instance: WeaverseItemStore,\n stitchesInstance: Stitches,\n) {\n let { css, type, className: cls = '' } = instance.data\n let className = ''\n let permanentClass = ''\n let perCss = instance.Element?.permanentCss\n if (perCss) {\n if (type in permanentClasses) {\n permanentClass = permanentClasses[type]\n } else {\n // @ts-ignore\n let { className: perCls } = stitchesInstance.css(perCss)()\n Object.assign(permanentClasses, { [type]: perCls })\n permanentClass = perCls\n }\n }\n className = permanentClass\n if (css) {\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let formattedCss = formatCSS(css)\n let newStitchesClass = stitchesInstance.css(formattedCss)().className || ''\n let { stitchesClass = '' } = instance\n let otherClass = (instance.ref.current?.className || '')\n .replace(stitchesClass, '')\n .replace(cls, '')\n .replace(permanentClass, '')\n .trim()\n className = clsx(permanentClass, cls, newStitchesClass, otherClass)\n instance.stitchesClass = newStitchesClass\n }\n return className\n}\n"],"mappings":"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","names":["id","useEffect","clsx","useEffect","clsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/hooks.ts","../src/renderer.tsx","../src/utils/css.ts"],"sourcesContent":["export * from '@weaverse/core'\nexport * from './context'\nexport * from './hooks'\nexport * from './renderer'\nexport * from './types'\n","import type { Weaverse } from '@weaverse/core'\nimport { createContext } from 'react'\n\nexport let WeaverseContext = createContext<Weaverse>({} as Weaverse)\nexport let WeaverseContextProvider = WeaverseContext.Provider\nexport let WeaverseItemContext = createContext<{\n id: string\n parentId: string\n}>({ id: '', parentId: '' })\n","import { Weaverse, type WeaverseItemStore } from '@weaverse/core'\nimport { useContext, useEffect } from 'react'\nimport { WeaverseContext, WeaverseItemContext } from '~/context'\n\nexport function useWeaverse<T = Weaverse>() {\n let weaverse = useContext(WeaverseContext)\n return weaverse as T\n}\n\nexport let useItemInstance = (id?: string) => {\n let { id: currentId } = useContext(WeaverseItemContext)\n let instance = Weaverse.itemInstances.get(id || currentId)\n if (!instance) {\n console.log(`Item instance ${id} not found`)\n return null\n }\n return instance as WeaverseItemStore\n}\n\nexport let useParentInstance = () => {\n let { parentId } = useContext(WeaverseItemContext)\n return useItemInstance(parentId || '')\n}\n\nexport let useChildInstances = (id?: string) => {\n let currentInstance = useItemInstance(id)\n if (!currentInstance) return []\n let { itemInstances } = Weaverse\n\n let {\n data: { children },\n } = currentInstance\n return children.map(({ id }: { id: string }) => {\n return itemInstances.get(id)\n }) as WeaverseItemStore[]\n}\n\nlet fetchingKey = ''\n\nexport function usePixel(context: Weaverse) {\n // @ts-expect-error - ignore\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let currentKey = `${projectId}-${pageId}-${globalThis.location.pathname}`\n if (fetchingKey === currentKey) return\n fetchingKey = currentKey\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import clsx from 'clsx'\nimport React, { memo, useEffect, useRef, useSyncExternalStore } from 'react'\n\nimport { WeaverseContextProvider, WeaverseItemContext } from './context'\nimport type { ItemComponentProps, WeaverseRootPropsType } from './types'\nimport { generateItemClassName } from './utils/css'\n\nimport { useItemInstance, usePixel, useWeaverse } from '~/hooks'\n\nlet reactVersion = Number(React.version.split('.')[0])\n\nexport let WeaverseRoot = memo(({ context }: WeaverseRootPropsType) => {\n let data = useSyncExternalStore(\n context.subscribe,\n context.getSnapShot,\n context.getSnapShot,\n )\n let rootRef = useRef<HTMLElement>()\n\n useEffect(() => {\n context.contentRootElement = rootRef.current\n }, [context])\n usePixel(context)\n\n let eventHandlers = context?.studioBridge?.eventHandlers || {}\n let themeClass = context.stitchesInstance.theme.className\n\n if (context.projectId) {\n return (\n <div\n className={`weaverse-content-root ${themeClass}`}\n {...eventHandlers}\n ref={rootRef}\n data-weaverse-project-id={context.projectId}\n data-weaverse-template-id={data.id}\n >\n <WeaverseContextProvider value={context}>\n <ItemInstance\n id={context.data.rootId || context.projectId}\n parentId={''}\n />\n </WeaverseContextProvider>\n </div>\n )\n }\n return null\n})\n\nconst ItemComponent = memo(({ instance }: ItemComponentProps) => {\n let context = useWeaverse()\n let { stitchesInstance, elementRegistry, platformType } = context\n let data = useSyncExternalStore(\n instance.subscribe,\n instance.getSnapShot,\n instance.getSnapShot,\n )\n let {\n id,\n type,\n childIds = [],\n children = [],\n parentId,\n createdAt,\n updatedAt,\n deletedAt,\n css,\n __hidden,\n // Need to get rid of this `data` property\n data: _,\n ...rest\n } = data\n\n useEffect(() => {\n if (!instance.ref.current) {\n // Fallback `ref` if the element isn't created by `React.forwardRef`\n Object.assign(instance.ref, {\n current: document.querySelector(`[data-wv-id=\"${id}\"]`),\n })\n }\n }, [instance, id])\n\n if (__hidden) {\n return null\n }\n\n let Element = elementRegistry.get(type)\n\n if (Element?.Component) {\n let Component = Element.Component\n if (\n Component.$$typeof === Symbol.for('react.forward_ref') ||\n reactVersion > 18\n ) {\n rest.ref = instance.ref\n }\n let renderChildren = (\n children?.length\n ? children\n : childIds?.length\n ? childIds.map((cid: string) => ({ id: cid }))\n : []\n ).map((item: { id: string }, index: number) => (\n <ItemInstance key={`${item.id}-${index}`} id={item.id} parentId={id} />\n ))\n\n return (\n <Component\n {...rest}\n key={id}\n data-wv-type={type}\n data-wv-id={id}\n className={clsx(\n platformType !== 'shopify-hydrogen' &&\n generateItemClassName(instance, stitchesInstance),\n rest.data?.className,\n )}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={renderChildren.length ? renderChildren : undefined}\n />\n )\n }\n instance._store.deleted = true\n console.log(`❌ Unknown element: ${type}`)\n return null\n})\n\nlet ItemInstance = memo(\n ({ id, parentId }: { id: string; parentId: string }) => {\n let instance = useItemInstance(id)\n if (!instance) {\n return <div style={{ display: 'none' }}>Item instance {id} not found</div>\n }\n return (\n <WeaverseItemContext.Provider value={{ parentId, id }}>\n <ItemComponent key={id} instance={instance} />\n </WeaverseItemContext.Provider>\n )\n },\n)\n","import type Stitches from '@stitches/react/types/stitches'\nimport type { ElementCSS, WeaverseItemStore } from '@weaverse/core'\nimport clsx from 'clsx'\n\n// Make the css data formatted to correct order (desktop, tablet, mobile)\nfunction formatCSS(css: ElementCSS) {\n return {\n '@desktop': css['@desktop'],\n '@mobile': css['@mobile'],\n }\n}\n\nlet permanentClasses: Record<string, string> = {}\nexport function generateItemClassName(\n instance: WeaverseItemStore,\n stitchesInstance: Stitches,\n) {\n let { css, type, className: cls = '' } = instance.data\n let className = ''\n let permanentClass = ''\n let perCss = instance.Element?.permanentCss\n if (perCss) {\n if (type in permanentClasses) {\n permanentClass = permanentClasses[type]\n } else {\n // @ts-ignore\n let { className: perCls } = stitchesInstance.css(perCss)()\n Object.assign(permanentClasses, { [type]: perCls })\n permanentClass = perCls\n }\n }\n className = permanentClass\n if (css) {\n // let stitches create the style from css object and\n // then return the classname, so we can use it in the render\n let formattedCss = formatCSS(css)\n let newStitchesClass = stitchesInstance.css(formattedCss)().className || ''\n let { stitchesClass = '' } = instance\n let otherClass = (instance.ref.current?.className || '')\n .replace(stitchesClass, '')\n .replace(cls, '')\n .replace(permanentClass, '')\n .trim()\n className = clsx(permanentClass, cls, newStitchesClass, otherClass)\n instance.stitchesClass = newStitchesClass\n }\n return className\n}\n"],"mappings":"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","names":["id","clsx","useEffect","useEffect","clsx"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@weaverse/react",
|
|
3
3
|
"author": "Weaverse Team",
|
|
4
4
|
"description": "React bindings for Weaverse",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.7",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"react-dom": ">=18"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@weaverse/core": "3.2.
|
|
46
|
+
"@weaverse/core": "3.2.7",
|
|
47
47
|
"clsx": "^2.1.1"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|