@weaverse/hydrogen 3.3.0 → 3.4.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.d.mts +16 -41
- package/dist/index.d.ts +16 -41
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -18
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ElementData, ElementSchema, BasicInput as BasicInput$1, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
1
|
+
import { EventEmitter, ElementData, ElementSchema, BasicInput as BasicInput$1, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
2
2
|
export { InputType, PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
3
3
|
import { NavigateFunction } from '@remix-run/react';
|
|
4
|
-
import { createWithCache, I18nBase,
|
|
4
|
+
import { createWithCache, I18nBase, HydrogenContext, HydrogenEnv } from '@shopify/hydrogen';
|
|
5
5
|
import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
6
6
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
7
7
|
import * as react from 'react';
|
|
@@ -20,18 +20,15 @@ declare let STORE_PAGES: {
|
|
|
20
20
|
CUSTOM: string;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
declare class ThemeSettingsStore {
|
|
23
|
+
declare class ThemeSettingsStore extends EventEmitter {
|
|
24
24
|
settings: HydrogenThemeSettings;
|
|
25
|
-
listeners: Set<() => void>;
|
|
26
25
|
countries?: Localizations;
|
|
27
26
|
schema?: HydrogenThemeSchema;
|
|
28
27
|
publicEnv?: PublicEnv;
|
|
29
28
|
constructor(data: RootRouteData['weaverseTheme']);
|
|
30
29
|
updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
|
|
31
|
-
subscribe: (listener: () => void) => (() => void);
|
|
32
30
|
getSnapshot: () => HydrogenThemeSettings;
|
|
33
31
|
getServerSnapshot: () => HydrogenThemeSettings;
|
|
34
|
-
emitChange: () => void;
|
|
35
32
|
}
|
|
36
33
|
declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
|
|
37
34
|
|
|
@@ -136,28 +133,15 @@ type WeaverseLoaderRequestInfo = {
|
|
|
136
133
|
};
|
|
137
134
|
i18n: I18nBase;
|
|
138
135
|
};
|
|
139
|
-
type WeaverseStorefrontData = {
|
|
140
|
-
id?: string;
|
|
141
|
-
rootId: string;
|
|
142
|
-
name: string;
|
|
143
|
-
items: HydrogenComponentData[];
|
|
144
|
-
};
|
|
145
136
|
type HydrogenThemeSettings = {
|
|
146
137
|
[key: string]: any;
|
|
147
138
|
};
|
|
148
|
-
type HydrogenProjectConfig = {
|
|
149
|
-
theme: HydrogenThemeSettings;
|
|
150
|
-
};
|
|
151
139
|
type HydrogenProjectType = {
|
|
152
140
|
id: string;
|
|
153
141
|
weaverseShopId: string;
|
|
154
142
|
name: string;
|
|
155
143
|
[key: string]: any;
|
|
156
144
|
};
|
|
157
|
-
type WeaverseThemeConfigs = {
|
|
158
|
-
schema: HydrogenThemeSchema;
|
|
159
|
-
countries: Localizations;
|
|
160
|
-
};
|
|
161
145
|
type WeaverseInternal = {
|
|
162
146
|
pageAssignment: HydrogenPageAssignment;
|
|
163
147
|
project: HydrogenProjectType;
|
|
@@ -271,29 +255,12 @@ type FetchProjectPayload = {
|
|
|
271
255
|
pageAssignment: HydrogenPageAssignment;
|
|
272
256
|
error?: string;
|
|
273
257
|
};
|
|
274
|
-
type
|
|
275
|
-
WEAVERSE_PROJECT_ID: string;
|
|
276
|
-
WEAVERSE_API_KEY: string;
|
|
277
|
-
WEAVERSE_HOST?: string;
|
|
278
|
-
PUBLIC_STORE_DOMAIN?: string;
|
|
279
|
-
PUBLIC_STOREFRONT_API_TOKEN?: string;
|
|
280
|
-
SESSION_SECRET?: string;
|
|
281
|
-
PRIVATE_STOREFRONT_API_TOKEN: string;
|
|
282
|
-
PUBLIC_STOREFRONT_ID: string;
|
|
283
|
-
PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string;
|
|
284
|
-
PUBLIC_CUSTOMER_ACCOUNT_API_URL: string;
|
|
285
|
-
};
|
|
286
|
-
type CreateWeaverseClientArgs = {
|
|
287
|
-
request: Request;
|
|
288
|
-
cache: Cache;
|
|
289
|
-
waitUntil: ExecutionContext['waitUntil'];
|
|
290
|
-
env: HydrogenThemeEnv;
|
|
291
|
-
storefront: Storefront;
|
|
292
|
-
};
|
|
293
|
-
type WeaverseClientArgs = CreateWeaverseClientArgs & {
|
|
258
|
+
type WeaverseClientArgs = HydrogenContext & {
|
|
294
259
|
components: HydrogenComponent[];
|
|
295
260
|
countries?: Localizations;
|
|
296
261
|
themeSchema: HydrogenThemeSchema;
|
|
262
|
+
request: Request;
|
|
263
|
+
cache: Cache;
|
|
297
264
|
};
|
|
298
265
|
type FetchWithCacheOptions = RequestInit & {
|
|
299
266
|
strategy?: AllCacheOptions;
|
|
@@ -311,6 +278,7 @@ type WeaverseProduct = WeaverseResourcePickerData;
|
|
|
311
278
|
type WeaverseCollection = WeaverseResourcePickerData;
|
|
312
279
|
type WeaverseBlog = WeaverseResourcePickerData;
|
|
313
280
|
type WeaverseArticle = WeaverseResourcePickerData;
|
|
281
|
+
type WeaverseMetaObject = WeaverseResourcePickerData;
|
|
314
282
|
declare global {
|
|
315
283
|
interface Window {
|
|
316
284
|
__weaverse: WeaverseHydrogen;
|
|
@@ -328,12 +296,19 @@ declare module '@shopify/remix-oxygen' {
|
|
|
328
296
|
weaverse: WeaverseClient;
|
|
329
297
|
}
|
|
330
298
|
}
|
|
299
|
+
declare module '@shopify/hydrogen' {
|
|
300
|
+
interface HydrogenEnv {
|
|
301
|
+
WEAVERSE_PROJECT_ID: string;
|
|
302
|
+
WEAVERSE_HOST: string;
|
|
303
|
+
WEAVERSE_API_KEY: string;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
331
306
|
|
|
332
307
|
declare let WeaverseHydrogenRoot: react.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => react_jsx_runtime.JSX.Element>;
|
|
333
308
|
declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
|
|
334
309
|
|
|
335
310
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
336
|
-
declare function getWeaverseConfigs(request: Request, env:
|
|
311
|
+
declare function getWeaverseConfigs(request: Request, env: HydrogenEnv): WeaverseProjectConfigs;
|
|
337
312
|
declare function generateDataFromSchema({ inspector, }: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
|
|
338
313
|
/**
|
|
339
314
|
* Resize an image to the specified dimensions.
|
|
@@ -400,4 +375,4 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
|
|
|
400
375
|
get _schemaData(): Record<string, any>;
|
|
401
376
|
}
|
|
402
377
|
|
|
403
|
-
export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type
|
|
378
|
+
export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectType, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, IMAGES_PLACEHOLDERS, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, generateDataFromSchema, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, resizeShopifyImage, useThemeSettings, withWeaverse };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ElementData, ElementSchema, BasicInput as BasicInput$1, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
1
|
+
import { EventEmitter, ElementData, ElementSchema, BasicInput as BasicInput$1, WeaverseElement, WeaverseCoreParams, WeaverseProjectDataType, WeaverseResourcePickerData, Weaverse, PlatformTypeEnum, WeaverseItemStore } from '@weaverse/react';
|
|
2
2
|
export { InputType, PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
3
3
|
import { NavigateFunction } from '@remix-run/react';
|
|
4
|
-
import { createWithCache, I18nBase,
|
|
4
|
+
import { createWithCache, I18nBase, HydrogenContext, HydrogenEnv } from '@shopify/hydrogen';
|
|
5
5
|
import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
6
6
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
7
7
|
import * as react from 'react';
|
|
@@ -20,18 +20,15 @@ declare let STORE_PAGES: {
|
|
|
20
20
|
CUSTOM: string;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
declare class ThemeSettingsStore {
|
|
23
|
+
declare class ThemeSettingsStore extends EventEmitter {
|
|
24
24
|
settings: HydrogenThemeSettings;
|
|
25
|
-
listeners: Set<() => void>;
|
|
26
25
|
countries?: Localizations;
|
|
27
26
|
schema?: HydrogenThemeSchema;
|
|
28
27
|
publicEnv?: PublicEnv;
|
|
29
28
|
constructor(data: RootRouteData['weaverseTheme']);
|
|
30
29
|
updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
|
|
31
|
-
subscribe: (listener: () => void) => (() => void);
|
|
32
30
|
getSnapshot: () => HydrogenThemeSettings;
|
|
33
31
|
getServerSnapshot: () => HydrogenThemeSettings;
|
|
34
|
-
emitChange: () => void;
|
|
35
32
|
}
|
|
36
33
|
declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
|
|
37
34
|
|
|
@@ -136,28 +133,15 @@ type WeaverseLoaderRequestInfo = {
|
|
|
136
133
|
};
|
|
137
134
|
i18n: I18nBase;
|
|
138
135
|
};
|
|
139
|
-
type WeaverseStorefrontData = {
|
|
140
|
-
id?: string;
|
|
141
|
-
rootId: string;
|
|
142
|
-
name: string;
|
|
143
|
-
items: HydrogenComponentData[];
|
|
144
|
-
};
|
|
145
136
|
type HydrogenThemeSettings = {
|
|
146
137
|
[key: string]: any;
|
|
147
138
|
};
|
|
148
|
-
type HydrogenProjectConfig = {
|
|
149
|
-
theme: HydrogenThemeSettings;
|
|
150
|
-
};
|
|
151
139
|
type HydrogenProjectType = {
|
|
152
140
|
id: string;
|
|
153
141
|
weaverseShopId: string;
|
|
154
142
|
name: string;
|
|
155
143
|
[key: string]: any;
|
|
156
144
|
};
|
|
157
|
-
type WeaverseThemeConfigs = {
|
|
158
|
-
schema: HydrogenThemeSchema;
|
|
159
|
-
countries: Localizations;
|
|
160
|
-
};
|
|
161
145
|
type WeaverseInternal = {
|
|
162
146
|
pageAssignment: HydrogenPageAssignment;
|
|
163
147
|
project: HydrogenProjectType;
|
|
@@ -271,29 +255,12 @@ type FetchProjectPayload = {
|
|
|
271
255
|
pageAssignment: HydrogenPageAssignment;
|
|
272
256
|
error?: string;
|
|
273
257
|
};
|
|
274
|
-
type
|
|
275
|
-
WEAVERSE_PROJECT_ID: string;
|
|
276
|
-
WEAVERSE_API_KEY: string;
|
|
277
|
-
WEAVERSE_HOST?: string;
|
|
278
|
-
PUBLIC_STORE_DOMAIN?: string;
|
|
279
|
-
PUBLIC_STOREFRONT_API_TOKEN?: string;
|
|
280
|
-
SESSION_SECRET?: string;
|
|
281
|
-
PRIVATE_STOREFRONT_API_TOKEN: string;
|
|
282
|
-
PUBLIC_STOREFRONT_ID: string;
|
|
283
|
-
PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string;
|
|
284
|
-
PUBLIC_CUSTOMER_ACCOUNT_API_URL: string;
|
|
285
|
-
};
|
|
286
|
-
type CreateWeaverseClientArgs = {
|
|
287
|
-
request: Request;
|
|
288
|
-
cache: Cache;
|
|
289
|
-
waitUntil: ExecutionContext['waitUntil'];
|
|
290
|
-
env: HydrogenThemeEnv;
|
|
291
|
-
storefront: Storefront;
|
|
292
|
-
};
|
|
293
|
-
type WeaverseClientArgs = CreateWeaverseClientArgs & {
|
|
258
|
+
type WeaverseClientArgs = HydrogenContext & {
|
|
294
259
|
components: HydrogenComponent[];
|
|
295
260
|
countries?: Localizations;
|
|
296
261
|
themeSchema: HydrogenThemeSchema;
|
|
262
|
+
request: Request;
|
|
263
|
+
cache: Cache;
|
|
297
264
|
};
|
|
298
265
|
type FetchWithCacheOptions = RequestInit & {
|
|
299
266
|
strategy?: AllCacheOptions;
|
|
@@ -311,6 +278,7 @@ type WeaverseProduct = WeaverseResourcePickerData;
|
|
|
311
278
|
type WeaverseCollection = WeaverseResourcePickerData;
|
|
312
279
|
type WeaverseBlog = WeaverseResourcePickerData;
|
|
313
280
|
type WeaverseArticle = WeaverseResourcePickerData;
|
|
281
|
+
type WeaverseMetaObject = WeaverseResourcePickerData;
|
|
314
282
|
declare global {
|
|
315
283
|
interface Window {
|
|
316
284
|
__weaverse: WeaverseHydrogen;
|
|
@@ -328,12 +296,19 @@ declare module '@shopify/remix-oxygen' {
|
|
|
328
296
|
weaverse: WeaverseClient;
|
|
329
297
|
}
|
|
330
298
|
}
|
|
299
|
+
declare module '@shopify/hydrogen' {
|
|
300
|
+
interface HydrogenEnv {
|
|
301
|
+
WEAVERSE_PROJECT_ID: string;
|
|
302
|
+
WEAVERSE_HOST: string;
|
|
303
|
+
WEAVERSE_API_KEY: string;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
331
306
|
|
|
332
307
|
declare let WeaverseHydrogenRoot: react.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => react_jsx_runtime.JSX.Element>;
|
|
333
308
|
declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
|
|
334
309
|
|
|
335
310
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
336
|
-
declare function getWeaverseConfigs(request: Request, env:
|
|
311
|
+
declare function getWeaverseConfigs(request: Request, env: HydrogenEnv): WeaverseProjectConfigs;
|
|
337
312
|
declare function generateDataFromSchema({ inspector, }: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
|
|
338
313
|
/**
|
|
339
314
|
* Resize an image to the specified dimensions.
|
|
@@ -400,4 +375,4 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
|
|
|
400
375
|
get _schemaData(): Record<string, any>;
|
|
401
376
|
}
|
|
402
377
|
|
|
403
|
-
export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type
|
|
378
|
+
export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectType, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, IMAGES_PLACEHOLDERS, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, generateDataFromSchema, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, resizeShopifyImage, useThemeSettings, withWeaverse };
|
package/dist/index.js
CHANGED
|
@@ -102,8 +102,8 @@ function resizeShopifyImage(imageURL, size) {
|
|
|
102
102
|
if (size === "original") {
|
|
103
103
|
return imageURL;
|
|
104
104
|
}
|
|
105
|
-
let
|
|
106
|
-
return `${
|
|
105
|
+
let [, path, ext] = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
|
|
106
|
+
return `${path}_${size}.${ext}`;
|
|
107
107
|
} catch (e) {
|
|
108
108
|
return imageURL;
|
|
109
109
|
}
|
|
@@ -127,13 +127,13 @@ var import_react6 = require("react");
|
|
|
127
127
|
var import_react = require("@remix-run/react");
|
|
128
128
|
var import_react2 = require("@weaverse/react");
|
|
129
129
|
var import_react3 = require("react");
|
|
130
|
-
var ThemeSettingsStore = class {
|
|
130
|
+
var ThemeSettingsStore = class extends import_react2.EventEmitter {
|
|
131
131
|
settings = {};
|
|
132
|
-
listeners = /* @__PURE__ */ new Set();
|
|
133
132
|
countries;
|
|
134
133
|
schema;
|
|
135
134
|
publicEnv;
|
|
136
135
|
constructor(data) {
|
|
136
|
+
super();
|
|
137
137
|
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
138
138
|
this.settings = { ...theme };
|
|
139
139
|
this.countries = countries;
|
|
@@ -148,13 +148,7 @@ var ThemeSettingsStore = class {
|
|
|
148
148
|
...this.settings,
|
|
149
149
|
...newSettings
|
|
150
150
|
};
|
|
151
|
-
this.
|
|
152
|
-
};
|
|
153
|
-
subscribe = (listener) => {
|
|
154
|
-
this.listeners.add(listener);
|
|
155
|
-
return () => {
|
|
156
|
-
this.listeners.delete(listener);
|
|
157
|
-
};
|
|
151
|
+
this.emit(this.settings);
|
|
158
152
|
};
|
|
159
153
|
getSnapshot = () => {
|
|
160
154
|
return this.settings;
|
|
@@ -162,11 +156,6 @@ var ThemeSettingsStore = class {
|
|
|
162
156
|
getServerSnapshot = () => {
|
|
163
157
|
return this.settings;
|
|
164
158
|
};
|
|
165
|
-
emitChange = () => {
|
|
166
|
-
for (let listener of this.listeners) {
|
|
167
|
-
listener();
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
159
|
};
|
|
171
160
|
function useThemeSettingsStore() {
|
|
172
161
|
let data = (0, import_react.useRouteLoaderData)("root");
|
|
@@ -207,6 +196,18 @@ function useStudio(weaverse) {
|
|
|
207
196
|
}).catch(console.error);
|
|
208
197
|
}
|
|
209
198
|
}, [pathname, search, navigation.state]);
|
|
199
|
+
usePixel(weaverse);
|
|
200
|
+
}
|
|
201
|
+
function usePixel(context) {
|
|
202
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
203
|
+
(0, import_react6.useEffect)(() => {
|
|
204
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
205
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
206
|
+
let img = new Image();
|
|
207
|
+
img.onload = () => {
|
|
208
|
+
};
|
|
209
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
210
|
+
}, []);
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
// src/Effect.tsx
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return `${matches[1]}_${size}.${matches[2]}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners = new Set<() => void>()\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","import_jsx_runtime","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\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 { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","import_jsx_runtime","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
|
package/dist/index.mjs
CHANGED
|
@@ -77,8 +77,8 @@ function resizeShopifyImage(imageURL, size) {
|
|
|
77
77
|
if (size === "original") {
|
|
78
78
|
return imageURL;
|
|
79
79
|
}
|
|
80
|
-
let
|
|
81
|
-
return `${
|
|
80
|
+
let [, path, ext] = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
|
|
81
|
+
return `${path}_${size}.${ext}`;
|
|
82
82
|
} catch (e) {
|
|
83
83
|
return imageURL;
|
|
84
84
|
}
|
|
@@ -105,15 +105,15 @@ import { useEffect } from "react";
|
|
|
105
105
|
|
|
106
106
|
// src/hooks/use-theme-settings.ts
|
|
107
107
|
import { useRouteLoaderData } from "@remix-run/react";
|
|
108
|
-
import { isBrowser } from "@weaverse/react";
|
|
108
|
+
import { isBrowser, EventEmitter } from "@weaverse/react";
|
|
109
109
|
import { useSyncExternalStore } from "react";
|
|
110
|
-
var ThemeSettingsStore = class {
|
|
110
|
+
var ThemeSettingsStore = class extends EventEmitter {
|
|
111
111
|
settings = {};
|
|
112
|
-
listeners = /* @__PURE__ */ new Set();
|
|
113
112
|
countries;
|
|
114
113
|
schema;
|
|
115
114
|
publicEnv;
|
|
116
115
|
constructor(data) {
|
|
116
|
+
super();
|
|
117
117
|
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
118
118
|
this.settings = { ...theme };
|
|
119
119
|
this.countries = countries;
|
|
@@ -128,13 +128,7 @@ var ThemeSettingsStore = class {
|
|
|
128
128
|
...this.settings,
|
|
129
129
|
...newSettings
|
|
130
130
|
};
|
|
131
|
-
this.
|
|
132
|
-
};
|
|
133
|
-
subscribe = (listener) => {
|
|
134
|
-
this.listeners.add(listener);
|
|
135
|
-
return () => {
|
|
136
|
-
this.listeners.delete(listener);
|
|
137
|
-
};
|
|
131
|
+
this.emit(this.settings);
|
|
138
132
|
};
|
|
139
133
|
getSnapshot = () => {
|
|
140
134
|
return this.settings;
|
|
@@ -142,11 +136,6 @@ var ThemeSettingsStore = class {
|
|
|
142
136
|
getServerSnapshot = () => {
|
|
143
137
|
return this.settings;
|
|
144
138
|
};
|
|
145
|
-
emitChange = () => {
|
|
146
|
-
for (let listener of this.listeners) {
|
|
147
|
-
listener();
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
139
|
};
|
|
151
140
|
function useThemeSettingsStore() {
|
|
152
141
|
let data = useRouteLoaderData("root");
|
|
@@ -187,6 +176,18 @@ function useStudio(weaverse) {
|
|
|
187
176
|
}).catch(console.error);
|
|
188
177
|
}
|
|
189
178
|
}, [pathname, search, navigation.state]);
|
|
179
|
+
usePixel(weaverse);
|
|
180
|
+
}
|
|
181
|
+
function usePixel(context) {
|
|
182
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
185
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
186
|
+
let img = new Image();
|
|
187
|
+
img.onload = () => {
|
|
188
|
+
};
|
|
189
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
190
|
+
}, []);
|
|
190
191
|
}
|
|
191
192
|
|
|
192
193
|
// src/Effect.tsx
|
|
@@ -316,7 +317,10 @@ function FallbackError({ error }) {
|
|
|
316
317
|
}
|
|
317
318
|
|
|
318
319
|
// src/weaverse-client.ts
|
|
319
|
-
import {
|
|
320
|
+
import {
|
|
321
|
+
createWithCache,
|
|
322
|
+
generateCacheControlHeader
|
|
323
|
+
} from "@shopify/hydrogen";
|
|
320
324
|
var WeaverseClient = class {
|
|
321
325
|
API = "api/public";
|
|
322
326
|
basePageConfigs;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return `${matches[1]}_${size}.${matches[2]}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners = new Set<() => void>()\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":";;;;;;;AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,aAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACFA,SAAS,kBACd,SACA;AACA,MAAI,MAAM,IAAI,IAAI,QAAQ,GAAG;AAC7B,SAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,CAAC,EAAE;AAAA,IAC5C,CAAC,GAA4B,CAAC,GAAG,CAAC,MAAM;AACtC,QAAE,CAAC,IAAI,MAAM,SAAS,OAAO,MAAM,UAAU,QAAQ;AACrD,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBACd,SACA,KACwB;AACxB,MAAI,UAAU,kBAAyC,OAAO;AAC9D,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAAO,CAAC;AACZ,MAAI,iBAAkB,OAAO,YAAY,eAAe,QAAQ,OAAQ,CAAC;AACzE,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,SAAO;AAAA,IACL,WACE,qBACA,uBACA,eAAe,uBACf;AAAA,IACF,cACE,gBACA,iBACA,eAAe,iBACf;AAAA,IACF,gBACE,kBACA,oBACA,eAAe,oBACf;AAAA,IACF,iBAAiB,mBAAmB;AAAA,IACpC,cAAc,gBAAgB;AAAA,IAC9B,WAAW;AAAA,MACT,qBAAqB,uBAAuB;AAAA,MAC5C,6BAA6B,+BAA+B;AAAA,IAC9D;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AAAA,EACrC;AACF,GAAkD;AAChD,MAAI,OAA4B,CAAC;AACjC,MAAI,WAAW;AACb,aAAS,SAAS,WAAW;AAC3B,eAAS,SAAS,MAAM,QAAQ;AAC9B,YAAI,EAAE,MAAM,aAAa,IAAI;AAC7B,YAAI,QAAQ,iBAAiB,QAAQ,iBAAiB,QAAW;AAC/D,eAAK,IAAI,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAaO,SAAS,mBAAmB,UAAkB,MAAsB;AACzE,MAAI;AACF,QAAI,SAAS,YAAY;AACvB,aAAO;AAAA,IACT;AACA,QAAI,UAAU,SAAS,MAAM,2BAA2B;AAExD,WAAO,GAAG,QAAQ,CAAC,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC;AAAA,EAC5C,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;;;ACzGA,SAAS,OAAO,qBAAqB;AACrC,SAAS,oBAAoB;AAC7B,SAAuC,UAAU,QAAAC,aAAY;AAC7D,SAAS,qBAAqB;;;ACH9B,SAAS,YAAY;;;ACArB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;;;ACP1B,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AAS9B,IAAM,qBAAN,MAAyB;AAAA,EAC9B,WAAkC,CAAC;AAAA,EACnC,YAAY,oBAAI,IAAgB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAsC;AAChD,QAAI,EAAE,OAAO,WAAW,QAAAC,SAAQ,UAAU,IAAI,QAAQ,CAAC;AACvD,SAAK,WAAW,EAAE,GAAG,MAAM;AAC3B,SAAK,YAAY;AACjB,SAAK,SAASA;AACd,SAAK,YAAY;AACjB,QAAI,WAAW;AACb,aAAO,+BAA+B;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,sBAAsB,CAAC,gBAAuC;AAC5D,SAAK,WAAW;AAAA,MACd,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACL;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,YAAY,CAAC,aAAuC;AAClD,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM;AACX,WAAK,UAAU,OAAO,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,cAAc,MAAM;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,MAAM;AACjB,aAAS,YAAY,KAAK,WAAW;AACnC,eAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB;AACtC,MAAI,OAAO,mBAAmB,MAAM;AACpC,MAAI,aAAa,OAAO,8BAA8B;AACpD,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,IAAI,mBAAmB,MAAM,aAAa;AACnD;AAEO,SAAS,mBAA8C;AAC5D,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,WAAW;AAAA,IACb,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AACA,SAAO;AACT;;;ADhEO,SAAS,UAAU,UAA4B;AACpD,MAAI,EAAE,WAAW,IAAI,eAAe;AACpC,MAAI,aAAa,cAAc;AAC/B,MAAI,EAAE,UAAU,OAAO,IAAI,YAAY;AACvC,MAAI,WAAW,YAAY;AAC3B,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,EAAE,cAAc,cAAc,gBAAgB,IAAI;AAGtD,YAAU,MAAM;AACd,QAAI,WAAW,UAAU,UAAU,cAAc;AAC/C,eAAS,WAAW;AAAA,QAClB,GAAG,SAAS;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,YAAY,GAAG,YAAY,sCAAsC,eAAe;AACpF,iBAAW,SAAS,EACjB,KAAK,MAAM;AACV,eAAO,gBAAgB,KAAK,QAAQ;AAAA,MACtC,CAAC,EACA,MAAM,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,WAAW,KAAK,CAAC;AACzC;;;ADhCO,IAAI,iBAAiB;AAAA,EAC1B,CAAC,EAAE,QAAQ,MAAqC;AAC9C,cAAU,OAAO;AACjB,WAAO;AAAA,EACT;AACF;;;AGTA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,qBAAqB;;;ACD9B;AAAA;AAAA;AAAA;AAAA;AAAA,SAAgB,kBAAuC;AAcnD;AAPJ,IAAI,OAAO,WAGT,CAAC,OAAO,QAAQ;AAChB,MAAI,EAAE,UAAU,yBAAyB,GAAG,KAAK,IAAI;AAErD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,MAEA,yBAAyB,WAAW,SAAY;AAAA;AAAA,EAClD;AAEJ,CAAC;AAED,IAAO,eAAQ;AAER,IAAI,SAAkC;AAAA,EAC3C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW,CAAC;AACd;;;AC3BO,IAAI,oBAAyC,CAAC,YAAI;;;AFOzD,SAAS,mBAAmB,YAAiC;AAC3D,aAAW,QAAQ,YAAY;AAC7B,UAAM,QAAQ,QACZ,iBAAiB,gBAAgB;AAAA,MAC/B,MAAM,MAAM,OAAO;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACL;AACF;AAEA,SAAS,6BACP,QACkB;AAClB,MAAIC,YAAW;AACb,WAAO,cAAc,OAAO,eAAe,CAAC;AAC5C,QAAI,WAAW,OAAO,YAAY,OAAO,MAAM;AAC/C,QAAI,CAAC,UAAU;AACb,iBAAW,IAAI,iBAAiB,MAAM;AACtC,aAAO,YAAY,OAAO,MAAM,IAAI;AAAA,IACtC;AACA,QAAI,UAAU,cAAc;AAC1B,eAAS,cAAc,OAAO;AAC9B,aAAO,gBAAgB,cAAc,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AACA,SAAO,IAAI,iBAAiB,MAAM;AACpC;AAEO,SAAS,uBACd,cACA,YACA;AACA,MAAI,EAAE,MAAM,SAAS,SAAS,eAAe,IAAI,gBAAgB,CAAC;AAClE,qBAAmB,UAAU;AAC7B,qBAAmB,iBAAiB;AACpC,SAAO,6BAA6B;AAAA,IAClC,GAAG;AAAA,IACH,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,UAAU,EAAE,SAAS,eAAe;AAAA,EACtC,CAAC;AACH;AAcO,IAAI,wBAAwB;AAAA,EACjC;AACF;AACA,sBAAsB,cAAc;;;AJvClB,SAwBd,UAxBc,OAAAC,MAwBd,YAxBc;AAjBX,IAAI,uBAAuBC;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,iBAAiB;AAAA,IACjC;AAAA,EACF,MAAiC;AAC/B,QAAI,aAAa,cAAc;AAG/B,QAAI,OAAO,YAAY;AAEvB,QAAI,MAAM;AACR,UAAI,gBAAgB,SAAS;AAC3B,eACE,gBAAAD,KAAC,iBAAc,gBAAgB,gBAC7B,0BAAAA,KAAC,YACC,0BAAAA,KAAC,SAAM,SAAS,MACb,WAAC,iBACA,gBAAAA,KAAC,cAAW,MAAM,cAAc,YAAwB,GAE5D,GACF,GACF;AAAA,MAEJ;AACA,aAAO,gBAAAA,KAAC,cAAW,MAAY,YAAwB;AAAA,IACzD;AACA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,SAAS,6CAA6C;AAAA;AAAA,IACjE;AAAA,EAEJ;AACF;AAEA,SAAS,WAAW,OAGjB;AACD,MAAI,EAAE,MAAM,WAAW,IAAI;AAC3B,MAAI,WAAW,uBAAuB,MAAM,UAAU;AACtD,SACE,iCACE;AAAA,oBAAAA,KAAC,gBAAa,SAAS,UAAU;AAAA,IACjC,gBAAAA,KAAC,kBAAe,SAAS,UAAU;AAAA,KACrC;AAEJ;AAEO,SAAS,aAAa,WAA+B;AAC1D,SAAO,CAAC,UAAmC;AACzC,QAAI,EAAE,SAAS,IAAI,sBAAsB;AACzC,WACE,gBAAAA,KAAC,sBAAsB,UAAtB,EAA+B,OAAO,UACrC,0BAAAA,KAAC,aAAW,GAAG,OAAO,GACxB;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc,EAAE,MAAM,GAAqC;AAClE,SAAO,gBAAAA,KAAC,SAAK,iBAAO,WAAW,gCAA+B;AAChE;;;AO7EA,SAAS,iBAAiB,kCAAkC;AAoBrD,IAAM,iBAAN,MAAqB;AAAA,EAC1B,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAA0B;AACpC,QAAI;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,YAAY,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAErD,SAAK,UAAU,mBAAmB,SAAS,GAAG;AAC9C,SAAK,kBAAkB;AAAA,MACrB,WAAW,KAAK,QAAQ;AAAA,MACxB,cAAc,KAAK,QAAQ;AAAA,MAC3B,gBAAgB,KAAK,QAAQ;AAAA,MAC7B,iBAAiB,KAAK,QAAQ;AAAA,MAC9B,cAAc,KAAK,QAAQ;AAAA,IAC7B;AACA,SAAK,sBAAsB;AAAA,MACzB,cAAc,KAAK,QAAQ;AAAA,MAC3B,MAAM,WAAW;AAAA,MACjB,WAAW,KAAK,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,iBAAiB,OACf,KACA,UAAiC,CAAC,MAC/B;AACH,QAAI,WAAW,CAAC,KAAK,QAAQ,IAAI;AACjC,QAAI;AAAA,MACF,WAAW,KAAK,WAAW,YAAY;AAAA,QACrC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,MACxB,CAAC;AAAA,MACD,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,KAAK,QAAQ,cAAc;AAC7B,UAAI;AACF,cAAME,OAAM,MAAM,MAAM,KAAK,OAAO;AACpC,eAAO,MAAMA,KAAI,KAAQ;AAAA,MAC3B,SAAS,KAAK;AACZ,cAAM,IAAI,MAAM,6BAA6B,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACpE;AAAA,IACF;AACA,QAAI,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY;AACvD,UAAI,WAAW,MAAM,MAAM,KAAK;AAAA,QAC9B,GAAG;AAAA,QACH,SAAS;AAAA,UACP,iBAAiB,2BAA2B,QAAQ;AAAA,UACpD,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,YAAI,QAAQ,MAAM,SAAS,KAAK;AAChC,YAAI,EAAE,QAAQ,WAAW,IAAI;AAC7B,cAAM,IAAI,MAAM,GAAG,MAAM,IAAI,UAAU,IAAI,KAAK,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,MACtE;AACA,aAAO,MAAM,SAAS,KAAQ;AAAA,IAChC,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,OAAO,aAA+B;AACxD,QAAI;AACF,UAAI,EAAE,KAAK,QAAQ,IAAI;AACvB,UAAI,EAAE,cAAc,WAAW,aAAa,IAAI;AAChD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,GAAG;AAChC,UAAI;AACJ,UAAI,OAAO,KAAK,UAAU,EAAE,cAAc,UAAU,CAAC;AACrD,UAAI,cAAc;AAChB,cAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAE;AAAA,UAAK,CAACA,SACrDA,KAAI,KAAK;AAAA,QACX;AAAA,MACF,OAAO;AACL,cAAM,MAAM,KAAK,eAAe,KAAK,EAAE,QAAQ,QAAQ,UAAU,KAAK,CAAC;AAAA,MACzE;AACA,UAAI,OAAY,OAAO,CAAC;AACxB,UAAI,MAAM,SAAS,KAAK,aAAa,WAAW;AAC9C,YAAI,uBAAuB,CAAC;AAC5B,YAAI,KAAK,aAAa;AACpB,iCAAuB,uBAAuB,KAAK,WAAW;AAAA,QAChE;AACA,aAAK,QAAQ;AAAA,UACX,GAAG;AAAA,UACH,GAAG,KAAK;AAAA,QACV;AAAA,MACF;AACA,UAAI,KAAK,QAAQ,cAAc;AAC7B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK,aAAa,CAAC;AAAA,UAC9B,WAAW,KAAK,QAAQ;AAAA,QAC1B;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,GAAG;AACV,cAAQ,MAAM,sCAAiC,CAAC;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,uBAAuB,CAAC,YAAsC;AAC5D,QAAI,SAAS,OAAO,WAAW;AAC/B,WAAO;AAAA,MACL,IAAI,iBAAiB,KAAK,IAAI,CAAC;AAAA,MAC/B;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM,EAAE,yBAAyB,EAAE,QAAQ,QAAQ,EAAE;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,OACT,SAAyB,CAAC,MACa;AACvC,QAAI;AACF,UAAI,EAAE,SAAS,YAAY,qBAAqB,gBAAgB,IAAI;AACpE,UAAI,EAAE,WAAW,cAAc,aAAa,IAAI,KAAK;AAErD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,UAAI,EAAE,UAAU,GAAG,eAAe,IAAI;AACtC,UAAI,OAAgC;AAAA,QAClC,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,KAAK,QAAQ;AAAA,MACf;AAEA,UAAI,UAAuB;AAAA,QACzB,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,KAAK,GAAG;AACrC,UAAI;AAEJ,UAAI,cAAc;AAChB,kBAAU,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,MAC9D,OAAO;AACL,kBAAU,MAAM,KAAK,eAAe,KAAK;AAAA,UACvC,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,SAAS,OAAO;AAClB,cAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAChC;AACA,UAAI,EAAE,MAAM,SAAS,eAAe,IAAI;AACxC,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,MAChE;AACA,UAAI,CAAC,MAAM;AACT,eAAO,KAAK,qBAAqB,kCAAkC;AAAA,MACrE;AACA,UAAI,MAAM,OAAO;AACf,YAAI,QAAQ,KAAK;AACjB,aAAK,QAAQ,MAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,mBAAmB,CAAC;AAAA,MACpE;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,UACP,GAAG;AAAA,UACH,aAAa;AAAA,YACX,MAAM,WAAW;AAAA;AAAA,YAEjB,SAAS,kBAAyC,OAAO;AAAA,YACzD,UAAU,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,YAC/B,QAAQ,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AAEV,cAAQ,MAAM,4BAAuB,CAAC;AACtC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,sBAAsB,OAAO,SAAgC;AAC3D,QAAI,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;AAC9B,QAAI,YAAY,KAAK,WAAW,KAAK,CAAC,EAAE,QAAAC,QAAO,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAI,SAAS,WAAW;AACxB,QAAI,OAAO,WAAW,YAAY;AAChC,UAAI;AACF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,YAAY,MAAM,QAAQ;AAAA,YACxB,OAAO;AAAA,cACL,MAAM,EAAE,GAAG,uBAAuB,UAAU,MAAM,GAAG,GAAG,KAAK;AAAA,cAC7D,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,KAAK,kCAA6B,MAAM,IAAI,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;ACtQA,SAAS,6BAA6B,0CAA0C;AAGzE,SAAS,0BACd,SACuB;AACvB,MAAI,UAAU,mCAAmC,OAAO;AACxD,SAAO,QAAQ;AAAA,IACb,CAAC,EAAE,KAAK,MAAM,SAAS,kBAAkB,CAAC,KAAK,WAAW,UAAU;AAAA,EACtE;AACF;;;ACVO,IAAI,sBAAsB;AAAA,EAC/B,YACE;AAAA,EACF,YACE;AAAA,EACF,OACE;AAAA,EACF,UACE;AAAA,EACF,UACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AACJ;;;AXtBO,IAAM,mBAAN,cAA+B,SAAS;AAAA,EAC7C,eAAiC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EAGA,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,YAAY,QAAgC;AAC1C,QAAI,EAAE,UAAU,QAAQ,aAAa,GAAG,WAAW,IAAI;AACvD,UAAM,EAAE,GAAG,WAAW,CAAC;AACvB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AACF;AAEO,IAAM,uBAAN,cAAmC,kBAAkB;AAAA,EAG1D,YAAY,aAAoC,UAA4B;AAC1E,UAAM,aAAa,QAAQ;AAC3B,QAAI,EAAE,MAAM,GAAG,KAAK,IAAI;AACxB,WAAO,OAAO,KAAK,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,EACzD;AAAA,EAEA,IAAI,UAA2B;AAC7B,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAI,cAAc;AAChB,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,uBAAuB,KAAK,QAAQ,MAAM;AAAA,IACnD;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,kBAAkB;","names":["isBrowser","memo","schema","isBrowser","isBrowser","jsx","memo","res","schema"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\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 { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":";;;;;;;AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,aAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACFA,SAAS,kBACd,SACA;AACA,MAAI,MAAM,IAAI,IAAI,QAAQ,GAAG;AAC7B,SAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,CAAC,EAAE;AAAA,IAC5C,CAAC,GAA4B,CAAC,GAAG,CAAC,MAAM;AACtC,QAAE,CAAC,IAAI,MAAM,SAAS,OAAO,MAAM,UAAU,QAAQ;AACrD,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBACd,SACA,KACwB;AACxB,MAAI,UAAU,kBAAyC,OAAO;AAC9D,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAAO,CAAC;AACZ,MAAI,iBAAkB,OAAO,YAAY,eAAe,QAAQ,OAAQ,CAAC;AACzE,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,SAAO;AAAA,IACL,WACE,qBACA,uBACA,eAAe,uBACf;AAAA,IACF,cACE,gBACA,iBACA,eAAe,iBACf;AAAA,IACF,gBACE,kBACA,oBACA,eAAe,oBACf;AAAA,IACF,iBAAiB,mBAAmB;AAAA,IACpC,cAAc,gBAAgB;AAAA,IAC9B,WAAW;AAAA,MACT,qBAAqB,uBAAuB;AAAA,MAC5C,6BAA6B,+BAA+B;AAAA,IAC9D;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AAAA,EACrC;AACF,GAAkD;AAChD,MAAI,OAA4B,CAAC;AACjC,MAAI,WAAW;AACb,aAAS,SAAS,WAAW;AAC3B,eAAS,SAAS,MAAM,QAAQ;AAC9B,YAAI,EAAE,MAAM,aAAa,IAAI;AAC7B,YAAI,QAAQ,iBAAiB,QAAQ,iBAAiB,QAAW;AAC/D,eAAK,IAAI,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAaO,SAAS,mBAAmB,UAAkB,MAAsB;AACzE,MAAI;AACF,QAAI,SAAS,YAAY;AACvB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,EAAE,MAAM,GAAG,IAAI,SAAS,MAAM,2BAA2B;AAC9D,WAAO,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA,EAC/B,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;;;ACxGA,SAAS,OAAO,qBAAqB;AACrC,SAAS,oBAAoB;AAC7B,SAAuC,UAAU,QAAAC,aAAY;AAC7D,SAAS,qBAAqB;;;ACH9B,SAAS,YAAY;;;ACArB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;;;ACP1B,SAAS,0BAA0B;AACnC,SAAS,WAAW,oBAAoB;AACxC,SAAS,4BAA4B;AAS9B,IAAM,qBAAN,cAAiC,aAAY;AAAA,EAClD,WAAkC,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAsC;AAChD,UAAM;AACN,QAAI,EAAE,OAAO,WAAW,QAAAC,SAAQ,UAAU,IAAI,QAAQ,CAAC;AACvD,SAAK,WAAW,EAAE,GAAG,MAAM;AAC3B,SAAK,YAAY;AACjB,SAAK,SAASA;AACd,SAAK,YAAY;AACjB,QAAI,WAAW;AACb,aAAO,+BAA+B;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,sBAAsB,CAAC,gBAAuC;AAC5D,SAAK,WAAW;AAAA,MACd,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACL;AACA,SAAK,KAAK,KAAK,QAAQ;AAAA,EACzB;AAAA,EAGA,cAAc,MAAM;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEF;AAEO,SAAS,wBAAwB;AACtC,MAAI,OAAO,mBAAmB,MAAM;AACpC,MAAI,aAAa,OAAO,8BAA8B;AACpD,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,IAAI,mBAAmB,MAAM,aAAa;AACnD;AAEO,SAAS,mBAA8C;AAC5D,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,WAAW;AAAA,IACb,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AACA,SAAO;AACT;;;ADrDO,SAAS,UAAU,UAA4B;AACpD,MAAI,EAAE,WAAW,IAAI,eAAe;AACpC,MAAI,aAAa,cAAc;AAC/B,MAAI,EAAE,UAAU,OAAO,IAAI,YAAY;AACvC,MAAI,WAAW,YAAY;AAC3B,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,EAAE,cAAc,cAAc,gBAAgB,IAAI;AAGtD,YAAU,MAAM;AACd,QAAI,WAAW,UAAU,UAAU,cAAc;AAC/C,eAAS,WAAW;AAAA,QAClB,GAAG,SAAS;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,YAAY,GAAG,YAAY,sCAAsC,eAAe;AACpF,iBAAW,SAAS,EACjB,KAAK,MAAM;AACV,eAAO,gBAAgB,KAAK,QAAQ;AAAA,MACtC,CAAC,EACA,MAAM,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,WAAW,KAAK,CAAC;AACvC,WAAS,QAAQ;AACnB;AAGO,SAAS,SAAS,SAA2B;AAClD,MAAI,EAAE,WAAW,QAAQ,cAAc,aAAa,IAAI;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,CAAC,UAAU,CAAC,gBAAgB,aAAc;AAC5D,QAAI,MAAM,GAAG,YAAY;AACzB,QAAI,MAAM,IAAI,MAAM;AACpB,QAAI,SAAS,MAAM;AAAA,IAAC;AACpB,QAAI,MAAM,GAAG,GAAG,cAAc,SAAS,WAAW,MAAM;AAAA,EAC1D,GAAG,CAAC,CAAC;AACP;;;AD9CO,IAAI,iBAAiB;AAAA,EAC1B,CAAC,EAAE,QAAQ,MAAqC;AAC9C,cAAU,OAAO;AACjB,WAAO;AAAA,EACT;AACF;;;AGTA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,qBAAqB;;;ACD9B;AAAA;AAAA;AAAA;AAAA;AAAA,SAAgB,kBAAuC;AAcnD;AAPJ,IAAI,OAAO,WAGT,CAAC,OAAO,QAAQ;AAChB,MAAI,EAAE,UAAU,yBAAyB,GAAG,KAAK,IAAI;AAErD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,MAEA,yBAAyB,WAAW,SAAY;AAAA;AAAA,EAClD;AAEJ,CAAC;AAED,IAAO,eAAQ;AAER,IAAI,SAAkC;AAAA,EAC3C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW,CAAC;AACd;;;AC3BO,IAAI,oBAAyC,CAAC,YAAI;;;AFOzD,SAAS,mBAAmB,YAAiC;AAC3D,aAAW,QAAQ,YAAY;AAC7B,UAAM,QAAQ,QACZ,iBAAiB,gBAAgB;AAAA,MAC/B,MAAM,MAAM,OAAO;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACL;AACF;AAEA,SAAS,6BACP,QACkB;AAClB,MAAIC,YAAW;AACb,WAAO,cAAc,OAAO,eAAe,CAAC;AAC5C,QAAI,WAAW,OAAO,YAAY,OAAO,MAAM;AAC/C,QAAI,CAAC,UAAU;AACb,iBAAW,IAAI,iBAAiB,MAAM;AACtC,aAAO,YAAY,OAAO,MAAM,IAAI;AAAA,IACtC;AACA,QAAI,UAAU,cAAc;AAC1B,eAAS,cAAc,OAAO;AAC9B,aAAO,gBAAgB,cAAc,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AACA,SAAO,IAAI,iBAAiB,MAAM;AACpC;AAEO,SAAS,uBACd,cACA,YACA;AACA,MAAI,EAAE,MAAM,SAAS,SAAS,eAAe,IAAI,gBAAgB,CAAC;AAClE,qBAAmB,UAAU;AAC7B,qBAAmB,iBAAiB;AACpC,SAAO,6BAA6B;AAAA,IAClC,GAAG;AAAA,IACH,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,UAAU,EAAE,SAAS,eAAe;AAAA,EACtC,CAAC;AACH;AAcO,IAAI,wBAAwB;AAAA,EACjC;AACF;AACA,sBAAsB,cAAc;;;AJvClB,SAwBd,UAxBc,OAAAC,MAwBd,YAxBc;AAjBX,IAAI,uBAAuBC;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,iBAAiB;AAAA,IACjC;AAAA,EACF,MAAiC;AAC/B,QAAI,aAAa,cAAc;AAG/B,QAAI,OAAO,YAAY;AAEvB,QAAI,MAAM;AACR,UAAI,gBAAgB,SAAS;AAC3B,eACE,gBAAAD,KAAC,iBAAc,gBAAgB,gBAC7B,0BAAAA,KAAC,YACC,0BAAAA,KAAC,SAAM,SAAS,MACb,WAAC,iBACA,gBAAAA,KAAC,cAAW,MAAM,cAAc,YAAwB,GAE5D,GACF,GACF;AAAA,MAEJ;AACA,aAAO,gBAAAA,KAAC,cAAW,MAAY,YAAwB;AAAA,IACzD;AACA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,SAAS,6CAA6C;AAAA;AAAA,IACjE;AAAA,EAEJ;AACF;AAEA,SAAS,WAAW,OAGjB;AACD,MAAI,EAAE,MAAM,WAAW,IAAI;AAC3B,MAAI,WAAW,uBAAuB,MAAM,UAAU;AACtD,SACE,iCACE;AAAA,oBAAAA,KAAC,gBAAa,SAAS,UAAU;AAAA,IACjC,gBAAAA,KAAC,kBAAe,SAAS,UAAU;AAAA,KACrC;AAEJ;AAEO,SAAS,aAAa,WAA+B;AAC1D,SAAO,CAAC,UAAmC;AACzC,QAAI,EAAE,SAAS,IAAI,sBAAsB;AACzC,WACE,gBAAAA,KAAC,sBAAsB,UAAtB,EAA+B,OAAO,UACrC,0BAAAA,KAAC,aAAW,GAAG,OAAO,GACxB;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc,EAAE,MAAM,GAAqC;AAClE,SAAO,gBAAAA,KAAC,SAAK,iBAAO,WAAW,gCAA+B;AAChE;;;AO7EA;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAoBA,IAAM,iBAAN,MAAqB;AAAA,EAC1B,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAA0B;AACpC,QAAI;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,YAAY,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAErD,SAAK,UAAU,mBAAmB,SAAS,GAAkB;AAE7D,SAAK,kBAAkB;AAAA,MACrB,WAAW,KAAK,QAAQ;AAAA,MACxB,cAAc,KAAK,QAAQ;AAAA,MAC3B,gBAAgB,KAAK,QAAQ;AAAA,MAC7B,iBAAiB,KAAK,QAAQ;AAAA,MAC9B,cAAc,KAAK,QAAQ;AAAA,IAC7B;AACA,SAAK,sBAAsB;AAAA,MACzB,cAAc,KAAK,QAAQ;AAAA,MAC3B,MAAM,WAAW;AAAA,MACjB,WAAW,KAAK,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,iBAAiB,OACf,KACA,UAAiC,CAAC,MAC/B;AACH,QAAI,WAAW,CAAC,KAAK,QAAQ,IAAI;AACjC,QAAI;AAAA,MACF,WAAW,KAAK,WAAW,YAAY;AAAA,QACrC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,MACxB,CAAC;AAAA,MACD,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,KAAK,QAAQ,cAAc;AAC7B,UAAI;AACF,cAAME,OAAM,MAAM,MAAM,KAAK,OAAO;AACpC,eAAO,MAAMA,KAAI,KAAQ;AAAA,MAC3B,SAAS,KAAK;AACZ,cAAM,IAAI,MAAM,6BAA6B,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACpE;AAAA,IACF;AACA,QAAI,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY;AACvD,UAAI,WAAW,MAAM,MAAM,KAAK;AAAA,QAC9B,GAAG;AAAA,QACH,SAAS;AAAA,UACP,iBAAiB,2BAA2B,QAAQ;AAAA,UACpD,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,YAAI,QAAQ,MAAM,SAAS,KAAK;AAChC,YAAI,EAAE,QAAQ,WAAW,IAAI;AAC7B,cAAM,IAAI,MAAM,GAAG,MAAM,IAAI,UAAU,IAAI,KAAK,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,MACtE;AACA,aAAO,MAAM,SAAS,KAAQ;AAAA,IAChC,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,OAAO,aAA+B;AACxD,QAAI;AACF,UAAI,EAAE,KAAK,QAAQ,IAAI;AACvB,UAAI,EAAE,cAAc,WAAW,aAAa,IAAI;AAChD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,GAAG;AAChC,UAAI;AACJ,UAAI,OAAO,KAAK,UAAU,EAAE,cAAc,UAAU,CAAC;AACrD,UAAI,cAAc;AAChB,cAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAE;AAAA,UAAK,CAACA,SACrDA,KAAI,KAAK;AAAA,QACX;AAAA,MACF,OAAO;AACL,cAAM,MAAM,KAAK,eAAe,KAAK,EAAE,QAAQ,QAAQ,UAAU,KAAK,CAAC;AAAA,MACzE;AACA,UAAI,OAAY,OAAO,CAAC;AACxB,UAAI,MAAM,SAAS,KAAK,aAAa,WAAW;AAC9C,YAAI,uBAAuB,CAAC;AAC5B,YAAI,KAAK,aAAa;AACpB,iCAAuB,uBAAuB,KAAK,WAAW;AAAA,QAChE;AACA,aAAK,QAAQ;AAAA,UACX,GAAG;AAAA,UACH,GAAG,KAAK;AAAA,QACV;AAAA,MACF;AACA,UAAI,KAAK,QAAQ,cAAc;AAC7B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK,aAAa,CAAC;AAAA,UAC9B,WAAW,KAAK,QAAQ;AAAA,QAC1B;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,GAAG;AACV,cAAQ,MAAM,sCAAiC,CAAC;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,uBAAuB,CAAC,YAAsC;AAC5D,QAAI,SAAS,OAAO,WAAW;AAC/B,WAAO;AAAA,MACL,IAAI,iBAAiB,KAAK,IAAI,CAAC;AAAA,MAC/B;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM,EAAE,yBAAyB,EAAE,QAAQ,QAAQ,EAAE;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,OACT,SAAyB,CAAC,MACa;AACvC,QAAI;AACF,UAAI,EAAE,SAAS,YAAY,qBAAqB,gBAAgB,IAAI;AACpE,UAAI,EAAE,WAAW,cAAc,aAAa,IAAI,KAAK;AAErD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,UAAI,EAAE,UAAU,GAAG,eAAe,IAAI;AACtC,UAAI,OAAgC;AAAA,QAClC,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,KAAK,QAAQ;AAAA,MACf;AAEA,UAAI,UAAuB;AAAA,QACzB,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,KAAK,GAAG;AACrC,UAAI;AAEJ,UAAI,cAAc;AAChB,kBAAU,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,MAC9D,OAAO;AACL,kBAAU,MAAM,KAAK,eAAe,KAAK;AAAA,UACvC,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,SAAS,OAAO;AAClB,cAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAChC;AACA,UAAI,EAAE,MAAM,SAAS,eAAe,IAAI;AACxC,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,MAChE;AACA,UAAI,CAAC,MAAM;AACT,eAAO,KAAK,qBAAqB,kCAAkC;AAAA,MACrE;AACA,UAAI,MAAM,OAAO;AACf,YAAI,QAAQ,KAAK;AACjB,aAAK,QAAQ,MAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,mBAAmB,CAAC;AAAA,MACpE;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,UACP,GAAG;AAAA,UACH,aAAa;AAAA,YACX,MAAM,WAAW;AAAA;AAAA,YAEjB,SAAS,kBAAyC,OAAO;AAAA,YACzD,UAAU,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,YAC/B,QAAQ,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AAEV,cAAQ,MAAM,4BAAuB,CAAC;AACtC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,sBAAsB,OAAO,SAAgC;AAC3D,QAAI,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;AAC9B,QAAI,YAAY,KAAK,WAAW,KAAK,CAAC,EAAE,QAAAC,QAAO,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAI,SAAS,WAAW;AACxB,QAAI,OAAO,WAAW,YAAY;AAChC,UAAI;AACF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,YAAY,MAAM,QAAQ;AAAA,YACxB,OAAO;AAAA,cACL,MAAM,EAAE,GAAG,uBAAuB,UAAU,MAAM,GAAG,GAAG,KAAK;AAAA,cAC7D,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,KAAK,kCAA6B,MAAM,IAAI,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC3QA,SAAS,6BAA6B,0CAA0C;AAGzE,SAAS,0BACd,SACuB;AACvB,MAAI,UAAU,mCAAmC,OAAO;AACxD,SAAO,QAAQ;AAAA,IACb,CAAC,EAAE,KAAK,MAAM,SAAS,kBAAkB,CAAC,KAAK,WAAW,UAAU;AAAA,EACtE;AACF;;;ACVO,IAAI,sBAAsB;AAAA,EAC/B,YACE;AAAA,EACF,YACE;AAAA,EACF,OACE;AAAA,EACF,UACE;AAAA,EACF,UACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AACJ;;;AXtBO,IAAM,mBAAN,cAA+B,SAAS;AAAA,EAC7C,eAAiC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EAGA,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,YAAY,QAAgC;AAC1C,QAAI,EAAE,UAAU,QAAQ,aAAa,GAAG,WAAW,IAAI;AACvD,UAAM,EAAE,GAAG,WAAW,CAAC;AACvB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AACF;AAEO,IAAM,uBAAN,cAAmC,kBAAkB;AAAA,EAG1D,YAAY,aAAoC,UAA4B;AAC1E,UAAM,aAAa,QAAQ;AAC3B,QAAI,EAAE,MAAM,GAAG,KAAK,IAAI;AACxB,WAAO,OAAO,KAAK,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,EACzD;AAAA,EAEA,IAAI,UAA2B;AAC7B,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAI,cAAc;AAChB,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,uBAAuB,KAAK,QAAQ,MAAM;AAAA,IACnD;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,kBAAkB;","names":["isBrowser","memo","schema","isBrowser","isBrowser","jsx","memo","res","schema"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@weaverse/hydrogen",
|
|
3
3
|
"author": "Weaverse Team",
|
|
4
4
|
"description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.4.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@weaverse/react": "3.
|
|
45
|
+
"@weaverse/react": "3.4.0",
|
|
46
46
|
"react-error-boundary": "^4.0.13"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|