@weaverse/hydrogen 4.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -47,7 +47,8 @@ declare class WeaverseClient {
47
47
  waitUntil: WeaverseClientArgs['waitUntil'];
48
48
  countries?: WeaverseClientArgs['countries'];
49
49
  constructor(args: WeaverseClientArgs);
50
- fetchWithCache: <T extends object>(url: string, options?: FetchWithCacheOptions) => Promise<T>;
50
+ private directFetch;
51
+ fetchWithCache<T extends object>(url: string, options?: FetchWithCacheOptions): Promise<T>;
51
52
  loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
52
53
  generateFallbackPage: (message: string) => HydrogenPageData;
53
54
  loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
@@ -70,9 +71,7 @@ interface AllCacheOptions {
70
71
  }
71
72
  type ComponentLoaderArgs<T = any, E = any> = {
72
73
  data: T;
73
- weaverse: Omit<WeaverseClient, 'env'> & {
74
- env: E;
75
- };
74
+ weaverse: WeaverseClient;
76
75
  };
77
76
  interface RouteLoaderArgs extends LoaderFunctionArgs {
78
77
  context: AppLoadContext & {
package/dist/index.d.ts CHANGED
@@ -47,7 +47,8 @@ declare class WeaverseClient {
47
47
  waitUntil: WeaverseClientArgs['waitUntil'];
48
48
  countries?: WeaverseClientArgs['countries'];
49
49
  constructor(args: WeaverseClientArgs);
50
- fetchWithCache: <T extends object>(url: string, options?: FetchWithCacheOptions) => Promise<T>;
50
+ private directFetch;
51
+ fetchWithCache<T extends object>(url: string, options?: FetchWithCacheOptions): Promise<T>;
51
52
  loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
52
53
  generateFallbackPage: (message: string) => HydrogenPageData;
53
54
  loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
@@ -70,9 +71,7 @@ interface AllCacheOptions {
70
71
  }
71
72
  type ComponentLoaderArgs<T = any, E = any> = {
72
73
  data: T;
73
- weaverse: Omit<WeaverseClient, 'env'> & {
74
- env: E;
75
- };
74
+ weaverse: WeaverseClient;
76
75
  };
77
76
  interface RouteLoaderArgs extends LoaderFunctionArgs {
78
77
  context: AppLoadContext & {
package/dist/index.js CHANGED
@@ -376,12 +376,19 @@ function withWeaverse(Component) {
376
376
  function FallbackError({ error }) {
377
377
  return /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" });
378
378
  }
379
+ var API_PATH = "api/public";
380
+ var DEFAULT_CACHE_STRATEGY = {
381
+ maxAge: 5,
382
+ sMaxAge: 5,
383
+ staleWhileRevalidate: 82800
384
+ };
379
385
  var WeaverseClient = class {
380
- API = "api/public";
386
+ API = API_PATH;
381
387
  basePageConfigs;
382
388
  basePageRequestBody;
383
389
  configs;
384
390
  withCache;
391
+ // Required dependencies
385
392
  request;
386
393
  storefront;
387
394
  components;
@@ -391,7 +398,7 @@ var WeaverseClient = class {
391
398
  waitUntil;
392
399
  countries;
393
400
  constructor(args) {
394
- let {
401
+ const {
395
402
  env,
396
403
  storefront,
397
404
  components,
@@ -424,50 +431,50 @@ var WeaverseClient = class {
424
431
  projectId: this.configs.projectId
425
432
  };
426
433
  }
427
- fetchWithCache = async (url, options = {}) => {
428
- let cacheKey = [url, options.body];
429
- let {
430
- strategy = this.storefront.CacheCustom({
431
- maxAge: 1,
432
- sMaxAge: 1,
433
- staleWhileRevalidate: 82800
434
- }),
434
+ // Helper method for direct fetching in design mode
435
+ async directFetch(url, options = {}) {
436
+ try {
437
+ const res = await fetch(url, options);
438
+ if (!res.ok) {
439
+ const error = await res.text();
440
+ throw new Error(`${res.status} ${res.statusText} ${error}`);
441
+ }
442
+ return res.json();
443
+ } catch (err) {
444
+ throw new Error(`Failed to fetch data from ${url}`, { cause: err });
445
+ }
446
+ }
447
+ async fetchWithCache(url, options = {}) {
448
+ const {
449
+ strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),
435
450
  ...reqInit
436
451
  } = options;
452
+ const cacheKey = [url, options.body];
437
453
  if (this.configs.isDesignMode) {
438
- try {
439
- const res2 = await fetch(url, reqInit);
440
- return await res2.json();
441
- } catch (err) {
442
- throw new Error(`Failed to fetch data from ${url}`, { cause: err });
443
- }
454
+ return this.directFetch(url, reqInit);
444
455
  }
445
- let res = this.withCache.run(
456
+ return this.withCache.run(
446
457
  {
447
458
  cacheKey,
448
459
  cacheStrategy: strategy,
449
- // @ts-expect-error
450
460
  shouldCacheResult: (result) => result?.data
451
461
  },
452
462
  async () => {
453
- let response = await fetch(url, {
463
+ return this.directFetch(url, {
454
464
  ...reqInit,
455
465
  headers: {
456
466
  "Cache-Control": hydrogen.generateCacheControlHeader(strategy),
457
467
  ...reqInit.headers
458
468
  }
459
469
  });
460
- if (!response.ok) {
461
- let error = await response.text();
462
- let { status, statusText } = response;
463
- throw new Error(`${status} ${statusText} ${error}`, { cause: error });
464
- }
465
- return await response.json();
466
470
  }
467
471
  );
468
- return res;
469
- };
472
+ }
470
473
  loadThemeSettings = async (strategy) => {
474
+ let defaultThemeSettings = {};
475
+ if (this.themeSchema) {
476
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
477
+ }
471
478
  try {
472
479
  let { API, configs } = this;
473
480
  let { weaverseHost, projectId, isDesignMode } = configs;
@@ -490,10 +497,6 @@ var WeaverseClient = class {
490
497
  }
491
498
  let data = res || {};
492
499
  if (data?.theme && this.themeSchema?.inspector) {
493
- let defaultThemeSettings = {};
494
- if (this.themeSchema) {
495
- defaultThemeSettings = generateDataFromSchema(this.themeSchema);
496
- }
497
500
  data.theme = {
498
501
  ...defaultThemeSettings,
499
502
  ...data.theme
@@ -509,8 +512,8 @@ var WeaverseClient = class {
509
512
  }
510
513
  return data;
511
514
  } catch (e) {
512
- console.error("\u274C Theme settings load failed.", e);
513
- return null;
515
+ console.info("Unable to load theme settings", e);
516
+ return defaultThemeSettings;
514
517
  }
515
518
  };
516
519
  generateFallbackPage = (message) => {
@@ -574,7 +577,13 @@ var WeaverseClient = class {
574
577
  }
575
578
  let { page, project, pageAssignment } = payload;
576
579
  if (!project) {
577
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
580
+ console.error("Weaverse project not found. Id:", projectId);
581
+ project = {
582
+ id: projectId,
583
+ name: "Weaverse project not found.",
584
+ weaverseShopId: ""
585
+ };
586
+ page = this.generateFallbackPage("Weaverse project not found.");
578
587
  }
579
588
  if (!page) {
580
589
  page = this.generateFallbackPage("Please add new section to start.");
@@ -600,7 +609,7 @@ var WeaverseClient = class {
600
609
  };
601
610
  } catch (e) {
602
611
  console.error(`\u274C Page load failed.`, e);
603
- throw e;
612
+ return null;
604
613
  }
605
614
  };
606
615
  execComponentLoader = async (item) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","EventEmitter","schema","isBrowser","useRouteLoaderData","useSyncExternalStore","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","memo","forwardRef","jsx","createContext","useLoaderData","ErrorBoundary","Suspense","Await","jsxs","Fragment","WeaverseRoot","createWithCache","res","generateCacheControlHeader","hydrogen_getSelectedProductOptions","Weaverse","WeaverseItemStore"],"mappings":";;;;;;;;;;;;;;;;AASO,SAAS,kBACd,OACA,EAAA;AACA,EAAA,IAAI,GAAM,GAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,MAAM,IAAK,CAAA,GAAA,CAAI,YAAa,CAAA,OAAA,EAAS,CAAE,CAAA,MAAA;AAAA,IAC5C,CAAC,CAAA,EAA4B,CAAC,CAAA,EAAG,CAAC,CAAM,KAAA;AACtC,MAAA,CAAA,CAAE,CAAC,CAAI,GAAA,CAAA,KAAM,SAAS,IAAO,GAAA,CAAA,KAAM,UAAU,KAAQ,GAAA,CAAA;AACrD,MAAO,OAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAC,GACH;AACF;AAEO,SAAS,kBAAA,CACd,SACA,GACwB,EAAA;AACxB,EAAI,IAAA,OAAA,GAAU,kBAAyC,OAAO,CAAA;AAC9D,EAAI,IAAA;AAAA,IACF,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAO,EAAC;AACZ,EAAA,IAAI,iBAAkB,OAAO,OAAA,KAAY,WAAe,IAAA,OAAA,CAAQ,OAAQ,EAAC;AACzE,EAAI,IAAA;AAAA,IACF,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACE,GAAA,OAAA;AACJ,EAAO,OAAA;AAAA,IACL,SACE,EAAA,iBAAA,IACA,mBACA,IAAA,cAAA,CAAe,mBACf,IAAA,EAAA;AAAA,IACF,YACE,EAAA,aAAA,IACA,YACA,IAAA,cAAA,CAAe,aACf,IAAA,4BAAA;AAAA,IACF,cACE,EAAA,cAAA,IACA,gBACA,IAAA,cAAA,CAAe,gBACf,IAAA,EAAA;AAAA,IACF,iBAAiB,eAAmB,IAAA,EAAA;AAAA,IACpC,cAAc,YAAgB,IAAA,KAAA;AAAA,IAC9B,eAAe,aAAiB,IAAA,KAAA;AAAA,IAChC,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,SAAW,EAAA;AAAA,MACT,qBAAqB,mBAAuB,IAAA,EAAA;AAAA,MAC5C,6BAA6B,2BAA+B,IAAA;AAAA;AAC9D,GACF;AACF;AAEO,SAAS,sBAAuB,CAAA;AAAA,EACrC;AACF,CAAkD,EAAA;AAChD,EAAA,IAAI,OAA4B,EAAC;AACjC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,KAAA,IAAS,SAAS,SAAW,EAAA;AAC3B,MAAS,KAAA,IAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAC9B,QAAI,IAAA,EAAE,IAAM,EAAA,YAAA,EAAiB,GAAA,KAAA;AAC7B,QAAA,IAAI,IAAQ,IAAA,YAAA,KAAiB,IAAQ,IAAA,YAAA,KAAiB,MAAW,EAAA;AAC/D,UAAA,IAAA,CAAK,IAAI,CAAI,GAAA,YAAA;AAAA;AACf;AACF;AACF;AAEF,EAAO,OAAA,IAAA;AACT;AAaO,SAAS,kBAAA,CAAmB,UAAkB,IAAsB,EAAA;AACzE,EAAI,IAAA;AACF,IAAA,IAAI,CAAC,QAAS,CAAA,QAAA,CAAS,iBAAiB,CAAA,IAAK,SAAS,UAAY,EAAA;AAChE,MAAO,OAAA,QAAA;AAAA;AAET,IAAA,IAAI,GAAG,IAAA,EAAM,GAAG,CAAI,GAAA,QAAA,CAAS,MAAM,2BAA2B,CAAA;AAC9D,IAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,IAAI,GAAG,CAAA,CAAA;AAAA,WACtB,CAAG,EAAA;AACV,IAAO,OAAA,QAAA;AAAA;AAEX;AAEO,SAAS,sBACd,CAAA,IAAA,EACA,UACA,EAAA,KAAA,EACA,QACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,WAAW,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA;AAAA;AAEF,EAAA,IAAI,WAAW,EAAC;AAEhB,EAAM,MAAA,EAAA,GAAK,OAAO,UAAW,EAAA;AAC7B,EAAM,MAAA,EAAE,UAAU,GAAG,IAAA,KAAS,SAAU,CAAA,MAAA,EAAQ,WAAW,EAAC;AAC5D,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,MAAA,MAAM,EAAE,IAAAA,EAAAA,KAAAA,EAAM,UAAAC,SAAU,EAAA,GAAGC,OAAS,GAAA,KAAA;AACpC,MAAA,MAAM,OAAU,GAAA,sBAAA;AAAA,QACd,KAAM,CAAA,IAAA;AAAA,QACN,UAAA;AAAA,QACA,KAAA;AAAA,QACAA;AAAA,OACF;AACA,MAAA,QAAA,CAAS,IAAK,CAAA;AAAA,QACZ,EAAI,EAAA;AAAA,OACL,CAAA;AAAA;AACH;AAEF,EAAA,KAAA,CAAM,IAAK,CAAA;AAAA,IACT,IAAM,EAAA,EAAE,GAAG,IAAA,EAAM,GAAG,QAAS,EAAA;AAAA,IAC7B,EAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAU,EAAA;AAAA,GACX,CAAA;AACD,EAAO,OAAA,EAAA;AACT;AACO,SAAS,cAAA,CAAe,IAAc,EAAA,UAAA,EAAY,YAAsB,EAAA;AAC7E,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,OAAS,EAAA;AAAA,MACP,EAAI,EAAA,GAAA;AAAA,MACJ,cAAgB,EAAA,QAAA;AAAA,MAChB,IAAM,EAAA;AAAA,KACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAS,EAAA;AAAA,MACP,SAAW,EAAA,GAAA;AAAA,MACX,YAAA;AAAA,MACA,YAAc,EAAA,KAAA;AAAA,MACd,aAAe,EAAA,IAAA;AAAA,MACf,WAAa,EAAA;AAAA,QACX,IAAM,EAAA;AAAA,UACJ,KAAO,EAAA,uBAAA;AAAA,UACP,QAAU,EAAA,IAAA;AAAA,UACV,OAAS,EAAA,IAAA;AAAA,UACT,QAAU,EAAA,KAAA;AAAA,UACV,UAAY,EAAA;AAAA,SACd;AAAA,QACA,SAAS,EAAC;AAAA,QACV,QAAU,EAAA,GAAA;AAAA,QACV,MAAQ,EAAA;AAAA;AACV;AACF,GACF;AACA,EAAA,IAAI,QAAQ,EAAC;AACb,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,IAAM,EAAA,UAAA,EAAY,KAAK,CAAA;AACzD,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,EAAI,EAAA,GAAA;AAAA,IACJ,IAAM,EAAA,iBAAA;AAAA,IACN,MAAQ,EAAA,GAAA;AAAA,IACR,KAAO,EAAA;AAAA,MACL;AAAA,QACE,MAAM,EAAC;AAAA,QACP,EAAI,EAAA,GAAA;AAAA,QACJ,IAAM,EAAA,MAAA;AAAA,QACN,QAAU,EAAA;AAAA,UACR;AAAA,YACE;AAAA;AACF;AACF,OACF;AAAA,MACA,GAAG;AAAA;AACL,GACF;AACA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAG,WAAA;AAAA,IACH;AAAA,GACF;AACA,EAAO,OAAA,WAAA;AACT;ACjMO,IAAM,kBAAA,GAAN,cAAiCC,kBAAY,CAAA;AAAA,EAClD,WAAkC,EAAC;AAAA,EACnC,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAEA,YAAY,IAAsC,EAAA;AAChD,IAAM,KAAA,EAAA;AACN,IAAI,IAAA,EAAE,OAAO,SAAW,EAAA,MAAA,EAAAC,SAAQ,SAAU,EAAA,GAAI,QAAQ,EAAC;AACvD,IAAK,IAAA,CAAA,QAAA,GAAW,EAAE,GAAG,KAAM,EAAA;AAC3B,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,MAASA,GAAAA,OAAAA;AACd,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAIC,eAAW,EAAA;AACb,MAAA,MAAA,CAAO,4BAA+B,GAAA,IAAA;AAAA;AACxC;AACF,EAEA,mBAAA,GAAsB,CAAC,WAAuC,KAAA;AAC5D,IAAA,IAAA,CAAK,QAAW,GAAA;AAAA,MACd,GAAG,IAAK,CAAA,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AACA,IAAK,IAAA,CAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,GACzB;AAAA,EAGA,cAAc,MAAM;AAClB,IAAA,OAAO,IAAK,CAAA,QAAA;AAAA,GACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,IAAA,OAAO,IAAK,CAAA,QAAA;AAAA,GACd;AAEF,CAAA;AAEO,SAAS,qBAAwB,GAAA;AACtC,EAAI,IAAA,IAAA,GAAOC,2BAAmB,MAAM,CAAA;AACpC,EAAI,IAAAD,eAAA,IAAa,OAAO,4BAA8B,EAAA;AACpD,IAAA,OAAO,MAAO,CAAA,4BAAA;AAAA;AAEhB,EAAO,OAAA,IAAI,kBAAmB,CAAA,IAAA,EAAM,aAAa,CAAA;AACnD;AAEO,SAAS,gBAA8C,GAAA;AAC5D,EAAA,IAAI,qBAAqB,qBAAsB,EAAA;AAC/C,EAAA,IAAI,QAAW,GAAAE,4BAAA;AAAA,IACb,kBAAmB,CAAA,SAAA;AAAA,IACnB,kBAAmB,CAAA,WAAA;AAAA,IACnB,kBAAmB,CAAA;AAAA,GACrB;AACA,EAAO,OAAA,QAAA;AACT;;;ACrDO,SAAS,UAAU,QAA4B,EAAA;AACpD,EAAI,IAAA,EAAE,UAAW,EAAA,GAAIC,sBAAe,EAAA;AACpC,EAAA,IAAI,aAAaC,qBAAc,EAAA;AAC/B,EAAA,IAAI,EAAE,QAAA,EAAU,MAAO,EAAA,GAAIC,mBAAY,EAAA;AACvC,EAAA,IAAI,WAAWC,mBAAY,EAAA;AAC3B,EAAA,IAAI,qBAAqB,qBAAsB,EAAA;AAC/C,EAAA,IAAI,EAAE,YAAA,EAAc,YAAc,EAAA,eAAA,EAAiB,eAAkB,GAAA,QAAA;AAGrE,EAAAC,iBAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,CAAW,UAAU,MAAQ,EAAA;AAC/B,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,IAAI,UAAa,GAAA,CAAA,EAAG,YAAY,CAAA,qCAAA,EAAwC,eAAe,CAAA,CAAA;AACvF,QAAAC,gBAAA,CAAW,UAAU,CAAA,CAAE,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,iBACjC,YAAc,EAAA;AACvB,QAAA,QAAA,CAAS,QAAW,GAAA;AAAA,UAClB,GAAG,QAAS,CAAA,QAAA;AAAA,UACZ,QAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,SAAY,GAAA,CAAA,EAAG,YAAY,CAAA,mCAAA,EAAsC,eAAe,CAAA,CAAA;AACpF,QAAWA,gBAAA,CAAA,SAAS,CACjB,CAAA,IAAA,CAAK,MAAM;AACV,UAAO,MAAA,CAAA,cAAA,EAAgB,KAAK,QAAQ,CAAA;AAAA,SACrC,CAAA,CACA,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACxB;AACF,KACC,CAAC,QAAA,EAAU,MAAQ,EAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AACvC,EAAA,QAAA,CAAS,QAAQ,CAAA;AACnB;AAGO,SAAS,SAAS,OAA2B,EAAA;AAClD,EAAA,IAAI,EAAE,SAAA,EAAW,MAAQ,EAAA,YAAA,EAAc,cAAiB,GAAA,OAAA;AAExD,EAAAD,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAa,IAAA,CAAC,MAAU,IAAA,CAAC,gBAAgB,YAAc,EAAA;AAC5D,IAAI,IAAA,GAAA,GAAM,GAAG,YAAY,CAAA,cAAA,CAAA;AACzB,IAAI,IAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACpB,IAAA,GAAA,CAAI,SAAS,MAAM;AAAA,KAAC;AACpB,IAAA,GAAA,CAAI,MAAM,CAAG,EAAA,GAAG,CAAc,WAAA,EAAA,SAAS,WAAW,MAAM,CAAA,CAAA;AAAA,GAC1D,EAAG,EAAE,CAAA;AACP;;;ACnDO,IAAI,cAAiB,GAAAE,YAAA;AAAA,EAC1B,CAAC,EAAE,OAAA,EAA6C,KAAA;AAC9C,IAAA,SAAA,CAAU,OAAO,CAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;;;ACTA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAOA,IAAI,IAAO,GAAAC,kBAAA,CAGT,CAAC,KAAA,EAAO,GAAQ,KAAA;AAChB,EAAA,IAAI,EAAE,QAAA,EAAU,uBAAyB,EAAA,GAAG,MAAS,GAAA,KAAA;AAErD,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA;AAAA,MAEA,uBAAA,EAAyB,WAAW,MAAY,GAAA;AAAA;AAAA,GAClD;AAEJ,CAAC,CAAA;AAED,IAAO,YAAQ,GAAA,IAAA;AAER,IAAI,MAAkC,GAAA;AAAA,EAC3C,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA,MAAA;AAAA,EACP,WAAW;AACb,CAAA;;;AC3BO,IAAI,iBAAA,GAAyC,CAAC,YAAI,CAAA;;;ACOzD,SAAS,mBAAmB,UAAiC,EAAA;AAC3D,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAM,IAAA,EAAA,MAAA,EAAQ,IACZ,IAAA,gBAAA,CAAiB,eAAgB,CAAA;AAAA,MAC/B,IAAA,EAAM,MAAM,MAAO,CAAA,IAAA;AAAA,MACnB,WAAW,IAAK,CAAA,OAAA;AAAA,MAChB,QAAQ,IAAK,CAAA,MAAA;AAAA,MACb,QAAQ,IAAK,CAAA;AAAA,KACd,CAAA;AAAA;AAEP;AAEA,SAAS,6BACP,MACkB,EAAA;AAClB,EAAA,IAAIX,eAAW,EAAA;AACb,IAAO,MAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,IAAe,EAAC;AAC5C,IAAA,IAAI,QAAW,GAAA,MAAA,CAAO,WAAY,CAAA,MAAA,CAAO,MAAM,CAAA;AAC/C,IAAA,IACE,CAAC,QAAA,IACD,QAAU,EAAA,WAAA,EAAa,QAAa,KAAA,MAAA,CAAO,WAAY,CAAA,QAAA,IACvD,QAAU,EAAA,WAAA,EAAa,MAAW,KAAA,MAAA,CAAO,YAAY,MACrD,EAAA;AACA,MAAW,QAAA,GAAA,IAAI,iBAAiB,MAAM,CAAA;AACtC,MAAO,MAAA,CAAA,WAAA,CAAY,MAAO,CAAA,MAAM,CAAI,GAAA,QAAA;AAAA;AAEtC,IAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,MAAA,QAAA,CAAS,cAAc,MAAO,CAAA,WAAA;AAC9B,MAAO,MAAA,CAAA,cAAA,EAAgB,cAAc,MAAM,CAAA;AAAA;AAE7C,IAAO,OAAA,QAAA;AAAA;AAET,EAAO,OAAA,IAAI,iBAAiB,MAAM,CAAA;AACpC;AAEO,SAAS,sBAAA,CACd,cACA,UACA,EAAA;AACA,EAAA,IAAI,EAAE,IAAM,EAAA,OAAA,EAAS,SAAS,cAAe,EAAA,GAAI,gBAAgB,EAAC;AAClE,EAAA,kBAAA,CAAmB,UAAU,CAAA;AAC7B,EAAA,kBAAA,CAAmB,iBAAiB,CAAA;AACpC,EAAA,OAAO,4BAA6B,CAAA;AAAA,IAClC,GAAG,OAAA;AAAA,IACH,IAAM,EAAA,IAAA;AAAA,IACN,QAAQ,IAAM,EAAA,EAAA;AAAA,IACd,QAAA,EAAU,EAAE,OAAA,EAAS,cAAe;AAAA,GACrC,CAAA;AACH;AAcO,IAAI,qBAAwB,GAAAY,qBAAA;AAAA,EACjC;AACF,CAAA;AACA,qBAAA,CAAsB,WAAc,GAAA,+BAAA;AC5D7B,IAAI,oBAAuBH,GAAAA,YAAAA;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,cAAiB,GAAA,aAAA;AAAA,IACjC;AAAA,GAC+B,KAAA;AAC/B,IAAA,IAAI,aAAaI,qBAAc,EAAA;AAG/B,IAAA,IAAI,OAAO,UAAY,EAAA,YAAA;AAEvB,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAI,gBAAgB,OAAS,EAAA;AAC3B,QACE,uBAAAF,eAACG,gCAAc,EAAA,EAAA,cAAA,EAAgB,gBAC7B,QAAAH,kBAAAA,cAAAA,CAACI,gBACC,EAAA,EAAA,QAAA,kBAAAJ,cAAC,CAAAK,aAAA,EAAA,EAAM,SAAS,IACb,EAAA,QAAA,EAAA,CAAC,YACA,qBAAAL,cAAC,CAAA,UAAA,EAAA,EAAW,MAAM,YAAc,EAAA,UAAA,EAAwB,CAE5D,EAAA,CAAA,EACF,CACF,EAAA,CAAA;AAAA;AAGJ,MAAA,uBAAOA,cAAAA,CAAC,UAAW,EAAA,EAAA,IAAA,EAAY,UAAwB,EAAA,CAAA;AAAA;AAEzD,IAAA,uBACEA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,OAAA,EAAS,4CAA6C;AAAA;AAAA,KACjE;AAAA;AAGN;AAEA,SAAS,WAAW,KAGjB,EAAA;AACD,EAAI,IAAA,EAAE,IAAM,EAAA,UAAA,EAAe,GAAA,KAAA;AAC3B,EAAI,IAAA,QAAA,GAAW,sBAAuB,CAAA,IAAA,EAAM,UAAU,CAAA;AACtD,EAAA,uBAEIM,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAP,cAAAA,CAACQ,kBAAa,EAAA,EAAA,OAAA,EAAS,QAAU,EAAA,CAAA;AAAA,oBACjCR,cAAAA,CAAC,cAAe,EAAA,EAAA,OAAA,EAAS,QAAU,EAAA;AAAA,GACrC,EAAA,CAAA;AAEJ;AAEO,SAAS,aAAa,SAA+B,EAAA;AAC1D,EAAA,OAAO,CAAC,KAAmC,KAAA;AACzC,IAAI,IAAA,EAAE,QAAS,EAAA,GAAI,qBAAsB,EAAA;AACzC,IAAA,uBACEA,cAAAA,CAAC,qBAAsB,CAAA,QAAA,EAAtB,EAA+B,KAAA,EAAO,QACrC,EAAA,QAAA,kBAAAA,cAAC,CAAA,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CACxB,EAAA,CAAA;AAAA,GAEJ;AACF;AAEA,SAAS,aAAA,CAAc,EAAE,KAAA,EAA2C,EAAA;AAClE,EAAA,uBAAOA,cAAAA,CAAC,KAAK,EAAA,EAAA,QAAA,EAAA,KAAA,EAAO,WAAW,8BAA+B,EAAA,CAAA;AAChE;ACpDO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,GAAM,GAAA,YAAA;AAAA,EACN,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EAEA,YAAY,IAA0B,EAAA;AACpC,IAAI,IAAA;AAAA,MACF,GAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACE,GAAA,IAAA;AACJ,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AACnB,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AACX,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,YAAYS,wBAAgB,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,SAAS,CAAA;AAE9D,IAAK,IAAA,CAAA,OAAA,GAAU,kBAAmB,CAAA,OAAA,EAAS,GAAkB,CAAA;AAE7D,IAAA,IAAA,CAAK,eAAkB,GAAA;AAAA,MACrB,SAAA,EAAW,KAAK,OAAQ,CAAA,SAAA;AAAA,MACxB,YAAA,EAAc,KAAK,OAAQ,CAAA,YAAA;AAAA,MAC3B,cAAA,EAAgB,KAAK,OAAQ,CAAA,cAAA;AAAA,MAC7B,eAAA,EAAiB,KAAK,OAAQ,CAAA,eAAA;AAAA,MAC9B,YAAA,EAAc,KAAK,OAAQ,CAAA;AAAA,KAC7B;AACA,IAAA,IAAA,CAAK,mBAAsB,GAAA;AAAA,MACzB,YAAA,EAAc,KAAK,OAAQ,CAAA,YAAA;AAAA,MAC3B,MAAM,UAAW,CAAA,IAAA;AAAA,MACjB,SAAA,EAAW,KAAK,OAAQ,CAAA;AAAA,KAC1B;AAAA;AACF,EAEA,cAAiB,GAAA,OACf,GACA,EAAA,OAAA,GAAiC,EAC9B,KAAA;AACH,IAAA,IAAI,QAAW,GAAA,CAAC,GAAK,EAAA,OAAA,CAAQ,IAAI,CAAA;AACjC,IAAI,IAAA;AAAA,MACF,QAAA,GAAW,IAAK,CAAA,UAAA,CAAW,WAAY,CAAA;AAAA,QACrC,MAAQ,EAAA,CAAA;AAAA,QACR,OAAS,EAAA,CAAA;AAAA,QACT,oBAAsB,EAAA;AAAA,OACvB,CAAA;AAAA,MACD,GAAG;AAAA,KACD,GAAA,OAAA;AACJ,IAAI,IAAA,IAAA,CAAK,QAAQ,YAAc,EAAA;AAC7B,MAAI,IAAA;AACF,QAAA,MAAMC,IAAM,GAAA,MAAM,KAAM,CAAA,GAAA,EAAK,OAAO,CAAA;AACpC,QAAO,OAAA,MAAMA,KAAI,IAAQ,EAAA;AAAA,eAClB,GAAK,EAAA;AACZ,QAAM,MAAA,IAAI,MAAM,CAA6B,0BAAA,EAAA,GAAG,IAAI,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA;AACpE;AAEF,IAAI,IAAA,GAAA,GAAM,KAAK,SAAU,CAAA,GAAA;AAAA,MACvB;AAAA,QACE,QAAA;AAAA,QACA,aAAe,EAAA,QAAA;AAAA;AAAA,QAEf,iBAAA,EAAmB,CAAC,MAAA,KAAW,MAAQ,EAAA;AAAA,OACzC;AAAA,MACA,YAAY;AACV,QAAI,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAK,EAAA;AAAA,UAC9B,GAAG,OAAA;AAAA,UACH,OAAS,EAAA;AAAA,YACP,eAAA,EAAiBC,oCAA2B,QAAQ,CAAA;AAAA,YACpD,GAAG,OAAQ,CAAA;AAAA;AACb,SACD,CAAA;AACD,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAI,IAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAChC,UAAI,IAAA,EAAE,MAAQ,EAAA,UAAA,EAAe,GAAA,QAAA;AAC7B,UAAA,MAAM,IAAI,KAAA,CAAM,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,UAAU,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,CAAA;AAAA;AAEtE,QAAO,OAAA,MAAM,SAAS,IAAQ,EAAA;AAAA;AAChC,KACF;AACA,IAAO,OAAA,GAAA;AAAA,GACT;AAAA,EAEA,iBAAA,GAAoB,OAAO,QAA+B,KAAA;AACxD,IAAI,IAAA;AACF,MAAI,IAAA,EAAE,GAAK,EAAA,OAAA,EAAY,GAAA,IAAA;AACvB,MAAA,IAAI,EAAE,YAAA,EAAc,SAAW,EAAA,YAAA,EAAiB,GAAA,OAAA;AAChD,MAAA,IAAI,CAAC,SAAW,EAAA;AACd,QAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;AAAA;AAE/C,MAAA,IAAI,GAAM,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,GAAG,CAAA,gBAAA,CAAA;AAChC,MAAI,IAAA,GAAA;AACJ,MAAA,IAAI,OAAO,IAAK,CAAA,SAAA,CAAU,EAAE,YAAA,EAAc,WAAW,CAAA;AACrD,MAAA,IAAI,YAAc,EAAA;AAChB,QAAM,GAAA,GAAA,MAAM,MAAM,GAAK,EAAA,EAAE,QAAQ,MAAQ,EAAA,IAAA,EAAM,CAAE,CAAA,IAAA;AAAA,UAAK,CAACD,IACrDA,KAAAA,IAAAA,CAAI,IAAK;AAAA,SACX;AAAA,OACK,MAAA;AACL,QAAM,GAAA,GAAA,MAAM,IAAK,CAAA,cAAA,CAAe,GAAK,EAAA;AAAA,UACnC,MAAQ,EAAA,MAAA;AAAA,UACR,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA;AAEH,MAAI,IAAA,IAAA,GAAY,OAAO,EAAC;AACxB,MAAA,IAAI,IAAM,EAAA,KAAA,IAAS,IAAK,CAAA,WAAA,EAAa,SAAW,EAAA;AAC9C,QAAA,IAAI,uBAAuB,EAAC;AAC5B,QAAA,IAAI,KAAK,WAAa,EAAA;AACpB,UAAuB,oBAAA,GAAA,sBAAA,CAAuB,KAAK,WAAW,CAAA;AAAA;AAEhE,QAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,UACX,GAAG,oBAAA;AAAA,UACH,GAAG,IAAK,CAAA;AAAA,SACV;AAAA;AAEF,MAAI,IAAA,IAAA,CAAK,QAAQ,YAAc,EAAA;AAC7B,QAAO,IAAA,GAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,QAAQ,IAAK,CAAA,WAAA;AAAA,UACb,SAAA,EAAW,IAAK,CAAA,SAAA,IAAa,EAAC;AAAA,UAC9B,SAAA,EAAW,KAAK,OAAQ,CAAA;AAAA,SAC1B;AAAA;AAEF,MAAO,OAAA,IAAA;AAAA,aACA,CAAG,EAAA;AACV,MAAQ,OAAA,CAAA,KAAA,CAAM,sCAAiC,CAAC,CAAA;AAChD,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AAAA,EAEA,oBAAA,GAAuB,CAAC,OAAsC,KAAA;AAC5D,IAAI,IAAA,MAAA,GAAS,OAAO,UAAW,EAAA;AAC/B,IAAO,OAAA;AAAA,MACL,EAAI,EAAA,CAAA,cAAA,EAAiB,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA,IAAM,EAAA,cAAA;AAAA,MACN,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,MAAA;AAAA,UACN,EAAI,EAAA,MAAA;AAAA,UACJ,MAAM,EAAE,uBAAA,EAAyB,EAAE,MAAA,EAAQ,SAAU;AAAA;AACvD;AACF,KACF;AAAA,GACF;AAAA,EAEA,QAAW,GAAA,OACT,MAAyB,GAAA,EACc,KAAA;AACvC,IAAI,IAAA;AACF,MAAA,IAAI,EAAE,OAAA,EAAS,UAAY,EAAA,mBAAA,EAAqB,iBAAoB,GAAA,IAAA;AACpE,MAAI,IAAA;AAAA,QACF,SAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,UACE,IAAK,CAAA,OAAA;AACT,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,MAAM,WAAc,GAAA,cAAA;AAAA,UAClB,WAAA;AAAA,UACA,IAAK,CAAA,UAAA;AAAA,UACL;AAAA,SACF;AACA,QAAO,OAAA,WAAA;AAAA;AAGT,MAAA,IAAI,CAAC,SAAW,EAAA;AACd,QAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;AAAA;AAG/C,MAAA,IAAI,EAAE,QAAA,EAAU,GAAG,cAAA,EAAmB,GAAA,MAAA;AACtC,MAAA,IAAI,IAAgC,GAAA;AAAA,QAClC,GAAG,mBAAA;AAAA,QACH,MAAQ,EAAA,cAAA;AAAA,QACR,KAAK,OAAQ,CAAA;AAAA,OACf;AAEA,MAAA,IAAI,OAAuB,GAAA;AAAA,QACzB,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,IAAI;AAAA,OAC3B;AACA,MAAA,IAAI,GAAM,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA,QAAA,CAAA;AACrC,MAAI,IAAA,OAAA;AAEJ,MAAA,IAAI,YAAc,EAAA;AAChB,QAAU,OAAA,GAAA,MAAM,KAAM,CAAA,GAAA,EAAK,OAAO,CAAA,CAAE,KAAK,CAAC,GAAA,KAAQ,GAAI,CAAA,IAAA,EAAM,CAAA;AAAA,OACvD,MAAA;AACL,QAAU,OAAA,GAAA,MAAM,IAAK,CAAA,cAAA,CAAe,GAAK,EAAA;AAAA,UACvC,GAAG,OAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA;AAGH,MAAA,IAAI,SAAS,KAAO,EAAA;AAClB,QAAM,MAAA,IAAI,KAAM,CAAA,OAAA,EAAS,KAAK,CAAA;AAAA;AAEhC,MAAA,IAAI,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAmB,GAAA,OAAA;AACxC,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAmC,gCAAA,EAAA,SAAS,CAAE,CAAA,CAAA;AAAA;AAEhE,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAO,IAAA,GAAA,IAAA,CAAK,qBAAqB,kCAAkC,CAAA;AAAA;AAErE,MAAA,IAAI,MAAM,KAAO,EAAA;AACf,QAAA,IAAI,QAAQ,IAAK,CAAA,KAAA;AACjB,QAAK,IAAA,CAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,GAAA,CAAI,MAAM,GAAI,CAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA;AAEpE,MAAO,OAAA;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAS,EAAA;AAAA,UACP,GAAG,eAAA;AAAA,UACH,WAAa,EAAA;AAAA,YACX,MAAM,UAAW,CAAA,IAAA;AAAA;AAAA,YAEjB,OAAA,EAAS,kBAAyC,OAAO,CAAA;AAAA,YACzD,QAAU,EAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA,QAAA;AAAA,YAC/B,MAAQ,EAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA;AAAA;AAC/B;AACF,OACF;AAAA,aACO,CAAG,EAAA;AAEV,MAAQ,OAAA,CAAA,KAAA,CAAM,4BAAuB,CAAC,CAAA;AACtC,MAAM,MAAA,CAAA;AAAA;AACR,GACF;AAAA,EAEA,mBAAA,GAAsB,OAAO,IAAgC,KAAA;AAC3D,IAAA,IAAI,EAAE,IAAO,GAAA,EAAI,EAAA,IAAA,EAAM,IAAO,GAAA,IAAA;AAC9B,IAAI,IAAA,SAAA,GAAY,IAAK,CAAA,UAAA,CAAW,IAAK,CAAA,CAAC,EAAE,MAAA,EAAAtB,OAAO,EAAA,KAAMA,OAAQ,EAAA,IAAA,KAAS,IAAI,CAAA;AAC1E,IAAA,IAAI,SAAS,SAAW,EAAA,MAAA;AACxB,IAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,MAAI,IAAA;AACF,QAAO,OAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,MAAM,OAAQ,CAAA,OAAA;AAAA,YACxB,MAAO,CAAA;AAAA,cACL,IAAA,EAAM,EAAE,GAAG,sBAAA,CAAuB,UAAU,MAAM,CAAA,EAAG,GAAG,IAAK,EAAA;AAAA,cAC7D,QAAU,EAAA;AAAA,aACX;AAAA;AACH,SACF;AAAA,eACO,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,IAAK,CAAA,gCAAA,EAA6B,IAAM,EAAA,EAAA,EAAI,CAAC,CAAA;AACrD,QAAO,OAAA,IAAA;AAAA;AACT;AAEF,IAAO,OAAA,IAAA;AAAA,GACT;AACF;ACnSO,SAAS,0BACd,OACuB,EAAA;AACvB,EAAI,IAAA,OAAA,GAAUwB,mCAAmC,OAAO,CAAA;AACxD,EAAA,OAAO,OAAQ,CAAA,MAAA;AAAA,IACb,CAAC,EAAE,IAAK,EAAA,KAAM,SAAS,cAAkB,IAAA,CAAC,IAAK,CAAA,UAAA,CAAW,UAAU;AAAA,GACtE;AACF;;;ACVO,IAAI,mBAAsB,GAAA;AAAA,EAC/B,UACE,EAAA,+EAAA;AAAA,EACF,UACE,EAAA,+EAAA;AAAA,EACF,KACE,EAAA,gFAAA;AAAA,EACF,QACE,EAAA,qFAAA;AAAA,EACF,QACE,EAAA,qFAAA;AAAA,EACF,YACE,EAAA,0FAAA;AAAA,EACF,YACE,EAAA,2FAAA;AAAA,EACF,YACE,EAAA,6FAAA;AAAA,EACF,YACE,EAAA,2FAAA;AAAA,EACF,YACE,EAAA,0FAAA;AAAA,EACF,YACE,EAAA,6FAAA;AAAA,EACF,SACE,EAAA,0FAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,4FAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,4FAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,4FAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,0FAAA;AAAA,EACF,UACE,EAAA;AACJ;;;ACtBa,IAAA,gBAAA,GAAN,cAA+BC,cAAS,CAAA;AAAA,EAC7C,YAAiC,GAAA,kBAAA;AAAA,EACjC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EAGA,OAAO,aAAA;AAAA,EACP,OAAO,eAAA;AAAA,EAEP,YAAY,MAAgC,EAAA;AAC1C,IAAA,IAAI,EAAE,QAAU,EAAA,MAAA,EAAQ,WAAa,EAAA,GAAG,YAAe,GAAA,MAAA;AACvD,IAAM,KAAA,CAAA,EAAE,GAAG,UAAA,EAAY,CAAA;AACvB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAChB,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AAAA;AAEvB;AAEa,IAAA,oBAAA,GAAN,cAAmCC,uBAAkB,CAAA;AAAA,EAG1D,WAAA,CAAY,aAAoC,QAA4B,EAAA;AAC1E,IAAA,KAAA,CAAM,aAAa,QAAQ,CAAA;AAC3B,IAAA,IAAI,EAAE,IAAA,EAAM,GAAG,IAAA,EAAS,GAAA,WAAA;AACxB,IAAA,MAAA,CAAO,OAAO,IAAK,CAAA,MAAA,EAAQ,IAAK,CAAA,WAAA,EAAa,MAAM,IAAI,CAAA;AAAA;AACzD,EAEA,IAAI,OAA2B,GAAA;AAC7B,IAAA,OAAO,KAAM,CAAA,OAAA;AAAA;AACf,EAEA,IAAI,WAAc,GAAA;AAChB,IAAI,IAAA,IAAA,CAAK,SAAS,MAAQ,EAAA;AACxB,MAAO,OAAA,sBAAA,CAAuB,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAEnD,IAAA,OAAO,EAAC;AAAA;AAEZ;AAEAD,cAAA,CAAS,eAAkB,GAAA,oBAAA","file":"index.js","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n 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 WEAVERSE_HOST ||\n weaverseHost ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n isPreviewMode: isPreviewMode || false,\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 inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\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 }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme }\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion, 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\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (\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\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil, request })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n // @ts-expect-error\n shouldCacheResult: (result) => result?.data,\n },\n async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n },\n )\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n","import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","EventEmitter","schema","isBrowser","useRouteLoaderData","useSyncExternalStore","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","memo","forwardRef","jsx","createContext","useLoaderData","ErrorBoundary","Suspense","Await","jsxs","Fragment","WeaverseRoot","createWithCache","generateCacheControlHeader","res","hydrogen_getSelectedProductOptions","Weaverse","WeaverseItemStore"],"mappings":"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","file":"index.js","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n 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 WEAVERSE_HOST ||\n weaverseHost ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n isPreviewMode: isPreviewMode || false,\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 inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\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 }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme }\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion, 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\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (\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\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'api/public'\nconst DEFAULT_CACHE_STRATEGY = {\n maxAge: 5,\n sMaxAge: 5,\n staleWhileRevalidate: 82800,\n}\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\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 public countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n countries,\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.countries = countries\n this.withCache = createWithCache({ cache, waitUntil, request })\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 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\n private async directFetch<T>(\n url: string,\n options: RequestInit = {},\n ): Promise<T> {\n try {\n const res = await fetch(url, options)\n if (!res.ok) {\n const error = await res.text()\n throw new Error(`${res.status} ${res.statusText} ${error}`)\n }\n return res.json()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n public async fetchWithCache<T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ): Promise<T> {\n const {\n strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),\n ...reqInit\n } = options\n const cacheKey = [url, options.body]\n\n if (this.configs.isDesignMode) {\n return this.directFetch<T>(url, reqInit)\n }\n\n return this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResult: (result: any) => result?.data,\n },\n async () => {\n return this.directFetch<T>(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n },\n ) as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return 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: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n console.error('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n page = this.generateFallbackPage('Weaverse project not found.')\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n 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') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n","import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n"]}
package/dist/index.mjs CHANGED
@@ -375,12 +375,19 @@ function withWeaverse(Component) {
375
375
  function FallbackError({ error }) {
376
376
  return /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" });
377
377
  }
378
+ var API_PATH = "api/public";
379
+ var DEFAULT_CACHE_STRATEGY = {
380
+ maxAge: 5,
381
+ sMaxAge: 5,
382
+ staleWhileRevalidate: 82800
383
+ };
378
384
  var WeaverseClient = class {
379
- API = "api/public";
385
+ API = API_PATH;
380
386
  basePageConfigs;
381
387
  basePageRequestBody;
382
388
  configs;
383
389
  withCache;
390
+ // Required dependencies
384
391
  request;
385
392
  storefront;
386
393
  components;
@@ -390,7 +397,7 @@ var WeaverseClient = class {
390
397
  waitUntil;
391
398
  countries;
392
399
  constructor(args) {
393
- let {
400
+ const {
394
401
  env,
395
402
  storefront,
396
403
  components,
@@ -423,50 +430,50 @@ var WeaverseClient = class {
423
430
  projectId: this.configs.projectId
424
431
  };
425
432
  }
426
- fetchWithCache = async (url, options = {}) => {
427
- let cacheKey = [url, options.body];
428
- let {
429
- strategy = this.storefront.CacheCustom({
430
- maxAge: 1,
431
- sMaxAge: 1,
432
- staleWhileRevalidate: 82800
433
- }),
433
+ // Helper method for direct fetching in design mode
434
+ async directFetch(url, options = {}) {
435
+ try {
436
+ const res = await fetch(url, options);
437
+ if (!res.ok) {
438
+ const error = await res.text();
439
+ throw new Error(`${res.status} ${res.statusText} ${error}`);
440
+ }
441
+ return res.json();
442
+ } catch (err) {
443
+ throw new Error(`Failed to fetch data from ${url}`, { cause: err });
444
+ }
445
+ }
446
+ async fetchWithCache(url, options = {}) {
447
+ const {
448
+ strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),
434
449
  ...reqInit
435
450
  } = options;
451
+ const cacheKey = [url, options.body];
436
452
  if (this.configs.isDesignMode) {
437
- try {
438
- const res2 = await fetch(url, reqInit);
439
- return await res2.json();
440
- } catch (err) {
441
- throw new Error(`Failed to fetch data from ${url}`, { cause: err });
442
- }
453
+ return this.directFetch(url, reqInit);
443
454
  }
444
- let res = this.withCache.run(
455
+ return this.withCache.run(
445
456
  {
446
457
  cacheKey,
447
458
  cacheStrategy: strategy,
448
- // @ts-expect-error
449
459
  shouldCacheResult: (result) => result?.data
450
460
  },
451
461
  async () => {
452
- let response = await fetch(url, {
462
+ return this.directFetch(url, {
453
463
  ...reqInit,
454
464
  headers: {
455
465
  "Cache-Control": generateCacheControlHeader(strategy),
456
466
  ...reqInit.headers
457
467
  }
458
468
  });
459
- if (!response.ok) {
460
- let error = await response.text();
461
- let { status, statusText } = response;
462
- throw new Error(`${status} ${statusText} ${error}`, { cause: error });
463
- }
464
- return await response.json();
465
469
  }
466
470
  );
467
- return res;
468
- };
471
+ }
469
472
  loadThemeSettings = async (strategy) => {
473
+ let defaultThemeSettings = {};
474
+ if (this.themeSchema) {
475
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
476
+ }
470
477
  try {
471
478
  let { API, configs } = this;
472
479
  let { weaverseHost, projectId, isDesignMode } = configs;
@@ -489,10 +496,6 @@ var WeaverseClient = class {
489
496
  }
490
497
  let data = res || {};
491
498
  if (data?.theme && this.themeSchema?.inspector) {
492
- let defaultThemeSettings = {};
493
- if (this.themeSchema) {
494
- defaultThemeSettings = generateDataFromSchema(this.themeSchema);
495
- }
496
499
  data.theme = {
497
500
  ...defaultThemeSettings,
498
501
  ...data.theme
@@ -508,8 +511,8 @@ var WeaverseClient = class {
508
511
  }
509
512
  return data;
510
513
  } catch (e) {
511
- console.error("\u274C Theme settings load failed.", e);
512
- return null;
514
+ console.info("Unable to load theme settings", e);
515
+ return defaultThemeSettings;
513
516
  }
514
517
  };
515
518
  generateFallbackPage = (message) => {
@@ -573,7 +576,13 @@ var WeaverseClient = class {
573
576
  }
574
577
  let { page, project, pageAssignment } = payload;
575
578
  if (!project) {
576
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
579
+ console.error("Weaverse project not found. Id:", projectId);
580
+ project = {
581
+ id: projectId,
582
+ name: "Weaverse project not found.",
583
+ weaverseShopId: ""
584
+ };
585
+ page = this.generateFallbackPage("Weaverse project not found.");
577
586
  }
578
587
  if (!page) {
579
588
  page = this.generateFallbackPage("Please add new section to start.");
@@ -599,7 +608,7 @@ var WeaverseClient = class {
599
608
  };
600
609
  } catch (e) {
601
610
  console.error(`\u274C Page load failed.`, e);
602
- throw e;
611
+ return null;
603
612
  }
604
613
  };
605
614
  execComponentLoader = async (item) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","schema","isBrowser","memo","jsx","res","hydrogen_getSelectedProductOptions"],"mappings":";;;;;;;;;;;;;;;AASO,SAAS,kBACd,OACA,EAAA;AACA,EAAA,IAAI,GAAM,GAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,MAAM,IAAK,CAAA,GAAA,CAAI,YAAa,CAAA,OAAA,EAAS,CAAE,CAAA,MAAA;AAAA,IAC5C,CAAC,CAAA,EAA4B,CAAC,CAAA,EAAG,CAAC,CAAM,KAAA;AACtC,MAAA,CAAA,CAAE,CAAC,CAAI,GAAA,CAAA,KAAM,SAAS,IAAO,GAAA,CAAA,KAAM,UAAU,KAAQ,GAAA,CAAA;AACrD,MAAO,OAAA,CAAA;AAAA,KACT;AAAA,IACA;AAAC,GACH;AACF;AAEO,SAAS,kBAAA,CACd,SACA,GACwB,EAAA;AACxB,EAAI,IAAA,OAAA,GAAU,kBAAyC,OAAO,CAAA;AAC9D,EAAI,IAAA;AAAA,IACF,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAO,EAAC;AACZ,EAAA,IAAI,iBAAkB,OAAO,OAAA,KAAY,WAAe,IAAA,OAAA,CAAQ,OAAQ,EAAC;AACzE,EAAI,IAAA;AAAA,IACF,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACE,GAAA,OAAA;AACJ,EAAO,OAAA;AAAA,IACL,SACE,EAAA,iBAAA,IACA,mBACA,IAAA,cAAA,CAAe,mBACf,IAAA,EAAA;AAAA,IACF,YACE,EAAA,aAAA,IACA,YACA,IAAA,cAAA,CAAe,aACf,IAAA,4BAAA;AAAA,IACF,cACE,EAAA,cAAA,IACA,gBACA,IAAA,cAAA,CAAe,gBACf,IAAA,EAAA;AAAA,IACF,iBAAiB,eAAmB,IAAA,EAAA;AAAA,IACpC,cAAc,YAAgB,IAAA,KAAA;AAAA,IAC9B,eAAe,aAAiB,IAAA,KAAA;AAAA,IAChC,aAAa,WAAe,IAAA,EAAA;AAAA,IAC5B,SAAW,EAAA;AAAA,MACT,qBAAqB,mBAAuB,IAAA,EAAA;AAAA,MAC5C,6BAA6B,2BAA+B,IAAA;AAAA;AAC9D,GACF;AACF;AAEO,SAAS,sBAAuB,CAAA;AAAA,EACrC;AACF,CAAkD,EAAA;AAChD,EAAA,IAAI,OAA4B,EAAC;AACjC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,KAAA,IAAS,SAAS,SAAW,EAAA;AAC3B,MAAS,KAAA,IAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAC9B,QAAI,IAAA,EAAE,IAAM,EAAA,YAAA,EAAiB,GAAA,KAAA;AAC7B,QAAA,IAAI,IAAQ,IAAA,YAAA,KAAiB,IAAQ,IAAA,YAAA,KAAiB,MAAW,EAAA;AAC/D,UAAA,IAAA,CAAK,IAAI,CAAI,GAAA,YAAA;AAAA;AACf;AACF;AACF;AAEF,EAAO,OAAA,IAAA;AACT;AAaO,SAAS,kBAAA,CAAmB,UAAkB,IAAsB,EAAA;AACzE,EAAI,IAAA;AACF,IAAA,IAAI,CAAC,QAAS,CAAA,QAAA,CAAS,iBAAiB,CAAA,IAAK,SAAS,UAAY,EAAA;AAChE,MAAO,OAAA,QAAA;AAAA;AAET,IAAA,IAAI,GAAG,IAAA,EAAM,GAAG,CAAI,GAAA,QAAA,CAAS,MAAM,2BAA2B,CAAA;AAC9D,IAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,IAAI,GAAG,CAAA,CAAA;AAAA,WACtB,CAAG,EAAA;AACV,IAAO,OAAA,QAAA;AAAA;AAEX;AAEO,SAAS,sBACd,CAAA,IAAA,EACA,UACA,EAAA,KAAA,EACA,QACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,WAAW,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA;AAAA;AAEF,EAAA,IAAI,WAAW,EAAC;AAEhB,EAAM,MAAA,EAAA,GAAK,OAAO,UAAW,EAAA;AAC7B,EAAM,MAAA,EAAE,UAAU,GAAG,IAAA,KAAS,SAAU,CAAA,MAAA,EAAQ,WAAW,EAAC;AAC5D,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,MAAA,MAAM,EAAE,IAAAA,EAAAA,KAAAA,EAAM,UAAAC,SAAU,EAAA,GAAGC,OAAS,GAAA,KAAA;AACpC,MAAA,MAAM,OAAU,GAAA,sBAAA;AAAA,QACd,KAAM,CAAA,IAAA;AAAA,QACN,UAAA;AAAA,QACA,KAAA;AAAA,QACAA;AAAA,OACF;AACA,MAAA,QAAA,CAAS,IAAK,CAAA;AAAA,QACZ,EAAI,EAAA;AAAA,OACL,CAAA;AAAA;AACH;AAEF,EAAA,KAAA,CAAM,IAAK,CAAA;AAAA,IACT,IAAM,EAAA,EAAE,GAAG,IAAA,EAAM,GAAG,QAAS,EAAA;AAAA,IAC7B,EAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAU,EAAA;AAAA,GACX,CAAA;AACD,EAAO,OAAA,EAAA;AACT;AACO,SAAS,cAAA,CAAe,IAAc,EAAA,UAAA,EAAY,YAAsB,EAAA;AAC7E,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,OAAS,EAAA;AAAA,MACP,EAAI,EAAA,GAAA;AAAA,MACJ,cAAgB,EAAA,QAAA;AAAA,MAChB,IAAM,EAAA;AAAA,KACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAS,EAAA;AAAA,MACP,SAAW,EAAA,GAAA;AAAA,MACX,YAAA;AAAA,MACA,YAAc,EAAA,KAAA;AAAA,MACd,aAAe,EAAA,IAAA;AAAA,MACf,WAAa,EAAA;AAAA,QACX,IAAM,EAAA;AAAA,UACJ,KAAO,EAAA,uBAAA;AAAA,UACP,QAAU,EAAA,IAAA;AAAA,UACV,OAAS,EAAA,IAAA;AAAA,UACT,QAAU,EAAA,KAAA;AAAA,UACV,UAAY,EAAA;AAAA,SACd;AAAA,QACA,SAAS,EAAC;AAAA,QACV,QAAU,EAAA,GAAA;AAAA,QACV,MAAQ,EAAA;AAAA;AACV;AACF,GACF;AACA,EAAA,IAAI,QAAQ,EAAC;AACb,EAAA,MAAM,EAAK,GAAA,sBAAA,CAAuB,IAAM,EAAA,UAAA,EAAY,KAAK,CAAA;AACzD,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,EAAI,EAAA,GAAA;AAAA,IACJ,IAAM,EAAA,iBAAA;AAAA,IACN,MAAQ,EAAA,GAAA;AAAA,IACR,KAAO,EAAA;AAAA,MACL;AAAA,QACE,MAAM,EAAC;AAAA,QACP,EAAI,EAAA,GAAA;AAAA,QACJ,IAAM,EAAA,MAAA;AAAA,QACN,QAAU,EAAA;AAAA,UACR;AAAA,YACE;AAAA;AACF;AACF,OACF;AAAA,MACA,GAAG;AAAA;AACL,GACF;AACA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAG,WAAA;AAAA,IACH;AAAA,GACF;AACA,EAAO,OAAA,WAAA;AACT;ACjMO,IAAM,kBAAA,GAAN,cAAiC,YAAY,CAAA;AAAA,EAClD,WAAkC,EAAC;AAAA,EACnC,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAEA,YAAY,IAAsC,EAAA;AAChD,IAAM,KAAA,EAAA;AACN,IAAI,IAAA,EAAE,OAAO,SAAW,EAAA,MAAA,EAAAC,SAAQ,SAAU,EAAA,GAAI,QAAQ,EAAC;AACvD,IAAK,IAAA,CAAA,QAAA,GAAW,EAAE,GAAG,KAAM,EAAA;AAC3B,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,MAASA,GAAAA,OAAAA;AACd,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,MAAA,CAAO,4BAA+B,GAAA,IAAA;AAAA;AACxC;AACF,EAEA,mBAAA,GAAsB,CAAC,WAAuC,KAAA;AAC5D,IAAA,IAAA,CAAK,QAAW,GAAA;AAAA,MACd,GAAG,IAAK,CAAA,QAAA;AAAA,MACR,GAAG;AAAA,KACL;AACA,IAAK,IAAA,CAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,GACzB;AAAA,EAGA,cAAc,MAAM;AAClB,IAAA,OAAO,IAAK,CAAA,QAAA;AAAA,GACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,IAAA,OAAO,IAAK,CAAA,QAAA;AAAA,GACd;AAEF,CAAA;AAEO,SAAS,qBAAwB,GAAA;AACtC,EAAI,IAAA,IAAA,GAAO,mBAAmB,MAAM,CAAA;AACpC,EAAI,IAAA,SAAA,IAAa,OAAO,4BAA8B,EAAA;AACpD,IAAA,OAAO,MAAO,CAAA,4BAAA;AAAA;AAEhB,EAAO,OAAA,IAAI,kBAAmB,CAAA,IAAA,EAAM,aAAa,CAAA;AACnD;AAEO,SAAS,gBAA8C,GAAA;AAC5D,EAAA,IAAI,qBAAqB,qBAAsB,EAAA;AAC/C,EAAA,IAAI,QAAW,GAAA,oBAAA;AAAA,IACb,kBAAmB,CAAA,SAAA;AAAA,IACnB,kBAAmB,CAAA,WAAA;AAAA,IACnB,kBAAmB,CAAA;AAAA,GACrB;AACA,EAAO,OAAA,QAAA;AACT;;;ACrDO,SAAS,UAAU,QAA4B,EAAA;AACpD,EAAI,IAAA,EAAE,UAAW,EAAA,GAAI,cAAe,EAAA;AACpC,EAAA,IAAI,aAAa,aAAc,EAAA;AAC/B,EAAA,IAAI,EAAE,QAAA,EAAU,MAAO,EAAA,GAAI,WAAY,EAAA;AACvC,EAAA,IAAI,WAAW,WAAY,EAAA;AAC3B,EAAA,IAAI,qBAAqB,qBAAsB,EAAA;AAC/C,EAAA,IAAI,EAAE,YAAA,EAAc,YAAc,EAAA,eAAA,EAAiB,eAAkB,GAAA,QAAA;AAGrE,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,UAAA,CAAW,UAAU,MAAQ,EAAA;AAC/B,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,IAAI,UAAa,GAAA,CAAA,EAAG,YAAY,CAAA,qCAAA,EAAwC,eAAe,CAAA,CAAA;AACvF,QAAA,UAAA,CAAW,UAAU,CAAA,CAAE,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,iBACjC,YAAc,EAAA;AACvB,QAAA,QAAA,CAAS,QAAW,GAAA;AAAA,UAClB,GAAG,QAAS,CAAA,QAAA;AAAA,UACZ,QAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,SAAY,GAAA,CAAA,EAAG,YAAY,CAAA,mCAAA,EAAsC,eAAe,CAAA,CAAA;AACpF,QAAW,UAAA,CAAA,SAAS,CACjB,CAAA,IAAA,CAAK,MAAM;AACV,UAAO,MAAA,CAAA,cAAA,EAAgB,KAAK,QAAQ,CAAA;AAAA,SACrC,CAAA,CACA,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACxB;AACF,KACC,CAAC,QAAA,EAAU,MAAQ,EAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AACvC,EAAA,QAAA,CAAS,QAAQ,CAAA;AACnB;AAGO,SAAS,SAAS,OAA2B,EAAA;AAClD,EAAA,IAAI,EAAE,SAAA,EAAW,MAAQ,EAAA,YAAA,EAAc,cAAiB,GAAA,OAAA;AAExD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAa,IAAA,CAAC,MAAU,IAAA,CAAC,gBAAgB,YAAc,EAAA;AAC5D,IAAI,IAAA,GAAA,GAAM,GAAG,YAAY,CAAA,cAAA,CAAA;AACzB,IAAI,IAAA,GAAA,GAAM,IAAI,KAAM,EAAA;AACpB,IAAA,GAAA,CAAI,SAAS,MAAM;AAAA,KAAC;AACpB,IAAA,GAAA,CAAI,MAAM,CAAG,EAAA,GAAG,CAAc,WAAA,EAAA,SAAS,WAAW,MAAM,CAAA,CAAA;AAAA,GAC1D,EAAG,EAAE,CAAA;AACP;;;ACnDO,IAAI,cAAiB,GAAA,IAAA;AAAA,EAC1B,CAAC,EAAE,OAAA,EAA6C,KAAA;AAC9C,IAAA,SAAA,CAAU,OAAO,CAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;;;ACTA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,YAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAOA,IAAI,IAAO,GAAA,UAAA,CAGT,CAAC,KAAA,EAAO,GAAQ,KAAA;AAChB,EAAA,IAAI,EAAE,QAAA,EAAU,uBAAyB,EAAA,GAAG,MAAS,GAAA,KAAA;AAErD,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA;AAAA,MAEA,uBAAA,EAAyB,WAAW,MAAY,GAAA;AAAA;AAAA,GAClD;AAEJ,CAAC,CAAA;AAED,IAAO,YAAQ,GAAA,IAAA;AAER,IAAI,MAAkC,GAAA;AAAA,EAC3C,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA,MAAA;AAAA,EACP,WAAW;AACb,CAAA;;;AC3BO,IAAI,iBAAA,GAAyC,CAAC,YAAI,CAAA;;;ACOzD,SAAS,mBAAmB,UAAiC,EAAA;AAC3D,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAM,IAAA,EAAA,MAAA,EAAQ,IACZ,IAAA,gBAAA,CAAiB,eAAgB,CAAA;AAAA,MAC/B,IAAA,EAAM,MAAM,MAAO,CAAA,IAAA;AAAA,MACnB,WAAW,IAAK,CAAA,OAAA;AAAA,MAChB,QAAQ,IAAK,CAAA,MAAA;AAAA,MACb,QAAQ,IAAK,CAAA;AAAA,KACd,CAAA;AAAA;AAEP;AAEA,SAAS,6BACP,MACkB,EAAA;AAClB,EAAA,IAAIC,SAAW,EAAA;AACb,IAAO,MAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,IAAe,EAAC;AAC5C,IAAA,IAAI,QAAW,GAAA,MAAA,CAAO,WAAY,CAAA,MAAA,CAAO,MAAM,CAAA;AAC/C,IAAA,IACE,CAAC,QAAA,IACD,QAAU,EAAA,WAAA,EAAa,QAAa,KAAA,MAAA,CAAO,WAAY,CAAA,QAAA,IACvD,QAAU,EAAA,WAAA,EAAa,MAAW,KAAA,MAAA,CAAO,YAAY,MACrD,EAAA;AACA,MAAW,QAAA,GAAA,IAAI,iBAAiB,MAAM,CAAA;AACtC,MAAO,MAAA,CAAA,WAAA,CAAY,MAAO,CAAA,MAAM,CAAI,GAAA,QAAA;AAAA;AAEtC,IAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,MAAA,QAAA,CAAS,cAAc,MAAO,CAAA,WAAA;AAC9B,MAAO,MAAA,CAAA,cAAA,EAAgB,cAAc,MAAM,CAAA;AAAA;AAE7C,IAAO,OAAA,QAAA;AAAA;AAET,EAAO,OAAA,IAAI,iBAAiB,MAAM,CAAA;AACpC;AAEO,SAAS,sBAAA,CACd,cACA,UACA,EAAA;AACA,EAAA,IAAI,EAAE,IAAM,EAAA,OAAA,EAAS,SAAS,cAAe,EAAA,GAAI,gBAAgB,EAAC;AAClE,EAAA,kBAAA,CAAmB,UAAU,CAAA;AAC7B,EAAA,kBAAA,CAAmB,iBAAiB,CAAA;AACpC,EAAA,OAAO,4BAA6B,CAAA;AAAA,IAClC,GAAG,OAAA;AAAA,IACH,IAAM,EAAA,IAAA;AAAA,IACN,QAAQ,IAAM,EAAA,EAAA;AAAA,IACd,QAAA,EAAU,EAAE,OAAA,EAAS,cAAe;AAAA,GACrC,CAAA;AACH;AAcO,IAAI,qBAAwB,GAAA,aAAA;AAAA,EACjC;AACF,CAAA;AACA,qBAAA,CAAsB,WAAc,GAAA,+BAAA;AC5D7B,IAAI,oBAAuBC,GAAAA,IAAAA;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,cAAiB,GAAA,aAAA;AAAA,IACjC;AAAA,GAC+B,KAAA;AAC/B,IAAA,IAAI,aAAa,aAAc,EAAA;AAG/B,IAAA,IAAI,OAAO,UAAY,EAAA,YAAA;AAEvB,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAI,gBAAgB,OAAS,EAAA;AAC3B,QACE,uBAAAC,IAAC,aAAc,EAAA,EAAA,cAAA,EAAgB,gBAC7B,QAAAA,kBAAAA,GAAAA,CAAC,QACC,EAAA,EAAA,QAAA,kBAAAA,GAAC,CAAA,KAAA,EAAA,EAAM,SAAS,IACb,EAAA,QAAA,EAAA,CAAC,YACA,qBAAAA,GAAC,CAAA,UAAA,EAAA,EAAW,MAAM,YAAc,EAAA,UAAA,EAAwB,CAE5D,EAAA,CAAA,EACF,CACF,EAAA,CAAA;AAAA;AAGJ,MAAA,uBAAOA,GAAAA,CAAC,UAAW,EAAA,EAAA,IAAA,EAAY,UAAwB,EAAA,CAAA;AAAA;AAEzD,IAAA,uBACEA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,OAAA,EAAS,4CAA6C;AAAA;AAAA,KACjE;AAAA;AAGN;AAEA,SAAS,WAAW,KAGjB,EAAA;AACD,EAAI,IAAA,EAAE,IAAM,EAAA,UAAA,EAAe,GAAA,KAAA;AAC3B,EAAI,IAAA,QAAA,GAAW,sBAAuB,CAAA,IAAA,EAAM,UAAU,CAAA;AACtD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,QAAU,EAAA,CAAA;AAAA,oBACjCA,GAAAA,CAAC,cAAe,EAAA,EAAA,OAAA,EAAS,QAAU,EAAA;AAAA,GACrC,EAAA,CAAA;AAEJ;AAEO,SAAS,aAAa,SAA+B,EAAA;AAC1D,EAAA,OAAO,CAAC,KAAmC,KAAA;AACzC,IAAI,IAAA,EAAE,QAAS,EAAA,GAAI,qBAAsB,EAAA;AACzC,IAAA,uBACEA,GAAAA,CAAC,qBAAsB,CAAA,QAAA,EAAtB,EAA+B,KAAA,EAAO,QACrC,EAAA,QAAA,kBAAAA,GAAC,CAAA,SAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CACxB,EAAA,CAAA;AAAA,GAEJ;AACF;AAEA,SAAS,aAAA,CAAc,EAAE,KAAA,EAA2C,EAAA;AAClE,EAAA,uBAAOA,GAAAA,CAAC,KAAK,EAAA,EAAA,QAAA,EAAA,KAAA,EAAO,WAAW,8BAA+B,EAAA,CAAA;AAChE;ACpDO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,GAAM,GAAA,YAAA;AAAA,EACN,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EAEA,YAAY,IAA0B,EAAA;AACpC,IAAI,IAAA;AAAA,MACF,GAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACE,GAAA,IAAA;AACJ,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AACnB,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AACX,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,YAAY,eAAgB,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,SAAS,CAAA;AAE9D,IAAK,IAAA,CAAA,OAAA,GAAU,kBAAmB,CAAA,OAAA,EAAS,GAAkB,CAAA;AAE7D,IAAA,IAAA,CAAK,eAAkB,GAAA;AAAA,MACrB,SAAA,EAAW,KAAK,OAAQ,CAAA,SAAA;AAAA,MACxB,YAAA,EAAc,KAAK,OAAQ,CAAA,YAAA;AAAA,MAC3B,cAAA,EAAgB,KAAK,OAAQ,CAAA,cAAA;AAAA,MAC7B,eAAA,EAAiB,KAAK,OAAQ,CAAA,eAAA;AAAA,MAC9B,YAAA,EAAc,KAAK,OAAQ,CAAA;AAAA,KAC7B;AACA,IAAA,IAAA,CAAK,mBAAsB,GAAA;AAAA,MACzB,YAAA,EAAc,KAAK,OAAQ,CAAA,YAAA;AAAA,MAC3B,MAAM,UAAW,CAAA,IAAA;AAAA,MACjB,SAAA,EAAW,KAAK,OAAQ,CAAA;AAAA,KAC1B;AAAA;AACF,EAEA,cAAiB,GAAA,OACf,GACA,EAAA,OAAA,GAAiC,EAC9B,KAAA;AACH,IAAA,IAAI,QAAW,GAAA,CAAC,GAAK,EAAA,OAAA,CAAQ,IAAI,CAAA;AACjC,IAAI,IAAA;AAAA,MACF,QAAA,GAAW,IAAK,CAAA,UAAA,CAAW,WAAY,CAAA;AAAA,QACrC,MAAQ,EAAA,CAAA;AAAA,QACR,OAAS,EAAA,CAAA;AAAA,QACT,oBAAsB,EAAA;AAAA,OACvB,CAAA;AAAA,MACD,GAAG;AAAA,KACD,GAAA,OAAA;AACJ,IAAI,IAAA,IAAA,CAAK,QAAQ,YAAc,EAAA;AAC7B,MAAI,IAAA;AACF,QAAA,MAAMC,IAAM,GAAA,MAAM,KAAM,CAAA,GAAA,EAAK,OAAO,CAAA;AACpC,QAAO,OAAA,MAAMA,KAAI,IAAQ,EAAA;AAAA,eAClB,GAAK,EAAA;AACZ,QAAM,MAAA,IAAI,MAAM,CAA6B,0BAAA,EAAA,GAAG,IAAI,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA;AACpE;AAEF,IAAI,IAAA,GAAA,GAAM,KAAK,SAAU,CAAA,GAAA;AAAA,MACvB;AAAA,QACE,QAAA;AAAA,QACA,aAAe,EAAA,QAAA;AAAA;AAAA,QAEf,iBAAA,EAAmB,CAAC,MAAA,KAAW,MAAQ,EAAA;AAAA,OACzC;AAAA,MACA,YAAY;AACV,QAAI,IAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAK,EAAA;AAAA,UAC9B,GAAG,OAAA;AAAA,UACH,OAAS,EAAA;AAAA,YACP,eAAA,EAAiB,2BAA2B,QAAQ,CAAA;AAAA,YACpD,GAAG,OAAQ,CAAA;AAAA;AACb,SACD,CAAA;AACD,QAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,UAAI,IAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAK,EAAA;AAChC,UAAI,IAAA,EAAE,MAAQ,EAAA,UAAA,EAAe,GAAA,QAAA;AAC7B,UAAA,MAAM,IAAI,KAAA,CAAM,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,UAAU,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,EAAE,KAAO,EAAA,KAAA,EAAO,CAAA;AAAA;AAEtE,QAAO,OAAA,MAAM,SAAS,IAAQ,EAAA;AAAA;AAChC,KACF;AACA,IAAO,OAAA,GAAA;AAAA,GACT;AAAA,EAEA,iBAAA,GAAoB,OAAO,QAA+B,KAAA;AACxD,IAAI,IAAA;AACF,MAAI,IAAA,EAAE,GAAK,EAAA,OAAA,EAAY,GAAA,IAAA;AACvB,MAAA,IAAI,EAAE,YAAA,EAAc,SAAW,EAAA,YAAA,EAAiB,GAAA,OAAA;AAChD,MAAA,IAAI,CAAC,SAAW,EAAA;AACd,QAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;AAAA;AAE/C,MAAA,IAAI,GAAM,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,GAAG,CAAA,gBAAA,CAAA;AAChC,MAAI,IAAA,GAAA;AACJ,MAAA,IAAI,OAAO,IAAK,CAAA,SAAA,CAAU,EAAE,YAAA,EAAc,WAAW,CAAA;AACrD,MAAA,IAAI,YAAc,EAAA;AAChB,QAAM,GAAA,GAAA,MAAM,MAAM,GAAK,EAAA,EAAE,QAAQ,MAAQ,EAAA,IAAA,EAAM,CAAE,CAAA,IAAA;AAAA,UAAK,CAACA,IACrDA,KAAAA,IAAAA,CAAI,IAAK;AAAA,SACX;AAAA,OACK,MAAA;AACL,QAAM,GAAA,GAAA,MAAM,IAAK,CAAA,cAAA,CAAe,GAAK,EAAA;AAAA,UACnC,MAAQ,EAAA,MAAA;AAAA,UACR,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA;AAEH,MAAI,IAAA,IAAA,GAAY,OAAO,EAAC;AACxB,MAAA,IAAI,IAAM,EAAA,KAAA,IAAS,IAAK,CAAA,WAAA,EAAa,SAAW,EAAA;AAC9C,QAAA,IAAI,uBAAuB,EAAC;AAC5B,QAAA,IAAI,KAAK,WAAa,EAAA;AACpB,UAAuB,oBAAA,GAAA,sBAAA,CAAuB,KAAK,WAAW,CAAA;AAAA;AAEhE,QAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,UACX,GAAG,oBAAA;AAAA,UACH,GAAG,IAAK,CAAA;AAAA,SACV;AAAA;AAEF,MAAI,IAAA,IAAA,CAAK,QAAQ,YAAc,EAAA;AAC7B,QAAO,IAAA,GAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,QAAQ,IAAK,CAAA,WAAA;AAAA,UACb,SAAA,EAAW,IAAK,CAAA,SAAA,IAAa,EAAC;AAAA,UAC9B,SAAA,EAAW,KAAK,OAAQ,CAAA;AAAA,SAC1B;AAAA;AAEF,MAAO,OAAA,IAAA;AAAA,aACA,CAAG,EAAA;AACV,MAAQ,OAAA,CAAA,KAAA,CAAM,sCAAiC,CAAC,CAAA;AAChD,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AAAA,EAEA,oBAAA,GAAuB,CAAC,OAAsC,KAAA;AAC5D,IAAI,IAAA,MAAA,GAAS,OAAO,UAAW,EAAA;AAC/B,IAAO,OAAA;AAAA,MACL,EAAI,EAAA,CAAA,cAAA,EAAiB,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA,IAAM,EAAA,cAAA;AAAA,MACN,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,MAAA;AAAA,UACN,EAAI,EAAA,MAAA;AAAA,UACJ,MAAM,EAAE,uBAAA,EAAyB,EAAE,MAAA,EAAQ,SAAU;AAAA;AACvD;AACF,KACF;AAAA,GACF;AAAA,EAEA,QAAW,GAAA,OACT,MAAyB,GAAA,EACc,KAAA;AACvC,IAAI,IAAA;AACF,MAAA,IAAI,EAAE,OAAA,EAAS,UAAY,EAAA,mBAAA,EAAqB,iBAAoB,GAAA,IAAA;AACpE,MAAI,IAAA;AAAA,QACF,SAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,UACE,IAAK,CAAA,OAAA;AACT,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,MAAM,WAAc,GAAA,cAAA;AAAA,UAClB,WAAA;AAAA,UACA,IAAK,CAAA,UAAA;AAAA,UACL;AAAA,SACF;AACA,QAAO,OAAA,WAAA;AAAA;AAGT,MAAA,IAAI,CAAC,SAAW,EAAA;AACd,QAAM,MAAA,IAAI,MAAM,6BAA6B,CAAA;AAAA;AAG/C,MAAA,IAAI,EAAE,QAAA,EAAU,GAAG,cAAA,EAAmB,GAAA,MAAA;AACtC,MAAA,IAAI,IAAgC,GAAA;AAAA,QAClC,GAAG,mBAAA;AAAA,QACH,MAAQ,EAAA,cAAA;AAAA,QACR,KAAK,OAAQ,CAAA;AAAA,OACf;AAEA,MAAA,IAAI,OAAuB,GAAA;AAAA,QACzB,MAAQ,EAAA,MAAA;AAAA,QACR,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,IAAI;AAAA,OAC3B;AACA,MAAA,IAAI,GAAM,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA,QAAA,CAAA;AACrC,MAAI,IAAA,OAAA;AAEJ,MAAA,IAAI,YAAc,EAAA;AAChB,QAAU,OAAA,GAAA,MAAM,KAAM,CAAA,GAAA,EAAK,OAAO,CAAA,CAAE,KAAK,CAAC,GAAA,KAAQ,GAAI,CAAA,IAAA,EAAM,CAAA;AAAA,OACvD,MAAA;AACL,QAAU,OAAA,GAAA,MAAM,IAAK,CAAA,cAAA,CAAe,GAAK,EAAA;AAAA,UACvC,GAAG,OAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA;AAGH,MAAA,IAAI,SAAS,KAAO,EAAA;AAClB,QAAM,MAAA,IAAI,KAAM,CAAA,OAAA,EAAS,KAAK,CAAA;AAAA;AAEhC,MAAA,IAAI,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAmB,GAAA,OAAA;AACxC,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAmC,gCAAA,EAAA,SAAS,CAAE,CAAA,CAAA;AAAA;AAEhE,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAO,IAAA,GAAA,IAAA,CAAK,qBAAqB,kCAAkC,CAAA;AAAA;AAErE,MAAA,IAAI,MAAM,KAAO,EAAA;AACf,QAAA,IAAI,QAAQ,IAAK,CAAA,KAAA;AACjB,QAAK,IAAA,CAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,GAAA,CAAI,MAAM,GAAI,CAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA;AAEpE,MAAO,OAAA;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAS,EAAA;AAAA,UACP,GAAG,eAAA;AAAA,UACH,WAAa,EAAA;AAAA,YACX,MAAM,UAAW,CAAA,IAAA;AAAA;AAAA,YAEjB,OAAA,EAAS,kBAAyC,OAAO,CAAA;AAAA,YACzD,QAAU,EAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA,QAAA;AAAA,YAC/B,MAAQ,EAAA,IAAI,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA;AAAA;AAC/B;AACF,OACF;AAAA,aACO,CAAG,EAAA;AAEV,MAAQ,OAAA,CAAA,KAAA,CAAM,4BAAuB,CAAC,CAAA;AACtC,MAAM,MAAA,CAAA;AAAA;AACR,GACF;AAAA,EAEA,mBAAA,GAAsB,OAAO,IAAgC,KAAA;AAC3D,IAAA,IAAI,EAAE,IAAO,GAAA,EAAI,EAAA,IAAA,EAAM,IAAO,GAAA,IAAA;AAC9B,IAAI,IAAA,SAAA,GAAY,IAAK,CAAA,UAAA,CAAW,IAAK,CAAA,CAAC,EAAE,MAAA,EAAAJ,OAAO,EAAA,KAAMA,OAAQ,EAAA,IAAA,KAAS,IAAI,CAAA;AAC1E,IAAA,IAAI,SAAS,SAAW,EAAA,MAAA;AACxB,IAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,MAAI,IAAA;AACF,QAAO,OAAA;AAAA,UACL,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,MAAM,OAAQ,CAAA,OAAA;AAAA,YACxB,MAAO,CAAA;AAAA,cACL,IAAA,EAAM,EAAE,GAAG,sBAAA,CAAuB,UAAU,MAAM,CAAA,EAAG,GAAG,IAAK,EAAA;AAAA,cAC7D,QAAU,EAAA;AAAA,aACX;AAAA;AACH,SACF;AAAA,eACO,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,IAAK,CAAA,gCAAA,EAA6B,IAAM,EAAA,EAAA,EAAI,CAAC,CAAA;AACrD,QAAO,OAAA,IAAA;AAAA;AACT;AAEF,IAAO,OAAA,IAAA;AAAA,GACT;AACF;ACnSO,SAAS,0BACd,OACuB,EAAA;AACvB,EAAI,IAAA,OAAA,GAAUK,4BAAmC,OAAO,CAAA;AACxD,EAAA,OAAO,OAAQ,CAAA,MAAA;AAAA,IACb,CAAC,EAAE,IAAK,EAAA,KAAM,SAAS,cAAkB,IAAA,CAAC,IAAK,CAAA,UAAA,CAAW,UAAU;AAAA,GACtE;AACF;;;ACVO,IAAI,mBAAsB,GAAA;AAAA,EAC/B,UACE,EAAA,+EAAA;AAAA,EACF,UACE,EAAA,+EAAA;AAAA,EACF,KACE,EAAA,gFAAA;AAAA,EACF,QACE,EAAA,qFAAA;AAAA,EACF,QACE,EAAA,qFAAA;AAAA,EACF,YACE,EAAA,0FAAA;AAAA,EACF,YACE,EAAA,2FAAA;AAAA,EACF,YACE,EAAA,6FAAA;AAAA,EACF,YACE,EAAA,2FAAA;AAAA,EACF,YACE,EAAA,0FAAA;AAAA,EACF,YACE,EAAA,6FAAA;AAAA,EACF,SACE,EAAA,0FAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,4FAAA;AAAA,EACF,SACE,EAAA,yFAAA;AAAA,EACF,SACE,EAAA,4FAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,SACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,4FAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,wFAAA;AAAA,EACF,UACE,EAAA,yFAAA;AAAA,EACF,UACE,EAAA,0FAAA;AAAA,EACF,UACE,EAAA;AACJ;;;ACtBa,IAAA,gBAAA,GAAN,cAA+B,QAAS,CAAA;AAAA,EAC7C,YAAiC,GAAA,kBAAA;AAAA,EACjC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EAGA,OAAO,aAAA;AAAA,EACP,OAAO,eAAA;AAAA,EAEP,YAAY,MAAgC,EAAA;AAC1C,IAAA,IAAI,EAAE,QAAU,EAAA,MAAA,EAAQ,WAAa,EAAA,GAAG,YAAe,GAAA,MAAA;AACvD,IAAM,KAAA,CAAA,EAAE,GAAG,UAAA,EAAY,CAAA;AACvB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAChB,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AAAA;AAEvB;AAEa,IAAA,oBAAA,GAAN,cAAmC,iBAAkB,CAAA;AAAA,EAG1D,WAAA,CAAY,aAAoC,QAA4B,EAAA;AAC1E,IAAA,KAAA,CAAM,aAAa,QAAQ,CAAA;AAC3B,IAAA,IAAI,EAAE,IAAA,EAAM,GAAG,IAAA,EAAS,GAAA,WAAA;AACxB,IAAA,MAAA,CAAO,OAAO,IAAK,CAAA,MAAA,EAAQ,IAAK,CAAA,WAAA,EAAa,MAAM,IAAI,CAAA;AAAA;AACzD,EAEA,IAAI,OAA2B,GAAA;AAC7B,IAAA,OAAO,KAAM,CAAA,OAAA;AAAA;AACf,EAEA,IAAI,WAAc,GAAA;AAChB,IAAI,IAAA,IAAA,CAAK,SAAS,MAAQ,EAAA;AACxB,MAAO,OAAA,sBAAA,CAAuB,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAEnD,IAAA,OAAO,EAAC;AAAA;AAEZ;AAEA,QAAA,CAAS,eAAkB,GAAA,oBAAA","file":"index.mjs","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n 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 WEAVERSE_HOST ||\n weaverseHost ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n isPreviewMode: isPreviewMode || false,\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 inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\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 }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme }\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion, 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\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (\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\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil, request })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n // @ts-expect-error\n shouldCacheResult: (result) => result?.data,\n },\n async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n },\n )\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n","import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","schema","isBrowser","memo","jsx","res","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n 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 WEAVERSE_HOST ||\n weaverseHost ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n isPreviewMode: isPreviewMode || false,\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 inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\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 }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme }\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion, 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\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (\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\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: ComponentType<any>) {\n return (props: JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'api/public'\nconst DEFAULT_CACHE_STRATEGY = {\n maxAge: 5,\n sMaxAge: 5,\n staleWhileRevalidate: 82800,\n}\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\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 public countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n countries,\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.countries = countries\n this.withCache = createWithCache({ cache, waitUntil, request })\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 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\n private async directFetch<T>(\n url: string,\n options: RequestInit = {},\n ): Promise<T> {\n try {\n const res = await fetch(url, options)\n if (!res.ok) {\n const error = await res.text()\n throw new Error(`${res.status} ${res.statusText} ${error}`)\n }\n return res.json()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n public async fetchWithCache<T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ): Promise<T> {\n const {\n strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),\n ...reqInit\n } = options\n const cacheKey = [url, options.body]\n\n if (this.configs.isDesignMode) {\n return this.directFetch<T>(url, reqInit)\n }\n\n return this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResult: (result: any) => result?.data,\n },\n async () => {\n return this.directFetch<T>(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n },\n ) as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: any\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.info('Unable to load theme settings', e)\n return 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: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n console.error('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n page = this.generateFallbackPage('Weaverse project not found.')\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n 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') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\n ),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n","import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n"]}
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": "4.2.0",
5
+ "version": "4.2.1",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "typings": "dist/index.d.ts",
@@ -36,7 +36,7 @@
36
36
  "treeshake": true
37
37
  },
38
38
  "dependencies": {
39
- "@weaverse/react": "4.2.0",
39
+ "@weaverse/react": "4.2.1",
40
40
  "react-error-boundary": "^4.0.13",
41
41
  "@shopify/oxygen-workers-types": "4",
42
42
  "@shopify/remix-oxygen": "2",