@weaverse/hydrogen 5.5.0-beta.2 → 5.5.0-beta.4
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 +18 -18
- package/dist/index.d.ts +18 -18
- package/dist/index.js +17 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
2
2
|
import { EventEmitter, Weaverse, PlatformTypeEnum, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
|
|
3
3
|
export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
|
-
import { UIMatch, NavigateFunction } from 'react-router';
|
|
5
4
|
import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
6
5
|
export * from '@weaverse/schema';
|
|
7
6
|
export { BasicInput, HeadingInput, InputType, InspectorGroup, PageType, SchemaValidationIssue, SchemaValidationResult } from '@weaverse/schema';
|
|
@@ -9,25 +8,9 @@ import { createWithCache, I18nBase, HydrogenContext, HydrogenEnv } from '@shopif
|
|
|
9
8
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
10
9
|
import * as React$1 from 'react';
|
|
11
10
|
import { ComponentType, JSX, ForwardRefExoticComponent } from 'react';
|
|
11
|
+
import { NavigateFunction, UIMatch } from 'react-router';
|
|
12
12
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
13
13
|
|
|
14
|
-
interface RouteKeyedDataContext {
|
|
15
|
-
root?: Record<string, unknown>;
|
|
16
|
-
[routeKey: `routes/${string}`]: Record<string, unknown>;
|
|
17
|
-
}
|
|
18
|
-
type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>;
|
|
19
|
-
/**
|
|
20
|
-
* Hook to get flat route-keyed data context from matches
|
|
21
|
-
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
22
|
-
* No more useLoaderData dependency - everything comes from matches
|
|
23
|
-
*/
|
|
24
|
-
declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
25
|
-
/**
|
|
26
|
-
* Helper function to create flat route-keyed data context from useMatches() result
|
|
27
|
-
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
28
|
-
*/
|
|
29
|
-
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
30
|
-
|
|
31
14
|
type WeaverseThemeData = {
|
|
32
15
|
theme: HydrogenThemeSettings;
|
|
33
16
|
schema?: HydrogenThemeSchema;
|
|
@@ -388,6 +371,23 @@ declare module '@shopify/hydrogen' {
|
|
|
388
371
|
|
|
389
372
|
declare let defaultComponents: HydrogenComponent[];
|
|
390
373
|
|
|
374
|
+
interface RouteKeyedDataContext {
|
|
375
|
+
root?: Record<string, unknown>;
|
|
376
|
+
[routeKey: `routes/${string}`]: Record<string, unknown>;
|
|
377
|
+
}
|
|
378
|
+
type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>;
|
|
379
|
+
/**
|
|
380
|
+
* Hook to get flat route-keyed data context from matches
|
|
381
|
+
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
382
|
+
* No more useLoaderData dependency - everything comes from matches
|
|
383
|
+
*/
|
|
384
|
+
declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
385
|
+
/**
|
|
386
|
+
* Helper function to create flat route-keyed data context from useMatches() result
|
|
387
|
+
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
388
|
+
*/
|
|
389
|
+
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
390
|
+
|
|
391
391
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
392
392
|
declare function getWeaverseConfigs(request: Request, env: HydrogenEnv): WeaverseProjectConfigs;
|
|
393
393
|
declare function generateDataFromSchema(schema: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
2
2
|
import { EventEmitter, Weaverse, PlatformTypeEnum, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
|
|
3
3
|
export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
|
-
import { UIMatch, NavigateFunction } from 'react-router';
|
|
5
4
|
import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
6
5
|
export * from '@weaverse/schema';
|
|
7
6
|
export { BasicInput, HeadingInput, InputType, InspectorGroup, PageType, SchemaValidationIssue, SchemaValidationResult } from '@weaverse/schema';
|
|
@@ -9,25 +8,9 @@ import { createWithCache, I18nBase, HydrogenContext, HydrogenEnv } from '@shopif
|
|
|
9
8
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
10
9
|
import * as React$1 from 'react';
|
|
11
10
|
import { ComponentType, JSX, ForwardRefExoticComponent } from 'react';
|
|
11
|
+
import { NavigateFunction, UIMatch } from 'react-router';
|
|
12
12
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
13
13
|
|
|
14
|
-
interface RouteKeyedDataContext {
|
|
15
|
-
root?: Record<string, unknown>;
|
|
16
|
-
[routeKey: `routes/${string}`]: Record<string, unknown>;
|
|
17
|
-
}
|
|
18
|
-
type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>;
|
|
19
|
-
/**
|
|
20
|
-
* Hook to get flat route-keyed data context from matches
|
|
21
|
-
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
22
|
-
* No more useLoaderData dependency - everything comes from matches
|
|
23
|
-
*/
|
|
24
|
-
declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
25
|
-
/**
|
|
26
|
-
* Helper function to create flat route-keyed data context from useMatches() result
|
|
27
|
-
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
28
|
-
*/
|
|
29
|
-
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
30
|
-
|
|
31
14
|
type WeaverseThemeData = {
|
|
32
15
|
theme: HydrogenThemeSettings;
|
|
33
16
|
schema?: HydrogenThemeSchema;
|
|
@@ -388,6 +371,23 @@ declare module '@shopify/hydrogen' {
|
|
|
388
371
|
|
|
389
372
|
declare let defaultComponents: HydrogenComponent[];
|
|
390
373
|
|
|
374
|
+
interface RouteKeyedDataContext {
|
|
375
|
+
root?: Record<string, unknown>;
|
|
376
|
+
[routeKey: `routes/${string}`]: Record<string, unknown>;
|
|
377
|
+
}
|
|
378
|
+
type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>;
|
|
379
|
+
/**
|
|
380
|
+
* Hook to get flat route-keyed data context from matches
|
|
381
|
+
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
382
|
+
* No more useLoaderData dependency - everything comes from matches
|
|
383
|
+
*/
|
|
384
|
+
declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
385
|
+
/**
|
|
386
|
+
* Helper function to create flat route-keyed data context from useMatches() result
|
|
387
|
+
* Returns: {root: {...}, "routes/xxx": {...}}
|
|
388
|
+
*/
|
|
389
|
+
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
390
|
+
|
|
391
391
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
392
392
|
declare function getWeaverseConfigs(request: Request, env: HydrogenEnv): WeaverseProjectConfigs;
|
|
393
393
|
declare function generateDataFromSchema(schema: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var hydrogen = require('@shopify/hydrogen');
|
|
4
4
|
var react = require('@weaverse/react');
|
|
5
|
-
var reactRouter = require('react-router');
|
|
6
5
|
var schema$1 = require('@weaverse/schema');
|
|
7
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var reactRouter = require('react-router');
|
|
8
8
|
var react$1 = require('react');
|
|
9
9
|
var reactErrorBoundary = require('react-error-boundary');
|
|
10
10
|
|
|
@@ -13,22 +13,6 @@ var __export = (target, all) => {
|
|
|
13
13
|
for (var name in all)
|
|
14
14
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15
15
|
};
|
|
16
|
-
function createFlatDataContext(matches) {
|
|
17
|
-
const context = {};
|
|
18
|
-
for (const match of matches) {
|
|
19
|
-
if (match.data && typeof match.data === "object") {
|
|
20
|
-
context[match.id] = match.data;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return context;
|
|
24
|
-
}
|
|
25
|
-
function useWeaverseDataContext() {
|
|
26
|
-
const matches = reactRouter.useMatches();
|
|
27
|
-
return createFlatDataContext(matches);
|
|
28
|
-
}
|
|
29
|
-
function createWeaverseDataContext(matches) {
|
|
30
|
-
return createFlatDataContext(matches);
|
|
31
|
-
}
|
|
32
16
|
|
|
33
17
|
// src/components/main.tsx
|
|
34
18
|
var main_exports = {};
|
|
@@ -55,6 +39,22 @@ var schema = schema$1.createSchema({
|
|
|
55
39
|
|
|
56
40
|
// src/components/index.ts
|
|
57
41
|
var defaultComponents = [main_exports];
|
|
42
|
+
function createFlatDataContext(matches) {
|
|
43
|
+
const context = {};
|
|
44
|
+
for (const match of matches) {
|
|
45
|
+
if (match.data && typeof match.data === "object") {
|
|
46
|
+
context[match.id] = match.data;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return context;
|
|
50
|
+
}
|
|
51
|
+
function useWeaverseDataContext() {
|
|
52
|
+
const matches = reactRouter.useMatches();
|
|
53
|
+
return createFlatDataContext(matches);
|
|
54
|
+
}
|
|
55
|
+
function createWeaverseDataContext(matches) {
|
|
56
|
+
return createFlatDataContext(matches);
|
|
57
|
+
}
|
|
58
58
|
|
|
59
59
|
// src/types.ts
|
|
60
60
|
var WeaverseError = class _WeaverseError extends Error {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-weaverse-data-context.ts","../src/components/main.tsx","../src/components/index.ts","../src/types.ts","../src/utils/index.ts","../src/utils/use-theme-settings-store.ts","../src/utils/use-studio.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/index.ts"],"names":["useMatches","jsx","createSchema","schema","type","children","data","EventEmitter","isBrowser","useRouteLoaderData","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","WeaverseItemStore","Weaverse","memo","replaceContentDataConnectorsDeep","jsxs","Fragment","WeaverseRoot","ErrorBoundary","Suspense","Await","createContext","useSafeExternalStore","createWithCache","hydrogen_getSelectedProductOptions"],"mappings":";;;;;;;;;;;;;;;AAgBA,SAAS,sBAAsB,OAAA,EAA2D;AACxF,EAAA,MAAM,UAA+B,EAAC;AAGtC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,OAAO,KAAA,CAAM,SAAS,QAAA,EAAU;AAEhD,MAAA,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA,CAAM,IAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,sBAAA,GAA8C;AAC5D,EAAA,MAAM,UAAUA,sBAAA,EAAW;AAG3B,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC;AAMO,SAAS,0BAA0B,OAAA,EAA2D;AAEnG,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC;;;ACjDA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAQA,SAAS,KAAK,KAAA,EAAgE;AAC5E,EAAA,IAAI,EAAE,QAAA,EAAU,uBAAA,EAAyB,GAAG,MAAK,GAAI,KAAA;AAErD,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MAEJ,QAAA;AAAA,MAEA,uBAAA,EAAyB,WAAW,MAAA,GAAY;AAAA;AAAA,GAClD;AAEJ;AAEA,IAAO,YAAA,GAAQ,IAAA;AAER,IAAI,SAAqBC,qBAAA,CAAa;AAAA,EAC3C,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAC,CAAA;;;ACxBM,IAAI,iBAAA,GAAyC,CAAC,YAAI;;;ACuSlD,IAAM,aAAA,GAAN,MAAM,cAAA,SAAsB,KAAA,CAAM;AAAA,EACvB,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CACE,OAAA,EACA,IAAA,GAAO,gBAAA,EACP,YACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAGf,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,cAAa,CAAA;AAAA,IAC7C;AAAA,EACF;AACF;AAMO,SAAS,yBACd,QAAA,EACuC;AACvC,EAAA,OACE,OAAO,QAAA,KAAa,QAAA,IACpB,aAAa,IAAA,IACb,MAAA,IAAU,YACV,UAAA,IAAc,QAAA;AAElB;AAEO,SAAS,sBACd,OAAA,EACgC;AAChC,EAAA,OACE,OAAO,YAAY,QAAA,IACnB,OAAA,KAAY,QACZ,MAAA,IAAU,OAAA,IACV,SAAA,IAAa,OAAA,IACb,gBAAA,IAAoB,OAAA;AAExB;AAEO,SAAS,SAAS,QAAA,EAAkD;AACzE,EAAA,OACE,OAAO,aAAa,QAAA,IACpB,QAAA,KAAa,QACb,OAAA,IAAW,QAAA,IACX,OAAQ,QAAA,CAAqC,KAAA,KAAU,QAAA;AAE3D;AAEO,SAAS,wBACd,IAAA,EAC+B;AAC/B,EAAA,OACE,OAAO,IAAA,KAAS,QAAA,IAChB,IAAA,KAAS,IAAA,IACR,KAAa,KAAA,KAAU,MAAA;AAE5B;AAWO,SAAS,sBACdC,OAAAA,EACmC;AAEnC,EAAA,OACE,OAAOA,OAAAA,KAAW,QAAA,IAClBA,YAAW,IAAA,IACX,MAAA,IAAUA,WACV,OAAA,IAAWA,OAAAA;AAEf;;;ACxXA,IAAI,WAAA,uBAAkB,GAAA,EAAY;AAElC,SAAS,OAAA,CAAQ,MAAc,OAAA,EAAiB;AAC9C,EAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,IAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AAAA,EACtB;AACF;AAEA,SAAS,eAAA,CAAmB,QAAa,MAAA,EAAkB;AACzD,EAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,GAAG,MAAM,CAAA;AAC9B;AAEA,SAAS,sBAAA,CACP,QAAA,EACA,SAAA,EACA,IAAA,EACO;AACP,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN,WAAW,IAAI,CAAA,wFAAA;AAAA,GACjB;AAEA,EAAA,OAAO,eAAA,CAAgB,UAAU,SAAS,CAAA;AAC5C;AAEO,SAAS,kBACd,OAAA,EACA;AACA,EAAA,IAAI,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS,CAAA,CAAE,MAAA;AAAA,IAC5C,CAAC,CAAA,EAA4B,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACtC,MAAA,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,KAAM,SAAS,IAAA,GAAO,CAAA,KAAM,UAAU,KAAA,GAAQ,CAAA;AACrD,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AACF;AAEO,SAAS,kBAAA,CACd,SACA,GAAA,EACwB;AACxB,EAAA,IAAI,OAAA,GAAU,kBAAyC,OAAO,CAAA;AAC9D,EAAA,IAAI;AAAA,IACF,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAO,EAAC;AACZ,EAAA,IAAI,iBAAkB,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,OAAQ,EAAC;AACzE,EAAA,IAAI;AAAA,IACF,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AACJ,EAAA,OAAO;AAAA,IACL,SAAA,EACE,iBAAA,IACA,mBAAA,IACA,cAAA,CAAe,mBAAA,IACf,EAAA;AAAA,IACF,YAAA,EACE,YAAA,IACA,aAAA,IACA,cAAA,CAAe,aAAA,IACf,4BAAA;AAAA,IACF,iBACE,iBAAA,IACA,cAAA,CAAe,iBAAA,IACf,aAAA,IACA,eAAe,aAAA,IACf,yBAAA;AAAA,IACF,cAAA,EACE,cAAA,IACA,gBAAA,IACA,cAAA,CAAe,gBAAA,IACf,EAAA;AAAA,IACF,iBAAiB,eAAA,IAAmB,EAAA;AAAA,IACpC,YAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAa,WAAA,IAAe,EAAA;AAAA,IAC5B,SAAA,EAAW;AAAA,MACT,qBAAqB,mBAAA,IAAuB,EAAA;AAAA,MAC5C,6BAA6B,2BAAA,IAA+B;AAAA;AAC9D,GACF;AACF;AAEO,SAAS,uBACdA,OAAAA,EACA;AACA,EAAA,IAAI,OAA4B,EAAC;AAGjC,EAAA,IAAI,kBAAyB,EAAC;AAG9B,EAAA,MAAM,iBAAA,GAAoB,CACxB,CAAA,KACiC;AACjC,IAAA,OAAO,MAAA,IAAU,CAAA,IAAK,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,IAAI,iBAAA,CAAkBA,OAAM,CAAA,EAAG;AAE7B,IAAA,IAAIA,QAAO,QAAA,EAAU;AACnB,MAAA,eAAA,GAAkBA,OAAAA,CAAO,QAAA;AAAA,IAC3B;AAEA,IAAA,IAAIA,QAAO,SAAA,EAAW;AACpB,MAAA,IAAIA,OAAAA,CAAO,UAAU,MAAA,EAAQ;AAE3B,QAAA,eAAA,GAAkB,sBAAA;AAAA,UAChBA,OAAAA,CAAO,QAAA;AAAA,UACPA,OAAAA,CAAO,SAAA;AAAA,UACPA,QAAO,IAAA,IAAQ;AAAA,SACjB;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,eAAA,GAAkBA,OAAAA,CAAO,SAAA;AACzB,QAAA,IAAIA,QAAO,IAAA,EAAM;AACf,UAAA,OAAA;AAAA,YACEA,OAAAA,CAAO,IAAA;AAAA,YACP,CAAA,sBAAA,EAAeA,QAAO,IAAI,CAAA,yEAAA;AAAA,WAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAIA,QAAO,QAAA,EAAU;AACnB,MAAA,eAAA,GAAkBA,OAAAA,CAAO,QAAA;AAAA,IAC3B;AAEA,IAAA,IAAIA,QAAO,SAAA,EAAW;AACpB,MAAA,IAAIA,OAAAA,CAAO,UAAU,MAAA,EAAQ;AAE3B,QAAA,eAAA,GAAkB,sBAAA;AAAA,UAChBA,OAAAA,CAAO,QAAA;AAAA,UACPA,OAAAA,CAAO,SAAA;AAAA,UACP;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,eAAA,GAAkBA,OAAAA,CAAO,SAAA;AACzB,QAAA,OAAA;AAAA,UACE,aAAA;AAAA,UACA,CAAA,kGAAA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,KAAA,IAAS,SAAS,eAAA,EAAiB;AACjC,MAAA,KAAA,IAAS,KAAA,IAAS,MAAM,MAAA,EAAQ;AAC9B,QAAA,IAAI,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,KAAA;AAC7B,QAAA,IAAI,IAAA,IAAQ,YAAA,KAAiB,IAAA,IAAQ,YAAA,KAAiB,MAAA,EAAW;AAC/D,UAAA,IAAA,CAAK,IAAI,CAAA,GAAI,YAAA;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAA,CACP,IAAA,EACA,UAAA,EACA,KAAA,EACA,QAAA,EACA;AACA,EAAA,IAAI,SAAA,GAAY,WAAW,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,SAAS,IAAI,CAAA;AAC7D,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA;AAAA,EACF;AACA,EAAA,IAAI,WAAW,EAAC;AAChB,EAAA,IAAI,EAAA,GAAK,OAAO,UAAA,EAAW;AAC3B,EAAA,IAAI,EAAE,UAAU,GAAG,IAAA,KAAS,SAAA,CAAU,MAAA,EAAQ,WAAW,EAAC;AAC1D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,KAAA,IAAS,KAAK,QAAA,EAAU;AACtB,MAAA,IAAI,EAAE,IAAA,EAAAC,KAAAA,EAAM,UAAAC,SAAAA,EAAU,GAAGC,OAAK,GAAI,CAAA;AAClC,MAAA,IAAI,OAAA,GAAU,sBAAA,CAAuBF,KAAAA,EAAM,UAAA,EAAY,OAAOE,KAAI,CAAA;AAClE,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,EAAA,EAAI,OAAA,EAAkB,CAAA;AAAA,IACxC;AAAA,EACF;AACA,EAAA,KAAA,CAAM,IAAA,CAAK;AAAA,IACT,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,GAAG,QAAA,EAAS;AAAA,IAC7B,EAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,cAAA,CACd,IAAA,EACA,UAAA,EACA,YAAA,EACA;AACA,EAAA,IAAI,QAAQ,EAAC;AACb,EAAA,OAAO;AAAA,IACL,SAAS,EAAE,EAAA,EAAI,KAAK,cAAA,EAAgB,SAAA,EAAW,MAAM,iBAAA,EAAkB;AAAA,IACvE,OAAA,EAAS;AAAA,MACP,SAAA,EAAW,GAAA;AAAA,MACX,YAAA;AAAA,MACA,YAAA,EAAc,KAAA;AAAA,MACd,aAAA,EAAe,IAAA;AAAA,MACf,WAAA,EAAa;AAAA,QACX,IAAA,EAAM;AAAA,UACJ,KAAA,EAAO,uBAAA;AAAA,UACP,QAAA,EAAU,IAAA;AAAA,UACV,OAAA,EAAS,IAAA;AAAA,UACT,QAAA,EAAU,KAAA;AAAA,UACV,UAAA,EAAY;AAAA,SACd;AAAA,QACA,SAAS,EAAC;AAAA,QACV,QAAA,EAAU,GAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,uBAAA;AAAA,MACJ,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL;AAAA,UACE,MAAM,EAAC;AAAA,UACP,EAAA,EAAI,GAAA;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,QAAA,EAAU,CAAC,EAAE,EAAA,EAAI,uBAAuB,IAAA,EAAM,UAAA,EAAY,KAAK,CAAA,EAAG;AAAA,SACpE;AAAA,QACA,GAAG;AAAA;AACL;AACF,GACF;AACF;ACvPO,IAAM,kBAAA,GAAN,cAAiCC,kBAAA,CAAa;AAAA,EACnD,WAAkC,EAAC;AAAA,EACnC,MAAA;AAAA,EACA,SAAA;AAAA,EAEA,YAAY,IAAA,EAAyB;AACnC,IAAA,KAAA,EAAM;AACN,IAAA,IAAI,EAAE,KAAA,EAAO,MAAA,EAAAJ,SAAQ,SAAA,EAAU,GAAI,QAAQ,EAAC;AAC5C,IAAA,IAAA,CAAK,QAAA,GAAW,EAAE,GAAG,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAIK,eAAA,EAAW;AACb,MAAA,MAAA,CAAO,4BAAA,GAA+B,IAAA;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,mBAAA,GAAsB,CAAC,WAAA,KAAuC;AAC5D,IAAA,IAAA,CAAK,QAAA,GAAW;AAAA,MACd,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACzB,CAAA;AAAA,EAEA,cAAc,MAAM;AAClB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd,CAAA;AAAA,EAEA,oBAAoB,MAAM;AACxB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd,CAAA;AACF,CAAA;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,IAAI,IAAA,GAAOC,+BAAmB,MAAM,CAAA;AACpC,EAAA,IAAID,eAAA,IAAa,OAAO,4BAAA,EAA8B;AACpD,IAAA,OAAO,MAAA,CAAO,4BAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAI,kBAAA,CAAmB,IAAA,EAAM,aAAa,CAAA;AACnD;;;AC1CO,SAAS,UAAU,QAAA,EAA4B;AACpD,EAAA,IAAI,EAAE,UAAA,EAAW,GAAIE,0BAAA,EAAe;AACpC,EAAA,IAAI,aAAaC,yBAAA,EAAc;AAC/B,EAAA,IAAI,EAAE,QAAA,EAAU,MAAA,EAAO,GAAIC,uBAAA,EAAY;AACvC,EAAA,IAAI,WAAWC,uBAAA,EAAY;AAC3B,EAAA,IAAI,qBAAqB,qBAAA,EAAsB;AAC/C,EAAA,IAAI,EAAE,YAAA,EAAc,YAAA,EAAc,eAAA,EAAiB,eAAc,GAAI,QAAA;AAGrE,EAAAC,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,CAAW,UAAU,MAAA,EAAQ;AAC/B,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,UAAA,GAAa,CAAA,EAAG,YAAY,CAAA,qCAAA,EAAwC,eAAe,CAAA,CAAA;AACvF,QAAAC,gBAAA,CAAW,UAAU,CAAA,CAAE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC5C,WAAW,YAAA,EAAc;AACvB,QAAA,QAAA,CAAS,QAAA,GAAW;AAAA,UAClB,GAAG,QAAA,CAAS,QAAA;AAAA,UACZ,QAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,SAAA,GAAY,CAAA,EAAG,YAAY,CAAA,mCAAA,EAAsC,eAAe,CAAA,CAAA;AACpF,QAAAA,gBAAA,CAAW,SAAS,CAAA,CACjB,IAAA,CAAK,MAAM;AACV,UAAA,MAAA,CAAO,cAAA,EAAgB,KAAK,QAAQ,CAAA;AAAA,QACtC,CAAC,CAAA,CACA,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAA,EAAU,MAAA,EAAQ,UAAA,CAAW,KAAK,CAAC,CAAA;AACvC,EAAA,QAAA,CAAS,QAAQ,CAAA;AACnB;AAEO,SAAS,SAAS,OAAA,EAA2B;AAClD,EAAA,IAAI,EAAE,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,cAAa,GAAI,OAAA;AAExD,EAAAD,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,EAAE,SAAA,IAAa,MAAA,IAAU,YAAA,CAAA,IAAiB,YAAA,EAAc;AAC1D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,GAAM,GAAG,YAAY,CAAA,cAAA,CAAA;AACzB,IAAA,IAAI,GAAA,GAAM,IAAI,KAAA,EAAM;AACpB,IAAA,GAAA,CAAI,MAAA,GAAS,MAAM,GAAA,CAAI,MAAA,EAAO;AAC9B,IAAA,GAAA,CAAI,MAAM,CAAA,EAAG,GAAG,CAAA,WAAA,EAAc,SAAS,WAAW,MAAM,CAAA,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AACP;ACnBO,IAAM,oBAAA,GAAN,cAAmCE,uBAAA,CAAkB;AAAA,EAG1D,WAAA,CAAY,aAAoC,QAAA,EAA4B;AAC1E,IAAA,KAAA,CAAM,aAAa,QAAQ,CAAA;AAC3B,IAAA,MAAM,EAAE,IAAA,EAAM,GAAG,IAAA,EAAK,GAAI,WAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ;AACzB,MAAA,OAAA,CAAQ,MAAM,yCAAyC,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAC7D,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,UAAA,EAAY,MAAM,IAAI,CAAA;AAAA,EACnD;AAAA,EAEA,IAAI,OAAA,GAA2B;AAC7B,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf;AACF;AAEAC,cAAA,CAAS,eAAA,GAAkB,oBAAA;AAEpB,IAAM,gBAAA,GAAN,cAA+BA,cAAA,CAAS;AAAA,EAC7C,YAAA,GAAiC,kBAAA;AAAA,EACjC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EAGA,OAAO,aAAA;AAAA,EACP,OAAO,eAAA;AAAA,EAEP,YAAY,MAAA,EAAgC;AAC1C,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,GAAG,YAAW,GAAI,MAAA;AACzD,IAAA,KAAA,CAAM,EAAE,GAAG,UAAA,EAAY,CAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAEnB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAC3B,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,eAAA;AAC9B,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAO,eAAA,IAAmB,EAAA;AACjD,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,KAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAO,aAAA,IAAiB,KAAA;AAC7C,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,WAAA,IAAe,EAAA;AAAA,EAC3C;AACF;AAEA,SAAS,uBACP,MAAA,EACkB;AAClB,EAAA,IAAIT,eAAAA,EAAW;AAEb,IAAA,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,WAAA,IAAe,EAAC;AAC5C,IAAA,IAAI,QAAA,GAAW,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAE/C,IAAA,IACE,CAAC,QAAA,IACD,QAAA,EAAU,WAAA,EAAa,QAAA,KAAa,MAAA,CAAO,WAAA,CAAY,QAAA,IACvD,QAAA,EAAU,WAAA,EAAa,MAAA,KAAW,MAAA,CAAO,YAAY,MAAA,EACrD;AACA,MAAA,QAAA,GAAW,IAAI,iBAAiB,MAAM,CAAA;AACtC,MAAA,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA,GAAI,QAAA;AAAA,IACtC;AACA,IAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,MAAA,QAAA,CAAS,cAAc,MAAA,CAAO,WAAA;AAC9B,MAAA,MAAA,CAAO,cAAA,EAAgB,cAAc,MAAM,CAAA;AAAA,IAC7C;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,iBAAiB,MAAM,CAAA;AACpC;AAEA,IAAM,YAAA,GAAeU,YAAA,CAAK,CAAC,EAAE,SAAQ,KAAqC;AACxE,EAAA,SAAA,CAAU,OAAO,CAAA;AACjB,EAAA,OAAO,IAAA;AACT,CAAC,CAAA;AAED,SAAS,WAAW,KAAA,EAIjB;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,WAAA,EAAY,GAAI,KAAA;AAC1C,EAAA,KAAA,MAAW,QAAQ,CAAC,GAAG,UAAA,EAAY,GAAG,iBAAiB,CAAA,EAAG;AACxD,IAAA,IAAA,EAAM,MAAA,EAAQ,QACZ,iBAAA,CAAkB;AAAA,MAChB,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA;AAAA,MACnB,WAAW,IAAA,CAAK,OAAA;AAAA,MAChB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACL;AACA,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,cAAA,EAAe,GAAI,QAAQ,EAAC;AAI5D,EAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,aAAA,GAAgBC,sCAAA,CAAiC,MAAM,WAAW,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,WAAW,sBAAA,CAAuB;AAAA,IACtC,GAAG,OAAA;AAAA,IACH,WAAA;AAAA,IACA,IAAA,EAAM,aAAA;AAAA,IACN,QAAQ,aAAA,EAAe,EAAA;AAAA,IACvB,QAAA,EAAU,EAAE,OAAA,EAAS,cAAA;AAAe,GACrC,CAAA;AACD,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAApB,cAAAA,CAACqB,kBAAA,EAAA,EAAa,OAAA,EAAS,QAAA,EAAU,CAAA;AAAA,oBACjCrB,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,QAAA,EAAU;AAAA,GAAA,EACnC,CAAA;AAEJ;AAEO,SAAS,kBAAkB,OAAA,EAA0B;AAC1D,EAAA,gBAAA,CAAiB,gBAAgB,OAAO,CAAA;AAC1C;AAEO,IAAM,oBAAA,GAAuBiB,YAAA;AAAA,EAClC,CAAC;AAAA,IACC,UAAA;AAAA,IACA,cAAA,EAAgB,cAAA,GAAiB,CAAC,EAAE,KAAA,EAAM,qBACxCjB,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,KAAA,EAAO,OAAA,IAAW,8BAAA,EAA+B;AAAA,GAE3D,KAGM;AACJ,IAAA,MAAM,UAAUD,sBAAAA,EAAW;AAI3B,IAAA,MAAM,mBAAA,GAAsB,0BAA0B,OAAO,CAAA;AAI7D,IAAA,IAAI,YAAA,GACF,IAAA;AAEF,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IACE,KAAA,CAAM,IAAA,IACN,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,IACtB,KAAA,CAAM,IAAA,KAAS,IAAA,IACf,cAAA,IAAkB,KAAA,CAAM,IAAA,EACxB;AACA,QAAA,YAAA,GAAe,MAAM,IAAA,CAAK,YAAA;AAG1B,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,wBAAwB,OAAA,EAAS;AACnC,QAAA,uBACEC,cAAAA,CAACsB,gCAAA,EAAA,EAAc,cAAA,EAAgB,gBAC7B,QAAA,kBAAAtB,cAAAA,CAACuB,gBAAA,EAAA,EACC,QAAA,kBAAAvB,eAACwB,iBAAA,EAAA,EAAM,OAAA,EAAS,YAAA,EACb,QAAA,EAAA,CAAC,iCACAxB,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,UAAA;AAAA,YACA,IAAA,EAAM,YAAA;AAAA,YACN,WAAA,EAAa;AAAA;AAAA,SACf,EAEJ,GACF,CAAA,EACF,CAAA;AAAA,MAEJ;AACA,MAAA,uBACEA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,UAAA;AAAA,UACA,IAAA,EAAM,YAAA;AAAA,UACN,WAAA,EAAa;AAAA;AAAA,OACf;AAAA,IAEJ;AACA,IAAA,uBACEA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,OAAA,EAAS,0CAAA;AAA2C;AAAA,KAC/D;AAAA,EAEJ;AACF;AAEA,IAAM,qBAAA,GAAwByB,sBAA4C,IAAI,CAAA;AAC9E,qBAAA,CAAsB,WAAA,GAAc,+BAAA;AAE7B,SAAS,aAAa,SAAA,EAA+B;AAC1D,EAAA,OAAO,CAAC,KAAA,KAAmC;AACzC,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,qBAAA,EAAsB;AAC3C,IAAA,uBACEzB,cAAAA,CAAC,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,KAAA,EAAO,QAAA,EACrC,QAAA,kBAAAA,cAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA,EACxB,CAAA;AAAA,EAEJ,CAAA;AACF;AAEO,SAAS,gBAAA,GAA8C;AAC5D,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,MAAM,QAAA,GAAW0B,0BAAA;AAAA,IACf,kBAAA,CAAmB,SAAA;AAAA,IACnB,kBAAA,CAAmB,WAAA;AAAA,IACnB,kBAAA,CAAmB;AAAA,GACrB;AACA,EAAA,OAAO,QAAA;AACT;ACtOA,IAAM,QAAA,GAAW,IAAA;AAEjB,IAAM,sBAAA,GAA0C;AAAA,EAC9C,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,oBAAA,EAAsB,KAAA;AAAA;AAAA,EACtB,YAAA,EAAc;AAAA;AAChB,CAAA;AAEO,IAAM,iBAAN,MAAqB;AAAA,EACnB,GAAA,GAAM,QAAA;AAAA,EACN,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAGA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EAEP,YAAY,IAAA,EAA0B;AAEpC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,GAAI,IAAA;AAGJ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,YAAYC,wBAAA,CAAgB;AAAA,MAC/B,KAAA;AAAA,MACA,SAAA,EAAW,SAAA,KAAc,MAAM,OAAA,CAAQ,OAAA,EAAQ,CAAA;AAAA,MAC/C;AAAA,KACD,CAAA;AAGD,IAAA,IAAA,CAAK,OAAA,GAAU,kBAAA,CAAmB,OAAA,EAAS,GAAkB,CAAA;AAG7D,IAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,MACrB,SAAA,EAAW,KAAK,OAAA,CAAQ,SAAA;AAAA,MACxB,YAAA,EAAc,KAAK,OAAA,CAAQ,YAAA;AAAA,MAC3B,eAAA,EAAiB,KAAK,OAAA,CAAQ,eAAA;AAAA,MAC9B,cAAA,EAAgB,KAAK,OAAA,CAAQ,cAAA;AAAA,MAC7B,eAAA,EAAiB,KAAK,OAAA,CAAQ,eAAA;AAAA,MAC9B,YAAA,EAAc,KAAK,OAAA,CAAQ;AAAA,KAC7B;AAEA,IAAA,IAAA,CAAK,mBAAA,GAAsB;AAAA,MACzB,YAAA,EAAc,KAAK,OAAA,CAAQ,YAAA;AAAA,MAC3B,MAAM,UAAA,CAAW,IAAA;AAAA,MACjB,SAAA,EAAW,KAAK,OAAA,CAAQ;AAAA,KAC1B;AAAA,EACF;AAAA;AAAA,EAGiB,WAAA,GAAc,OAC7B,GAAA,EACA,OAAA,GAAuB,EAAC,KACe;AACvC,IAAA,IAAI;AACF,MAAA,IAAI,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,OAAO,CAAA;AACvC,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,IAAI,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAChC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,MACtE;AACA,MAAA,IAAI,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAEhC,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,MAAM,CAAA,0BAAA,EAA6B,GAAG,IAAI,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAAA;AAAA,EAGQ,UACN,QAAA,EACA,QAAA,GAAW,CAAC,IAAA,CAAK,QAAQ,YAAA,EACjB;AACR,IAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,SAAA,KAAc,IAAA,CAAK,OAAA;AAE1D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,CAAA,EAAG,eAAe,CAAA,IAAA,EAAO,QAAQ,cAAc,SAAS,CAAA,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,CAAA,EAAG,YAAY,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA;AAAA,EAC/C;AAAA,EAEO,cAAA,GAAiB,OACtB,GAAA,EACA,OAAA,GAAwD,EAAC,KAC1C;AACf,IAAA,MAAM,WACJ,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,YAAY,sBAAsB,CAAA;AAGxE,IAAA,MAAM,WAAW,CAAC,GAAA,EAAK,QAAQ,MAAA,IAAU,KAAA,EAAO,QAAQ,IAAI,CAAA;AAE5D,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,QAAQ,YAAA,EAAc;AAC7B,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAe,GAAA,EAAK,OAAO,CAAA;AAAA,IACjD,CAAA,MAAO;AAEL,MAAA,MAAA,GAAU,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAK,OAAA,EAAS;AAAA,QACjD,QAAA;AAAA,QACA,aAAA,EAAe,QAAA;AAAA,QACf,mBAAA,EAAqB,CAAC,QAAA,KAA2B;AAE/C,UAAA,OACE,CAAC,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,KAAa,QAAQ,QAAA,KAAa,MAAA;AAAA,QAE7D,CAAA;AAAA,QACA,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB,CAAA;AAAA,EAEA,iBAAA,GAAoB,OAClB,QAAA,KACmC;AACnC,IAAA,IAAI,oBAAA,GAAuB,sBAAA,CAAuB,IAAA,CAAK,WAAW,CAAA;AAClE,IAAA,IAAI;AACF,MAAA,IAAI,EAAE,SAAQ,GAAI,IAAA;AAClB,MAAA,IAAI,EAAE,SAAA,EAAW,YAAA,EAAa,GAAI,OAAA;AAClC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,iBAAiB,CAAA;AAE1C,MAAA,IAAI,OAAO,IAAA,CAAK,SAAA,CAAU,EAAE,YAAA,EAAc,WAAW,CAAA;AACrD,MAAA,IAAI,IAAA,GACF,MAAM,IAAA,CAAK,cAAA,CAAsC,GAAA,EAAK;AAAA,QACpD,MAAA,EAAQ,MAAA;AAAA,QACR,QAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,MAAA,EAAQ,kBAAA;AAAA,UACR,iBAAA,EAAmB;AAAA;AACrB,OACD,CAAA;AAGH,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,yDAAA;AAAA,UACA;AAAA,YACE,MAAM,OAAO,IAAA;AAAA,YACb,QAAA,EAAU,OAAO,IAAA,KAAS,QAAA;AAAA,YAC1B,MAAA,EAAQ,OAAO,IAAA,KAAS,QAAA,GAAY,KAAgB,MAAA,GAAS,KAAA;AAAA,YAC7D,OAAA,EACE,OAAO,IAAA,KAAS,QAAA,GACZ,CAAA,EAAI,IAAA,CAAgB,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA,GACpC,MAAA,CAAO,IAAI;AAAA;AACnB,SACF;AACA,QAAA,IAAA,GAAO,EAAE,OAAO,oBAAA,EAAqB;AAAA,MACvC;AAEA,MAAA,IAAI,IAAA,CAAK,WAAA,EAAa,QAAA,IAAY,IAAA,CAAK,aAAa,SAAA,EAAW;AAE7D,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AACjD,UAAA,IAAA,CAAK,KAAA,GAAQ,oBAAA;AAAA,QACf,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,YACX,GAAG,oBAAA;AAAA,YACH,GAAG,IAAA,CAAK;AAAA,WACV;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,QAAQ,YAAA,EAAc;AAC7B,QAAA,IAAA,GAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,QACE,IAAA,CAAK,WAAA,IAAe,OAAO,IAAA,CAAK,gBAAgB,QAAA,GAC5C;AAAA,YACE,GAAG,IAAA,CAAK,WAAA;AAAA,YACR,UAAU,IAAA,CAAK,WAAA,EAAa,QAAA,EAAU,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,cACpD,GAAG,KAAA;AAAA,cACH,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,CAAC,KAAA,KAAU;AACpC,gBAAA,IAAI,OAAO,KAAA,EAAO,SAAA,KAAc,UAAA,EAAY;AAC1C,kBAAA,OAAO;AAAA,oBACL,GAAG,KAAA;AAAA,oBACH,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,QAAA;AAAS,mBACtC;AAAA,gBACF;AACA,gBAAA,OAAO,KAAA;AAAA,cACT,CAAC;AAAA,aACH,CAAE;AAAA,WACJ,GACA,KAAA,CAAA;AAAA,UACN,SAAA,EAAW,KAAK,OAAA,CAAQ;AAAA,SAC1B;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,IAAA,CAAK,iCAAiC,CAAC,CAAA;AAC/C,MAAA,OAAO,EAAE,OAAO,oBAAA,EAAqB;AAAA,IACvC;AAAA,EACF,CAAA;AAAA,EAEA,oBAAA,GAAuB,CAAC,OAAA,KAAsC;AAC5D,IAAA,IAAI,MAAA,GAAS,OAAO,UAAA,EAAW;AAC/B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,EAAA,EAAI,MAAA;AAAA,UACJ,MAAM,EAAE,uBAAA,EAAyB,EAAE,MAAA,EAAQ,SAAQ;AAAE;AACvD;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,QAAA,GAAW,OACT,MAAA,GAKI,EAAC,KACkC;AACvC,IAAA,IAAI;AACF,MAAA,IAAI,EAAE,OAAA,EAAS,UAAA,EAAY,mBAAA,EAAqB,iBAAgB,GAAI,IAAA;AACpE,MAAA,IAAI,EAAE,SAAA,EAAW,YAAA,EAAc,aAAA,EAAe,WAAA,KAAgB,IAAA,CAAK,OAAA;AAEnE,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAO,cAAA,CAAe,WAAA,IAAe,EAAA,EAAI,IAAA,CAAK,YAAY,YAAY,CAAA;AAAA,MACxE;AAEA,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,EAAE,QAAA,EAAU,GAAG,cAAA,EAAe,GAAI,MAAA;AACtC,MAAA,IAAI,IAAA,GAUA;AAAA,QACF,GAAG,mBAAA;AAAA,QACH,MAAA,EAAQ,cAAA;AAAA,QACR,KAAK,OAAA,CAAQ;AAAA,OACf;AAEA,MAAA,IAAI,OAAA,GAAuB;AAAA,QACzB,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,QACzB,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,MAAA,EAAQ,kBAAA;AAAA,UACR,iBAAA,EAAmB;AAAA;AACrB,OACF;AACA,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAElC,MAAA,IAAI,WAAA,GACF,MAAM,IAAA,CAAK,cAAA,CAAoC,GAAA,EAAK;AAAA,QAClD,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAEH,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,KAAA,CAAM,WAAA,CAAY,KAAK,CAAA;AAAA,MACnC;AAGA,MAAA,IAAI,EAAE,IAAA,EAAM,OAAA,EAAS,cAAA,EAAe,GAAI,WAAA;AAExC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,CAAQ,IAAA,CAAK,mCAAmC,SAAS,CAAA;AACzD,QAAA,OAAA,GAAU;AAAA,UACR,EAAA,EAAI,SAAA;AAAA,UACJ,IAAA,EAAM,6BAAA;AAAA,UACN,cAAA,EAAgB;AAAA,SAClB;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,IAAA,CAAK,qBAAqB,kCAAkC,CAAA;AAAA,MACrE;AACA,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,IAAI,QAAQ,IAAA,CAAK,KAAA;AACjB,QAAA,IAAA,CAAK,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,GAAA,CAAI,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA,MACpE;AACA,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,GAAG,eAAA;AAAA,UACH,WAAA,EAAa;AAAA,YACX,MAAM,UAAA,CAAW,IAAA;AAAA,YACjB,OAAA,EAAS,kBAAyC,OAAO,CAAA;AAAA,YACzD,QAAA,EAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,QAAA;AAAA,YAC/B,MAAA,EAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAAE;AAAA;AAC/B;AACF,OACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAAuB,CAAC,CAAA;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,mBAAA,GAAsB,OAAO,IAAA,KAAgC;AAC3D,IAAA,IAAI,EAAE,IAAA,GAAO,EAAC,EAAG,IAAA,EAAM,IAAG,GAAI,IAAA;AAC9B,IAAA,IAAI,SAAA,GAAY,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,CAAC,EAAE,MAAA,EAAAzB,OAAAA,EAAO,KAAMA,OAAAA,EAAQ,IAAA,KAAS,IAAI,CAAA;AAC3E,IAAA,IAAI,SAAS,SAAA,EAAW,MAAA;AACxB,IAAA,IAAI,OAAO,MAAA,KAAW,UAAA,IAAc,SAAA,EAAW;AAC7C,MAAA,IAAI;AACF,QAAA,OAAO;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,MAAM,OAAA,CAAQ,OAAA;AAAA,YACxB,MAAA,CAAO;AAAA,cACL,IAAA,EAAM,EAAE,GAAG,sBAAA,CAAuB,UAAU,MAAM,CAAA,EAAG,GAAG,IAAA,EAAK;AAAA,cAC7D,QAAA,EAAU;AAAA,aACX;AAAA;AACH,SACF;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,IAAA,CAAK,gCAAA,EAA6B,IAAA,EAAM,EAAA,EAAI,CAAC,CAAA;AACrD,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;;;ACxXO,SAAS,0BACd,OAAA,EACuB;AACvB,EAAA,IAAI,OAAA,GAAU0B,mCAAmC,OAAO,CAAA;AACxD,EAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,IACb,CAAC,EAAE,IAAA,EAAK,KAAM,SAAS,cAAA,IAAkB,CAAC,IAAA,CAAK,UAAA,CAAW,UAAU;AAAA,GACtE;AACF;AAEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,UAAA,EACE,+EAAA;AAAA,EACF,UAAA,EACE,+EAAA;AAAA,EACF,KAAA,EACE,gFAAA;AAAA,EACF,QAAA,EACE,qFAAA;AAAA,EACF,QAAA,EACE,qFAAA;AAAA,EACF,YAAA,EACE,0FAAA;AAAA,EACF,YAAA,EACE,2FAAA;AAAA,EACF,YAAA,EACE,6FAAA;AAAA,EACF,YAAA,EACE,2FAAA;AAAA,EACF,YAAA,EACE,0FAAA;AAAA,EACF,YAAA,EACE,6FAAA;AAAA,EACF,SAAA,EACE,0FAAA;AAAA,EACF,SAAA,EACE,wFAAA;AAAA,EACF,SAAA,EACE,yFAAA;AAAA,EACF,SAAA,EACE,yFAAA;AAAA,EACF,SAAA,EACE,4FAAA;AAAA,EACF,SAAA,EACE,yFAAA;AAAA,EACF,SAAA,EACE,4FAAA;AAAA,EACF,SAAA,EACE,wFAAA;AAAA,EACF,SAAA,EACE,wFAAA;AAAA,EACF,UAAA,EACE,yFAAA;AAAA,EACF,UAAA,EACE,wFAAA;AAAA,EACF,UAAA,EACE,4FAAA;AAAA,EACF,UAAA,EACE,yFAAA;AAAA,EACF,UAAA,EACE,wFAAA;AAAA,EACF,UAAA,EACE,wFAAA;AAAA,EACF,UAAA,EACE,yFAAA;AAAA,EACF,UAAA,EACE,0FAAA;AAAA,EACF,UAAA,EACE;AACJ","file":"index.js","sourcesContent":["import { useMatches, type UIMatch } from 'react-router'\n\n// Route-keyed data structure interfaces\nexport interface RouteKeyedDataContext {\n root?: Record<string, unknown>\n [routeKey: `routes/${string}`]: Record<string, unknown>\n}\n\n// Flat route-keyed data context: {root: {...}, \"routes/xxx\": {...}}\nexport type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>\n\n/**\n * Creates flat route-keyed structure from matches\n * Target: {root: {...rootData}, \"routes/product\": {...productData}}\n * Eliminates all duplication by using route IDs as keys\n */\nfunction createFlatDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n const context: WeaverseDataContext = {}\n \n // Process matches from root to leaf, creating route-keyed structure\n for (const match of matches) {\n if (match.data && typeof match.data === 'object') {\n // Use route ID as key (e.g., \"root\", \"routes/product\")\n context[match.id] = match.data\n }\n }\n \n return context\n}\n\n/**\n * Hook to get flat route-keyed data context from matches\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n * No more useLoaderData dependency - everything comes from matches\n */\nexport function useWeaverseDataContext(): WeaverseDataContext {\n const matches = useMatches()\n \n // Create flat route-keyed structure - eliminates duplication\n return createFlatDataContext(matches)\n}\n\n/**\n * Helper function to create flat route-keyed data context from useMatches() result\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n */\nexport function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n // Create flat route-keyed structure - clean and efficient\n return createFlatDataContext(matches)\n}\n\n/**\n * Type guard to check if data is WeaverseDataContext (simplified)\n */\nexport function isWeaverseDataContext(data: unknown): data is WeaverseDataContext {\n return data !== null && typeof data === 'object'\n}","import { createSchema, type SchemaType } from '@weaverse/schema'\nimport type { HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps } 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*/\nfunction Main(props: HydrogenComponentProps & HTMLAttributes<HTMLDivElement>) {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\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: SchemaType = createSchema({\n type: 'main',\n title: 'Main',\n})\n","import type { HydrogenComponent } from '~/types'\nimport * as Main from './main'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import type { HydrogenContext, I18nBase } from '@shopify/hydrogen'\nimport type {\n AppLoadContext,\n LoaderFunctionArgs as RemixOxygenLoaderArgs,\n} from '@shopify/remix-oxygen'\nimport type {\n ElementData,\n PositionInputValue,\n WeaverseCoreParams,\n WeaverseElement,\n WeaverseImage,\n WeaverseProjectDataType,\n WeaverseResourcePickerData,\n WeaverseVideo,\n} from '@weaverse/react'\nimport type {\n // Enhanced type exports from schema package\n BasicInput,\n HeadingInput,\n InputType,\n InspectorGroup,\n PageType,\n ComponentPresets as SchemaComponentPresets,\n SchemaType,\n SchemaValidationIssue,\n SchemaValidationResult,\n} from '@weaverse/schema'\n\nimport type * as React from 'react'\nimport type { ForwardRefExoticComponent } from 'react'\nimport type { NavigateFunction } from 'react-router'\nimport type { ThemeSettingsStore } from './utils/use-theme-settings-store'\nimport type { WeaverseHydrogen } from './WeaverseHydrogenRoot'\nimport type { WeaverseClient } from './weaverse-client'\n\n// Re-export types from schema for backward compatibility and convenience\nexport type {\n PositionInputValue,\n WeaverseImage,\n WeaverseVideo,\n PageType,\n InspectorGroup,\n // Enhanced type exports\n BasicInput,\n HeadingInput,\n InputType,\n SchemaValidationResult,\n SchemaValidationIssue,\n}\n\nexport type AllCacheOptions = {\n mode?:\n | 'must-revalidate'\n | 'no-cache'\n | 'no-store'\n | 'private'\n | 'public'\n | string\n maxAge?: number\n staleWhileRevalidate?: number\n sMaxAge?: number\n staleIfError?: number\n}\n\nexport type ComponentLoaderArgs<T = any, _E = any> = {\n data: T\n weaverse: WeaverseClient\n}\n\nexport interface RouteLoaderArgs extends RemixOxygenLoaderArgs {\n context: AppLoadContext & {\n weaverse: WeaverseClient\n }\n}\n\nexport interface HydrogenComponentData extends ElementData {\n data?: { [key: string]: any }\n children?: { id: string }[]\n createdAt?: string\n updatedAt?: string\n deletedAt?: string\n}\n\n/**\n * Optimized: Use Zod-inferred SchemaType directly instead of extending\n * This ensures perfect type consistency with the schema validation\n */\nexport type HydrogenComponentSchema = SchemaType\n\nexport interface HydrogenComponentProps<L = any> extends WeaverseElement {\n className?: string\n loaderData?: L\n children?: React.JSX.Element[]\n}\n\nexport type WeaverseLoaderRequestInfo = {\n search: string\n pathname: string\n queries: { [key: string]: string | boolean }\n i18n: WeaverseI18n\n}\n\nexport type HydrogenThemeSettings = {\n [key: string]: any\n}\n\nexport type HydrogenProjectType = {\n id: string\n weaverseShopId: string\n name: string\n [key: string]: any\n}\n\nexport type WeaverseInternal = {\n pageAssignment: HydrogenPageAssignment\n project: HydrogenProjectType\n navigate: NavigateFunction\n revalidate: () => void\n themeSettingsStore: ThemeSettingsStore\n}\n\n/**\n * Optimized: Use direct type alias to maintain consistency\n */\nexport type HydrogenComponentPresets = SchemaComponentPresets\n\nexport type HydrogenElement = {\n Component:\n | ForwardRefExoticComponent<HydrogenComponentProps>\n | ((props: HydrogenComponentProps) => React.JSX.Element)\n type: string\n schema?: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport interface WeaverseHydrogenParams\n extends Omit<WeaverseCoreParams, 'ItemConstructor'> {\n data: HydrogenPageData\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n dataContext?: Record<string, unknown> | null\n}\n\nexport type HydrogenComponent<T extends HydrogenComponentProps = any> = {\n default: ForwardRefExoticComponent<T> | ((props: T) => React.JSX.Element)\n schema: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport type WeaverseStudioQueries = {\n weaverseProjectId: string\n weaverseApiKey: string\n weaverseHost: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode?: boolean\n sectionType?: string\n}\n\nexport type PublicEnv = {\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n}\n\nexport type WeaverseProjectConfigs = {\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n publicEnv?: PublicEnv\n}\n\nexport type HydrogenPageAssignment = {\n projectId: string\n type: PageType\n handle: string\n locale: string\n}\n\nexport type WeaverseLoaderData = {\n configs: Omit<WeaverseProjectConfigs, 'publicEnv'> & {\n requestInfo: WeaverseLoaderRequestInfo\n }\n page: HydrogenPageData\n project: HydrogenProjectType\n pageAssignment: HydrogenPageAssignment\n}\n\nexport interface HydrogenPageData extends WeaverseProjectDataType {\n id: string\n name: string\n items: HydrogenComponentData[]\n __cacheId?: string\n [key: string]: any\n}\n\nexport type WeaverseI18n = I18nBase & {\n label?: string\n pathPrefix?: string\n [key: string]: any\n}\n\nexport type HydrogenThemeSchema = {\n info: {\n name: string\n version: string\n author: string\n authorProfilePhoto: string\n documentationUrl: string\n supportUrl: string\n }\n /** @deprecated Use settings instead */\n inspector?: InspectorGroup[]\n settings?: InspectorGroup[]\n i18n?: {\n urlStructure: 'url-path' | 'subdomain' | 'top-level-domain'\n defaultLocale: WeaverseI18n\n shopLocales: WeaverseI18n[]\n }\n}\n\nexport type FetchProjectRequestBody = {\n projectId: string\n url: string\n i18n?: WeaverseI18n\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n}\n\nexport type FetchProjectPayload = {\n page?: HydrogenPageData // Page might be missing for some routes\n project?: HydrogenProjectType // Project might be missing in error cases\n pageAssignment?: HydrogenPageAssignment // PageAssignment might be missing\n error?: string\n [key: string]: any // Allow additional properties from API response\n}\n\nexport type WeaverseClientArgs = HydrogenContext & {\n components: HydrogenComponent[]\n themeSchema: HydrogenThemeSchema\n request: Request\n cache: Cache\n}\n\nexport type WeaverseProduct = WeaverseResourcePickerData\nexport type WeaverseCollection = WeaverseResourcePickerData\nexport type WeaverseBlog = WeaverseResourcePickerData\nexport type WeaverseArticle = WeaverseResourcePickerData\nexport type WeaverseMetaObject = WeaverseResourcePickerData\n\n/**\n * Response types for improved type safety\n */\n\n// Response wrapper from withCache.fetch\nexport type WithCacheFetchResponse<T> = {\n data: T\n response: Response\n}\n\n// Theme settings response structure\nexport type ThemeSettingsResponse = {\n theme?: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\n// Direct fetch response structure\nexport type DirectFetchResponse<T = unknown> = {\n data?: T\n error?: string\n}\n\n// Cache response validation function type\nexport type CacheResponseValidator<T = unknown> = (\n response: WithCacheFetchResponse<T> | T\n) => boolean\n\n// Weaverse Error class for better error handling\nexport class WeaverseError extends Error {\n public readonly code: string\n public readonly statusCode?: number\n public readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code = 'WEAVERSE_ERROR',\n statusCode?: number,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WeaverseError'\n this.code = code\n this.statusCode = statusCode\n this.context = context\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, WeaverseError)\n }\n }\n}\n\n/**\n * Type guards for response validation\n */\n\nexport function isWithCacheFetchResponse<T>(\n response: unknown\n): response is WithCacheFetchResponse<T> {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'response' in response\n )\n}\n\nexport function isFetchProjectPayload(\n payload: unknown\n): payload is FetchProjectPayload {\n return (\n typeof payload === 'object' &&\n payload !== null &&\n 'page' in payload &&\n 'project' in payload &&\n 'pageAssignment' in payload\n )\n}\n\nexport function hasError(response: unknown): response is { error: string } {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as Record<string, unknown>).error === 'string'\n )\n}\n\nexport function isThemeSettingsResponse(\n data: unknown\n): data is ThemeSettingsResponse {\n return (\n typeof data === 'object' &&\n data !== null &&\n (data as any).theme !== undefined\n )\n}\n\n/**\n * Enhanced type utilities for better development experience\n */\nexport type HydrogenSchemaValidationResult =\n SchemaValidationResult<HydrogenComponentSchema>\n\n/**\n * Type guard to check if a schema is valid\n */\nexport function isValidHydrogenSchema(\n schema: unknown\n): schema is HydrogenComponentSchema {\n // We can leverage the validation from the schema package\n return (\n typeof schema === 'object' &&\n schema !== null &&\n 'type' in schema &&\n 'title' in schema\n )\n}\n\n/**\n * Type-safe helper to create component schemas with validation\n */\nexport type CreateHydrogenSchemaOptions = {\n title: string\n type: string\n limit?: number\n settings?: InspectorGroup[]\n childTypes?: string[]\n enabledOn?: {\n pages?: PageType[]\n groups?: ('*' | 'header' | 'footer' | 'body')[]\n }\n presets?: {\n children?: SchemaComponentPresets[]\n [key: string]: any\n }\n}\n\ndeclare global {\n interface Window {\n __weaverse: WeaverseHydrogen\n __weaverses: Record<string, WeaverseHydrogen>\n __weaverseThemeSettingsStore: ThemeSettingsStore\n }\n}\n\ndeclare module '@shopify/remix-oxygen' {\n interface AppLoadContext {\n weaverse: WeaverseClient\n }\n}\n\ndeclare module '@shopify/hydrogen' {\n interface HydrogenEnv {\n WEAVERSE_PROJECT_ID: string\n WEAVERSE_HOST?: string\n WEAVERSE_API_BASE?: string\n WEAVERSE_API_KEY: string\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n PUBLIC_GOOGLE_GTM_ID: string\n JUDGEME_PRIVATE_API_TOKEN: string\n CUSTOM_COLLECTION_BANNER_METAFIELD: string\n METAOBJECT_COLORS_TYPE: string\n METAOBJECT_COLOR_NAME_KEY: string\n METAOBJECT_COLOR_VALUE_KEY: string\n KLAVIYO_PRIVATE_API_TOKEN: string\n PUBLIC_SHOPIFY_INBOX_SHOP_ID: string\n }\n}\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from '../types'\n\n// Track warned types to avoid spam\nlet warnedTypes = new Set<string>()\n\nfunction logOnce(type: string, message: string) {\n if (!warnedTypes.has(type)) {\n console.warn(message)\n warnedTypes.add(type)\n }\n}\n\nfunction deepMergeArrays<T>(target: T[], source: T[]): T[] {\n return [...target, ...source]\n}\n\nfunction mergeInspectorSettings(\n settings: any[],\n inspector: any[],\n type: string\n): any[] {\n if (!inspector?.length) {\n return settings\n }\n if (!settings?.length) {\n return inspector\n }\n\n // Log collision notice\n console.info(\n `Schema \"${type}\": Both 'settings' and 'inspector' found. Using 'settings' with 'inspector' as fallback.`\n )\n\n return deepMergeArrays(settings, inspector)\n}\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 WEAVERSE_API_BASE,\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 isPreviewMode,\n sectionType,\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 weaverseApiBase:\n WEAVERSE_API_BASE ||\n envFromProcess.WEAVERSE_API_BASE ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://api.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode,\n isPreviewMode,\n sectionType: sectionType || '',\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 schema: HydrogenComponentSchema | HydrogenThemeSchema\n) {\n let data: Record<string, any> = {}\n\n // Handle migration from inspector to settings\n let inspectorGroups: any[] = []\n\n // Type guard to check if it's a component schema\n const isComponentSchema = (\n s: HydrogenComponentSchema | HydrogenThemeSchema\n ): s is HydrogenComponentSchema => {\n return 'type' in s && typeof s.type === 'string'\n }\n\n if (isComponentSchema(schema)) {\n // Handle HydrogenComponentSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n schema.type || 'unknown'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n if (schema.type) {\n logOnce(\n schema.type,\n `⚠️ Schema \"${schema.type}\": The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n } else {\n // Handle HydrogenThemeSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n 'Theme Schema'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n logOnce(\n 'ThemeSchema',\n `⚠️ Theme Schema: The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n\n if (inspectorGroups?.length) {\n for (let group of inspectorGroups) {\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\nfunction recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object\n) {\n let component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIds = []\n let id = crypto.randomUUID()\n let { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (let c of children) {\n let { type, children, ...data } = c\n let childId = recursivelyAddDataItem(type, components, items, data)\n childIds.push({ id: childId } as never)\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIds,\n })\n return id\n}\n\nexport function getPreviewData(\n type: string,\n components: HydrogenComponent[],\n weaverseHost: string\n) {\n let items = []\n return {\n project: { id: 'x', weaverseShopId: 'shop-id', name: 'Section Preview' },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n page: {\n id: 'weaverse-preview-page',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [{ id: recursivelyAddDataItem(type, components, items) }],\n },\n ...items,\n ],\n },\n } as unknown as WeaverseLoaderData\n}\n","import { EventEmitter, isBrowser } from '@weaverse/react'\nimport { useRouteLoaderData } from 'react-router'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n PublicEnv,\n} from '~/types'\n\ntype WeaverseThemeData = {\n theme: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\nexport class ThemeSettingsStore extends EventEmitter {\n settings: HydrogenThemeSettings = {}\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: WeaverseThemeData) {\n super()\n let { theme, schema, publicEnv } = data || {}\n this.settings = { ...theme }\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 getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as { weaverseTheme: WeaverseThemeData }\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n","import { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from 'react-router'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings-store'\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\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) {\n return\n }\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => img.remove()\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import {\n isBrowser,\n type PlatformTypeEnum,\n replaceContentDataConnectorsDeep,\n useSafeExternalStore,\n Weaverse,\n WeaverseItemStore,\n WeaverseRoot,\n} from '@weaverse/react'\nimport { createWeaverseDataContext } from './hooks/use-weaverse-data-context'\nimport {\n type ComponentType,\n createContext,\n type JSX,\n memo,\n Suspense,\n} from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { Await, useMatches } from 'react-router'\nimport { defaultComponents } from '~/components'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n HydrogenThemeSettings,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './index'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { generateDataFromSchema } from './utils'\nimport { useStudio } from './utils/use-studio'\nimport { useThemeSettingsStore } from './utils/use-theme-settings-store'\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n const { data, ...rest } = initialData\n if (!this.Element?.schema) {\n console.error('Element is missing schema or not found!')\n return\n }\n const schemaData = generateDataFromSchema(this.Element.schema)\n Object.assign(this._store, schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode: boolean\n sectionType: string\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 const { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n // Assign configuration properties\n this.projectId = params.projectId\n this.weaverseHost = params.weaverseHost\n this.weaverseApiBase = params.weaverseApiBase\n this.weaverseApiKey = params.weaverseApiKey\n this.weaverseVersion = params.weaverseVersion || ''\n this.isDesignMode = params.isDesignMode ?? false\n this.isPreviewMode = params.isPreviewMode ?? false\n this.sectionType = params.sectionType || ''\n }\n}\n\nfunction createWeaverseInstance(\n params: WeaverseHydrogenParams\n): WeaverseHydrogen {\n if (isBrowser) {\n // Check if the weaverse instance already exists in the window object\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n // If the weaverse instance does not exist, or the pathname or search has changed, create a new instance\n if (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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\nconst StudioBridge = memo(({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n})\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n dataContext?: Record<string, any>\n}) {\n const { data, components, dataContext } = props\n for (const comp of [...components, ...defaultComponents]) {\n comp?.schema?.type &&\n registerComponent({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n const { page, configs, project, pageAssignment } = data || {}\n\n // Process page items with deep data connector replacement\n // This ensures all nested strings in the page structure get replaced\n let processedPage = page\n if (page && dataContext) {\n processedPage = replaceContentDataConnectorsDeep(page, dataContext)\n }\n\n const weaverse = createWeaverseInstance({\n ...configs,\n dataContext,\n data: processedPage,\n pageId: processedPage?.id,\n internal: { project, pageAssignment },\n })\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <StudioBridge context={weaverse} />\n </>\n )\n}\n\nexport function registerComponent(element: HydrogenElement) {\n WeaverseHydrogen.registerElement(element)\n}\n\nexport const WeaverseHydrogenRoot = memo(\n ({\n components,\n errorComponent: ErrorComponent = ({ error }) => (\n <div>{error?.message || 'An unexpected error occurred'}</div>\n ),\n }: {\n components: HydrogenComponent[]\n errorComponent?: React.FC<{ error: any }>\n }) => {\n const matches = useMatches()\n\n // Create flat route-keyed data context from matches only\n // No more useLoaderData dependency - everything comes from matches\n const enhancedDataContext = createWeaverseDataContext(matches)\n\n // Find weaverseData from matches instead of useLoaderData\n // Look through matches to find the one containing weaverseData\n let weaverseData: WeaverseLoaderData | Promise<WeaverseLoaderData> | null =\n null\n\n for (const match of matches) {\n if (\n match.data &&\n typeof match.data === 'object' &&\n match.data !== null &&\n 'weaverseData' in match.data\n ) {\n weaverseData = match.data.weaverseData as\n | WeaverseLoaderData\n | Promise<WeaverseLoaderData>\n break\n }\n }\n\n if (weaverseData) {\n if (weaverseData instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent as any}>\n <Suspense>\n <Await resolve={weaverseData}>\n {(resolvedData) => (\n <RenderRoot\n components={components}\n data={resolvedData}\n dataContext={enhancedDataContext}\n />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return (\n <RenderRoot\n components={components}\n data={weaverseData}\n dataContext={enhancedDataContext}\n />\n )\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data found in route matches!' }}\n />\n )\n }\n)\n\nconst ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(null)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n const { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n const themeSettingsStore = useThemeSettingsStore()\n const settings = useSafeExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot\n )\n return settings as T\n}\n","import {\n createWithCache,\n type HydrogenEnv,\n type I18nBase,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n HydrogenComponentData,\n HydrogenPageData,\n PageType,\n ThemeSettingsResponse,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n WithCacheFetchResponse,\n} from './types'\nimport { hasError } from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'v1' as const\n\nconst DEFAULT_CACHE_STRATEGY: AllCacheOptions = {\n maxAge: 10,\n sMaxAge: 10,\n staleWhileRevalidate: 82_800, // 23 hours\n staleIfError: 82_800, // 23 hours\n} as const\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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.withCache = createWithCache({\n cache,\n waitUntil: waitUntil || (() => Promise.resolve()),\n request,\n })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiBase: this.configs.weaverseApiBase,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode - returns same format as withCache.fetch\n private readonly directFetch = async <T>(\n url: string,\n options: RequestInit = {}\n ): Promise<WithCacheFetchResponse<T>> => {\n try {\n let response = await fetch(url, options)\n if (!response.ok) {\n let error = await response.text()\n throw new Error(`${response.status} ${response.statusText} ${error}`)\n }\n let data = (await response.json()) as T\n // Return same wrapped format as withCache.fetch\n return {\n data,\n response,\n }\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n // Helper method for building API URLs consistently\n private getApiUrl(\n endpoint: string,\n useProxy = !this.configs.isDesignMode\n ): string {\n const { weaverseHost, weaverseApiBase, projectId } = this.configs\n\n if (useProxy) {\n return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`\n }\n\n return `${weaverseHost}/api/public/${endpoint}`\n }\n\n public fetchWithCache = async <T = unknown>(\n url: string,\n options: RequestInit & { strategy?: AllCacheOptions } = {}\n ): Promise<T> => {\n const strategy =\n options.strategy || this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY)\n\n // Improved cache key to include method and body content\n const cacheKey = [url, options.method || 'GET', options.body]\n\n let result: WithCacheFetchResponse<T>\n\n if (this.configs.isDesignMode) {\n result = await this.directFetch<T>(url, options)\n } else {\n // Use withCache.fetch for better integration with Hydrogen's caching system\n result = (await this.withCache.fetch(url, options, {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResponse: (response: any): boolean => {\n // Cache any non-error response (for both Weaverse API and third-party APIs)\n return (\n !hasError(response) && response !== null && response !== undefined\n )\n },\n displayName: 'Weaverse API',\n })) as WithCacheFetchResponse<T>\n }\n\n return result.data\n }\n\n loadThemeSettings = async (\n strategy?: AllCacheOptions\n ): Promise<ThemeSettingsResponse> => {\n let defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n try {\n let { configs } = this\n let { projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let url = this.getApiUrl('project_configs')\n\n let body = JSON.stringify({ isDesignMode, projectId })\n let data: ThemeSettingsResponse =\n await this.fetchWithCache<ThemeSettingsResponse>(url, {\n method: 'POST',\n strategy,\n body,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n })\n\n // Validate that data is a proper object, not corrupted/compressed content\n if (typeof data !== 'object' || data === null) {\n console.warn(\n 'Invalid theme settings response format, using defaults:',\n {\n type: typeof data,\n isString: typeof data === 'string',\n length: typeof data === 'string' ? (data as string).length : 'N/A',\n preview:\n typeof data === 'string'\n ? `${(data as string).substring(0, 50)}...`\n : String(data),\n }\n )\n data = { theme: defaultThemeSettings }\n }\n\n if (this.themeSchema?.settings || this.themeSchema?.inspector) {\n // Ensure data.theme exists and is an object before merging\n if (!data.theme || typeof data.theme !== 'object') {\n data.theme = defaultThemeSettings\n } else {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema:\n this.themeSchema && typeof this.themeSchema === 'object'\n ? {\n ...this.themeSchema,\n settings: this.themeSchema?.settings?.map((group) => ({\n ...group,\n inputs: group?.inputs?.map((input) => {\n if (typeof input?.condition === 'function') {\n return {\n ...input,\n condition: input.condition.toString(),\n }\n }\n return input\n }),\n })),\n }\n : undefined,\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return { theme: defaultThemeSettings }\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: {\n type?: PageType\n locale?: string\n handle?: string\n strategy?: AllCacheOptions\n } = {}\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, weaverseHost, isPreviewMode, sectionType } = this.configs\n\n if (isPreviewMode) {\n return getPreviewData(sectionType || '', this.components, weaverseHost)\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: {\n projectId: string\n url: string\n i18n?: I18nBase\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n } = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n }\n let url = this.getApiUrl('project')\n\n let projectData: FetchProjectPayload =\n await this.fetchWithCache<FetchProjectPayload>(url, {\n ...reqInit,\n strategy,\n })\n\n if (hasError(projectData)) {\n throw new Error(projectData.error)\n }\n\n // Extract what we can from the response\n let { page, project, pageAssignment } = projectData as any\n\n if (!project) {\n console.warn('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n }\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 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 console.error('❌ Page load failed.', e)\n return null\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' && component) {\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'\nimport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\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\nexport const 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\n// Re-export utilities from @weaverse/react\nexport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n}\n\n// Export Hydrogen-specific hooks\nexport {\n createWeaverseDataContext,\n useWeaverseDataContext,\n type WeaverseDataContext,\n} from './hooks/use-weaverse-data-context'\n\n// Re-export all types and utilities from schema package\nexport * from '@weaverse/schema'\nexport * from './components'\n// Export hydrogen-specific modules\nexport * from './types'\nexport * from './utils'\nexport * from './WeaverseHydrogenRoot'\nexport * from './weaverse-client'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/main.tsx","../src/components/index.ts","../src/hooks/use-weaverse-data-context.ts","../src/types.ts","../src/utils/index.ts","../src/utils/use-theme-settings-store.ts","../src/utils/use-studio.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/index.ts"],"names":["jsx","createSchema","useMatches","schema","type","children","data","EventEmitter","isBrowser","useRouteLoaderData","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","WeaverseItemStore","Weaverse","memo","replaceContentDataConnectorsDeep","jsxs","Fragment","WeaverseRoot","ErrorBoundary","Suspense","Await","createContext","useSafeExternalStore","createWithCache","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { createSchema, type SchemaType } from '@weaverse/schema'\nimport type { HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps } 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*/\nfunction Main(props: HydrogenComponentProps & HTMLAttributes<HTMLDivElement>) {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\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: SchemaType = createSchema({\n type: 'main',\n title: 'Main',\n})\n","import type { HydrogenComponent } from '~/types'\nimport * as Main from './main'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { useMatches, type UIMatch } from 'react-router'\n\n// Route-keyed data structure interfaces\nexport interface RouteKeyedDataContext {\n root?: Record<string, unknown>\n [routeKey: `routes/${string}`]: Record<string, unknown>\n}\n\n// Flat route-keyed data context: {root: {...}, \"routes/xxx\": {...}}\nexport type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>\n\n/**\n * Creates flat route-keyed structure from matches\n * Target: {root: {...rootData}, \"routes/product\": {...productData}}\n * Eliminates all duplication by using route IDs as keys\n */\nfunction createFlatDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n const context: WeaverseDataContext = {}\n \n // Process matches from root to leaf, creating route-keyed structure\n for (const match of matches) {\n if (match.data && typeof match.data === 'object') {\n // Use route ID as key (e.g., \"root\", \"routes/product\")\n context[match.id] = match.data\n }\n }\n \n return context\n}\n\n/**\n * Hook to get flat route-keyed data context from matches\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n * No more useLoaderData dependency - everything comes from matches\n */\nexport function useWeaverseDataContext(): WeaverseDataContext {\n const matches = useMatches()\n \n // Create flat route-keyed structure - eliminates duplication\n return createFlatDataContext(matches)\n}\n\n/**\n * Helper function to create flat route-keyed data context from useMatches() result\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n */\nexport function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n // Create flat route-keyed structure - clean and efficient\n return createFlatDataContext(matches)\n}\n\n/**\n * Type guard to check if data is WeaverseDataContext (simplified)\n */\nexport function isWeaverseDataContext(data: unknown): data is WeaverseDataContext {\n return data !== null && typeof data === 'object'\n}","import type { HydrogenContext, I18nBase } from '@shopify/hydrogen'\nimport type {\n AppLoadContext,\n LoaderFunctionArgs as RemixOxygenLoaderArgs,\n} from '@shopify/remix-oxygen'\nimport type {\n ElementData,\n PositionInputValue,\n WeaverseCoreParams,\n WeaverseElement,\n WeaverseImage,\n WeaverseProjectDataType,\n WeaverseResourcePickerData,\n WeaverseVideo,\n} from '@weaverse/react'\nimport type {\n // Enhanced type exports from schema package\n BasicInput,\n HeadingInput,\n InputType,\n InspectorGroup,\n PageType,\n ComponentPresets as SchemaComponentPresets,\n SchemaType,\n SchemaValidationIssue,\n SchemaValidationResult,\n} from '@weaverse/schema'\n\nimport type * as React from 'react'\nimport type { ForwardRefExoticComponent } from 'react'\nimport type { NavigateFunction } from 'react-router'\nimport type { ThemeSettingsStore } from './utils/use-theme-settings-store'\nimport type { WeaverseHydrogen } from './WeaverseHydrogenRoot'\nimport type { WeaverseClient } from './weaverse-client'\n\n// Re-export types from schema for backward compatibility and convenience\nexport type {\n PositionInputValue,\n WeaverseImage,\n WeaverseVideo,\n PageType,\n InspectorGroup,\n // Enhanced type exports\n BasicInput,\n HeadingInput,\n InputType,\n SchemaValidationResult,\n SchemaValidationIssue,\n}\n\nexport type AllCacheOptions = {\n mode?:\n | 'must-revalidate'\n | 'no-cache'\n | 'no-store'\n | 'private'\n | 'public'\n | string\n maxAge?: number\n staleWhileRevalidate?: number\n sMaxAge?: number\n staleIfError?: number\n}\n\nexport type ComponentLoaderArgs<T = any, _E = any> = {\n data: T\n weaverse: WeaverseClient\n}\n\nexport interface RouteLoaderArgs extends RemixOxygenLoaderArgs {\n context: AppLoadContext & {\n weaverse: WeaverseClient\n }\n}\n\nexport interface HydrogenComponentData extends ElementData {\n data?: { [key: string]: any }\n children?: { id: string }[]\n createdAt?: string\n updatedAt?: string\n deletedAt?: string\n}\n\n/**\n * Optimized: Use Zod-inferred SchemaType directly instead of extending\n * This ensures perfect type consistency with the schema validation\n */\nexport type HydrogenComponentSchema = SchemaType\n\nexport interface HydrogenComponentProps<L = any> extends WeaverseElement {\n className?: string\n loaderData?: L\n children?: React.JSX.Element[]\n}\n\nexport type WeaverseLoaderRequestInfo = {\n search: string\n pathname: string\n queries: { [key: string]: string | boolean }\n i18n: WeaverseI18n\n}\n\nexport type HydrogenThemeSettings = {\n [key: string]: any\n}\n\nexport type HydrogenProjectType = {\n id: string\n weaverseShopId: string\n name: string\n [key: string]: any\n}\n\nexport type WeaverseInternal = {\n pageAssignment: HydrogenPageAssignment\n project: HydrogenProjectType\n navigate: NavigateFunction\n revalidate: () => void\n themeSettingsStore: ThemeSettingsStore\n}\n\n/**\n * Optimized: Use direct type alias to maintain consistency\n */\nexport type HydrogenComponentPresets = SchemaComponentPresets\n\nexport type HydrogenElement = {\n Component:\n | ForwardRefExoticComponent<HydrogenComponentProps>\n | ((props: HydrogenComponentProps) => React.JSX.Element)\n type: string\n schema?: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport interface WeaverseHydrogenParams\n extends Omit<WeaverseCoreParams, 'ItemConstructor'> {\n data: HydrogenPageData\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n dataContext?: Record<string, unknown> | null\n}\n\nexport type HydrogenComponent<T extends HydrogenComponentProps = any> = {\n default: ForwardRefExoticComponent<T> | ((props: T) => React.JSX.Element)\n schema: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport type WeaverseStudioQueries = {\n weaverseProjectId: string\n weaverseApiKey: string\n weaverseHost: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode?: boolean\n sectionType?: string\n}\n\nexport type PublicEnv = {\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n}\n\nexport type WeaverseProjectConfigs = {\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n publicEnv?: PublicEnv\n}\n\nexport type HydrogenPageAssignment = {\n projectId: string\n type: PageType\n handle: string\n locale: string\n}\n\nexport type WeaverseLoaderData = {\n configs: Omit<WeaverseProjectConfigs, 'publicEnv'> & {\n requestInfo: WeaverseLoaderRequestInfo\n }\n page: HydrogenPageData\n project: HydrogenProjectType\n pageAssignment: HydrogenPageAssignment\n}\n\nexport interface HydrogenPageData extends WeaverseProjectDataType {\n id: string\n name: string\n items: HydrogenComponentData[]\n __cacheId?: string\n [key: string]: any\n}\n\nexport type WeaverseI18n = I18nBase & {\n label?: string\n pathPrefix?: string\n [key: string]: any\n}\n\nexport type HydrogenThemeSchema = {\n info: {\n name: string\n version: string\n author: string\n authorProfilePhoto: string\n documentationUrl: string\n supportUrl: string\n }\n /** @deprecated Use settings instead */\n inspector?: InspectorGroup[]\n settings?: InspectorGroup[]\n i18n?: {\n urlStructure: 'url-path' | 'subdomain' | 'top-level-domain'\n defaultLocale: WeaverseI18n\n shopLocales: WeaverseI18n[]\n }\n}\n\nexport type FetchProjectRequestBody = {\n projectId: string\n url: string\n i18n?: WeaverseI18n\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n}\n\nexport type FetchProjectPayload = {\n page?: HydrogenPageData // Page might be missing for some routes\n project?: HydrogenProjectType // Project might be missing in error cases\n pageAssignment?: HydrogenPageAssignment // PageAssignment might be missing\n error?: string\n [key: string]: any // Allow additional properties from API response\n}\n\nexport type WeaverseClientArgs = HydrogenContext & {\n components: HydrogenComponent[]\n themeSchema: HydrogenThemeSchema\n request: Request\n cache: Cache\n}\n\nexport type WeaverseProduct = WeaverseResourcePickerData\nexport type WeaverseCollection = WeaverseResourcePickerData\nexport type WeaverseBlog = WeaverseResourcePickerData\nexport type WeaverseArticle = WeaverseResourcePickerData\nexport type WeaverseMetaObject = WeaverseResourcePickerData\n\n/**\n * Response types for improved type safety\n */\n\n// Response wrapper from withCache.fetch\nexport type WithCacheFetchResponse<T> = {\n data: T\n response: Response\n}\n\n// Theme settings response structure\nexport type ThemeSettingsResponse = {\n theme?: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\n// Direct fetch response structure\nexport type DirectFetchResponse<T = unknown> = {\n data?: T\n error?: string\n}\n\n// Cache response validation function type\nexport type CacheResponseValidator<T = unknown> = (\n response: WithCacheFetchResponse<T> | T\n) => boolean\n\n// Weaverse Error class for better error handling\nexport class WeaverseError extends Error {\n public readonly code: string\n public readonly statusCode?: number\n public readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code = 'WEAVERSE_ERROR',\n statusCode?: number,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WeaverseError'\n this.code = code\n this.statusCode = statusCode\n this.context = context\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, WeaverseError)\n }\n }\n}\n\n/**\n * Type guards for response validation\n */\n\nexport function isWithCacheFetchResponse<T>(\n response: unknown\n): response is WithCacheFetchResponse<T> {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'response' in response\n )\n}\n\nexport function isFetchProjectPayload(\n payload: unknown\n): payload is FetchProjectPayload {\n return (\n typeof payload === 'object' &&\n payload !== null &&\n 'page' in payload &&\n 'project' in payload &&\n 'pageAssignment' in payload\n )\n}\n\nexport function hasError(response: unknown): response is { error: string } {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as Record<string, unknown>).error === 'string'\n )\n}\n\nexport function isThemeSettingsResponse(\n data: unknown\n): data is ThemeSettingsResponse {\n return (\n typeof data === 'object' &&\n data !== null &&\n (data as any).theme !== undefined\n )\n}\n\n/**\n * Enhanced type utilities for better development experience\n */\nexport type HydrogenSchemaValidationResult =\n SchemaValidationResult<HydrogenComponentSchema>\n\n/**\n * Type guard to check if a schema is valid\n */\nexport function isValidHydrogenSchema(\n schema: unknown\n): schema is HydrogenComponentSchema {\n // We can leverage the validation from the schema package\n return (\n typeof schema === 'object' &&\n schema !== null &&\n 'type' in schema &&\n 'title' in schema\n )\n}\n\n/**\n * Type-safe helper to create component schemas with validation\n */\nexport type CreateHydrogenSchemaOptions = {\n title: string\n type: string\n limit?: number\n settings?: InspectorGroup[]\n childTypes?: string[]\n enabledOn?: {\n pages?: PageType[]\n groups?: ('*' | 'header' | 'footer' | 'body')[]\n }\n presets?: {\n children?: SchemaComponentPresets[]\n [key: string]: any\n }\n}\n\ndeclare global {\n interface Window {\n __weaverse: WeaverseHydrogen\n __weaverses: Record<string, WeaverseHydrogen>\n __weaverseThemeSettingsStore: ThemeSettingsStore\n }\n}\n\ndeclare module '@shopify/remix-oxygen' {\n interface AppLoadContext {\n weaverse: WeaverseClient\n }\n}\n\ndeclare module '@shopify/hydrogen' {\n interface HydrogenEnv {\n WEAVERSE_PROJECT_ID: string\n WEAVERSE_HOST?: string\n WEAVERSE_API_BASE?: string\n WEAVERSE_API_KEY: string\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n PUBLIC_GOOGLE_GTM_ID: string\n JUDGEME_PRIVATE_API_TOKEN: string\n CUSTOM_COLLECTION_BANNER_METAFIELD: string\n METAOBJECT_COLORS_TYPE: string\n METAOBJECT_COLOR_NAME_KEY: string\n METAOBJECT_COLOR_VALUE_KEY: string\n KLAVIYO_PRIVATE_API_TOKEN: string\n PUBLIC_SHOPIFY_INBOX_SHOP_ID: string\n }\n}\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from '../types'\n\n// Track warned types to avoid spam\nlet warnedTypes = new Set<string>()\n\nfunction logOnce(type: string, message: string) {\n if (!warnedTypes.has(type)) {\n console.warn(message)\n warnedTypes.add(type)\n }\n}\n\nfunction deepMergeArrays<T>(target: T[], source: T[]): T[] {\n return [...target, ...source]\n}\n\nfunction mergeInspectorSettings(\n settings: any[],\n inspector: any[],\n type: string\n): any[] {\n if (!inspector?.length) {\n return settings\n }\n if (!settings?.length) {\n return inspector\n }\n\n // Log collision notice\n console.info(\n `Schema \"${type}\": Both 'settings' and 'inspector' found. Using 'settings' with 'inspector' as fallback.`\n )\n\n return deepMergeArrays(settings, inspector)\n}\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 WEAVERSE_API_BASE,\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 isPreviewMode,\n sectionType,\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 weaverseApiBase:\n WEAVERSE_API_BASE ||\n envFromProcess.WEAVERSE_API_BASE ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://api.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode,\n isPreviewMode,\n sectionType: sectionType || '',\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 schema: HydrogenComponentSchema | HydrogenThemeSchema\n) {\n let data: Record<string, any> = {}\n\n // Handle migration from inspector to settings\n let inspectorGroups: any[] = []\n\n // Type guard to check if it's a component schema\n const isComponentSchema = (\n s: HydrogenComponentSchema | HydrogenThemeSchema\n ): s is HydrogenComponentSchema => {\n return 'type' in s && typeof s.type === 'string'\n }\n\n if (isComponentSchema(schema)) {\n // Handle HydrogenComponentSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n schema.type || 'unknown'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n if (schema.type) {\n logOnce(\n schema.type,\n `⚠️ Schema \"${schema.type}\": The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n } else {\n // Handle HydrogenThemeSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n 'Theme Schema'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n logOnce(\n 'ThemeSchema',\n `⚠️ Theme Schema: The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n\n if (inspectorGroups?.length) {\n for (let group of inspectorGroups) {\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\nfunction recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object\n) {\n let component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIds = []\n let id = crypto.randomUUID()\n let { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (let c of children) {\n let { type, children, ...data } = c\n let childId = recursivelyAddDataItem(type, components, items, data)\n childIds.push({ id: childId } as never)\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIds,\n })\n return id\n}\n\nexport function getPreviewData(\n type: string,\n components: HydrogenComponent[],\n weaverseHost: string\n) {\n let items = []\n return {\n project: { id: 'x', weaverseShopId: 'shop-id', name: 'Section Preview' },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n page: {\n id: 'weaverse-preview-page',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [{ id: recursivelyAddDataItem(type, components, items) }],\n },\n ...items,\n ],\n },\n } as unknown as WeaverseLoaderData\n}\n","import { EventEmitter, isBrowser } from '@weaverse/react'\nimport { useRouteLoaderData } from 'react-router'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n PublicEnv,\n} from '~/types'\n\ntype WeaverseThemeData = {\n theme: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\nexport class ThemeSettingsStore extends EventEmitter {\n settings: HydrogenThemeSettings = {}\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: WeaverseThemeData) {\n super()\n let { theme, schema, publicEnv } = data || {}\n this.settings = { ...theme }\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 getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as { weaverseTheme: WeaverseThemeData }\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n","import { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from 'react-router'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings-store'\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\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) {\n return\n }\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => img.remove()\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import {\n isBrowser,\n type PlatformTypeEnum,\n replaceContentDataConnectorsDeep,\n useSafeExternalStore,\n Weaverse,\n WeaverseItemStore,\n WeaverseRoot,\n} from '@weaverse/react'\nimport {\n type ComponentType,\n createContext,\n type JSX,\n memo,\n Suspense,\n} from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { Await, useMatches } from 'react-router'\nimport { defaultComponents } from '~/components'\nimport { createWeaverseDataContext } from './hooks/use-weaverse-data-context'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n HydrogenThemeSettings,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './index'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { generateDataFromSchema } from './utils'\nimport { useStudio } from './utils/use-studio'\nimport { useThemeSettingsStore } from './utils/use-theme-settings-store'\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n const { data, ...rest } = initialData\n if (!this.Element?.schema) {\n console.error('Element is missing schema or not found!')\n return\n }\n const schemaData = generateDataFromSchema(this.Element.schema)\n Object.assign(this._store, schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode: boolean\n sectionType: string\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 const { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n // Assign configuration properties\n this.projectId = params.projectId\n this.weaverseHost = params.weaverseHost\n this.weaverseApiBase = params.weaverseApiBase\n this.weaverseApiKey = params.weaverseApiKey\n this.weaverseVersion = params.weaverseVersion || ''\n this.isDesignMode = params.isDesignMode ?? false\n this.isPreviewMode = params.isPreviewMode ?? false\n this.sectionType = params.sectionType || ''\n }\n}\n\nfunction createWeaverseInstance(\n params: WeaverseHydrogenParams\n): WeaverseHydrogen {\n if (isBrowser) {\n // Check if the weaverse instance already exists in the window object\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n // If the weaverse instance does not exist, or the pathname or search has changed, create a new instance\n if (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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\nconst StudioBridge = memo(({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n})\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n dataContext?: Record<string, any>\n}) {\n const { data, components, dataContext } = props\n for (const comp of [...components, ...defaultComponents]) {\n comp?.schema?.type &&\n registerComponent({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n const { page, configs, project, pageAssignment } = data || {}\n\n // Process page items with deep data connector replacement\n // This ensures all nested strings in the page structure get replaced\n let processedPage = page\n if (page && dataContext) {\n processedPage = replaceContentDataConnectorsDeep(page, dataContext)\n }\n\n const weaverse = createWeaverseInstance({\n ...configs,\n dataContext,\n data: processedPage,\n pageId: processedPage?.id,\n internal: { project, pageAssignment },\n })\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <StudioBridge context={weaverse} />\n </>\n )\n}\n\nexport function registerComponent(element: HydrogenElement) {\n WeaverseHydrogen.registerElement(element)\n}\n\nexport const WeaverseHydrogenRoot = memo(\n ({\n components,\n errorComponent: ErrorComponent = ({ error }) => (\n <div>{error?.message || 'An unexpected error occurred'}</div>\n ),\n }: {\n components: HydrogenComponent[]\n errorComponent?: React.FC<{ error: any }>\n }) => {\n const matches = useMatches()\n\n // Create flat route-keyed data context from matches only\n // No more useLoaderData dependency - everything comes from matches\n const enhancedDataContext = createWeaverseDataContext(matches)\n\n // Find weaverseData from matches instead of useLoaderData\n // Look through matches to find the one containing weaverseData\n let weaverseData: WeaverseLoaderData | Promise<WeaverseLoaderData> | null =\n null\n\n for (const match of matches) {\n if (\n match.data &&\n typeof match.data === 'object' &&\n match.data !== null &&\n 'weaverseData' in match.data\n ) {\n weaverseData = match.data.weaverseData as\n | WeaverseLoaderData\n | Promise<WeaverseLoaderData>\n break\n }\n }\n\n if (weaverseData) {\n if (weaverseData instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent as any}>\n <Suspense>\n <Await resolve={weaverseData}>\n {(resolvedData) => (\n <RenderRoot\n components={components}\n data={resolvedData}\n dataContext={enhancedDataContext}\n />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return (\n <RenderRoot\n components={components}\n data={weaverseData}\n dataContext={enhancedDataContext}\n />\n )\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data found in route matches!' }}\n />\n )\n }\n)\n\nconst ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(null)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n const { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n const themeSettingsStore = useThemeSettingsStore()\n const settings = useSafeExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot\n )\n return settings as T\n}\n","import {\n createWithCache,\n type HydrogenEnv,\n type I18nBase,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n HydrogenComponentData,\n HydrogenPageData,\n PageType,\n ThemeSettingsResponse,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n WithCacheFetchResponse,\n} from './types'\nimport { hasError } from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'v1' as const\n\nconst DEFAULT_CACHE_STRATEGY: AllCacheOptions = {\n maxAge: 10,\n sMaxAge: 10,\n staleWhileRevalidate: 82_800, // 23 hours\n staleIfError: 82_800, // 23 hours\n} as const\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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.withCache = createWithCache({\n cache,\n waitUntil: waitUntil || (() => Promise.resolve()),\n request,\n })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiBase: this.configs.weaverseApiBase,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode - returns same format as withCache.fetch\n private readonly directFetch = async <T>(\n url: string,\n options: RequestInit = {}\n ): Promise<WithCacheFetchResponse<T>> => {\n try {\n let response = await fetch(url, options)\n if (!response.ok) {\n let error = await response.text()\n throw new Error(`${response.status} ${response.statusText} ${error}`)\n }\n let data = (await response.json()) as T\n // Return same wrapped format as withCache.fetch\n return {\n data,\n response,\n }\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n // Helper method for building API URLs consistently\n private getApiUrl(\n endpoint: string,\n useProxy = !this.configs.isDesignMode\n ): string {\n const { weaverseHost, weaverseApiBase, projectId } = this.configs\n\n if (useProxy) {\n return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`\n }\n\n return `${weaverseHost}/api/public/${endpoint}`\n }\n\n public fetchWithCache = async <T = unknown>(\n url: string,\n options: RequestInit & { strategy?: AllCacheOptions } = {}\n ): Promise<T> => {\n const strategy =\n options.strategy || this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY)\n\n // Improved cache key to include method and body content\n const cacheKey = [url, options.method || 'GET', options.body]\n\n let result: WithCacheFetchResponse<T>\n\n if (this.configs.isDesignMode) {\n result = await this.directFetch<T>(url, options)\n } else {\n // Use withCache.fetch for better integration with Hydrogen's caching system\n result = (await this.withCache.fetch(url, options, {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResponse: (response: any): boolean => {\n // Cache any non-error response (for both Weaverse API and third-party APIs)\n return (\n !hasError(response) && response !== null && response !== undefined\n )\n },\n displayName: 'Weaverse API',\n })) as WithCacheFetchResponse<T>\n }\n\n return result.data\n }\n\n loadThemeSettings = async (\n strategy?: AllCacheOptions\n ): Promise<ThemeSettingsResponse> => {\n let defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n try {\n let { configs } = this\n let { projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let url = this.getApiUrl('project_configs')\n\n let body = JSON.stringify({ isDesignMode, projectId })\n let data: ThemeSettingsResponse =\n await this.fetchWithCache<ThemeSettingsResponse>(url, {\n method: 'POST',\n strategy,\n body,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n })\n\n // Validate that data is a proper object, not corrupted/compressed content\n if (typeof data !== 'object' || data === null) {\n console.warn(\n 'Invalid theme settings response format, using defaults:',\n {\n type: typeof data,\n isString: typeof data === 'string',\n length: typeof data === 'string' ? (data as string).length : 'N/A',\n preview:\n typeof data === 'string'\n ? `${(data as string).substring(0, 50)}...`\n : String(data),\n }\n )\n data = { theme: defaultThemeSettings }\n }\n\n if (this.themeSchema?.settings || this.themeSchema?.inspector) {\n // Ensure data.theme exists and is an object before merging\n if (!data.theme || typeof data.theme !== 'object') {\n data.theme = defaultThemeSettings\n } else {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema:\n this.themeSchema && typeof this.themeSchema === 'object'\n ? {\n ...this.themeSchema,\n settings: this.themeSchema?.settings?.map((group) => ({\n ...group,\n inputs: group?.inputs?.map((input) => {\n if (typeof input?.condition === 'function') {\n return {\n ...input,\n condition: input.condition.toString(),\n }\n }\n return input\n }),\n })),\n }\n : undefined,\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return { theme: defaultThemeSettings }\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: {\n type?: PageType\n locale?: string\n handle?: string\n strategy?: AllCacheOptions\n } = {}\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, weaverseHost, isPreviewMode, sectionType } = this.configs\n\n if (isPreviewMode) {\n return getPreviewData(sectionType || '', this.components, weaverseHost)\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: {\n projectId: string\n url: string\n i18n?: I18nBase\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n } = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n }\n let url = this.getApiUrl('project')\n\n let projectData: FetchProjectPayload =\n await this.fetchWithCache<FetchProjectPayload>(url, {\n ...reqInit,\n strategy,\n })\n\n if (hasError(projectData)) {\n throw new Error(projectData.error)\n }\n\n // Extract what we can from the response\n let { page, project, pageAssignment } = projectData as any\n\n if (!project) {\n console.warn('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n }\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 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 console.error('❌ Page load failed.', e)\n return null\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' && component) {\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'\nimport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\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\nexport const 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\n// Re-export utilities from @weaverse/react\nexport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n}\n\n// Re-export all types and utilities from schema package\nexport * from '@weaverse/schema'\nexport * from './components'\n// Export Hydrogen-specific hooks\nexport {\n createWeaverseDataContext,\n useWeaverseDataContext,\n type WeaverseDataContext,\n} from './hooks/use-weaverse-data-context'\n// Export hydrogen-specific modules\nexport * from './types'\nexport * from './utils'\nexport * from './WeaverseHydrogenRoot'\nexport * from './weaverse-client'\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createWithCache, getSelectedProductOptions as getSelectedProductOptions$1 } from '@shopify/hydrogen';
|
|
2
2
|
import { Weaverse, WeaverseItemStore, loadScript, replaceContentDataConnectorsDeep, WeaverseRoot, isBrowser, EventEmitter, useSafeExternalStore } from '@weaverse/react';
|
|
3
3
|
export { isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
|
-
import { useMatches, Await, useRevalidator, useNavigation, useLocation, useNavigate, useRouteLoaderData } from 'react-router';
|
|
5
4
|
import { createSchema } from '@weaverse/schema';
|
|
6
5
|
export * from '@weaverse/schema';
|
|
7
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
import { useMatches, Await, useRevalidator, useNavigation, useLocation, useNavigate, useRouteLoaderData } from 'react-router';
|
|
8
8
|
import { memo, Suspense, createContext, useEffect } from 'react';
|
|
9
9
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
10
10
|
|
|
@@ -13,22 +13,6 @@ var __export = (target, all) => {
|
|
|
13
13
|
for (var name in all)
|
|
14
14
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15
15
|
};
|
|
16
|
-
function createFlatDataContext(matches) {
|
|
17
|
-
const context = {};
|
|
18
|
-
for (const match of matches) {
|
|
19
|
-
if (match.data && typeof match.data === "object") {
|
|
20
|
-
context[match.id] = match.data;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return context;
|
|
24
|
-
}
|
|
25
|
-
function useWeaverseDataContext() {
|
|
26
|
-
const matches = useMatches();
|
|
27
|
-
return createFlatDataContext(matches);
|
|
28
|
-
}
|
|
29
|
-
function createWeaverseDataContext(matches) {
|
|
30
|
-
return createFlatDataContext(matches);
|
|
31
|
-
}
|
|
32
16
|
|
|
33
17
|
// src/components/main.tsx
|
|
34
18
|
var main_exports = {};
|
|
@@ -55,6 +39,22 @@ var schema = createSchema({
|
|
|
55
39
|
|
|
56
40
|
// src/components/index.ts
|
|
57
41
|
var defaultComponents = [main_exports];
|
|
42
|
+
function createFlatDataContext(matches) {
|
|
43
|
+
const context = {};
|
|
44
|
+
for (const match of matches) {
|
|
45
|
+
if (match.data && typeof match.data === "object") {
|
|
46
|
+
context[match.id] = match.data;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return context;
|
|
50
|
+
}
|
|
51
|
+
function useWeaverseDataContext() {
|
|
52
|
+
const matches = useMatches();
|
|
53
|
+
return createFlatDataContext(matches);
|
|
54
|
+
}
|
|
55
|
+
function createWeaverseDataContext(matches) {
|
|
56
|
+
return createFlatDataContext(matches);
|
|
57
|
+
}
|
|
58
58
|
|
|
59
59
|
// src/types.ts
|
|
60
60
|
var WeaverseError = class _WeaverseError extends Error {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-weaverse-data-context.ts","../src/components/main.tsx","../src/components/index.ts","../src/types.ts","../src/utils/index.ts","../src/utils/use-theme-settings-store.ts","../src/utils/use-studio.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/index.ts"],"names":["schema","type","children","data","isBrowser","jsx","useMatches","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useMatches, type UIMatch } from 'react-router'\n\n// Route-keyed data structure interfaces\nexport interface RouteKeyedDataContext {\n root?: Record<string, unknown>\n [routeKey: `routes/${string}`]: Record<string, unknown>\n}\n\n// Flat route-keyed data context: {root: {...}, \"routes/xxx\": {...}}\nexport type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>\n\n/**\n * Creates flat route-keyed structure from matches\n * Target: {root: {...rootData}, \"routes/product\": {...productData}}\n * Eliminates all duplication by using route IDs as keys\n */\nfunction createFlatDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n const context: WeaverseDataContext = {}\n \n // Process matches from root to leaf, creating route-keyed structure\n for (const match of matches) {\n if (match.data && typeof match.data === 'object') {\n // Use route ID as key (e.g., \"root\", \"routes/product\")\n context[match.id] = match.data\n }\n }\n \n return context\n}\n\n/**\n * Hook to get flat route-keyed data context from matches\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n * No more useLoaderData dependency - everything comes from matches\n */\nexport function useWeaverseDataContext(): WeaverseDataContext {\n const matches = useMatches()\n \n // Create flat route-keyed structure - eliminates duplication\n return createFlatDataContext(matches)\n}\n\n/**\n * Helper function to create flat route-keyed data context from useMatches() result\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n */\nexport function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n // Create flat route-keyed structure - clean and efficient\n return createFlatDataContext(matches)\n}\n\n/**\n * Type guard to check if data is WeaverseDataContext (simplified)\n */\nexport function isWeaverseDataContext(data: unknown): data is WeaverseDataContext {\n return data !== null && typeof data === 'object'\n}","import { createSchema, type SchemaType } from '@weaverse/schema'\nimport type { HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps } 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*/\nfunction Main(props: HydrogenComponentProps & HTMLAttributes<HTMLDivElement>) {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\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: SchemaType = createSchema({\n type: 'main',\n title: 'Main',\n})\n","import type { HydrogenComponent } from '~/types'\nimport * as Main from './main'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import type { HydrogenContext, I18nBase } from '@shopify/hydrogen'\nimport type {\n AppLoadContext,\n LoaderFunctionArgs as RemixOxygenLoaderArgs,\n} from '@shopify/remix-oxygen'\nimport type {\n ElementData,\n PositionInputValue,\n WeaverseCoreParams,\n WeaverseElement,\n WeaverseImage,\n WeaverseProjectDataType,\n WeaverseResourcePickerData,\n WeaverseVideo,\n} from '@weaverse/react'\nimport type {\n // Enhanced type exports from schema package\n BasicInput,\n HeadingInput,\n InputType,\n InspectorGroup,\n PageType,\n ComponentPresets as SchemaComponentPresets,\n SchemaType,\n SchemaValidationIssue,\n SchemaValidationResult,\n} from '@weaverse/schema'\n\nimport type * as React from 'react'\nimport type { ForwardRefExoticComponent } from 'react'\nimport type { NavigateFunction } from 'react-router'\nimport type { ThemeSettingsStore } from './utils/use-theme-settings-store'\nimport type { WeaverseHydrogen } from './WeaverseHydrogenRoot'\nimport type { WeaverseClient } from './weaverse-client'\n\n// Re-export types from schema for backward compatibility and convenience\nexport type {\n PositionInputValue,\n WeaverseImage,\n WeaverseVideo,\n PageType,\n InspectorGroup,\n // Enhanced type exports\n BasicInput,\n HeadingInput,\n InputType,\n SchemaValidationResult,\n SchemaValidationIssue,\n}\n\nexport type AllCacheOptions = {\n mode?:\n | 'must-revalidate'\n | 'no-cache'\n | 'no-store'\n | 'private'\n | 'public'\n | string\n maxAge?: number\n staleWhileRevalidate?: number\n sMaxAge?: number\n staleIfError?: number\n}\n\nexport type ComponentLoaderArgs<T = any, _E = any> = {\n data: T\n weaverse: WeaverseClient\n}\n\nexport interface RouteLoaderArgs extends RemixOxygenLoaderArgs {\n context: AppLoadContext & {\n weaverse: WeaverseClient\n }\n}\n\nexport interface HydrogenComponentData extends ElementData {\n data?: { [key: string]: any }\n children?: { id: string }[]\n createdAt?: string\n updatedAt?: string\n deletedAt?: string\n}\n\n/**\n * Optimized: Use Zod-inferred SchemaType directly instead of extending\n * This ensures perfect type consistency with the schema validation\n */\nexport type HydrogenComponentSchema = SchemaType\n\nexport interface HydrogenComponentProps<L = any> extends WeaverseElement {\n className?: string\n loaderData?: L\n children?: React.JSX.Element[]\n}\n\nexport type WeaverseLoaderRequestInfo = {\n search: string\n pathname: string\n queries: { [key: string]: string | boolean }\n i18n: WeaverseI18n\n}\n\nexport type HydrogenThemeSettings = {\n [key: string]: any\n}\n\nexport type HydrogenProjectType = {\n id: string\n weaverseShopId: string\n name: string\n [key: string]: any\n}\n\nexport type WeaverseInternal = {\n pageAssignment: HydrogenPageAssignment\n project: HydrogenProjectType\n navigate: NavigateFunction\n revalidate: () => void\n themeSettingsStore: ThemeSettingsStore\n}\n\n/**\n * Optimized: Use direct type alias to maintain consistency\n */\nexport type HydrogenComponentPresets = SchemaComponentPresets\n\nexport type HydrogenElement = {\n Component:\n | ForwardRefExoticComponent<HydrogenComponentProps>\n | ((props: HydrogenComponentProps) => React.JSX.Element)\n type: string\n schema?: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport interface WeaverseHydrogenParams\n extends Omit<WeaverseCoreParams, 'ItemConstructor'> {\n data: HydrogenPageData\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n dataContext?: Record<string, unknown> | null\n}\n\nexport type HydrogenComponent<T extends HydrogenComponentProps = any> = {\n default: ForwardRefExoticComponent<T> | ((props: T) => React.JSX.Element)\n schema: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport type WeaverseStudioQueries = {\n weaverseProjectId: string\n weaverseApiKey: string\n weaverseHost: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode?: boolean\n sectionType?: string\n}\n\nexport type PublicEnv = {\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n}\n\nexport type WeaverseProjectConfigs = {\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n publicEnv?: PublicEnv\n}\n\nexport type HydrogenPageAssignment = {\n projectId: string\n type: PageType\n handle: string\n locale: string\n}\n\nexport type WeaverseLoaderData = {\n configs: Omit<WeaverseProjectConfigs, 'publicEnv'> & {\n requestInfo: WeaverseLoaderRequestInfo\n }\n page: HydrogenPageData\n project: HydrogenProjectType\n pageAssignment: HydrogenPageAssignment\n}\n\nexport interface HydrogenPageData extends WeaverseProjectDataType {\n id: string\n name: string\n items: HydrogenComponentData[]\n __cacheId?: string\n [key: string]: any\n}\n\nexport type WeaverseI18n = I18nBase & {\n label?: string\n pathPrefix?: string\n [key: string]: any\n}\n\nexport type HydrogenThemeSchema = {\n info: {\n name: string\n version: string\n author: string\n authorProfilePhoto: string\n documentationUrl: string\n supportUrl: string\n }\n /** @deprecated Use settings instead */\n inspector?: InspectorGroup[]\n settings?: InspectorGroup[]\n i18n?: {\n urlStructure: 'url-path' | 'subdomain' | 'top-level-domain'\n defaultLocale: WeaverseI18n\n shopLocales: WeaverseI18n[]\n }\n}\n\nexport type FetchProjectRequestBody = {\n projectId: string\n url: string\n i18n?: WeaverseI18n\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n}\n\nexport type FetchProjectPayload = {\n page?: HydrogenPageData // Page might be missing for some routes\n project?: HydrogenProjectType // Project might be missing in error cases\n pageAssignment?: HydrogenPageAssignment // PageAssignment might be missing\n error?: string\n [key: string]: any // Allow additional properties from API response\n}\n\nexport type WeaverseClientArgs = HydrogenContext & {\n components: HydrogenComponent[]\n themeSchema: HydrogenThemeSchema\n request: Request\n cache: Cache\n}\n\nexport type WeaverseProduct = WeaverseResourcePickerData\nexport type WeaverseCollection = WeaverseResourcePickerData\nexport type WeaverseBlog = WeaverseResourcePickerData\nexport type WeaverseArticle = WeaverseResourcePickerData\nexport type WeaverseMetaObject = WeaverseResourcePickerData\n\n/**\n * Response types for improved type safety\n */\n\n// Response wrapper from withCache.fetch\nexport type WithCacheFetchResponse<T> = {\n data: T\n response: Response\n}\n\n// Theme settings response structure\nexport type ThemeSettingsResponse = {\n theme?: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\n// Direct fetch response structure\nexport type DirectFetchResponse<T = unknown> = {\n data?: T\n error?: string\n}\n\n// Cache response validation function type\nexport type CacheResponseValidator<T = unknown> = (\n response: WithCacheFetchResponse<T> | T\n) => boolean\n\n// Weaverse Error class for better error handling\nexport class WeaverseError extends Error {\n public readonly code: string\n public readonly statusCode?: number\n public readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code = 'WEAVERSE_ERROR',\n statusCode?: number,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WeaverseError'\n this.code = code\n this.statusCode = statusCode\n this.context = context\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, WeaverseError)\n }\n }\n}\n\n/**\n * Type guards for response validation\n */\n\nexport function isWithCacheFetchResponse<T>(\n response: unknown\n): response is WithCacheFetchResponse<T> {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'response' in response\n )\n}\n\nexport function isFetchProjectPayload(\n payload: unknown\n): payload is FetchProjectPayload {\n return (\n typeof payload === 'object' &&\n payload !== null &&\n 'page' in payload &&\n 'project' in payload &&\n 'pageAssignment' in payload\n )\n}\n\nexport function hasError(response: unknown): response is { error: string } {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as Record<string, unknown>).error === 'string'\n )\n}\n\nexport function isThemeSettingsResponse(\n data: unknown\n): data is ThemeSettingsResponse {\n return (\n typeof data === 'object' &&\n data !== null &&\n (data as any).theme !== undefined\n )\n}\n\n/**\n * Enhanced type utilities for better development experience\n */\nexport type HydrogenSchemaValidationResult =\n SchemaValidationResult<HydrogenComponentSchema>\n\n/**\n * Type guard to check if a schema is valid\n */\nexport function isValidHydrogenSchema(\n schema: unknown\n): schema is HydrogenComponentSchema {\n // We can leverage the validation from the schema package\n return (\n typeof schema === 'object' &&\n schema !== null &&\n 'type' in schema &&\n 'title' in schema\n )\n}\n\n/**\n * Type-safe helper to create component schemas with validation\n */\nexport type CreateHydrogenSchemaOptions = {\n title: string\n type: string\n limit?: number\n settings?: InspectorGroup[]\n childTypes?: string[]\n enabledOn?: {\n pages?: PageType[]\n groups?: ('*' | 'header' | 'footer' | 'body')[]\n }\n presets?: {\n children?: SchemaComponentPresets[]\n [key: string]: any\n }\n}\n\ndeclare global {\n interface Window {\n __weaverse: WeaverseHydrogen\n __weaverses: Record<string, WeaverseHydrogen>\n __weaverseThemeSettingsStore: ThemeSettingsStore\n }\n}\n\ndeclare module '@shopify/remix-oxygen' {\n interface AppLoadContext {\n weaverse: WeaverseClient\n }\n}\n\ndeclare module '@shopify/hydrogen' {\n interface HydrogenEnv {\n WEAVERSE_PROJECT_ID: string\n WEAVERSE_HOST?: string\n WEAVERSE_API_BASE?: string\n WEAVERSE_API_KEY: string\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n PUBLIC_GOOGLE_GTM_ID: string\n JUDGEME_PRIVATE_API_TOKEN: string\n CUSTOM_COLLECTION_BANNER_METAFIELD: string\n METAOBJECT_COLORS_TYPE: string\n METAOBJECT_COLOR_NAME_KEY: string\n METAOBJECT_COLOR_VALUE_KEY: string\n KLAVIYO_PRIVATE_API_TOKEN: string\n PUBLIC_SHOPIFY_INBOX_SHOP_ID: string\n }\n}\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from '../types'\n\n// Track warned types to avoid spam\nlet warnedTypes = new Set<string>()\n\nfunction logOnce(type: string, message: string) {\n if (!warnedTypes.has(type)) {\n console.warn(message)\n warnedTypes.add(type)\n }\n}\n\nfunction deepMergeArrays<T>(target: T[], source: T[]): T[] {\n return [...target, ...source]\n}\n\nfunction mergeInspectorSettings(\n settings: any[],\n inspector: any[],\n type: string\n): any[] {\n if (!inspector?.length) {\n return settings\n }\n if (!settings?.length) {\n return inspector\n }\n\n // Log collision notice\n console.info(\n `Schema \"${type}\": Both 'settings' and 'inspector' found. Using 'settings' with 'inspector' as fallback.`\n )\n\n return deepMergeArrays(settings, inspector)\n}\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 WEAVERSE_API_BASE,\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 isPreviewMode,\n sectionType,\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 weaverseApiBase:\n WEAVERSE_API_BASE ||\n envFromProcess.WEAVERSE_API_BASE ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://api.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode,\n isPreviewMode,\n sectionType: sectionType || '',\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 schema: HydrogenComponentSchema | HydrogenThemeSchema\n) {\n let data: Record<string, any> = {}\n\n // Handle migration from inspector to settings\n let inspectorGroups: any[] = []\n\n // Type guard to check if it's a component schema\n const isComponentSchema = (\n s: HydrogenComponentSchema | HydrogenThemeSchema\n ): s is HydrogenComponentSchema => {\n return 'type' in s && typeof s.type === 'string'\n }\n\n if (isComponentSchema(schema)) {\n // Handle HydrogenComponentSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n schema.type || 'unknown'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n if (schema.type) {\n logOnce(\n schema.type,\n `⚠️ Schema \"${schema.type}\": The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n } else {\n // Handle HydrogenThemeSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n 'Theme Schema'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n logOnce(\n 'ThemeSchema',\n `⚠️ Theme Schema: The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n\n if (inspectorGroups?.length) {\n for (let group of inspectorGroups) {\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\nfunction recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object\n) {\n let component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIds = []\n let id = crypto.randomUUID()\n let { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (let c of children) {\n let { type, children, ...data } = c\n let childId = recursivelyAddDataItem(type, components, items, data)\n childIds.push({ id: childId } as never)\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIds,\n })\n return id\n}\n\nexport function getPreviewData(\n type: string,\n components: HydrogenComponent[],\n weaverseHost: string\n) {\n let items = []\n return {\n project: { id: 'x', weaverseShopId: 'shop-id', name: 'Section Preview' },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n page: {\n id: 'weaverse-preview-page',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [{ id: recursivelyAddDataItem(type, components, items) }],\n },\n ...items,\n ],\n },\n } as unknown as WeaverseLoaderData\n}\n","import { EventEmitter, isBrowser } from '@weaverse/react'\nimport { useRouteLoaderData } from 'react-router'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n PublicEnv,\n} from '~/types'\n\ntype WeaverseThemeData = {\n theme: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\nexport class ThemeSettingsStore extends EventEmitter {\n settings: HydrogenThemeSettings = {}\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: WeaverseThemeData) {\n super()\n let { theme, schema, publicEnv } = data || {}\n this.settings = { ...theme }\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 getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as { weaverseTheme: WeaverseThemeData }\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n","import { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from 'react-router'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings-store'\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\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) {\n return\n }\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => img.remove()\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import {\n isBrowser,\n type PlatformTypeEnum,\n replaceContentDataConnectorsDeep,\n useSafeExternalStore,\n Weaverse,\n WeaverseItemStore,\n WeaverseRoot,\n} from '@weaverse/react'\nimport { createWeaverseDataContext } from './hooks/use-weaverse-data-context'\nimport {\n type ComponentType,\n createContext,\n type JSX,\n memo,\n Suspense,\n} from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { Await, useMatches } from 'react-router'\nimport { defaultComponents } from '~/components'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n HydrogenThemeSettings,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './index'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { generateDataFromSchema } from './utils'\nimport { useStudio } from './utils/use-studio'\nimport { useThemeSettingsStore } from './utils/use-theme-settings-store'\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n const { data, ...rest } = initialData\n if (!this.Element?.schema) {\n console.error('Element is missing schema or not found!')\n return\n }\n const schemaData = generateDataFromSchema(this.Element.schema)\n Object.assign(this._store, schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode: boolean\n sectionType: string\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 const { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n // Assign configuration properties\n this.projectId = params.projectId\n this.weaverseHost = params.weaverseHost\n this.weaverseApiBase = params.weaverseApiBase\n this.weaverseApiKey = params.weaverseApiKey\n this.weaverseVersion = params.weaverseVersion || ''\n this.isDesignMode = params.isDesignMode ?? false\n this.isPreviewMode = params.isPreviewMode ?? false\n this.sectionType = params.sectionType || ''\n }\n}\n\nfunction createWeaverseInstance(\n params: WeaverseHydrogenParams\n): WeaverseHydrogen {\n if (isBrowser) {\n // Check if the weaverse instance already exists in the window object\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n // If the weaverse instance does not exist, or the pathname or search has changed, create a new instance\n if (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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\nconst StudioBridge = memo(({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n})\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n dataContext?: Record<string, any>\n}) {\n const { data, components, dataContext } = props\n for (const comp of [...components, ...defaultComponents]) {\n comp?.schema?.type &&\n registerComponent({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n const { page, configs, project, pageAssignment } = data || {}\n\n // Process page items with deep data connector replacement\n // This ensures all nested strings in the page structure get replaced\n let processedPage = page\n if (page && dataContext) {\n processedPage = replaceContentDataConnectorsDeep(page, dataContext)\n }\n\n const weaverse = createWeaverseInstance({\n ...configs,\n dataContext,\n data: processedPage,\n pageId: processedPage?.id,\n internal: { project, pageAssignment },\n })\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <StudioBridge context={weaverse} />\n </>\n )\n}\n\nexport function registerComponent(element: HydrogenElement) {\n WeaverseHydrogen.registerElement(element)\n}\n\nexport const WeaverseHydrogenRoot = memo(\n ({\n components,\n errorComponent: ErrorComponent = ({ error }) => (\n <div>{error?.message || 'An unexpected error occurred'}</div>\n ),\n }: {\n components: HydrogenComponent[]\n errorComponent?: React.FC<{ error: any }>\n }) => {\n const matches = useMatches()\n\n // Create flat route-keyed data context from matches only\n // No more useLoaderData dependency - everything comes from matches\n const enhancedDataContext = createWeaverseDataContext(matches)\n\n // Find weaverseData from matches instead of useLoaderData\n // Look through matches to find the one containing weaverseData\n let weaverseData: WeaverseLoaderData | Promise<WeaverseLoaderData> | null =\n null\n\n for (const match of matches) {\n if (\n match.data &&\n typeof match.data === 'object' &&\n match.data !== null &&\n 'weaverseData' in match.data\n ) {\n weaverseData = match.data.weaverseData as\n | WeaverseLoaderData\n | Promise<WeaverseLoaderData>\n break\n }\n }\n\n if (weaverseData) {\n if (weaverseData instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent as any}>\n <Suspense>\n <Await resolve={weaverseData}>\n {(resolvedData) => (\n <RenderRoot\n components={components}\n data={resolvedData}\n dataContext={enhancedDataContext}\n />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return (\n <RenderRoot\n components={components}\n data={weaverseData}\n dataContext={enhancedDataContext}\n />\n )\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data found in route matches!' }}\n />\n )\n }\n)\n\nconst ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(null)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n const { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n const themeSettingsStore = useThemeSettingsStore()\n const settings = useSafeExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot\n )\n return settings as T\n}\n","import {\n createWithCache,\n type HydrogenEnv,\n type I18nBase,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n HydrogenComponentData,\n HydrogenPageData,\n PageType,\n ThemeSettingsResponse,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n WithCacheFetchResponse,\n} from './types'\nimport { hasError } from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'v1' as const\n\nconst DEFAULT_CACHE_STRATEGY: AllCacheOptions = {\n maxAge: 10,\n sMaxAge: 10,\n staleWhileRevalidate: 82_800, // 23 hours\n staleIfError: 82_800, // 23 hours\n} as const\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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.withCache = createWithCache({\n cache,\n waitUntil: waitUntil || (() => Promise.resolve()),\n request,\n })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiBase: this.configs.weaverseApiBase,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode - returns same format as withCache.fetch\n private readonly directFetch = async <T>(\n url: string,\n options: RequestInit = {}\n ): Promise<WithCacheFetchResponse<T>> => {\n try {\n let response = await fetch(url, options)\n if (!response.ok) {\n let error = await response.text()\n throw new Error(`${response.status} ${response.statusText} ${error}`)\n }\n let data = (await response.json()) as T\n // Return same wrapped format as withCache.fetch\n return {\n data,\n response,\n }\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n // Helper method for building API URLs consistently\n private getApiUrl(\n endpoint: string,\n useProxy = !this.configs.isDesignMode\n ): string {\n const { weaverseHost, weaverseApiBase, projectId } = this.configs\n\n if (useProxy) {\n return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`\n }\n\n return `${weaverseHost}/api/public/${endpoint}`\n }\n\n public fetchWithCache = async <T = unknown>(\n url: string,\n options: RequestInit & { strategy?: AllCacheOptions } = {}\n ): Promise<T> => {\n const strategy =\n options.strategy || this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY)\n\n // Improved cache key to include method and body content\n const cacheKey = [url, options.method || 'GET', options.body]\n\n let result: WithCacheFetchResponse<T>\n\n if (this.configs.isDesignMode) {\n result = await this.directFetch<T>(url, options)\n } else {\n // Use withCache.fetch for better integration with Hydrogen's caching system\n result = (await this.withCache.fetch(url, options, {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResponse: (response: any): boolean => {\n // Cache any non-error response (for both Weaverse API and third-party APIs)\n return (\n !hasError(response) && response !== null && response !== undefined\n )\n },\n displayName: 'Weaverse API',\n })) as WithCacheFetchResponse<T>\n }\n\n return result.data\n }\n\n loadThemeSettings = async (\n strategy?: AllCacheOptions\n ): Promise<ThemeSettingsResponse> => {\n let defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n try {\n let { configs } = this\n let { projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let url = this.getApiUrl('project_configs')\n\n let body = JSON.stringify({ isDesignMode, projectId })\n let data: ThemeSettingsResponse =\n await this.fetchWithCache<ThemeSettingsResponse>(url, {\n method: 'POST',\n strategy,\n body,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n })\n\n // Validate that data is a proper object, not corrupted/compressed content\n if (typeof data !== 'object' || data === null) {\n console.warn(\n 'Invalid theme settings response format, using defaults:',\n {\n type: typeof data,\n isString: typeof data === 'string',\n length: typeof data === 'string' ? (data as string).length : 'N/A',\n preview:\n typeof data === 'string'\n ? `${(data as string).substring(0, 50)}...`\n : String(data),\n }\n )\n data = { theme: defaultThemeSettings }\n }\n\n if (this.themeSchema?.settings || this.themeSchema?.inspector) {\n // Ensure data.theme exists and is an object before merging\n if (!data.theme || typeof data.theme !== 'object') {\n data.theme = defaultThemeSettings\n } else {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema:\n this.themeSchema && typeof this.themeSchema === 'object'\n ? {\n ...this.themeSchema,\n settings: this.themeSchema?.settings?.map((group) => ({\n ...group,\n inputs: group?.inputs?.map((input) => {\n if (typeof input?.condition === 'function') {\n return {\n ...input,\n condition: input.condition.toString(),\n }\n }\n return input\n }),\n })),\n }\n : undefined,\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return { theme: defaultThemeSettings }\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: {\n type?: PageType\n locale?: string\n handle?: string\n strategy?: AllCacheOptions\n } = {}\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, weaverseHost, isPreviewMode, sectionType } = this.configs\n\n if (isPreviewMode) {\n return getPreviewData(sectionType || '', this.components, weaverseHost)\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: {\n projectId: string\n url: string\n i18n?: I18nBase\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n } = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n }\n let url = this.getApiUrl('project')\n\n let projectData: FetchProjectPayload =\n await this.fetchWithCache<FetchProjectPayload>(url, {\n ...reqInit,\n strategy,\n })\n\n if (hasError(projectData)) {\n throw new Error(projectData.error)\n }\n\n // Extract what we can from the response\n let { page, project, pageAssignment } = projectData as any\n\n if (!project) {\n console.warn('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n }\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 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 console.error('❌ Page load failed.', e)\n return null\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' && component) {\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'\nimport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\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\nexport const 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\n// Re-export utilities from @weaverse/react\nexport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n}\n\n// Export Hydrogen-specific hooks\nexport {\n createWeaverseDataContext,\n useWeaverseDataContext,\n type WeaverseDataContext,\n} from './hooks/use-weaverse-data-context'\n\n// Re-export all types and utilities from schema package\nexport * from '@weaverse/schema'\nexport * from './components'\n// Export hydrogen-specific modules\nexport * from './types'\nexport * from './utils'\nexport * from './WeaverseHydrogenRoot'\nexport * from './weaverse-client'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/main.tsx","../src/components/index.ts","../src/hooks/use-weaverse-data-context.ts","../src/types.ts","../src/utils/index.ts","../src/utils/use-theme-settings-store.ts","../src/utils/use-studio.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/index.ts"],"names":["schema","type","children","data","isBrowser","jsx","useMatches","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createSchema, type SchemaType } from '@weaverse/schema'\nimport type { HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps } 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*/\nfunction Main(props: HydrogenComponentProps & HTMLAttributes<HTMLDivElement>) {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\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: SchemaType = createSchema({\n type: 'main',\n title: 'Main',\n})\n","import type { HydrogenComponent } from '~/types'\nimport * as Main from './main'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { useMatches, type UIMatch } from 'react-router'\n\n// Route-keyed data structure interfaces\nexport interface RouteKeyedDataContext {\n root?: Record<string, unknown>\n [routeKey: `routes/${string}`]: Record<string, unknown>\n}\n\n// Flat route-keyed data context: {root: {...}, \"routes/xxx\": {...}}\nexport type WeaverseDataContext = RouteKeyedDataContext & Record<string, unknown>\n\n/**\n * Creates flat route-keyed structure from matches\n * Target: {root: {...rootData}, \"routes/product\": {...productData}}\n * Eliminates all duplication by using route IDs as keys\n */\nfunction createFlatDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n const context: WeaverseDataContext = {}\n \n // Process matches from root to leaf, creating route-keyed structure\n for (const match of matches) {\n if (match.data && typeof match.data === 'object') {\n // Use route ID as key (e.g., \"root\", \"routes/product\")\n context[match.id] = match.data\n }\n }\n \n return context\n}\n\n/**\n * Hook to get flat route-keyed data context from matches\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n * No more useLoaderData dependency - everything comes from matches\n */\nexport function useWeaverseDataContext(): WeaverseDataContext {\n const matches = useMatches()\n \n // Create flat route-keyed structure - eliminates duplication\n return createFlatDataContext(matches)\n}\n\n/**\n * Helper function to create flat route-keyed data context from useMatches() result\n * Returns: {root: {...}, \"routes/xxx\": {...}}\n */\nexport function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext {\n // Create flat route-keyed structure - clean and efficient\n return createFlatDataContext(matches)\n}\n\n/**\n * Type guard to check if data is WeaverseDataContext (simplified)\n */\nexport function isWeaverseDataContext(data: unknown): data is WeaverseDataContext {\n return data !== null && typeof data === 'object'\n}","import type { HydrogenContext, I18nBase } from '@shopify/hydrogen'\nimport type {\n AppLoadContext,\n LoaderFunctionArgs as RemixOxygenLoaderArgs,\n} from '@shopify/remix-oxygen'\nimport type {\n ElementData,\n PositionInputValue,\n WeaverseCoreParams,\n WeaverseElement,\n WeaverseImage,\n WeaverseProjectDataType,\n WeaverseResourcePickerData,\n WeaverseVideo,\n} from '@weaverse/react'\nimport type {\n // Enhanced type exports from schema package\n BasicInput,\n HeadingInput,\n InputType,\n InspectorGroup,\n PageType,\n ComponentPresets as SchemaComponentPresets,\n SchemaType,\n SchemaValidationIssue,\n SchemaValidationResult,\n} from '@weaverse/schema'\n\nimport type * as React from 'react'\nimport type { ForwardRefExoticComponent } from 'react'\nimport type { NavigateFunction } from 'react-router'\nimport type { ThemeSettingsStore } from './utils/use-theme-settings-store'\nimport type { WeaverseHydrogen } from './WeaverseHydrogenRoot'\nimport type { WeaverseClient } from './weaverse-client'\n\n// Re-export types from schema for backward compatibility and convenience\nexport type {\n PositionInputValue,\n WeaverseImage,\n WeaverseVideo,\n PageType,\n InspectorGroup,\n // Enhanced type exports\n BasicInput,\n HeadingInput,\n InputType,\n SchemaValidationResult,\n SchemaValidationIssue,\n}\n\nexport type AllCacheOptions = {\n mode?:\n | 'must-revalidate'\n | 'no-cache'\n | 'no-store'\n | 'private'\n | 'public'\n | string\n maxAge?: number\n staleWhileRevalidate?: number\n sMaxAge?: number\n staleIfError?: number\n}\n\nexport type ComponentLoaderArgs<T = any, _E = any> = {\n data: T\n weaverse: WeaverseClient\n}\n\nexport interface RouteLoaderArgs extends RemixOxygenLoaderArgs {\n context: AppLoadContext & {\n weaverse: WeaverseClient\n }\n}\n\nexport interface HydrogenComponentData extends ElementData {\n data?: { [key: string]: any }\n children?: { id: string }[]\n createdAt?: string\n updatedAt?: string\n deletedAt?: string\n}\n\n/**\n * Optimized: Use Zod-inferred SchemaType directly instead of extending\n * This ensures perfect type consistency with the schema validation\n */\nexport type HydrogenComponentSchema = SchemaType\n\nexport interface HydrogenComponentProps<L = any> extends WeaverseElement {\n className?: string\n loaderData?: L\n children?: React.JSX.Element[]\n}\n\nexport type WeaverseLoaderRequestInfo = {\n search: string\n pathname: string\n queries: { [key: string]: string | boolean }\n i18n: WeaverseI18n\n}\n\nexport type HydrogenThemeSettings = {\n [key: string]: any\n}\n\nexport type HydrogenProjectType = {\n id: string\n weaverseShopId: string\n name: string\n [key: string]: any\n}\n\nexport type WeaverseInternal = {\n pageAssignment: HydrogenPageAssignment\n project: HydrogenProjectType\n navigate: NavigateFunction\n revalidate: () => void\n themeSettingsStore: ThemeSettingsStore\n}\n\n/**\n * Optimized: Use direct type alias to maintain consistency\n */\nexport type HydrogenComponentPresets = SchemaComponentPresets\n\nexport type HydrogenElement = {\n Component:\n | ForwardRefExoticComponent<HydrogenComponentProps>\n | ((props: HydrogenComponentProps) => React.JSX.Element)\n type: string\n schema?: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport interface WeaverseHydrogenParams\n extends Omit<WeaverseCoreParams, 'ItemConstructor'> {\n data: HydrogenPageData\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n dataContext?: Record<string, unknown> | null\n}\n\nexport type HydrogenComponent<T extends HydrogenComponentProps = any> = {\n default: ForwardRefExoticComponent<T> | ((props: T) => React.JSX.Element)\n schema: HydrogenComponentSchema\n /** Optional data loader function for server-side data fetching */\n loader?: (args: ComponentLoaderArgs) => Promise<unknown>\n}\n\nexport type WeaverseStudioQueries = {\n weaverseProjectId: string\n weaverseApiKey: string\n weaverseHost: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode?: boolean\n sectionType?: string\n}\n\nexport type PublicEnv = {\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n}\n\nexport type WeaverseProjectConfigs = {\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion?: string\n isDesignMode?: boolean\n isPreviewMode?: boolean\n sectionType?: string\n publicEnv?: PublicEnv\n}\n\nexport type HydrogenPageAssignment = {\n projectId: string\n type: PageType\n handle: string\n locale: string\n}\n\nexport type WeaverseLoaderData = {\n configs: Omit<WeaverseProjectConfigs, 'publicEnv'> & {\n requestInfo: WeaverseLoaderRequestInfo\n }\n page: HydrogenPageData\n project: HydrogenProjectType\n pageAssignment: HydrogenPageAssignment\n}\n\nexport interface HydrogenPageData extends WeaverseProjectDataType {\n id: string\n name: string\n items: HydrogenComponentData[]\n __cacheId?: string\n [key: string]: any\n}\n\nexport type WeaverseI18n = I18nBase & {\n label?: string\n pathPrefix?: string\n [key: string]: any\n}\n\nexport type HydrogenThemeSchema = {\n info: {\n name: string\n version: string\n author: string\n authorProfilePhoto: string\n documentationUrl: string\n supportUrl: string\n }\n /** @deprecated Use settings instead */\n inspector?: InspectorGroup[]\n settings?: InspectorGroup[]\n i18n?: {\n urlStructure: 'url-path' | 'subdomain' | 'top-level-domain'\n defaultLocale: WeaverseI18n\n shopLocales: WeaverseI18n[]\n }\n}\n\nexport type FetchProjectRequestBody = {\n projectId: string\n url: string\n i18n?: WeaverseI18n\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n}\n\nexport type FetchProjectPayload = {\n page?: HydrogenPageData // Page might be missing for some routes\n project?: HydrogenProjectType // Project might be missing in error cases\n pageAssignment?: HydrogenPageAssignment // PageAssignment might be missing\n error?: string\n [key: string]: any // Allow additional properties from API response\n}\n\nexport type WeaverseClientArgs = HydrogenContext & {\n components: HydrogenComponent[]\n themeSchema: HydrogenThemeSchema\n request: Request\n cache: Cache\n}\n\nexport type WeaverseProduct = WeaverseResourcePickerData\nexport type WeaverseCollection = WeaverseResourcePickerData\nexport type WeaverseBlog = WeaverseResourcePickerData\nexport type WeaverseArticle = WeaverseResourcePickerData\nexport type WeaverseMetaObject = WeaverseResourcePickerData\n\n/**\n * Response types for improved type safety\n */\n\n// Response wrapper from withCache.fetch\nexport type WithCacheFetchResponse<T> = {\n data: T\n response: Response\n}\n\n// Theme settings response structure\nexport type ThemeSettingsResponse = {\n theme?: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\n// Direct fetch response structure\nexport type DirectFetchResponse<T = unknown> = {\n data?: T\n error?: string\n}\n\n// Cache response validation function type\nexport type CacheResponseValidator<T = unknown> = (\n response: WithCacheFetchResponse<T> | T\n) => boolean\n\n// Weaverse Error class for better error handling\nexport class WeaverseError extends Error {\n public readonly code: string\n public readonly statusCode?: number\n public readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code = 'WEAVERSE_ERROR',\n statusCode?: number,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WeaverseError'\n this.code = code\n this.statusCode = statusCode\n this.context = context\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, WeaverseError)\n }\n }\n}\n\n/**\n * Type guards for response validation\n */\n\nexport function isWithCacheFetchResponse<T>(\n response: unknown\n): response is WithCacheFetchResponse<T> {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'data' in response &&\n 'response' in response\n )\n}\n\nexport function isFetchProjectPayload(\n payload: unknown\n): payload is FetchProjectPayload {\n return (\n typeof payload === 'object' &&\n payload !== null &&\n 'page' in payload &&\n 'project' in payload &&\n 'pageAssignment' in payload\n )\n}\n\nexport function hasError(response: unknown): response is { error: string } {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as Record<string, unknown>).error === 'string'\n )\n}\n\nexport function isThemeSettingsResponse(\n data: unknown\n): data is ThemeSettingsResponse {\n return (\n typeof data === 'object' &&\n data !== null &&\n (data as any).theme !== undefined\n )\n}\n\n/**\n * Enhanced type utilities for better development experience\n */\nexport type HydrogenSchemaValidationResult =\n SchemaValidationResult<HydrogenComponentSchema>\n\n/**\n * Type guard to check if a schema is valid\n */\nexport function isValidHydrogenSchema(\n schema: unknown\n): schema is HydrogenComponentSchema {\n // We can leverage the validation from the schema package\n return (\n typeof schema === 'object' &&\n schema !== null &&\n 'type' in schema &&\n 'title' in schema\n )\n}\n\n/**\n * Type-safe helper to create component schemas with validation\n */\nexport type CreateHydrogenSchemaOptions = {\n title: string\n type: string\n limit?: number\n settings?: InspectorGroup[]\n childTypes?: string[]\n enabledOn?: {\n pages?: PageType[]\n groups?: ('*' | 'header' | 'footer' | 'body')[]\n }\n presets?: {\n children?: SchemaComponentPresets[]\n [key: string]: any\n }\n}\n\ndeclare global {\n interface Window {\n __weaverse: WeaverseHydrogen\n __weaverses: Record<string, WeaverseHydrogen>\n __weaverseThemeSettingsStore: ThemeSettingsStore\n }\n}\n\ndeclare module '@shopify/remix-oxygen' {\n interface AppLoadContext {\n weaverse: WeaverseClient\n }\n}\n\ndeclare module '@shopify/hydrogen' {\n interface HydrogenEnv {\n WEAVERSE_PROJECT_ID: string\n WEAVERSE_HOST?: string\n WEAVERSE_API_BASE?: string\n WEAVERSE_API_KEY: string\n PUBLIC_STORE_DOMAIN: string\n PUBLIC_STOREFRONT_API_TOKEN: string\n PUBLIC_GOOGLE_GTM_ID: string\n JUDGEME_PRIVATE_API_TOKEN: string\n CUSTOM_COLLECTION_BANNER_METAFIELD: string\n METAOBJECT_COLORS_TYPE: string\n METAOBJECT_COLOR_NAME_KEY: string\n METAOBJECT_COLOR_VALUE_KEY: string\n KLAVIYO_PRIVATE_API_TOKEN: string\n PUBLIC_SHOPIFY_INBOX_SHOP_ID: string\n }\n}\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from '../types'\n\n// Track warned types to avoid spam\nlet warnedTypes = new Set<string>()\n\nfunction logOnce(type: string, message: string) {\n if (!warnedTypes.has(type)) {\n console.warn(message)\n warnedTypes.add(type)\n }\n}\n\nfunction deepMergeArrays<T>(target: T[], source: T[]): T[] {\n return [...target, ...source]\n}\n\nfunction mergeInspectorSettings(\n settings: any[],\n inspector: any[],\n type: string\n): any[] {\n if (!inspector?.length) {\n return settings\n }\n if (!settings?.length) {\n return inspector\n }\n\n // Log collision notice\n console.info(\n `Schema \"${type}\": Both 'settings' and 'inspector' found. Using 'settings' with 'inspector' as fallback.`\n )\n\n return deepMergeArrays(settings, inspector)\n}\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 WEAVERSE_API_BASE,\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 isPreviewMode,\n sectionType,\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 weaverseApiBase:\n WEAVERSE_API_BASE ||\n envFromProcess.WEAVERSE_API_BASE ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://api.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode,\n isPreviewMode,\n sectionType: sectionType || '',\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 schema: HydrogenComponentSchema | HydrogenThemeSchema\n) {\n let data: Record<string, any> = {}\n\n // Handle migration from inspector to settings\n let inspectorGroups: any[] = []\n\n // Type guard to check if it's a component schema\n const isComponentSchema = (\n s: HydrogenComponentSchema | HydrogenThemeSchema\n ): s is HydrogenComponentSchema => {\n return 'type' in s && typeof s.type === 'string'\n }\n\n if (isComponentSchema(schema)) {\n // Handle HydrogenComponentSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n schema.type || 'unknown'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n if (schema.type) {\n logOnce(\n schema.type,\n `⚠️ Schema \"${schema.type}\": The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n } else {\n // Handle HydrogenThemeSchema\n if (schema.settings) {\n inspectorGroups = schema.settings\n }\n\n if (schema.inspector) {\n if (schema.settings?.length) {\n // Both exist - merge with settings taking priority\n inspectorGroups = mergeInspectorSettings(\n schema.settings,\n schema.inspector,\n 'Theme Schema'\n )\n } else {\n // Only inspector exists - use it but warn about deprecation\n inspectorGroups = schema.inspector\n logOnce(\n 'ThemeSchema',\n `⚠️ Theme Schema: The 'inspector' property is deprecated. Please use 'settings' instead.`\n )\n }\n }\n }\n\n if (inspectorGroups?.length) {\n for (let group of inspectorGroups) {\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\nfunction recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object\n) {\n let component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIds = []\n let id = crypto.randomUUID()\n let { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (let c of children) {\n let { type, children, ...data } = c\n let childId = recursivelyAddDataItem(type, components, items, data)\n childIds.push({ id: childId } as never)\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIds,\n })\n return id\n}\n\nexport function getPreviewData(\n type: string,\n components: HydrogenComponent[],\n weaverseHost: string\n) {\n let items = []\n return {\n project: { id: 'x', weaverseShopId: 'shop-id', name: 'Section Preview' },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n page: {\n id: 'weaverse-preview-page',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [{ id: recursivelyAddDataItem(type, components, items) }],\n },\n ...items,\n ],\n },\n } as unknown as WeaverseLoaderData\n}\n","import { EventEmitter, isBrowser } from '@weaverse/react'\nimport { useRouteLoaderData } from 'react-router'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n PublicEnv,\n} from '~/types'\n\ntype WeaverseThemeData = {\n theme: HydrogenThemeSettings\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n}\n\nexport class ThemeSettingsStore extends EventEmitter {\n settings: HydrogenThemeSettings = {}\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: WeaverseThemeData) {\n super()\n let { theme, schema, publicEnv } = data || {}\n this.settings = { ...theme }\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 getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as { weaverseTheme: WeaverseThemeData }\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n","import { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from 'react-router'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings-store'\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\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) {\n return\n }\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => img.remove()\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import {\n isBrowser,\n type PlatformTypeEnum,\n replaceContentDataConnectorsDeep,\n useSafeExternalStore,\n Weaverse,\n WeaverseItemStore,\n WeaverseRoot,\n} from '@weaverse/react'\nimport {\n type ComponentType,\n createContext,\n type JSX,\n memo,\n Suspense,\n} from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { Await, useMatches } from 'react-router'\nimport { defaultComponents } from '~/components'\nimport { createWeaverseDataContext } from './hooks/use-weaverse-data-context'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n HydrogenThemeSettings,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './index'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { generateDataFromSchema } from './utils'\nimport { useStudio } from './utils/use-studio'\nimport { useThemeSettingsStore } from './utils/use-theme-settings-store'\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n const { data, ...rest } = initialData\n if (!this.Element?.schema) {\n console.error('Element is missing schema or not found!')\n return\n }\n const schemaData = generateDataFromSchema(this.Element.schema)\n Object.assign(this._store, schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n projectId: string\n weaverseHost: string\n weaverseApiBase: string\n weaverseApiKey: string\n weaverseVersion: string\n isDesignMode: boolean\n isPreviewMode: boolean\n sectionType: string\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 const { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n // Assign configuration properties\n this.projectId = params.projectId\n this.weaverseHost = params.weaverseHost\n this.weaverseApiBase = params.weaverseApiBase\n this.weaverseApiKey = params.weaverseApiKey\n this.weaverseVersion = params.weaverseVersion || ''\n this.isDesignMode = params.isDesignMode ?? false\n this.isPreviewMode = params.isPreviewMode ?? false\n this.sectionType = params.sectionType || ''\n }\n}\n\nfunction createWeaverseInstance(\n params: WeaverseHydrogenParams\n): WeaverseHydrogen {\n if (isBrowser) {\n // Check if the weaverse instance already exists in the window object\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n // If the weaverse instance does not exist, or the pathname or search has changed, create a new instance\n if (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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\nconst StudioBridge = memo(({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n})\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n dataContext?: Record<string, any>\n}) {\n const { data, components, dataContext } = props\n for (const comp of [...components, ...defaultComponents]) {\n comp?.schema?.type &&\n registerComponent({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n const { page, configs, project, pageAssignment } = data || {}\n\n // Process page items with deep data connector replacement\n // This ensures all nested strings in the page structure get replaced\n let processedPage = page\n if (page && dataContext) {\n processedPage = replaceContentDataConnectorsDeep(page, dataContext)\n }\n\n const weaverse = createWeaverseInstance({\n ...configs,\n dataContext,\n data: processedPage,\n pageId: processedPage?.id,\n internal: { project, pageAssignment },\n })\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <StudioBridge context={weaverse} />\n </>\n )\n}\n\nexport function registerComponent(element: HydrogenElement) {\n WeaverseHydrogen.registerElement(element)\n}\n\nexport const WeaverseHydrogenRoot = memo(\n ({\n components,\n errorComponent: ErrorComponent = ({ error }) => (\n <div>{error?.message || 'An unexpected error occurred'}</div>\n ),\n }: {\n components: HydrogenComponent[]\n errorComponent?: React.FC<{ error: any }>\n }) => {\n const matches = useMatches()\n\n // Create flat route-keyed data context from matches only\n // No more useLoaderData dependency - everything comes from matches\n const enhancedDataContext = createWeaverseDataContext(matches)\n\n // Find weaverseData from matches instead of useLoaderData\n // Look through matches to find the one containing weaverseData\n let weaverseData: WeaverseLoaderData | Promise<WeaverseLoaderData> | null =\n null\n\n for (const match of matches) {\n if (\n match.data &&\n typeof match.data === 'object' &&\n match.data !== null &&\n 'weaverseData' in match.data\n ) {\n weaverseData = match.data.weaverseData as\n | WeaverseLoaderData\n | Promise<WeaverseLoaderData>\n break\n }\n }\n\n if (weaverseData) {\n if (weaverseData instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent as any}>\n <Suspense>\n <Await resolve={weaverseData}>\n {(resolvedData) => (\n <RenderRoot\n components={components}\n data={resolvedData}\n dataContext={enhancedDataContext}\n />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return (\n <RenderRoot\n components={components}\n data={weaverseData}\n dataContext={enhancedDataContext}\n />\n )\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data found in route matches!' }}\n />\n )\n }\n)\n\nconst ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(null)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n const { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n const themeSettingsStore = useThemeSettingsStore()\n const settings = useSafeExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot\n )\n return settings as T\n}\n","import {\n createWithCache,\n type HydrogenEnv,\n type I18nBase,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n HydrogenComponentData,\n HydrogenPageData,\n PageType,\n ThemeSettingsResponse,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n WithCacheFetchResponse,\n} from './types'\nimport { hasError } from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'v1' as const\n\nconst DEFAULT_CACHE_STRATEGY: AllCacheOptions = {\n maxAge: 10,\n sMaxAge: 10,\n staleWhileRevalidate: 82_800, // 23 hours\n staleIfError: 82_800, // 23 hours\n} as const\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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.withCache = createWithCache({\n cache,\n waitUntil: waitUntil || (() => Promise.resolve()),\n request,\n })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiBase: this.configs.weaverseApiBase,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode - returns same format as withCache.fetch\n private readonly directFetch = async <T>(\n url: string,\n options: RequestInit = {}\n ): Promise<WithCacheFetchResponse<T>> => {\n try {\n let response = await fetch(url, options)\n if (!response.ok) {\n let error = await response.text()\n throw new Error(`${response.status} ${response.statusText} ${error}`)\n }\n let data = (await response.json()) as T\n // Return same wrapped format as withCache.fetch\n return {\n data,\n response,\n }\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n // Helper method for building API URLs consistently\n private getApiUrl(\n endpoint: string,\n useProxy = !this.configs.isDesignMode\n ): string {\n const { weaverseHost, weaverseApiBase, projectId } = this.configs\n\n if (useProxy) {\n return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`\n }\n\n return `${weaverseHost}/api/public/${endpoint}`\n }\n\n public fetchWithCache = async <T = unknown>(\n url: string,\n options: RequestInit & { strategy?: AllCacheOptions } = {}\n ): Promise<T> => {\n const strategy =\n options.strategy || this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY)\n\n // Improved cache key to include method and body content\n const cacheKey = [url, options.method || 'GET', options.body]\n\n let result: WithCacheFetchResponse<T>\n\n if (this.configs.isDesignMode) {\n result = await this.directFetch<T>(url, options)\n } else {\n // Use withCache.fetch for better integration with Hydrogen's caching system\n result = (await this.withCache.fetch(url, options, {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResponse: (response: any): boolean => {\n // Cache any non-error response (for both Weaverse API and third-party APIs)\n return (\n !hasError(response) && response !== null && response !== undefined\n )\n },\n displayName: 'Weaverse API',\n })) as WithCacheFetchResponse<T>\n }\n\n return result.data\n }\n\n loadThemeSettings = async (\n strategy?: AllCacheOptions\n ): Promise<ThemeSettingsResponse> => {\n let defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n try {\n let { configs } = this\n let { projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let url = this.getApiUrl('project_configs')\n\n let body = JSON.stringify({ isDesignMode, projectId })\n let data: ThemeSettingsResponse =\n await this.fetchWithCache<ThemeSettingsResponse>(url, {\n method: 'POST',\n strategy,\n body,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n })\n\n // Validate that data is a proper object, not corrupted/compressed content\n if (typeof data !== 'object' || data === null) {\n console.warn(\n 'Invalid theme settings response format, using defaults:',\n {\n type: typeof data,\n isString: typeof data === 'string',\n length: typeof data === 'string' ? (data as string).length : 'N/A',\n preview:\n typeof data === 'string'\n ? `${(data as string).substring(0, 50)}...`\n : String(data),\n }\n )\n data = { theme: defaultThemeSettings }\n }\n\n if (this.themeSchema?.settings || this.themeSchema?.inspector) {\n // Ensure data.theme exists and is an object before merging\n if (!data.theme || typeof data.theme !== 'object') {\n data.theme = defaultThemeSettings\n } else {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema:\n this.themeSchema && typeof this.themeSchema === 'object'\n ? {\n ...this.themeSchema,\n settings: this.themeSchema?.settings?.map((group) => ({\n ...group,\n inputs: group?.inputs?.map((input) => {\n if (typeof input?.condition === 'function') {\n return {\n ...input,\n condition: input.condition.toString(),\n }\n }\n return input\n }),\n })),\n }\n : undefined,\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return { theme: defaultThemeSettings }\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: {\n type?: PageType\n locale?: string\n handle?: string\n strategy?: AllCacheOptions\n } = {}\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, weaverseHost, isPreviewMode, sectionType } = this.configs\n\n if (isPreviewMode) {\n return getPreviewData(sectionType || '', this.components, weaverseHost)\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: {\n projectId: string\n url: string\n i18n?: I18nBase\n params?: {\n type?: PageType\n locale?: string\n handle?: string\n }\n isDesignMode?: boolean\n } = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n },\n }\n let url = this.getApiUrl('project')\n\n let projectData: FetchProjectPayload =\n await this.fetchWithCache<FetchProjectPayload>(url, {\n ...reqInit,\n strategy,\n })\n\n if (hasError(projectData)) {\n throw new Error(projectData.error)\n }\n\n // Extract what we can from the response\n let { page, project, pageAssignment } = projectData as any\n\n if (!project) {\n console.warn('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n }\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 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 console.error('❌ Page load failed.', e)\n return null\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' && component) {\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'\nimport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\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\nexport const 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\n// Re-export utilities from @weaverse/react\nexport {\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n}\n\n// Re-export all types and utilities from schema package\nexport * from '@weaverse/schema'\nexport * from './components'\n// Export Hydrogen-specific hooks\nexport {\n createWeaverseDataContext,\n useWeaverseDataContext,\n type WeaverseDataContext,\n} from './hooks/use-weaverse-data-context'\n// Export hydrogen-specific modules\nexport * from './types'\nexport * from './utils'\nexport * from './WeaverseHydrogenRoot'\nexport * from './weaverse-client'\n"]}
|
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": "5.5.0-beta.
|
|
5
|
+
"version": "5.5.0-beta.4",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@shopify/hydrogen": ">=2025.5",
|
|
40
40
|
"@shopify/remix-oxygen": "3",
|
|
41
|
-
"@weaverse/react": "5.5.0-beta.
|
|
41
|
+
"@weaverse/react": "5.5.0-beta.4",
|
|
42
42
|
"@weaverse/schema": "0.7.3",
|
|
43
43
|
"react": ">=18",
|
|
44
44
|
"react-dom": ">=18",
|