@weaverse/next 0.1.0-alpha.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +155 -73
  2. package/dist/{chunk-6PMZ77RA.mjs → chunk-LH6AAEIK.mjs} +115 -8
  3. package/dist/chunk-LH6AAEIK.mjs.map +1 -0
  4. package/dist/index.js +260 -30
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +167 -46
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/server.js +321 -91
  9. package/dist/server.js.map +1 -1
  10. package/dist/server.mjs +205 -28
  11. package/dist/server.mjs.map +1 -1
  12. package/dist/types/client.d.ts +16 -0
  13. package/dist/types/client.d.ts.map +1 -0
  14. package/dist/types/hooks.d.ts +20 -0
  15. package/dist/types/hooks.d.ts.map +1 -0
  16. package/dist/types/index.d.ts +34 -0
  17. package/dist/types/index.d.ts.map +1 -0
  18. package/dist/types/item.d.ts +60 -0
  19. package/dist/types/item.d.ts.map +1 -0
  20. package/dist/types/loader.d.ts +25 -0
  21. package/dist/types/loader.d.ts.map +1 -0
  22. package/dist/types/main.d.ts +11 -0
  23. package/dist/types/main.d.ts.map +1 -0
  24. package/dist/types/provider.d.ts +82 -0
  25. package/dist/types/provider.d.ts.map +1 -0
  26. package/dist/types/registry.d.ts +15 -0
  27. package/dist/types/registry.d.ts.map +1 -0
  28. package/dist/types/renderer.d.ts +21 -0
  29. package/dist/types/renderer.d.ts.map +1 -0
  30. package/dist/types/request-info.d.ts +19 -0
  31. package/dist/types/request-info.d.ts.map +1 -0
  32. package/dist/types/revalidate-item.d.ts +82 -0
  33. package/dist/types/revalidate-item.d.ts.map +1 -0
  34. package/dist/types/root-provider.d.ts +62 -0
  35. package/dist/types/root-provider.d.ts.map +1 -0
  36. package/dist/types/runtime.d.ts +113 -0
  37. package/dist/types/runtime.d.ts.map +1 -0
  38. package/dist/types/seo.d.ts +55 -0
  39. package/dist/types/seo.d.ts.map +1 -0
  40. package/dist/types/server/configs.d.ts +27 -0
  41. package/dist/types/server/configs.d.ts.map +1 -0
  42. package/dist/types/server/normalize-page-url.d.ts +19 -0
  43. package/dist/types/server/normalize-page-url.d.ts.map +1 -0
  44. package/dist/types/server/revalidate-handler.d.ts +55 -0
  45. package/dist/types/server/revalidate-handler.d.ts.map +1 -0
  46. package/dist/types/server/server-client.d.ts +21 -0
  47. package/dist/types/server/server-client.d.ts.map +1 -0
  48. package/dist/types/server.d.ts +19 -0
  49. package/dist/types/server.d.ts.map +1 -0
  50. package/dist/types/studio-bridge.d.ts +16 -0
  51. package/dist/types/studio-bridge.d.ts.map +1 -0
  52. package/dist/types/studio-connect.d.ts +27 -0
  53. package/dist/types/studio-connect.d.ts.map +1 -0
  54. package/dist/types/studio-router.d.ts +50 -0
  55. package/dist/types/studio-router.d.ts.map +1 -0
  56. package/dist/types/studio-script-src.d.ts +12 -0
  57. package/dist/types/studio-script-src.d.ts.map +1 -0
  58. package/dist/types/theme-settings-store.d.ts +18 -0
  59. package/dist/types/theme-settings-store.d.ts.map +1 -0
  60. package/dist/types/translation-context.d.ts +156 -0
  61. package/dist/types/translation-context.d.ts.map +1 -0
  62. package/dist/types/translation-store.d.ts +44 -0
  63. package/dist/types/translation-store.d.ts.map +1 -0
  64. package/dist/types/types.d.ts +665 -0
  65. package/dist/types/types.d.ts.map +1 -0
  66. package/dist/types/use-weaverse-next-studio.d.ts +34 -0
  67. package/dist/types/use-weaverse-next-studio.d.ts.map +1 -0
  68. package/dist/types/utils.d.ts +12 -0
  69. package/dist/types/utils.d.ts.map +1 -0
  70. package/package.json +12 -8
  71. package/src/client.ts +102 -0
  72. package/src/hooks.ts +50 -0
  73. package/src/index.ts +153 -0
  74. package/src/item.ts +167 -0
  75. package/src/loader.ts +135 -0
  76. package/src/main.tsx +45 -0
  77. package/src/provider.tsx +225 -0
  78. package/src/registry.ts +63 -0
  79. package/src/renderer.tsx +100 -0
  80. package/src/request-info.ts +124 -0
  81. package/src/revalidate-item.ts +211 -0
  82. package/src/root-provider.tsx +182 -0
  83. package/src/runtime.ts +555 -0
  84. package/src/seo.ts +157 -0
  85. package/src/server/configs.ts +178 -0
  86. package/src/server/normalize-page-url.ts +73 -0
  87. package/src/server/revalidate-handler.ts +357 -0
  88. package/src/server/server-client.ts +728 -0
  89. package/src/server.ts +67 -0
  90. package/src/studio-bridge.tsx +82 -0
  91. package/src/studio-connect.tsx +88 -0
  92. package/src/studio-router.ts +85 -0
  93. package/src/studio-script-src.ts +128 -0
  94. package/src/theme-settings-store.ts +47 -0
  95. package/src/translation-context.tsx +299 -0
  96. package/src/translation-store.ts +69 -0
  97. package/src/types.ts +753 -0
  98. package/src/use-weaverse-next-studio.tsx +106 -0
  99. package/src/utils.ts +37 -0
  100. package/dist/chunk-6PMZ77RA.mjs.map +0 -1
  101. package/dist/index.d.mts +0 -517
  102. package/dist/index.d.ts +0 -517
  103. package/dist/seo-CpN6tC36.d.mts +0 -477
  104. package/dist/seo-CpN6tC36.d.ts +0 -477
  105. package/dist/server.d.mts +0 -99
  106. package/dist/server.d.ts +0 -99
