@weaverse/hydrogen 6.1.3 → 6.2.0
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.js +5 -6
- package/dist/index.mjs +1 -2
- package/dist/internal.js +18 -29
- package/dist/internal.mjs +3 -14
- package/dist/next-client-boundary.js +1088 -0
- package/dist/next-client-boundary.js.map +1 -0
- package/dist/next-client-boundary.mjs +1038 -0
- package/dist/next-client-boundary.mjs.map +1 -0
- package/dist/next-server.js +669 -13
- package/dist/next-server.js.map +1 -0
- package/dist/next-server.mjs +666 -2
- package/dist/next-server.mjs.map +1 -0
- package/dist/next.js +29 -43
- package/dist/next.mjs +5 -3
- package/dist/react-router.js +6 -7
- package/dist/react-router.mjs +2 -3
- package/dist/seo-B8u2r3rX.mjs +205 -0
- package/dist/seo-B8u2r3rX.mjs.map +1 -0
- package/dist/seo-D9A9uRQ4.js +264 -0
- package/dist/seo-D9A9uRQ4.js.map +1 -0
- package/dist/translate-Celryv8j.mjs +26 -0
- package/dist/translate-Celryv8j.mjs.map +1 -0
- package/dist/translate-Kt1BYL1n.js +37 -0
- package/dist/translate-Kt1BYL1n.js.map +1 -0
- package/dist/{nested-key-CR3-YMFi.js → translation-store-BmGxBALf.js} +46 -137
- package/dist/translation-store-BmGxBALf.js.map +1 -0
- package/dist/{nested-key-_k9aW_Wd.mjs → translation-store-JFs-4lvf.mjs} +35 -138
- package/dist/translation-store-JFs-4lvf.mjs.map +1 -0
- package/dist/types/hooks/translation-context.d.ts +2 -36
- package/dist/types/hooks/translation-context.d.ts.map +1 -1
- package/dist/types/next/client-boundary.d.ts +25 -0
- package/dist/types/next/client-boundary.d.ts.map +1 -0
- package/dist/types/next/client.d.ts +16 -0
- package/dist/types/next/client.d.ts.map +1 -0
- package/dist/types/next/hooks.d.ts +20 -0
- package/dist/types/next/hooks.d.ts.map +1 -0
- package/dist/types/next/index.d.ts +34 -0
- package/dist/types/next/index.d.ts.map +1 -0
- package/dist/types/next/item.d.ts +60 -0
- package/dist/types/next/item.d.ts.map +1 -0
- package/dist/types/next/loader.d.ts +25 -0
- package/dist/types/next/loader.d.ts.map +1 -0
- package/dist/types/next/main.d.ts +11 -0
- package/dist/types/next/main.d.ts.map +1 -0
- package/dist/types/next/provider.d.ts +85 -0
- package/dist/types/next/provider.d.ts.map +1 -0
- package/dist/types/next/registry.d.ts +15 -0
- package/dist/types/next/registry.d.ts.map +1 -0
- package/dist/types/next/renderer.d.ts +21 -0
- package/dist/types/next/renderer.d.ts.map +1 -0
- package/dist/types/next/request-info.d.ts +19 -0
- package/dist/types/next/request-info.d.ts.map +1 -0
- package/dist/types/next/revalidate-item.d.ts +82 -0
- package/dist/types/next/revalidate-item.d.ts.map +1 -0
- package/dist/types/next/root-provider.d.ts +65 -0
- package/dist/types/next/root-provider.d.ts.map +1 -0
- package/dist/types/next/runtime.d.ts +113 -0
- package/dist/types/next/runtime.d.ts.map +1 -0
- package/dist/types/next/seo.d.ts +55 -0
- package/dist/types/next/seo.d.ts.map +1 -0
- package/dist/types/next/server/configs.d.ts +27 -0
- package/dist/types/next/server/configs.d.ts.map +1 -0
- package/dist/types/next/server/normalize-page-url.d.ts +19 -0
- package/dist/types/next/server/normalize-page-url.d.ts.map +1 -0
- package/dist/types/next/server/revalidate-handler.d.ts +55 -0
- package/dist/types/next/server/revalidate-handler.d.ts.map +1 -0
- package/dist/types/next/server/server-client.d.ts +21 -0
- package/dist/types/next/server/server-client.d.ts.map +1 -0
- package/dist/types/next/server.d.ts +19 -0
- package/dist/types/next/server.d.ts.map +1 -0
- package/dist/types/next/studio-bridge.d.ts +16 -0
- package/dist/types/next/studio-bridge.d.ts.map +1 -0
- package/dist/types/next/studio-connect.d.ts +27 -0
- package/dist/types/next/studio-connect.d.ts.map +1 -0
- package/dist/types/next/studio-router.d.ts +50 -0
- package/dist/types/next/studio-router.d.ts.map +1 -0
- package/dist/types/next/studio-script-src.d.ts +12 -0
- package/dist/types/next/studio-script-src.d.ts.map +1 -0
- package/dist/types/next/theme-settings-store.d.ts +18 -0
- package/dist/types/next/theme-settings-store.d.ts.map +1 -0
- package/dist/types/next/translation-context.d.ts +109 -0
- package/dist/types/next/translation-context.d.ts.map +1 -0
- package/dist/types/next/types.d.ts +674 -0
- package/dist/types/next/types.d.ts.map +1 -0
- package/dist/types/next/use-weaverse-next-studio.d.ts +34 -0
- package/dist/types/next/use-weaverse-next-studio.d.ts.map +1 -0
- package/dist/types/next/utils.d.ts +21 -0
- package/dist/types/next/utils.d.ts.map +1 -0
- package/dist/types/next-server.d.ts +3 -1
- package/dist/types/next-server.d.ts.map +1 -1
- package/dist/types/next.d.ts +4 -2
- package/dist/types/next.d.ts.map +1 -1
- package/dist/types/utils/translate.d.ts +51 -0
- package/dist/types/utils/translate.d.ts.map +1 -0
- package/dist/{weaverse-client-C9IgIH7O.js → weaverse-client-BmceZc5q.js} +49 -771
- package/dist/weaverse-client-BmceZc5q.js.map +1 -0
- package/dist/{weaverse-client-D59mBW0j.mjs → weaverse-client-CXnM9ayH.mjs} +4 -720
- package/dist/weaverse-client-CXnM9ayH.mjs.map +1 -0
- package/package.json +13 -7
- package/src/hooks/translation-context.tsx +7 -84
- package/src/next/client-boundary.ts +51 -0
- package/src/next/client.ts +102 -0
- package/src/next/hooks.ts +52 -0
- package/src/next/index.ts +145 -0
- package/src/next/item.ts +167 -0
- package/src/next/loader.ts +135 -0
- package/src/next/main.tsx +45 -0
- package/src/next/provider.tsx +241 -0
- package/src/next/registry.ts +63 -0
- package/src/next/renderer.tsx +102 -0
- package/src/next/request-info.ts +124 -0
- package/src/next/revalidate-item.ts +211 -0
- package/src/next/root-provider.tsx +201 -0
- package/src/next/runtime.ts +559 -0
- package/src/next/seo.ts +157 -0
- package/src/next/server/configs.ts +178 -0
- package/src/next/server/normalize-page-url.ts +73 -0
- package/src/next/server/revalidate-handler.ts +357 -0
- package/src/next/server/server-client.ts +728 -0
- package/src/next/server.ts +67 -0
- package/src/next/studio-bridge.tsx +82 -0
- package/src/next/studio-connect.tsx +88 -0
- package/src/next/studio-router.ts +85 -0
- package/src/next/studio-script-src.ts +128 -0
- package/src/next/theme-settings-store.ts +47 -0
- package/src/next/translation-context.tsx +182 -0
- package/src/next/types.ts +764 -0
- package/src/next/use-weaverse-next-studio.tsx +106 -0
- package/src/next/utils.ts +48 -0
- package/src/next-server.ts +41 -1
- package/src/next.ts +48 -12
- package/src/utils/translate.ts +101 -0
- package/dist/internal.js.map +0 -1
- package/dist/internal.mjs.map +0 -1
- package/dist/nested-key-CR3-YMFi.js.map +0 -1
- package/dist/nested-key-_k9aW_Wd.mjs.map +0 -1
- package/dist/translation-store-4fAV771j.js +0 -69
- package/dist/translation-store-4fAV771j.js.map +0 -1
- package/dist/translation-store-BBrw0FOk.mjs +0 -58
- package/dist/translation-store-BBrw0FOk.mjs.map +0 -1
- package/dist/weaverse-client-C9IgIH7O.js.map +0 -1
- package/dist/weaverse-client-D59mBW0j.mjs.map +0 -1
|
@@ -0,0 +1,1088 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
let _weaverse_react = require("@weaverse/react");
|
|
4
|
+
let _weaverse_schema = require("@weaverse/schema");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let next_navigation = require("next/navigation");
|
|
8
|
+
//#region src/next/utils.ts
|
|
9
|
+
function generateDataFromSchema(schema) {
|
|
10
|
+
let data = {};
|
|
11
|
+
if (!schema) return data;
|
|
12
|
+
let groups = schema.settings ?? schema.inspector ?? [];
|
|
13
|
+
for (let group of groups) for (let input of group?.inputs ?? []) {
|
|
14
|
+
let { name, defaultValue } = input;
|
|
15
|
+
if (name && defaultValue !== null && defaultValue !== void 0) data[name] = defaultValue;
|
|
16
|
+
}
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
typeof window !== "undefined" && (window.top, window.self);
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/next/item.ts
|
|
22
|
+
function flattenItemData(update) {
|
|
23
|
+
let { data, ...rest } = update;
|
|
24
|
+
if (!(data && typeof data === "object" && !Array.isArray(data))) return rest;
|
|
25
|
+
return {
|
|
26
|
+
...data,
|
|
27
|
+
...rest
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
let deferredItemUpdates = null;
|
|
31
|
+
function collectDeferredItemUpdates(create) {
|
|
32
|
+
let previousQueue = deferredItemUpdates;
|
|
33
|
+
let queue = /* @__PURE__ */ new Set();
|
|
34
|
+
deferredItemUpdates = queue;
|
|
35
|
+
try {
|
|
36
|
+
return [create(), [...queue]];
|
|
37
|
+
} finally {
|
|
38
|
+
deferredItemUpdates = previousQueue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
var WeaverseNextItem = class extends _weaverse_react.WeaverseItemStore {
|
|
42
|
+
_cachedSnapshot = null;
|
|
43
|
+
_snapshotStoreRef = null;
|
|
44
|
+
_snapshotTranslationRef = null;
|
|
45
|
+
constructor(initialData, weaverse) {
|
|
46
|
+
super(initialData, weaverse);
|
|
47
|
+
let schemaData = generateDataFromSchema(this.Element?.schema);
|
|
48
|
+
Object.assign(this._store, schemaData, flattenItemData(initialData));
|
|
49
|
+
}
|
|
50
|
+
setData = (update) => {
|
|
51
|
+
if ("id" in update && "type" in update) {
|
|
52
|
+
let { data, type } = update;
|
|
53
|
+
let schema = this.weaverse.elementRegistry.get(type)?.schema;
|
|
54
|
+
this._store = {
|
|
55
|
+
...generateDataFromSchema(schema),
|
|
56
|
+
...data === void 0 ? {} : { data },
|
|
57
|
+
...flattenItemData(update)
|
|
58
|
+
};
|
|
59
|
+
} else this.data = flattenItemData(update);
|
|
60
|
+
if (deferredItemUpdates) deferredItemUpdates.add(this);
|
|
61
|
+
else this.triggerUpdate();
|
|
62
|
+
return this.data;
|
|
63
|
+
};
|
|
64
|
+
getSnapShot = () => {
|
|
65
|
+
let base = this._store;
|
|
66
|
+
let translations = this.weaverse.translationMap[this._id];
|
|
67
|
+
if (!translations) return base;
|
|
68
|
+
if (this._cachedSnapshot && this._snapshotStoreRef === base && this._snapshotTranslationRef === translations) return this._cachedSnapshot;
|
|
69
|
+
let merged = { ...base };
|
|
70
|
+
for (let [key, entry] of Object.entries(translations)) if (entry.translatedValue !== void 0) merged[key] = entry.translatedValue;
|
|
71
|
+
this._cachedSnapshot = merged;
|
|
72
|
+
this._snapshotStoreRef = base;
|
|
73
|
+
this._snapshotTranslationRef = translations;
|
|
74
|
+
return merged;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
function ensureNextItemConstructor() {
|
|
78
|
+
if (!_weaverse_react.Weaverse.ItemConstructor || _weaverse_react.Weaverse.ItemConstructor === _weaverse_react.WeaverseItemStore || _weaverse_react.Weaverse.ItemConstructor === WeaverseNextItem) _weaverse_react.Weaverse.ItemConstructor = WeaverseNextItem;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/next/main.tsx
|
|
82
|
+
function Main(props) {
|
|
83
|
+
let { children, loaderData, ...rest } = props;
|
|
84
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
85
|
+
...rest,
|
|
86
|
+
children
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
Main.displayName = "main";
|
|
90
|
+
const defaultMainComponent = {
|
|
91
|
+
default: Main,
|
|
92
|
+
schema: (0, _weaverse_schema.createSchema)({
|
|
93
|
+
type: "main",
|
|
94
|
+
title: "Main"
|
|
95
|
+
})
|
|
96
|
+
};
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/next/registry.ts
|
|
99
|
+
const MAIN_TYPE = "main";
|
|
100
|
+
const registeredComponentTypes = /* @__PURE__ */ new Set();
|
|
101
|
+
function registerWeaverseNextComponents(components) {
|
|
102
|
+
ensureNextItemConstructor();
|
|
103
|
+
let hasUserMain = components.some((component) => component.schema?.type === MAIN_TYPE);
|
|
104
|
+
let effectiveComponents = hasUserMain ? components : [defaultMainComponent, ...components];
|
|
105
|
+
for (let component of effectiveComponents) {
|
|
106
|
+
let type = component.schema.type;
|
|
107
|
+
let element = {
|
|
108
|
+
type,
|
|
109
|
+
Component: component.default,
|
|
110
|
+
schema: component.schema,
|
|
111
|
+
loader: component.loader
|
|
112
|
+
};
|
|
113
|
+
if (type === MAIN_TYPE && hasUserMain) {
|
|
114
|
+
_weaverse_react.Weaverse.elementRegistry.set(type, element);
|
|
115
|
+
registeredComponentTypes.add(type);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (type && !registeredComponentTypes.has(type)) {
|
|
119
|
+
_weaverse_react.Weaverse.registerElement(element);
|
|
120
|
+
registeredComponentTypes.add(type);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/next/client.ts
|
|
126
|
+
var NextClient = class {
|
|
127
|
+
projectId;
|
|
128
|
+
components;
|
|
129
|
+
themeSchema;
|
|
130
|
+
themeSettings;
|
|
131
|
+
requestContext;
|
|
132
|
+
commerce;
|
|
133
|
+
data = null;
|
|
134
|
+
dataContext = {};
|
|
135
|
+
_fetchPage;
|
|
136
|
+
_fetchThemeSettings;
|
|
137
|
+
constructor(config) {
|
|
138
|
+
this.projectId = config.projectId;
|
|
139
|
+
this.components = config.components;
|
|
140
|
+
registerWeaverseNextComponents(this.components);
|
|
141
|
+
this.themeSchema = config.themeSchema;
|
|
142
|
+
this.themeSettings = {
|
|
143
|
+
...generateDataFromSchema(config.themeSchema),
|
|
144
|
+
...config.themeSettings
|
|
145
|
+
};
|
|
146
|
+
this.requestContext = config.requestContext;
|
|
147
|
+
this.commerce = config.commerce;
|
|
148
|
+
this._fetchPage = config.fetchPage;
|
|
149
|
+
this._fetchThemeSettings = config.fetchThemeSettings;
|
|
150
|
+
}
|
|
151
|
+
get storefront() {
|
|
152
|
+
return this.commerce?.storefront;
|
|
153
|
+
}
|
|
154
|
+
loadPage = (input = {}) => {
|
|
155
|
+
if (!this._fetchPage) throw new Error("[WeaverseNextClient] loadPage requires a `fetchPage` function in client config.");
|
|
156
|
+
return this._fetchPage(input);
|
|
157
|
+
};
|
|
158
|
+
loadThemeSettings = (context) => {
|
|
159
|
+
if (!this._fetchThemeSettings) throw new Error("[WeaverseNextClient] loadThemeSettings requires a `fetchThemeSettings` function in client config.");
|
|
160
|
+
return this._fetchThemeSettings(context ?? this.requestContext);
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
function createWeaverseNextClient(config) {
|
|
164
|
+
return new NextClient(config);
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
//#region src/utils/translation-store.ts
|
|
168
|
+
var TranslationStore = class {
|
|
169
|
+
overrides = {};
|
|
170
|
+
listeners = /* @__PURE__ */ new Set();
|
|
171
|
+
setOverrides = (overrides) => {
|
|
172
|
+
this.overrides = { ...overrides };
|
|
173
|
+
this.emit();
|
|
174
|
+
};
|
|
175
|
+
updateOverrides = (newOverrides) => {
|
|
176
|
+
this.overrides = {
|
|
177
|
+
...this.overrides,
|
|
178
|
+
...newOverrides
|
|
179
|
+
};
|
|
180
|
+
this.emit();
|
|
181
|
+
};
|
|
182
|
+
getSnapshot = () => this.overrides;
|
|
183
|
+
getServerSnapshot = () => this.overrides;
|
|
184
|
+
subscribe = (callback) => {
|
|
185
|
+
this.listeners.add(callback);
|
|
186
|
+
return () => {
|
|
187
|
+
this.listeners.delete(callback);
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
emit = () => {
|
|
191
|
+
for (const listener of Array.from(this.listeners)) try {
|
|
192
|
+
listener();
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error("TranslationStore: Listener error", error);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
//#endregion
|
|
199
|
+
//#region src/next/theme-settings-store.ts
|
|
200
|
+
function createWeaverseNextThemeSettingsStore(options = {}) {
|
|
201
|
+
let listeners = /* @__PURE__ */ new Set();
|
|
202
|
+
let store = {
|
|
203
|
+
publicEnv: options.publicEnv,
|
|
204
|
+
schema: options.schema,
|
|
205
|
+
settings: { ...options.settings ?? {} },
|
|
206
|
+
getServerSnapshot: () => store.settings,
|
|
207
|
+
getSnapshot: () => store.settings,
|
|
208
|
+
subscribe: (listener) => {
|
|
209
|
+
listeners.add(listener);
|
|
210
|
+
return () => {
|
|
211
|
+
listeners.delete(listener);
|
|
212
|
+
};
|
|
213
|
+
},
|
|
214
|
+
updateThemeSettings: (next) => {
|
|
215
|
+
store.settings = {
|
|
216
|
+
...store.settings,
|
|
217
|
+
...next
|
|
218
|
+
};
|
|
219
|
+
for (let listener of listeners) listener();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
return store;
|
|
223
|
+
}
|
|
224
|
+
//#endregion
|
|
225
|
+
//#region src/utils/nested-key.ts
|
|
226
|
+
function getNestedKey(obj, path, fallback) {
|
|
227
|
+
const keys = path.split(".");
|
|
228
|
+
let current = obj;
|
|
229
|
+
for (const key of keys) {
|
|
230
|
+
if (current == null || typeof current !== "object") return fallback;
|
|
231
|
+
current = current[key];
|
|
232
|
+
}
|
|
233
|
+
if (typeof current === "string") return current;
|
|
234
|
+
return fallback;
|
|
235
|
+
}
|
|
236
|
+
//#endregion
|
|
237
|
+
//#region src/utils/translate.ts
|
|
238
|
+
function interpolate(template, variables) {
|
|
239
|
+
if (!variables) return template;
|
|
240
|
+
return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
|
|
241
|
+
let value = variables[key];
|
|
242
|
+
return value === void 0 ? match : String(value);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function createTranslate(sources) {
|
|
246
|
+
let { staticContent, merchantOverrides, designOverrides, externalT } = sources;
|
|
247
|
+
return (key, variables) => {
|
|
248
|
+
if (externalT) {
|
|
249
|
+
let external = externalT(key, variables);
|
|
250
|
+
if (external && external !== key) return external;
|
|
251
|
+
}
|
|
252
|
+
let design = designOverrides && Object.hasOwn(designOverrides, key) ? designOverrides[key] : void 0;
|
|
253
|
+
let override = merchantOverrides ? getNestedKey(merchantOverrides, key) : void 0;
|
|
254
|
+
let staticValue = getNestedKey(staticContent, key);
|
|
255
|
+
return interpolate(design ?? override ?? staticValue ?? key, variables);
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//#endregion
|
|
259
|
+
//#region src/next/translation-context.tsx
|
|
260
|
+
const TranslationContext = (0, react.createContext)(null);
|
|
261
|
+
TranslationContext.displayName = "WeaverseNextTranslationContext";
|
|
262
|
+
const EMPTY = {};
|
|
263
|
+
const NOOP_SUBSCRIBE = () => () => {};
|
|
264
|
+
const NOOP_SNAPSHOT = () => EMPTY;
|
|
265
|
+
function TranslationProvider({ staticContent, merchantOverrides, t: externalT, translationStore, themeTextStore, children }) {
|
|
266
|
+
let store = translationStore ?? themeTextStore ?? null;
|
|
267
|
+
let designOverrides = (0, _weaverse_react.useSafeExternalStore)(store?.subscribe ?? NOOP_SUBSCRIBE, store?.getSnapshot ?? NOOP_SNAPSHOT, store?.getServerSnapshot ?? NOOP_SNAPSHOT);
|
|
268
|
+
let value = (0, react.useMemo)(() => ({
|
|
269
|
+
t: createTranslate({
|
|
270
|
+
staticContent,
|
|
271
|
+
merchantOverrides,
|
|
272
|
+
designOverrides,
|
|
273
|
+
externalT
|
|
274
|
+
}),
|
|
275
|
+
translationStore: store,
|
|
276
|
+
themeTextStore: store,
|
|
277
|
+
merchantOverrides: merchantOverrides ?? null
|
|
278
|
+
}), [
|
|
279
|
+
staticContent,
|
|
280
|
+
merchantOverrides,
|
|
281
|
+
designOverrides,
|
|
282
|
+
externalT,
|
|
283
|
+
store
|
|
284
|
+
]);
|
|
285
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TranslationContext.Provider, {
|
|
286
|
+
value,
|
|
287
|
+
children
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
function useTranslation() {
|
|
291
|
+
let ctx = (0, react.useContext)(TranslationContext);
|
|
292
|
+
if (!ctx) throw new Error("useTranslation must be used within <TranslationProvider>. Wrap your app with <WeaverseNextRootProvider>.");
|
|
293
|
+
return ctx;
|
|
294
|
+
}
|
|
295
|
+
const ThemeTextProvider = TranslationProvider;
|
|
296
|
+
const useThemeText = useTranslation;
|
|
297
|
+
//#endregion
|
|
298
|
+
//#region src/next/root-provider.tsx
|
|
299
|
+
const WeaverseNextRootContext = (0, react.createContext)(null);
|
|
300
|
+
function WeaverseNextRootProvider(props) {
|
|
301
|
+
let { children, initialThemeSettings, merchantOverrides, staticContent, t, themeSchema, publicEnv } = props;
|
|
302
|
+
let storeRef = (0, react.useRef)(null);
|
|
303
|
+
if (!storeRef.current) storeRef.current = createWeaverseNextThemeSettingsStore({
|
|
304
|
+
publicEnv,
|
|
305
|
+
schema: themeSchema,
|
|
306
|
+
settings: initialThemeSettings
|
|
307
|
+
});
|
|
308
|
+
let themeSettingsStore = storeRef.current;
|
|
309
|
+
let translationStoreRef = (0, react.useRef)(null);
|
|
310
|
+
if (!translationStoreRef.current) translationStoreRef.current = new TranslationStore();
|
|
311
|
+
let translationStore = translationStoreRef.current;
|
|
312
|
+
let [studioSelectionStore] = (0, react.useState)(() => new _weaverse_react.StudioSelectionStore());
|
|
313
|
+
let appliedThemeSettingsRef = (0, react.useRef)(initialThemeSettings);
|
|
314
|
+
(0, react.useEffect)(() => {
|
|
315
|
+
if (initialThemeSettings && appliedThemeSettingsRef.current !== initialThemeSettings) {
|
|
316
|
+
themeSettingsStore.updateThemeSettings(initialThemeSettings);
|
|
317
|
+
appliedThemeSettingsRef.current = initialThemeSettings;
|
|
318
|
+
}
|
|
319
|
+
}, [initialThemeSettings, themeSettingsStore]);
|
|
320
|
+
let resolvedStaticContent = staticContent ?? getSchemaStaticContent(themeSchema);
|
|
321
|
+
let rootContextValue = (0, react.useMemo)(() => ({
|
|
322
|
+
merchantOverrides,
|
|
323
|
+
staticContent: resolvedStaticContent,
|
|
324
|
+
themeSettingsStore,
|
|
325
|
+
studioSelectionStore,
|
|
326
|
+
translationStore
|
|
327
|
+
}), [
|
|
328
|
+
merchantOverrides,
|
|
329
|
+
resolvedStaticContent,
|
|
330
|
+
themeSettingsStore,
|
|
331
|
+
studioSelectionStore,
|
|
332
|
+
translationStore
|
|
333
|
+
]);
|
|
334
|
+
let contextValue = (0, react.useMemo)(() => ({
|
|
335
|
+
merchantOverrides,
|
|
336
|
+
themeSettings: themeSettingsStore.getSnapshot(),
|
|
337
|
+
themeSettingsStore,
|
|
338
|
+
studioSelectionStore,
|
|
339
|
+
translationStore
|
|
340
|
+
}), [
|
|
341
|
+
merchantOverrides,
|
|
342
|
+
themeSettingsStore,
|
|
343
|
+
studioSelectionStore,
|
|
344
|
+
translationStore
|
|
345
|
+
]);
|
|
346
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeaverseNextRootContext.Provider, {
|
|
347
|
+
value: rootContextValue,
|
|
348
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeaverseNextContext.Provider, {
|
|
349
|
+
value: contextValue,
|
|
350
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_weaverse_react.StudioSelectionStoreContext.Provider, {
|
|
351
|
+
value: studioSelectionStore,
|
|
352
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TranslationProvider, {
|
|
353
|
+
merchantOverrides,
|
|
354
|
+
staticContent: resolvedStaticContent,
|
|
355
|
+
t,
|
|
356
|
+
translationStore,
|
|
357
|
+
children
|
|
358
|
+
})
|
|
359
|
+
})
|
|
360
|
+
})
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
//#endregion
|
|
364
|
+
//#region src/next/provider.tsx
|
|
365
|
+
const EMPTY_THEME_SETTINGS = {};
|
|
366
|
+
const EMPTY_STATIC_CONTENT = {};
|
|
367
|
+
function getSchemaStaticContent(schema) {
|
|
368
|
+
return (schema?.i18n)?.staticContent ?? EMPTY_STATIC_CONTENT;
|
|
369
|
+
}
|
|
370
|
+
const WeaverseNextContext = (0, react.createContext)(null);
|
|
371
|
+
function WeaverseNextProvider(props) {
|
|
372
|
+
let { children, client, rootData, pageData, commerce, themeSettings } = props;
|
|
373
|
+
let rootContext = (0, react.useContext)(WeaverseNextRootContext);
|
|
374
|
+
let themeSettingsValue = themeSettings ?? client?.themeSettings ?? EMPTY_THEME_SETTINGS;
|
|
375
|
+
let ownTranslationStoreRef = (0, react.useRef)(null);
|
|
376
|
+
if (!(rootContext || ownTranslationStoreRef.current)) ownTranslationStoreRef.current = new TranslationStore();
|
|
377
|
+
let translationStore = rootContext?.translationStore ?? ownTranslationStoreRef.current;
|
|
378
|
+
let [ownSelectionStore] = (0, react.useState)(() => new _weaverse_react.StudioSelectionStore());
|
|
379
|
+
let studioSelectionStore = rootContext?.studioSelectionStore ?? ownSelectionStore;
|
|
380
|
+
let staticContent = props.staticContent ?? rootContext?.staticContent ?? getSchemaStaticContent(client?.themeSchema);
|
|
381
|
+
let merchantOverrides = props.merchantOverrides ?? rootContext?.merchantOverrides;
|
|
382
|
+
let ownThemeSettingsStore = (0, react.useMemo)(() => {
|
|
383
|
+
if (rootContext) return null;
|
|
384
|
+
return createWeaverseNextThemeSettingsStore({
|
|
385
|
+
schema: client?.themeSchema,
|
|
386
|
+
settings: themeSettingsValue
|
|
387
|
+
});
|
|
388
|
+
}, [
|
|
389
|
+
rootContext,
|
|
390
|
+
client?.themeSchema,
|
|
391
|
+
themeSettingsValue
|
|
392
|
+
]);
|
|
393
|
+
let themeSettingsStore = rootContext?.themeSettingsStore ?? ownThemeSettingsStore;
|
|
394
|
+
let mergedIntoRootRef = (0, react.useRef)(void 0);
|
|
395
|
+
(0, react.useEffect)(() => {
|
|
396
|
+
if (rootContext && themeSettingsValue !== EMPTY_THEME_SETTINGS && mergedIntoRootRef.current !== themeSettingsValue) {
|
|
397
|
+
rootContext.themeSettingsStore.updateThemeSettings(themeSettingsValue);
|
|
398
|
+
mergedIntoRootRef.current = themeSettingsValue;
|
|
399
|
+
}
|
|
400
|
+
}, [rootContext, themeSettingsValue]);
|
|
401
|
+
let value = (0, react.useMemo)(() => ({
|
|
402
|
+
client,
|
|
403
|
+
rootData,
|
|
404
|
+
pageData,
|
|
405
|
+
commerce: commerce ?? client?.commerce,
|
|
406
|
+
merchantOverrides,
|
|
407
|
+
themeSettings: themeSettingsStore.getSnapshot(),
|
|
408
|
+
themeSettingsStore,
|
|
409
|
+
studioSelectionStore,
|
|
410
|
+
translationStore
|
|
411
|
+
}), [
|
|
412
|
+
client,
|
|
413
|
+
rootData,
|
|
414
|
+
pageData,
|
|
415
|
+
commerce,
|
|
416
|
+
merchantOverrides,
|
|
417
|
+
themeSettingsStore,
|
|
418
|
+
studioSelectionStore,
|
|
419
|
+
translationStore
|
|
420
|
+
]);
|
|
421
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeaverseNextContext.Provider, {
|
|
422
|
+
value,
|
|
423
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_weaverse_react.StudioSelectionStoreContext.Provider, {
|
|
424
|
+
value: studioSelectionStore,
|
|
425
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TranslationProvider, {
|
|
426
|
+
merchantOverrides,
|
|
427
|
+
staticContent,
|
|
428
|
+
t: props.t,
|
|
429
|
+
translationStore,
|
|
430
|
+
children
|
|
431
|
+
})
|
|
432
|
+
})
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
//#endregion
|
|
436
|
+
//#region src/next/hooks.ts
|
|
437
|
+
const OUTSIDE_PROVIDER_ERROR = "must be used inside a <WeaverseNextProvider>.";
|
|
438
|
+
function useWeaverseNextContext(hookName) {
|
|
439
|
+
let context = (0, react.useContext)(WeaverseNextContext);
|
|
440
|
+
if (!context) throw new Error(`[@weaverse/hydrogen/next] ${hookName} ${OUTSIDE_PROVIDER_ERROR}`);
|
|
441
|
+
return context;
|
|
442
|
+
}
|
|
443
|
+
function useWeaverseRootData() {
|
|
444
|
+
return useWeaverseNextContext("useWeaverseRootData").rootData;
|
|
445
|
+
}
|
|
446
|
+
function useWeaversePageData() {
|
|
447
|
+
return useWeaverseNextContext("useWeaversePageData").pageData;
|
|
448
|
+
}
|
|
449
|
+
function useWeaverseCommerce() {
|
|
450
|
+
return useWeaverseNextContext("useWeaverseCommerce").commerce;
|
|
451
|
+
}
|
|
452
|
+
function useThemeSettings() {
|
|
453
|
+
let { themeSettingsStore } = useWeaverseNextContext("useThemeSettings");
|
|
454
|
+
return (0, react.useSyncExternalStore)(themeSettingsStore.subscribe, themeSettingsStore.getSnapshot, themeSettingsStore.getServerSnapshot);
|
|
455
|
+
}
|
|
456
|
+
//#endregion
|
|
457
|
+
//#region src/next/request-info.ts
|
|
458
|
+
function toUrl(value) {
|
|
459
|
+
return typeof value === "string" ? new URL(value, "http://localhost") : value;
|
|
460
|
+
}
|
|
461
|
+
function getSearchParamsFromContext(context) {
|
|
462
|
+
if (context?.searchParams) return new URLSearchParams(context.searchParams);
|
|
463
|
+
if (context?.url) {
|
|
464
|
+
let url = toUrl(context.url);
|
|
465
|
+
return new URLSearchParams(url.searchParams);
|
|
466
|
+
}
|
|
467
|
+
return new URLSearchParams();
|
|
468
|
+
}
|
|
469
|
+
function withPathPrefix(pathname, i18n) {
|
|
470
|
+
let segments = (typeof i18n?.pathPrefix === "string" ? i18n.pathPrefix : "").split("/").filter(Boolean);
|
|
471
|
+
let prefix = segments.length > 0 ? `/${segments.join("/")}` : "";
|
|
472
|
+
if (prefix === "" || pathname === prefix || pathname.startsWith(`${prefix}/`)) return pathname;
|
|
473
|
+
return pathname === "/" ? prefix : `${prefix}${pathname}`;
|
|
474
|
+
}
|
|
475
|
+
function getPathnameFromContext(context) {
|
|
476
|
+
if (context?.pathname) return withPathPrefix(context.pathname, context.i18n);
|
|
477
|
+
if (context?.url) return withPathPrefix(toUrl(context.url).pathname || "/", context.i18n);
|
|
478
|
+
return "/";
|
|
479
|
+
}
|
|
480
|
+
function coerceQueryValue(value) {
|
|
481
|
+
if (value === "true") return true;
|
|
482
|
+
if (value === "false") return false;
|
|
483
|
+
return value;
|
|
484
|
+
}
|
|
485
|
+
function toQueryRecord(searchParams) {
|
|
486
|
+
let queries = {};
|
|
487
|
+
for (let [key, value] of searchParams.entries()) queries[key] = coerceQueryValue(value);
|
|
488
|
+
return queries;
|
|
489
|
+
}
|
|
490
|
+
const TRANSIENT_STUDIO_PARAMS = new Set(["weaverseDraftItem", "__weaverseDraftItem"]);
|
|
491
|
+
function getRequestInfoSearchParams(context) {
|
|
492
|
+
let searchParams = new URLSearchParams(getSearchParamsFromContext(context));
|
|
493
|
+
for (let key of TRANSIENT_STUDIO_PARAMS) searchParams.delete(key);
|
|
494
|
+
return searchParams;
|
|
495
|
+
}
|
|
496
|
+
function buildWeaverseNextRequestInfo(context) {
|
|
497
|
+
let searchParams = getRequestInfoSearchParams(context);
|
|
498
|
+
let search = searchParams.toString();
|
|
499
|
+
return {
|
|
500
|
+
pathname: getPathnameFromContext(context),
|
|
501
|
+
search: search ? `?${search}` : "",
|
|
502
|
+
queries: toQueryRecord(searchParams),
|
|
503
|
+
...context?.i18n ? { i18n: context.i18n } : {},
|
|
504
|
+
...context?.pageType ? { pageType: context.pageType } : {},
|
|
505
|
+
...context?.handle ? { handle: context.handle } : {}
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region src/next/runtime.ts
|
|
510
|
+
function getRuntimeWindow() {
|
|
511
|
+
return typeof window === "undefined" ? void 0 : window;
|
|
512
|
+
}
|
|
513
|
+
function getRenderablePage$1(data) {
|
|
514
|
+
let page = data.page;
|
|
515
|
+
let rootId = page.rootId ?? page.items.find((item) => item.type === "main")?.id ?? page.items[0]?.id ?? page.id;
|
|
516
|
+
return {
|
|
517
|
+
...page,
|
|
518
|
+
rootId
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function getConfigString(configs, key) {
|
|
522
|
+
let value = configs?.[key];
|
|
523
|
+
return typeof value === "string" ? value : void 0;
|
|
524
|
+
}
|
|
525
|
+
function resolveModeFlag(config, key) {
|
|
526
|
+
return config.client?.requestContext?.[key] === true || config.data.configs?.[key] === true;
|
|
527
|
+
}
|
|
528
|
+
function resolveSectionType(config) {
|
|
529
|
+
return config.client?.requestContext?.sectionType || getConfigString(config.data.configs, "sectionType") || void 0;
|
|
530
|
+
}
|
|
531
|
+
function getRecordString(record, key) {
|
|
532
|
+
let value = record?.[key];
|
|
533
|
+
return typeof value === "string" ? value : void 0;
|
|
534
|
+
}
|
|
535
|
+
function resolveProjectId(client, data, fallback) {
|
|
536
|
+
let projectId = client?.projectId;
|
|
537
|
+
if (projectId) return projectId;
|
|
538
|
+
let configProjectId = getConfigString(data.configs, "projectId");
|
|
539
|
+
if (configProjectId) return configProjectId;
|
|
540
|
+
return getRecordString(data.project, "id") ?? fallback;
|
|
541
|
+
}
|
|
542
|
+
function resolveDataContext(config) {
|
|
543
|
+
if (config.dataContext) return config.dataContext;
|
|
544
|
+
if (config.client?.dataContext) return config.client.dataContext;
|
|
545
|
+
return {};
|
|
546
|
+
}
|
|
547
|
+
function getRuntimeKey(pageId, requestInfo) {
|
|
548
|
+
return `${pageId}:${requestInfo.pathname}:${requestInfo.search}`;
|
|
549
|
+
}
|
|
550
|
+
function registerRuntime(runtime) {
|
|
551
|
+
let runtimeWindow = getRuntimeWindow();
|
|
552
|
+
if (!runtimeWindow) return;
|
|
553
|
+
runtimeWindow.__weaverses ??= {};
|
|
554
|
+
runtimeWindow.__weaverses[runtime.pageId] = runtime;
|
|
555
|
+
runtimeWindow.__weaverse = runtime;
|
|
556
|
+
}
|
|
557
|
+
function rebindPageItemsToRuntime(runtime) {
|
|
558
|
+
let items = runtime.data?.items;
|
|
559
|
+
if (!items) return;
|
|
560
|
+
for (let { id } of items) {
|
|
561
|
+
let instance = runtime.itemInstances.get(id);
|
|
562
|
+
if (instance && instance.weaverse !== runtime) instance.weaverse = runtime;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
var WeaverseNextRuntime = class extends _weaverse_react.Weaverse {
|
|
566
|
+
pageId;
|
|
567
|
+
internal;
|
|
568
|
+
requestInfo;
|
|
569
|
+
isPreviewMode;
|
|
570
|
+
isRevisionPreview;
|
|
571
|
+
sectionType;
|
|
572
|
+
translationMap = {};
|
|
573
|
+
translationLocale = String();
|
|
574
|
+
translationLanguageId = String();
|
|
575
|
+
pendingProjectData;
|
|
576
|
+
pendingItemUpdates = [];
|
|
577
|
+
constructor(config) {
|
|
578
|
+
let { client, data } = config;
|
|
579
|
+
let page = getRenderablePage$1(data);
|
|
580
|
+
let configs = data.configs;
|
|
581
|
+
let requestContext = client?.requestContext;
|
|
582
|
+
let isDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
583
|
+
let isPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
584
|
+
let isRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
585
|
+
let sectionType = resolveSectionType(config);
|
|
586
|
+
let projectId = resolveProjectId(client, data, page.id);
|
|
587
|
+
ensureNextItemConstructor();
|
|
588
|
+
super({
|
|
589
|
+
projectId,
|
|
590
|
+
data: page,
|
|
591
|
+
isDesignMode,
|
|
592
|
+
weaverseHost: getConfigString(configs, "weaverseHost"),
|
|
593
|
+
weaverseVersion: getConfigString(configs, "weaverseVersion")
|
|
594
|
+
});
|
|
595
|
+
this.pageId = page.id;
|
|
596
|
+
this.dataContext = resolveDataContext(config);
|
|
597
|
+
this.requestInfo = buildWeaverseNextRequestInfo(requestContext);
|
|
598
|
+
this.isDesignMode = isDesignMode;
|
|
599
|
+
this.isPreviewMode = isPreviewMode;
|
|
600
|
+
this.isRevisionPreview = isRevisionPreview;
|
|
601
|
+
this.sectionType = sectionType;
|
|
602
|
+
let translationStore = config.translationStore ?? new TranslationStore();
|
|
603
|
+
this.internal = {
|
|
604
|
+
merchantOverrides: config.merchantOverrides,
|
|
605
|
+
navigate: config.navigate,
|
|
606
|
+
pageAssignment: data.pageAssignment,
|
|
607
|
+
project: data.project,
|
|
608
|
+
revalidate: config.revalidate,
|
|
609
|
+
themeSettingsStore: config.themeSettingsStore ?? createWeaverseNextThemeSettingsStore({
|
|
610
|
+
schema: client?.themeSchema,
|
|
611
|
+
settings: client?.themeSettings
|
|
612
|
+
}),
|
|
613
|
+
studioSelectionStore: config.studioSelectionStore,
|
|
614
|
+
translationStore,
|
|
615
|
+
themeTextStore: translationStore
|
|
616
|
+
};
|
|
617
|
+
this.extractTranslationSidecar();
|
|
618
|
+
}
|
|
619
|
+
extractTranslationSidecar = () => {
|
|
620
|
+
let pageData = this.data;
|
|
621
|
+
let translationMap = pageData?.translationMap;
|
|
622
|
+
if (translationMap) {
|
|
623
|
+
this.translationMap = translationMap;
|
|
624
|
+
this.translationLocale = pageData?.translationLocale || "";
|
|
625
|
+
this.translationLanguageId = pageData?.translationLanguageId || "";
|
|
626
|
+
} else {
|
|
627
|
+
this.translationMap = {};
|
|
628
|
+
this.translationLocale = "";
|
|
629
|
+
this.translationLanguageId = "";
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
setTranslationSidecar = (map = {}, locale = "", languageId = "") => {
|
|
633
|
+
this.translationMap = map;
|
|
634
|
+
this.translationLocale = locale;
|
|
635
|
+
this.translationLanguageId = languageId;
|
|
636
|
+
this.refreshAllItems();
|
|
637
|
+
};
|
|
638
|
+
updateTranslation = (itemId, key, originalValue, translatedValue) => {
|
|
639
|
+
if (!this.translationMap[itemId]) this.translationMap[itemId] = {};
|
|
640
|
+
this.translationMap[itemId] = {
|
|
641
|
+
...this.translationMap[itemId],
|
|
642
|
+
[key]: {
|
|
643
|
+
originalValue,
|
|
644
|
+
translatedValue
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
let instance = this.itemInstances.get(itemId);
|
|
648
|
+
if (instance) instance.triggerUpdate();
|
|
649
|
+
};
|
|
650
|
+
getTranslationChanges = () => {
|
|
651
|
+
let languageId = this.translationLanguageId;
|
|
652
|
+
if (!(this.translationLocale && languageId)) return;
|
|
653
|
+
let entries = [];
|
|
654
|
+
for (let [itemId, fields] of Object.entries(this.translationMap)) for (let [key, entry] of Object.entries(fields)) entries.push({
|
|
655
|
+
itemId,
|
|
656
|
+
key: `data.${key}`,
|
|
657
|
+
originalValue: entry.originalValue,
|
|
658
|
+
translatedValue: entry.translatedValue
|
|
659
|
+
});
|
|
660
|
+
if (entries.length === 0) return;
|
|
661
|
+
return {
|
|
662
|
+
languageId,
|
|
663
|
+
entries
|
|
664
|
+
};
|
|
665
|
+
};
|
|
666
|
+
setProjectData = (data) => {
|
|
667
|
+
this.data = data;
|
|
668
|
+
this.extractTranslationSidecar();
|
|
669
|
+
this.initProject();
|
|
670
|
+
};
|
|
671
|
+
flushRenderPhaseUpdates = () => {
|
|
672
|
+
let pendingData = this.pendingProjectData;
|
|
673
|
+
if (pendingData) {
|
|
674
|
+
this.pendingProjectData = void 0;
|
|
675
|
+
this.setProjectData(pendingData);
|
|
676
|
+
}
|
|
677
|
+
let pendingItems = this.pendingItemUpdates;
|
|
678
|
+
if (pendingItems.length > 0) {
|
|
679
|
+
this.pendingItemUpdates = [];
|
|
680
|
+
for (let item of pendingItems) item.triggerUpdate();
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
};
|
|
684
|
+
function createWeaverseNextRuntime(config) {
|
|
685
|
+
let requestInfo = buildWeaverseNextRequestInfo(config.client?.requestContext);
|
|
686
|
+
let page = getRenderablePage$1(config.data);
|
|
687
|
+
let existing = getRuntimeWindow()?.__weaverses?.[page.id];
|
|
688
|
+
let requestKey = getRuntimeKey(page.id, requestInfo);
|
|
689
|
+
if (existing?.__weaverseNextRequestKey === requestKey) {
|
|
690
|
+
let configs = config.data.configs;
|
|
691
|
+
let nextIsDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
692
|
+
let nextIsPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
693
|
+
let nextIsRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
694
|
+
let nextSectionType = resolveSectionType(config);
|
|
695
|
+
if (existing.isDesignMode || nextIsDesignMode) existing.pendingProjectData = void 0;
|
|
696
|
+
else existing.pendingProjectData = page;
|
|
697
|
+
existing.__weaverseNextLatestData = page;
|
|
698
|
+
existing.dataContext = resolveDataContext(config);
|
|
699
|
+
existing.requestInfo = requestInfo;
|
|
700
|
+
existing.projectId = resolveProjectId(config.client, config.data, page.id);
|
|
701
|
+
existing.isDesignMode = nextIsDesignMode;
|
|
702
|
+
existing.isPreviewMode = nextIsPreviewMode;
|
|
703
|
+
existing.isRevisionPreview = nextIsRevisionPreview;
|
|
704
|
+
existing.sectionType = nextSectionType;
|
|
705
|
+
existing.weaverseHost = getConfigString(configs, "weaverseHost") ?? existing.weaverseHost;
|
|
706
|
+
existing.weaverseVersion = getConfigString(configs, "weaverseVersion") ?? existing.weaverseVersion;
|
|
707
|
+
existing.internal.pageAssignment = config.data.pageAssignment;
|
|
708
|
+
existing.internal.project = config.data.project;
|
|
709
|
+
if (config.navigate) existing.internal.navigate = config.navigate;
|
|
710
|
+
if (config.revalidate) existing.internal.revalidate = config.revalidate;
|
|
711
|
+
if (config.themeSettingsStore) existing.internal.themeSettingsStore = config.themeSettingsStore;
|
|
712
|
+
if (config.studioSelectionStore) existing.internal.studioSelectionStore = config.studioSelectionStore;
|
|
713
|
+
if (config.translationStore) {
|
|
714
|
+
existing.internal.translationStore = config.translationStore;
|
|
715
|
+
existing.internal.themeTextStore = config.translationStore;
|
|
716
|
+
}
|
|
717
|
+
existing.internal.merchantOverrides = config.merchantOverrides;
|
|
718
|
+
registerRuntime(existing);
|
|
719
|
+
return existing;
|
|
720
|
+
}
|
|
721
|
+
let [runtime, refreshedItems] = collectDeferredItemUpdates(() => new WeaverseNextRuntime(config));
|
|
722
|
+
runtime.pendingItemUpdates = refreshedItems;
|
|
723
|
+
rebindPageItemsToRuntime(runtime);
|
|
724
|
+
runtime.__weaverseNextRequestKey = requestKey;
|
|
725
|
+
runtime.__weaverseNextLatestData = page;
|
|
726
|
+
registerRuntime(runtime);
|
|
727
|
+
return runtime;
|
|
728
|
+
}
|
|
729
|
+
function bindWeaverseNextStudioRuntime(runtime) {
|
|
730
|
+
if (!runtime.isDesignMode) return false;
|
|
731
|
+
let studio = getRuntimeWindow()?.weaverseStudio;
|
|
732
|
+
if (!studio) return false;
|
|
733
|
+
let boundRuntime = runtime;
|
|
734
|
+
let activeRequestInfo = studio.weaverse?.requestInfo;
|
|
735
|
+
let isActiveUrl = !activeRequestInfo || activeRequestInfo.pathname === runtime.requestInfo.pathname && activeRequestInfo.search === runtime.requestInfo.search;
|
|
736
|
+
if (!(boundRuntime.__weaverseNextStudioBound && isActiveUrl)) {
|
|
737
|
+
studio.init?.(runtime);
|
|
738
|
+
boundRuntime.__weaverseNextStudioBound = true;
|
|
739
|
+
return true;
|
|
740
|
+
}
|
|
741
|
+
studio.refreshStudio?.({
|
|
742
|
+
data: boundRuntime.__weaverseNextLatestData ?? runtime.data,
|
|
743
|
+
pageId: runtime.pageId,
|
|
744
|
+
requestInfo: runtime.requestInfo
|
|
745
|
+
});
|
|
746
|
+
return true;
|
|
747
|
+
}
|
|
748
|
+
//#endregion
|
|
749
|
+
//#region src/next/revalidate-item.ts
|
|
750
|
+
const DEFAULT_REVALIDATE_ENDPOINT = "/api/weaverse/revalidate";
|
|
751
|
+
const MAX_ROUTE_CONTEXT_HANDLE_LENGTH = 512;
|
|
752
|
+
const DENIED_ROUTE_CONTEXT_PARAMS = [
|
|
753
|
+
"weaverseprojectid",
|
|
754
|
+
"weaversehost",
|
|
755
|
+
"weaverseapikey",
|
|
756
|
+
"weaverseapibase",
|
|
757
|
+
"weaversepublicapibase",
|
|
758
|
+
"weaverseversion",
|
|
759
|
+
"projectid",
|
|
760
|
+
"weaversedraftitem",
|
|
761
|
+
"__weaversedraftitem",
|
|
762
|
+
"_rsc"
|
|
763
|
+
];
|
|
764
|
+
const ROUTE_CONTEXT_I18N_KEYS = [
|
|
765
|
+
"country",
|
|
766
|
+
"label",
|
|
767
|
+
"language",
|
|
768
|
+
"locale",
|
|
769
|
+
"pathPrefix"
|
|
770
|
+
];
|
|
771
|
+
function sanitizeRouteContextSearch(search) {
|
|
772
|
+
let params = new URLSearchParams(search);
|
|
773
|
+
let denied = new Set(DENIED_ROUTE_CONTEXT_PARAMS);
|
|
774
|
+
for (let key of [...new Set(params.keys())]) if (denied.has(key.toLowerCase())) params.delete(key);
|
|
775
|
+
let serialized = params.toString();
|
|
776
|
+
return serialized ? `?${serialized}` : "";
|
|
777
|
+
}
|
|
778
|
+
function buildWeaverseNextRevalidateRouteContext(requestInfo) {
|
|
779
|
+
if (!requestInfo || typeof requestInfo.pathname !== "string" || !requestInfo.pathname) return;
|
|
780
|
+
let routeContext = {
|
|
781
|
+
pathname: requestInfo.pathname,
|
|
782
|
+
search: sanitizeRouteContextSearch(requestInfo.search ?? "")
|
|
783
|
+
};
|
|
784
|
+
let { i18n } = requestInfo;
|
|
785
|
+
if (i18n && typeof i18n === "object") {
|
|
786
|
+
let picked = {};
|
|
787
|
+
for (let key of ROUTE_CONTEXT_I18N_KEYS) {
|
|
788
|
+
let value = i18n[key];
|
|
789
|
+
if (typeof value === "string") picked[key] = value;
|
|
790
|
+
}
|
|
791
|
+
if (Object.keys(picked).length) routeContext.i18n = picked;
|
|
792
|
+
}
|
|
793
|
+
if (requestInfo.pageType && _weaverse_schema.PageTypeSchema.safeParse(requestInfo.pageType).success) routeContext.pageType = requestInfo.pageType;
|
|
794
|
+
if (typeof requestInfo.handle === "string" && requestInfo.handle && requestInfo.handle.length <= MAX_ROUTE_CONTEXT_HANDLE_LENGTH) routeContext.handle = requestInfo.handle;
|
|
795
|
+
return routeContext;
|
|
796
|
+
}
|
|
797
|
+
async function revalidateWeaverseNextItem(runtime, draftItem, endpoint = DEFAULT_REVALIDATE_ENDPOINT) {
|
|
798
|
+
let instance = runtime.itemInstances.get(draftItem.id);
|
|
799
|
+
if (!instance) throw new Error(`[weaverse-next] No live item instance for "${draftItem.id}".`);
|
|
800
|
+
let routeContext = buildWeaverseNextRevalidateRouteContext(runtime.requestInfo);
|
|
801
|
+
let response = await fetch(endpoint, {
|
|
802
|
+
method: "POST",
|
|
803
|
+
headers: { "Content-Type": "application/json" },
|
|
804
|
+
body: JSON.stringify(routeContext ? {
|
|
805
|
+
draftItem,
|
|
806
|
+
routeContext
|
|
807
|
+
} : { draftItem })
|
|
808
|
+
});
|
|
809
|
+
if (!response.ok) throw new Error(`[weaverse-next] Revalidate endpoint responded ${response.status}.`);
|
|
810
|
+
let { loaderData } = await response.json();
|
|
811
|
+
instance.setData({ loaderData: loaderData ?? null });
|
|
812
|
+
}
|
|
813
|
+
//#endregion
|
|
814
|
+
//#region src/next/studio-bridge.tsx
|
|
815
|
+
const STUDIO_BIND_RETRY_INTERVAL_MS = 50;
|
|
816
|
+
const STUDIO_BIND_MAX_ATTEMPTS = 100;
|
|
817
|
+
function WeaverseNextStudioBridge(props) {
|
|
818
|
+
let { runtime, navigate, revalidate, revalidateItem } = props;
|
|
819
|
+
let lastRuntimeRef = (0, react.useRef)(runtime);
|
|
820
|
+
let lastRuntimeDataRef = (0, react.useRef)(runtime.data);
|
|
821
|
+
let lastRequestInfoRef = (0, react.useRef)(runtime.requestInfo);
|
|
822
|
+
(0, react.useEffect)(() => {
|
|
823
|
+
if (navigate) runtime.internal.navigate = navigate;
|
|
824
|
+
if (revalidate) runtime.internal.revalidate = revalidate;
|
|
825
|
+
if (revalidateItem) runtime.internal.revalidateItem = revalidateItem;
|
|
826
|
+
if (bindWeaverseNextStudioRuntime(runtime) || !runtime.isDesignMode) return;
|
|
827
|
+
let attempts = 0;
|
|
828
|
+
let interval = window.setInterval(() => {
|
|
829
|
+
attempts += 1;
|
|
830
|
+
if (bindWeaverseNextStudioRuntime(runtime) || attempts >= STUDIO_BIND_MAX_ATTEMPTS) window.clearInterval(interval);
|
|
831
|
+
}, STUDIO_BIND_RETRY_INTERVAL_MS);
|
|
832
|
+
return () => window.clearInterval(interval);
|
|
833
|
+
}, [
|
|
834
|
+
runtime,
|
|
835
|
+
navigate,
|
|
836
|
+
revalidate,
|
|
837
|
+
revalidateItem
|
|
838
|
+
]);
|
|
839
|
+
(0, react.useEffect)(() => {
|
|
840
|
+
if (lastRuntimeRef.current !== runtime) {
|
|
841
|
+
lastRuntimeRef.current = runtime;
|
|
842
|
+
lastRuntimeDataRef.current = runtime.data;
|
|
843
|
+
lastRequestInfoRef.current = runtime.requestInfo;
|
|
844
|
+
return;
|
|
845
|
+
}
|
|
846
|
+
if (lastRuntimeDataRef.current === runtime.data && lastRequestInfoRef.current === runtime.requestInfo) return;
|
|
847
|
+
lastRuntimeDataRef.current = runtime.data;
|
|
848
|
+
lastRequestInfoRef.current = runtime.requestInfo;
|
|
849
|
+
bindWeaverseNextStudioRuntime(runtime);
|
|
850
|
+
}, [
|
|
851
|
+
runtime,
|
|
852
|
+
runtime.data,
|
|
853
|
+
runtime.requestInfo
|
|
854
|
+
]);
|
|
855
|
+
return null;
|
|
856
|
+
}
|
|
857
|
+
//#endregion
|
|
858
|
+
//#region src/next/studio-router.ts
|
|
859
|
+
function shouldResetScroll(options) {
|
|
860
|
+
if (!options || typeof options !== "object") return true;
|
|
861
|
+
return !options.preventScrollReset;
|
|
862
|
+
}
|
|
863
|
+
function createWeaverseNextStudioInternals(router, options = {}) {
|
|
864
|
+
return {
|
|
865
|
+
navigate: (to, navigateOptions) => {
|
|
866
|
+
let scroll = shouldResetScroll(navigateOptions);
|
|
867
|
+
if (options.replace) router.replace(to, { scroll });
|
|
868
|
+
else router.push(to, { scroll });
|
|
869
|
+
},
|
|
870
|
+
revalidate: () => {
|
|
871
|
+
router.refresh();
|
|
872
|
+
}
|
|
873
|
+
};
|
|
874
|
+
}
|
|
875
|
+
//#endregion
|
|
876
|
+
//#region src/next/use-weaverse-next-studio.tsx
|
|
877
|
+
function useWeaverseNextStudioInternals(options) {
|
|
878
|
+
let router = (0, next_navigation.useRouter)();
|
|
879
|
+
let ref = (0, react.useRef)(null);
|
|
880
|
+
if (!ref.current || ref.current.router !== router || ref.current.replace !== options?.replace) ref.current = {
|
|
881
|
+
internals: createWeaverseNextStudioInternals(router, options),
|
|
882
|
+
replace: options?.replace,
|
|
883
|
+
router
|
|
884
|
+
};
|
|
885
|
+
return ref.current.internals;
|
|
886
|
+
}
|
|
887
|
+
function WeaverseNextStudio(props) {
|
|
888
|
+
let { runtime, replace, revalidateEndpoint } = props;
|
|
889
|
+
let { navigate, revalidate } = useWeaverseNextStudioInternals({ replace });
|
|
890
|
+
let endpoint = revalidateEndpoint ?? "/api/weaverse/revalidate";
|
|
891
|
+
let revalidateItemRef = (0, react.useRef)(null);
|
|
892
|
+
if (revalidateItemRef.current?.endpoint !== endpoint || revalidateItemRef.current.runtime !== runtime) revalidateItemRef.current = {
|
|
893
|
+
endpoint,
|
|
894
|
+
revalidateItem: (draftItem) => revalidateWeaverseNextItem(runtime, draftItem, endpoint),
|
|
895
|
+
runtime
|
|
896
|
+
};
|
|
897
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeaverseNextStudioBridge, {
|
|
898
|
+
navigate,
|
|
899
|
+
revalidate,
|
|
900
|
+
revalidateItem: revalidateItemRef.current.revalidateItem,
|
|
901
|
+
runtime
|
|
902
|
+
});
|
|
903
|
+
}
|
|
904
|
+
//#endregion
|
|
905
|
+
//#region src/next/renderer.tsx
|
|
906
|
+
const EMPTY_DATA_CONTEXT = {};
|
|
907
|
+
const useIsomorphicLayoutEffect = typeof window === "undefined" ? react.useEffect : react.useLayoutEffect;
|
|
908
|
+
function getRenderablePage(data) {
|
|
909
|
+
let page = data?.page;
|
|
910
|
+
if (!page) return null;
|
|
911
|
+
let rootId = page.rootId ?? page.items.find((item) => item.type === "main")?.id ?? page.items[0]?.id ?? page.id;
|
|
912
|
+
return {
|
|
913
|
+
...page,
|
|
914
|
+
rootId
|
|
915
|
+
};
|
|
916
|
+
}
|
|
917
|
+
const WeaverseNextRenderer = (0, react.memo)(function WeaverseNextRendererComponent(props) {
|
|
918
|
+
let context = (0, react.useContext)(WeaverseNextContext);
|
|
919
|
+
let client = props.client ?? context?.client;
|
|
920
|
+
let data = props.data ?? client?.data ?? null;
|
|
921
|
+
let dataContext = props.dataContext ?? client?.dataContext ?? EMPTY_DATA_CONTEXT;
|
|
922
|
+
let page = (0, react.useMemo)(() => getRenderablePage(data), [data]);
|
|
923
|
+
let weaverse = (0, react.useMemo)(() => {
|
|
924
|
+
if (!page) return null;
|
|
925
|
+
return createWeaverseNextRuntime({
|
|
926
|
+
client,
|
|
927
|
+
data: {
|
|
928
|
+
...data,
|
|
929
|
+
page
|
|
930
|
+
},
|
|
931
|
+
dataContext,
|
|
932
|
+
merchantOverrides: context?.merchantOverrides,
|
|
933
|
+
themeSettingsStore: context?.themeSettingsStore,
|
|
934
|
+
studioSelectionStore: context?.studioSelectionStore,
|
|
935
|
+
translationStore: context?.translationStore
|
|
936
|
+
});
|
|
937
|
+
}, [
|
|
938
|
+
client,
|
|
939
|
+
page,
|
|
940
|
+
data,
|
|
941
|
+
dataContext,
|
|
942
|
+
context?.merchantOverrides,
|
|
943
|
+
context?.themeSettingsStore,
|
|
944
|
+
context?.studioSelectionStore,
|
|
945
|
+
context?.translationStore
|
|
946
|
+
]);
|
|
947
|
+
useIsomorphicLayoutEffect(() => {
|
|
948
|
+
weaverse?.flushRenderPhaseUpdates();
|
|
949
|
+
}, [weaverse]);
|
|
950
|
+
if (!weaverse) return null;
|
|
951
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_weaverse_react.WeaverseRoot, { context: weaverse }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WeaverseNextStudio, { runtime: weaverse })] });
|
|
952
|
+
});
|
|
953
|
+
//#endregion
|
|
954
|
+
//#region src/next/studio-script-src.ts
|
|
955
|
+
const TRUSTED_STUDIO_DOMAINS = ["weaverse.io", "weaverse.dev"];
|
|
956
|
+
function isLoopbackHostname(hostname) {
|
|
957
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname.endsWith(".localhost");
|
|
958
|
+
}
|
|
959
|
+
function normalizeOrigin(value) {
|
|
960
|
+
if (!value) return null;
|
|
961
|
+
try {
|
|
962
|
+
return new URL(value).origin;
|
|
963
|
+
} catch {
|
|
964
|
+
return null;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
function isTrustedStudioOrigin(origin, storefrontHostname) {
|
|
968
|
+
let parsed;
|
|
969
|
+
try {
|
|
970
|
+
parsed = new URL(origin);
|
|
971
|
+
} catch {
|
|
972
|
+
return false;
|
|
973
|
+
}
|
|
974
|
+
let { hostname, protocol } = parsed;
|
|
975
|
+
if (isLoopbackHostname(storefrontHostname) && isLoopbackHostname(hostname)) return protocol === "http:" || protocol === "https:";
|
|
976
|
+
if (protocol !== "https:") return false;
|
|
977
|
+
return TRUSTED_STUDIO_DOMAINS.some((domain) => hostname === domain || hostname.endsWith(`.${domain}`));
|
|
978
|
+
}
|
|
979
|
+
function toSearchParams(context) {
|
|
980
|
+
if (context?.searchParams) return new URLSearchParams(context.searchParams);
|
|
981
|
+
if (context?.url) {
|
|
982
|
+
let url = typeof context.url === "string" ? new URL(context.url, "http://localhost") : context.url;
|
|
983
|
+
return new URLSearchParams(url.searchParams);
|
|
984
|
+
}
|
|
985
|
+
return new URLSearchParams();
|
|
986
|
+
}
|
|
987
|
+
function last(searchParams, key) {
|
|
988
|
+
let values = searchParams.getAll(key);
|
|
989
|
+
return values.length ? values.at(-1) ?? null : null;
|
|
990
|
+
}
|
|
991
|
+
function resolveWeaverseNextStudioScriptSrc(context, options = {}) {
|
|
992
|
+
let searchParams = toSearchParams(context);
|
|
993
|
+
let isDesignMode = context?.isDesignMode ?? last(searchParams, "isDesignMode") === "true";
|
|
994
|
+
let isPreviewMode = context?.isPreviewMode ?? last(searchParams, "isPreviewMode") === "true";
|
|
995
|
+
let isRevisionPreview = context?.isRevisionPreview ?? Boolean(last(searchParams, "__revisionId"));
|
|
996
|
+
if (!(isDesignMode || isPreviewMode || isRevisionPreview)) return null;
|
|
997
|
+
let origin = normalizeOrigin(last(searchParams, "weaverseHost"));
|
|
998
|
+
if (!origin) return null;
|
|
999
|
+
if (!isTrustedStudioOrigin(origin, options.storefrontHostname ?? "")) return null;
|
|
1000
|
+
let bundle = isPreviewMode || isRevisionPreview ? "preview.js" : "index.js";
|
|
1001
|
+
let version = last(searchParams, "weaverseVersion");
|
|
1002
|
+
let url = `${origin}/static/studio/next/${bundle}`;
|
|
1003
|
+
return version ? `${url}?v=${encodeURIComponent(version)}` : url;
|
|
1004
|
+
}
|
|
1005
|
+
//#endregion
|
|
1006
|
+
//#region src/next/studio-connect.tsx
|
|
1007
|
+
const loadedScriptSrcs = /* @__PURE__ */ new Set();
|
|
1008
|
+
function loadScript(src) {
|
|
1009
|
+
if (typeof document === "undefined") return;
|
|
1010
|
+
if (loadedScriptSrcs.has(src)) return;
|
|
1011
|
+
if (document.querySelector(`script[src="${src}"]`)) {
|
|
1012
|
+
loadedScriptSrcs.add(src);
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
1015
|
+
let script = document.createElement("script");
|
|
1016
|
+
script.async = true;
|
|
1017
|
+
script.src = src;
|
|
1018
|
+
document.head.appendChild(script);
|
|
1019
|
+
loadedScriptSrcs.add(src);
|
|
1020
|
+
}
|
|
1021
|
+
function loadWeaverseNextStudioScript(context, options = {}) {
|
|
1022
|
+
let resolvedContext = context;
|
|
1023
|
+
if (!resolvedContext && typeof window !== "undefined") resolvedContext = {
|
|
1024
|
+
searchParams: new URLSearchParams(window.location.search),
|
|
1025
|
+
url: window.location.href
|
|
1026
|
+
};
|
|
1027
|
+
let src = resolveWeaverseNextStudioScriptSrc(resolvedContext, { storefrontHostname: options.storefrontHostname ?? (typeof window === "undefined" ? void 0 : window.location.hostname) });
|
|
1028
|
+
if (src) loadScript(src);
|
|
1029
|
+
}
|
|
1030
|
+
function WeaverseNextStudioConnect(props) {
|
|
1031
|
+
(0, react.useEffect)(() => {
|
|
1032
|
+
loadWeaverseNextStudioScript(props.context, { storefrontHostname: props.storefrontHostname });
|
|
1033
|
+
}, [props.context, props.storefrontHostname]);
|
|
1034
|
+
return null;
|
|
1035
|
+
}
|
|
1036
|
+
//#endregion
|
|
1037
|
+
exports.ThemeTextProvider = ThemeTextProvider;
|
|
1038
|
+
exports.TranslationProvider = TranslationProvider;
|
|
1039
|
+
exports.WeaverseNextProvider = WeaverseNextProvider;
|
|
1040
|
+
exports.WeaverseNextRenderer = WeaverseNextRenderer;
|
|
1041
|
+
exports.WeaverseNextRootProvider = WeaverseNextRootProvider;
|
|
1042
|
+
exports.WeaverseNextRuntime = WeaverseNextRuntime;
|
|
1043
|
+
exports.WeaverseNextStudio = WeaverseNextStudio;
|
|
1044
|
+
exports.WeaverseNextStudioBridge = WeaverseNextStudioBridge;
|
|
1045
|
+
exports.WeaverseNextStudioConnect = WeaverseNextStudioConnect;
|
|
1046
|
+
exports.bindWeaverseNextStudioRuntime = bindWeaverseNextStudioRuntime;
|
|
1047
|
+
exports.createWeaverseNextClient = createWeaverseNextClient;
|
|
1048
|
+
exports.createWeaverseNextRuntime = createWeaverseNextRuntime;
|
|
1049
|
+
exports.loadWeaverseNextStudioScript = loadWeaverseNextStudioScript;
|
|
1050
|
+
Object.defineProperty(exports, "useChildInstances", {
|
|
1051
|
+
enumerable: true,
|
|
1052
|
+
get: function() {
|
|
1053
|
+
return _weaverse_react.useChildInstances;
|
|
1054
|
+
}
|
|
1055
|
+
});
|
|
1056
|
+
Object.defineProperty(exports, "useItemInstance", {
|
|
1057
|
+
enumerable: true,
|
|
1058
|
+
get: function() {
|
|
1059
|
+
return _weaverse_react.useItemInstance;
|
|
1060
|
+
}
|
|
1061
|
+
});
|
|
1062
|
+
Object.defineProperty(exports, "useParentInstance", {
|
|
1063
|
+
enumerable: true,
|
|
1064
|
+
get: function() {
|
|
1065
|
+
return _weaverse_react.useParentInstance;
|
|
1066
|
+
}
|
|
1067
|
+
});
|
|
1068
|
+
Object.defineProperty(exports, "useStudioSelection", {
|
|
1069
|
+
enumerable: true,
|
|
1070
|
+
get: function() {
|
|
1071
|
+
return _weaverse_react.useStudioSelection;
|
|
1072
|
+
}
|
|
1073
|
+
});
|
|
1074
|
+
exports.useThemeSettings = useThemeSettings;
|
|
1075
|
+
exports.useThemeText = useThemeText;
|
|
1076
|
+
exports.useTranslation = useTranslation;
|
|
1077
|
+
Object.defineProperty(exports, "useWeaverse", {
|
|
1078
|
+
enumerable: true,
|
|
1079
|
+
get: function() {
|
|
1080
|
+
return _weaverse_react.useWeaverse;
|
|
1081
|
+
}
|
|
1082
|
+
});
|
|
1083
|
+
exports.useWeaverseCommerce = useWeaverseCommerce;
|
|
1084
|
+
exports.useWeaverseNextStudioInternals = useWeaverseNextStudioInternals;
|
|
1085
|
+
exports.useWeaversePageData = useWeaversePageData;
|
|
1086
|
+
exports.useWeaverseRootData = useWeaverseRootData;
|
|
1087
|
+
|
|
1088
|
+
//# sourceMappingURL=next-client-boundary.js.map
|