package/dist/index.mjs CHANGED
@@ -1,13 +1,31 @@
1
- import { buildWeaverseNextRequestInfo, generateDataFromSchema } from './chunk-6PMZ77RA.mjs';
2
- export { buildWeaverseNextRequestInfo, formatWeaverseNextSeoMetadata, getWeaverseNextSeoMetadata, runWeaverseComponentLoaders } from './chunk-6PMZ77RA.mjs';
1
+ import { buildWeaverseNextRequestInfo, DEFAULT_REVALIDATE_ENDPOINT, revalidateWeaverseNextItem, generateDataFromSchema } from './chunk-LH6AAEIK.mjs';
2
+ export { DEFAULT_REVALIDATE_ENDPOINT, buildWeaverseNextRequestInfo, buildWeaverseNextRevalidateRouteContext, formatWeaverseNextSeoMetadata, generateDataFromSchema, getWeaverseNextSeoMetadata, revalidateWeaverseNextItem, runWeaverseComponentLoaders } from './chunk-LH6AAEIK.mjs';
3
3
  import { WeaverseRoot, Weaverse, WeaverseItemStore, useSafeExternalStore } from '@weaverse/react';
4
4
  export { isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
5
5
  import { createSchema } from '@weaverse/schema';
6
- export { createSchema } from '@weaverse/schema';
6
+ export * from '@weaverse/schema';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
- import { createContext, memo, useContext, useMemo, useRef, useEffect, useSyncExternalStore } from 'react';
8
+ import { createContext, memo, useContext, useMemo, useEffect, useLayoutEffect, useRef, useSyncExternalStore } from 'react';
9
9
  import { useRouter } from 'next/navigation';
10
10
 
11
+ function flattenItemData(update) {
12
+ let { data, ...rest } = update;
13
+ if (!(data && typeof data === "object" && !Array.isArray(data))) {
14
+ return rest;
15
+ }
16
+ return { ...data, ...rest };
17
+ }
18
+ var deferredItemUpdates = null;
19
+ function collectDeferredItemUpdates(create) {
20
+ let previousQueue = deferredItemUpdates;
21
+ let queue = /* @__PURE__ */ new Set();
22
+ deferredItemUpdates = queue;
23
+ try {
24
+ return [create(), [...queue]];
25
+ } finally {
26
+ deferredItemUpdates = previousQueue;
27
+ }
28
+ }
11
29
  var WeaverseNextItem = class extends WeaverseItemStore {
12
30
  /**
13
31
  * Cached merged snapshot (base `_store` + translations). Reset whenever the
@@ -17,12 +35,47 @@ var WeaverseNextItem = class extends WeaverseItemStore {
17
35
  _cachedSnapshot = null;
18
36
  _snapshotStoreRef = null;
19
37
  _snapshotTranslationRef = null;
38
+ /** Create an item store from serialized component data and its runtime. */
20
39
  constructor(initialData, weaverse) {
21
40
  super(initialData, weaverse);
22
- let { data, ...rest } = initialData;
23
41
  let schemaData = generateDataFromSchema(this.Element?.schema);
24
- Object.assign(this._store, schemaData, data, rest);
42
+ Object.assign(this._store, schemaData, flattenItemData(initialData));
25
43
  }
44
+ /**
45
+ * Flatten nested `data` on updates exactly like the constructor does. Core's
46
+ * `initProject()` calls `setData(item)` when a new runtime serves a page
47
+ * whose item instances already exist (e.g. locale/client navigation).
48
+ *
49
+ * A complete serialized item (it carries `id` and `type`; core's
50
+ * `initProject()` always passes one) replaces the store the way the
51
+ * constructor builds it: the schema defaults of the item's own `type` — the
52
+ * Builder can replace a section in place, keeping its id — then the item's
53
+ * settings. A payload omits a setting — or the whole optional `data` — when
54
+ * its value equals the schema default, so merging into the previous store
55
+ * would keep the previous locale's value visible. Partial updates still
56
+ * merge. Either way the `_store` ref changes, which invalidates the memoized
57
+ * snapshot below. The subscriber emit is queued instead of fired when a
58
+ * render-phase deferral is active (see `collectDeferredItemUpdates`).
59
+ */
60
+ setData = (update) => {
61
+ if ("id" in update && "type" in update) {
62
+ let { data, type } = update;
63
+ let schema = this.weaverse.elementRegistry.get(type)?.schema;
64
+ this._store = {
65
+ ...generateDataFromSchema(schema),
66
+ ...data === void 0 ? {} : { data },
67
+ ...flattenItemData(update)
68
+ };
69
+ } else {
70
+ this.data = flattenItemData(update);
71
+ }
72
+ if (deferredItemUpdates) {
73
+ deferredItemUpdates.add(this);
74
+ } else {
75
+ this.triggerUpdate();
76
+ }
77
+ return this.data;
78
+ };
26
79
  /**
27
80
  * Overlay item-level translations onto the base store when the runtime is in
28
81
  * translation mode. Mirrors Hydrogen's `WeaverseHydrogenItem.getSnapShot()`:
@@ -264,18 +317,24 @@ var useThemeText = useTranslation;
264
317
 
265
318
  // src/translation-store.ts
266
319
  var TranslationStore = class {
320
+ /** Current flat translation overrides keyed by dot path. */
267
321
  overrides = {};
268
322
  listeners = /* @__PURE__ */ new Set();
323
+ /** Replace every override and notify subscribers. */
269
324
  setOverrides = (overrides) => {
270
325
  this.overrides = { ...overrides };
271
326
  this.emit();
272
327
  };
328
+ /** Merge changed overrides into the current values and notify subscribers. */
273
329
  updateOverrides = (newOverrides) => {
274
330
  this.overrides = { ...this.overrides, ...newOverrides };
275
331
  this.emit();
276
332
  };
333
+ /** Return the current client-side override snapshot. */
277
334
  getSnapshot = () => this.overrides;
335
+ /** Return the override snapshot used during server rendering. */
278
336
  getServerSnapshot = () => this.overrides;
337
+ /** Subscribe to override changes and return an unsubscribe function. */
279
338
  subscribe = (callback) => {
280
339
  this.listeners.add(callback);
281
340
  return () => {
@@ -466,6 +525,12 @@ function getConfigString(configs, key) {
466
525
  let value = configs?.[key];
467
526
  return typeof value === "string" ? value : void 0;
468
527
  }
528
+ function resolveModeFlag(config, key) {
529
+ return config.client?.requestContext?.[key] === true || config.data.configs?.[key] === true;
530
+ }
531
+ function resolveSectionType(config) {
532
+ return config.client?.requestContext?.sectionType || getConfigString(config.data.configs, "sectionType") || void 0;
533
+ }
469
534
  function getRecordString(record, key) {
470
535
  let value = record?.[key];
471
536
  return typeof value === "string" ? value : void 0;
@@ -502,12 +567,30 @@ function registerRuntime(runtime) {
502
567
  runtimeWindow.__weaverses[runtime.pageId] = runtime;
503
568
  runtimeWindow.__weaverse = runtime;
504
569
  }
570
+ function rebindPageItemsToRuntime(runtime) {
571
+ let items = runtime.data?.items;
572
+ if (!items) {
573
+ return;
574
+ }
575
+ for (let { id } of items) {
576
+ let instance = runtime.itemInstances.get(id);
577
+ if (instance && instance.weaverse !== runtime) {
578
+ instance.weaverse = runtime;
579
+ }
580
+ }
581
+ }
505
582
  var WeaverseNextRuntime = class extends Weaverse {
583
+ /** Stable ID of the page owned by this runtime. */
506
584
  pageId;
585
+ /** Mutable callbacks and stores consumed by the Studio bridge. */
507
586
  internal;
587
+ /** Path, query, and locale metadata for Studio navigation. */
508
588
  requestInfo;
589
+ /** Whether this runtime renders a component preview. */
509
590
  isPreviewMode;
591
+ /** Whether this runtime renders a saved revision. */
510
592
  isRevisionPreview;
593
+ /** Component type rendered in section preview mode. */
511
594
  sectionType;
512
595
  // ─── Item-level translation sidecar (design mode only) ─────────────
513
596
  /**
@@ -516,29 +599,52 @@ var WeaverseNextRuntime = class extends Weaverse {
516
599
  * components, so translations render without mutating the base `_store`.
517
600
  */
518
601
  translationMap = {};
602
+ /** Locale associated with the item-level translation sidecar. */
519
603
  translationLocale = String();
604
+ /** Weaverse language ID used when saving translation changes. */
520
605
  translationLanguageId = String();
606
+ /**
607
+ * Fresh page data captured while React was rendering. Runtime reuse happens
608
+ * inside the renderer's render phase (`useMemo`), where applying it through
609
+ * `setProjectData()` would emit item updates to `useSyncExternalStore`
610
+ * subscribers mid-render. The renderer applies it post-commit via
611
+ * `flushRenderPhaseUpdates()`. Never set on design-mode runtimes — the live
612
+ * Studio tree owns the page data there.
613
+ */
614
+ pendingProjectData;
615
+ /**
616
+ * Reused item instances whose data was refreshed while this runtime was
617
+ * constructed during render (core `initProject()` calls `setData()` on
618
+ * them). Their data is already fresh; only the subscriber notification was
619
+ * deferred to `flushRenderPhaseUpdates()`.
620
+ */
621
+ pendingItemUpdates = [];
622
+ /** Create a browser runtime from a loaded page and its request context. */
521
623
  constructor(config) {
522
624
  let { client, data } = config;
523
625
  let page = getRenderablePage(data);
524
626
  let configs = data.configs;
525
627
  let requestContext = client?.requestContext;
628
+ let isDesignMode = resolveModeFlag(config, "isDesignMode");
629
+ let isPreviewMode = resolveModeFlag(config, "isPreviewMode");
630
+ let isRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
631
+ let sectionType = resolveSectionType(config);
526
632
  let projectId = resolveProjectId(client, data, page.id);
527
633
  ensureNextItemConstructor();
528
634
  super({
529
635
  projectId,
530
636
  data: page,
531
- isDesignMode: requestContext?.isDesignMode ?? false,
637
+ isDesignMode,
532
638
  weaverseHost: getConfigString(configs, "weaverseHost"),
533
639
  weaverseVersion: getConfigString(configs, "weaverseVersion")
534
640
  });
535
641
  this.pageId = page.id;
536
642
  this.dataContext = resolveDataContext(config);
537
643
  this.requestInfo = buildWeaverseNextRequestInfo(requestContext);
538
- this.isDesignMode = requestContext?.isDesignMode ?? false;
539
- this.isPreviewMode = requestContext?.isPreviewMode ?? false;
540
- this.isRevisionPreview = requestContext?.isRevisionPreview ?? false;
541
- this.sectionType = requestContext?.sectionType;
644
+ this.isDesignMode = isDesignMode;
645
+ this.isPreviewMode = isPreviewMode;
646
+ this.isRevisionPreview = isRevisionPreview;
647
+ this.sectionType = sectionType;
542
648
  let translationStore = config.translationStore ?? new TranslationStore();
543
649
  this.internal = {
544
650
  merchantOverrides: config.merchantOverrides,
@@ -641,6 +747,27 @@ var WeaverseNextRuntime = class extends Weaverse {
641
747
  this.extractTranslationSidecar();
642
748
  this.initProject();
643
749
  };
750
+ /**
751
+ * Apply updates deferred off the render phase: swap in any pending page data
752
+ * captured on runtime reuse, then notify items whose data was refreshed
753
+ * during construction. The renderer calls this from a layout effect right
754
+ * after commit, so subscribers re-render before paint (no content flash) and
755
+ * without React's setState-in-render warning.
756
+ */
757
+ flushRenderPhaseUpdates = () => {
758
+ let pendingData = this.pendingProjectData;
759
+ if (pendingData) {
760
+ this.pendingProjectData = void 0;
761
+ this.setProjectData(pendingData);
762
+ }
763
+ let pendingItems = this.pendingItemUpdates;
764
+ if (pendingItems.length > 0) {
765
+ this.pendingItemUpdates = [];
766
+ for (let item of pendingItems) {
767
+ item.triggerUpdate();
768
+ }
769
+ }
770
+ };
644
771
  };
645
772
  function createWeaverseNextRuntime(config) {
646
773
  let requestInfo = buildWeaverseNextRequestInfo(config.client?.requestContext);
@@ -649,20 +776,26 @@ function createWeaverseNextRuntime(config) {
649
776
  let existing = runtimeWindow?.__weaverses?.[page.id];
650
777
  let requestKey = getRuntimeKey(page.id, requestInfo);
651
778
  if (existing?.__weaverseNextRequestKey === requestKey) {
652
- let nextIsDesignMode = config.client?.requestContext?.isDesignMode ?? false;
653
- if (!(existing.isDesignMode || nextIsDesignMode)) {
654
- existing.setProjectData(page);
779
+ let configs = config.data.configs;
780
+ let nextIsDesignMode = resolveModeFlag(config, "isDesignMode");
781
+ let nextIsPreviewMode = resolveModeFlag(config, "isPreviewMode");
782
+ let nextIsRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
783
+ let nextSectionType = resolveSectionType(config);
784
+ if (existing.isDesignMode || nextIsDesignMode) {
785
+ existing.pendingProjectData = void 0;
786
+ } else {
787
+ existing.pendingProjectData = page;
655
788
  }
656
789
  existing.__weaverseNextLatestData = page;
657
790
  existing.dataContext = resolveDataContext(config);
658
791
  existing.requestInfo = requestInfo;
659
792
  existing.projectId = resolveProjectId(config.client, config.data, page.id);
660
793
  existing.isDesignMode = nextIsDesignMode;
661
- existing.isPreviewMode = config.client?.requestContext?.isPreviewMode ?? false;
662
- existing.isRevisionPreview = config.client?.requestContext?.isRevisionPreview ?? false;
663
- existing.sectionType = config.client?.requestContext?.sectionType;
664
- existing.weaverseHost = getConfigString(config.data.configs, "weaverseHost") ?? existing.weaverseHost;
665
- existing.weaverseVersion = getConfigString(config.data.configs, "weaverseVersion") ?? existing.weaverseVersion;
794
+ existing.isPreviewMode = nextIsPreviewMode;
795
+ existing.isRevisionPreview = nextIsRevisionPreview;
796
+ existing.sectionType = nextSectionType;
797
+ existing.weaverseHost = getConfigString(configs, "weaverseHost") ?? existing.weaverseHost;
798
+ existing.weaverseVersion = getConfigString(configs, "weaverseVersion") ?? existing.weaverseVersion;
666
799
  existing.internal.pageAssignment = config.data.pageAssignment;
667
800
  existing.internal.project = config.data.project;
668
801
  if (config.navigate) {
@@ -682,7 +815,11 @@ function createWeaverseNextRuntime(config) {
682
815
  registerRuntime(existing);
683
816
  return existing;
684
817
  }
685
- let runtime = new WeaverseNextRuntime(config);
818
+ let [runtime, refreshedItems] = collectDeferredItemUpdates(
819
+ () => new WeaverseNextRuntime(config)
820
+ );
821
+ runtime.pendingItemUpdates = refreshedItems;
822
+ rebindPageItemsToRuntime(runtime);
686
823
  runtime.__weaverseNextRequestKey = requestKey;
687
824
  runtime.__weaverseNextLatestData = page;
688
825
  registerRuntime(runtime);
@@ -697,7 +834,10 @@ function bindWeaverseNextStudioRuntime(runtime) {
697
834
  return false;
698
835
  }
699
836
  let boundRuntime = runtime;
700
- if (!boundRuntime.__weaverseNextStudioBound) {
837
+ let activeRuntime = studio.weaverse;
838
+ let activeRequestInfo = activeRuntime?.requestInfo;
839
+ let isActiveUrl = !activeRequestInfo || activeRequestInfo.pathname === runtime.requestInfo.pathname && activeRequestInfo.search === runtime.requestInfo.search;
840
+ if (!(boundRuntime.__weaverseNextStudioBound && isActiveUrl)) {
701
841
  studio.init?.(runtime);
702
842
  boundRuntime.__weaverseNextStudioBound = true;
703
843
  return true;
@@ -709,29 +849,6 @@ function bindWeaverseNextStudioRuntime(runtime) {
709
849
  });
710
850
  return true;
711
851
  }
712
-
713
- // src/revalidate-item.ts
714
- var DEFAULT_REVALIDATE_ENDPOINT = "/api/weaverse/revalidate";
715
- async function revalidateWeaverseNextItem(runtime, draftItem, endpoint = DEFAULT_REVALIDATE_ENDPOINT) {
716
- let instance = runtime.itemInstances.get(draftItem.id);
717
- if (!instance) {
718
- throw new Error(
719
- `[weaverse-next] No live item instance for "${draftItem.id}".`
720
- );
721
- }
722
- let response = await fetch(endpoint, {
723
- method: "POST",
724
- headers: { "Content-Type": "application/json" },
725
- body: JSON.stringify({ draftItem })
726
- });
727
- if (!response.ok) {
728
- throw new Error(
729
- `[weaverse-next] Revalidate endpoint responded ${response.status}.`
730
- );
731
- }
732
- let { loaderData } = await response.json();
733
- instance.setData({ loaderData: loaderData ?? null });
734
- }
735
852
  var STUDIO_BIND_RETRY_INTERVAL_MS = 50;
736
853
  var STUDIO_BIND_MAX_ATTEMPTS = 100;
737
854
  function WeaverseNextStudioBridge(props) {
@@ -835,6 +952,7 @@ function WeaverseNextStudio(props) {
835
952
  );
836
953
  }
837
954
  var EMPTY_DATA_CONTEXT = {};
955
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
838
956
  function getRenderablePage2(data) {
839
957
  let page = data?.page;
840
958
  if (!page) {
@@ -870,6 +988,9 @@ var WeaverseNextRenderer = memo(function WeaverseNextRendererComponent(props) {
870
988
  context?.themeSettingsStore,
871
989
  context?.translationStore
872
990
  ]);
991
+ useIsomorphicLayoutEffect(() => {
992
+ weaverse?.flushRenderPhaseUpdates();
993
+ }, [weaverse]);
873
994
  if (!weaverse) {
874
995
  return null;
875
996
  }
@@ -942,7 +1063,7 @@ function resolveWeaverseNextStudioScriptSrc(context, options = {}) {
942
1063
  if (!isTrustedStudioOrigin(origin, storefrontHostname)) {
943
1064
  return null;
944
1065
  }
945
- let bundle = isDesignMode ? "index.js" : "preview.js";
1066
+ let bundle = isPreviewMode || isRevisionPreview ? "preview.js" : "index.js";
946
1067
  let version = last(searchParams, "weaverseVersion");
947
1068
  let url = `${origin}/static/studio/next/${bundle}`;
948
1069
  return version ? `${url}?v=${encodeURIComponent(version)}` : url;
@@ -992,6 +1113,6 @@ function WeaverseNextStudioConnect(props) {
992
1113
  return null;
993
1114
  }
994
1115
 
995
- export { DEFAULT_REVALIDATE_ENDPOINT, ThemeTextProvider, ThemeTextStore, TranslationProvider, TranslationStore, WeaverseNextProvider, WeaverseNextRenderer, WeaverseNextRootProvider, WeaverseNextRuntime, WeaverseNextStudio, WeaverseNextStudioBridge, WeaverseNextStudioConnect, bindWeaverseNextStudioRuntime, createTranslate, createWeaverseNextClient, createWeaverseNextRuntime, createWeaverseNextStudioInternals, createWeaverseNextThemeSettingsStore, getNestedKey, interpolate, loadWeaverseNextStudioScript, resolveWeaverseNextStudioScriptSrc, revalidateWeaverseNextItem, useThemeSettings, useThemeText, useTranslation, useWeaverseCommerce, useWeaverseNextStudioInternals, useWeaversePageData, useWeaverseRootData };
1116
+ export { ThemeTextProvider, ThemeTextStore, TranslationProvider, TranslationStore, WeaverseNextProvider, WeaverseNextRenderer, WeaverseNextRootProvider, WeaverseNextRuntime, WeaverseNextStudio, WeaverseNextStudioBridge, WeaverseNextStudioConnect, bindWeaverseNextStudioRuntime, createTranslate, createWeaverseNextClient, createWeaverseNextRuntime, createWeaverseNextStudioInternals, createWeaverseNextThemeSettingsStore, getNestedKey, interpolate, loadWeaverseNextStudioScript, resolveWeaverseNextStudioScriptSrc, useThemeSettings, useThemeText, useTranslation, useWeaverseCommerce, useWeaverseNextStudioInternals, useWeaversePageData, useWeaverseRootData };
996
1117
  //# sourceMappingURL=index.mjs.map
997
1118
  //# sourceMappingURL=index.mjs.map