@bagelink/blox 1.15.556 → 1.15.562

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.
@@ -1 +1 @@
1
- {"version":3,"file":"CmsPageView.vue.d.ts","sourceRoot":"","sources":["../src/CmsPageView.vue"],"names":[],"mappings":";AAufA,wBAMG"}
1
+ {"version":3,"file":"CmsPageView.vue.d.ts","sourceRoot":"","sources":["../src/CmsPageView.vue"],"names":[],"mappings":";AAmkBA,wBAMG"}
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-DhWhfWxA.js";
1
+ import { _ as _sfc_main } from "./PreviewApp.vue_vue_type_style_index_0_lang-DmbZlg5I.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-0x3sOVR5.cjs");
3
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-CSGhU0Km.cjs");
4
4
  exports.default = PreviewApp_vue_vue_type_style_index_0_lang._sfc_main;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- const routes = require("./routes-BYHlDu-i.cjs");
3
+ const routes = require("./routes-ClmCqqhk.cjs");
4
4
  function sendToEditor(msg) {
5
5
  window.parent.postMessage(cloneForPostMessage(msg), "*");
6
6
  }
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, inject, ref, h, provide, onMounted, onUnmounted, openBlock, createElementBlock, createVNode, unref, nextTick } from "vue";
2
- import { f as BLOX_REGISTRY_KEY, r as resolveBlockProps, u as useLocale, h as BLOX_RUNTIME_KEY } from "./routes-BngHUX7M.js";
2
+ import { h as BLOX_REGISTRY_KEY, r as resolveBlockProps, u as useLocale, j as BLOX_RUNTIME_KEY } from "./routes-BLRBaLOB.js";
3
3
  function sendToEditor(msg) {
4
4
  window.parent.postMessage(cloneForPostMessage(msg), "*");
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BloxRouterView.vue.d.ts","sourceRoot":"","sources":["../../src/components/BloxRouterView.vue"],"names":[],"mappings":"AA4CA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,KAAK,WAAW,GAAG;IAClB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC;;gBADY,MAAM;;AA4FpB,wBAQG"}
1
+ {"version":3,"file":"BloxRouterView.vue.d.ts","sourceRoot":"","sources":["../../src/components/BloxRouterView.vue"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,KAAK,WAAW,GAAG;IAClB,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC;;gBADY,MAAM;;AAmGpB,wBAQG"}
@@ -67,6 +67,8 @@ export interface CreateBloxAppOptions {
67
67
  * plausible: 'auctentic2.netlify.app'
68
68
  */
69
69
  plausible?: string | PlausibleOptions;
70
+ /** CMS navigation mode. Marketing sites should use `document`. @default 'spa' */
71
+ navigation?: 'document' | 'spa';
70
72
  }
71
73
  /** Plausible Analytics injection options. */
72
74
  export interface PlausibleOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"createBloxApp.d.ts","sourceRoot":"","sources":["../src/createBloxApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAYhD,MAAM,WAAW,oBAAoB;IACpC,oCAAoC;IACpC,aAAa,EAAE,SAAS,CAAA;IACxB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpD,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAA;IAChE;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAChD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5C;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;CACrC;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAoCvE;AAED,wDAAwD;AACxD,UAAU,SAAS;IAClB,YAAY,EAAE;QACb,OAAO,EAAE;YAER,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAA;SACvC,CAAA;KACD,CAAA;CACD;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAyK1E"}
1
+ {"version":3,"file":"createBloxApp.d.ts","sourceRoot":"","sources":["../src/createBloxApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAchD,MAAM,WAAW,oBAAoB;IACpC,oCAAoC;IACpC,aAAa,EAAE,SAAS,CAAA;IACxB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpD,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAA;IAChE;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAChD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5C;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IACrC,iFAAiF;IACjF,UAAU,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;CAC/B;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAoCvE;AAED,wDAAwD;AACxD,UAAU,SAAS;IAClB,YAAY,EAAE;QACb,OAAO,EAAE;YAER,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAA;SACvC,CAAA;KACD,CAAA;CACD;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAiL1E"}
@@ -0,0 +1,3 @@
1
+ import { Router } from 'vue-router';
2
+ export declare function installDocumentNavigation(router: Router): () => void;
3
+ //# sourceMappingURL=documentNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentNavigation.d.ts","sourceRoot":"","sources":["../src/documentNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAYxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAgDpE"}
package/dist/index.cjs CHANGED
@@ -1,11 +1,52 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const routes = require("./routes-BYHlDu-i.cjs");
4
- const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-0x3sOVR5.cjs");
3
+ const routes = require("./routes-ClmCqqhk.cjs");
4
+ const PreviewApp_vue_vue_type_style_index_0_lang = require("./PreviewApp.vue_vue_type_style_index_0_lang-CSGhU0Km.cjs");
5
5
  const vue = require("vue");
6
6
  const vueRouter = require("vue-router");
7
7
  const pinia = require("pinia");
8
8
  const ssg_client = require("./ssg/client.cjs");
9
+ const FORM_CONTROL_SELECTOR = "button, input, select, textarea, label, option";
10
+ function isEditorPreview() {
11
+ try {
12
+ return window.self !== window.top || window.location.pathname.startsWith("/_blox_preview");
13
+ } catch {
14
+ return true;
15
+ }
16
+ }
17
+ function installDocumentNavigation(router) {
18
+ if (typeof window === "undefined" || typeof document === "undefined" || isEditorPreview()) {
19
+ return () => {
20
+ };
21
+ }
22
+ const handleClick = (event) => {
23
+ if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
24
+ const target = event.target;
25
+ if (!(target instanceof Element)) return;
26
+ if (target.closest(FORM_CONTROL_SELECTOR) || target.closest('[contenteditable]:not([contenteditable="false"])')) return;
27
+ const anchor = target.closest("a[href]");
28
+ if (!anchor || anchor.hasAttribute("download") || anchor.hasAttribute("target")) return;
29
+ const rawHref = anchor.getAttribute("href");
30
+ if (!rawHref || rawHref.startsWith("#")) return;
31
+ let destination;
32
+ try {
33
+ destination = new URL(anchor.href, window.location.href);
34
+ } catch {
35
+ return;
36
+ }
37
+ if (!["http:", "https:"].includes(destination.protocol) || destination.origin !== window.location.origin) return;
38
+ const current = new URL(window.location.href);
39
+ const isHashOnly = destination.pathname === current.pathname && destination.search === current.search && destination.hash !== current.hash;
40
+ if (isHashOnly) return;
41
+ const resolved = router.resolve(`${destination.pathname}${destination.search}${destination.hash}`);
42
+ if (resolved.meta.navigation === "spa") return;
43
+ event.preventDefault();
44
+ event.stopImmediatePropagation();
45
+ window.location.assign(destination.href);
46
+ };
47
+ document.addEventListener("click", handleClick, { capture: true });
48
+ return () => document.removeEventListener("click", handleClick, { capture: true });
49
+ }
9
50
  const _sfc_main = /* @__PURE__ */ vue.defineComponent({
10
51
  __name: "BloxRouterView",
11
52
  props: {
@@ -16,6 +57,12 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
16
57
  const leaf = matched[matched.length - 1];
17
58
  return (leaf == null ? void 0 : leaf.path) ?? fallback;
18
59
  }
60
+ function routeKey(route) {
61
+ return viewKey(
62
+ (route == null ? void 0 : route.matched) ?? [],
63
+ (route == null ? void 0 : route.path) ?? (typeof window !== "undefined" ? window.location.pathname : "/")
64
+ );
65
+ }
19
66
  return (_ctx, _cache) => {
20
67
  const _component_RouterView = vue.resolveComponent("RouterView");
21
68
  return vue.openBlock(), vue.createBlock(_component_RouterView, null, {
@@ -27,12 +74,12 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
27
74
  }, {
28
75
  default: vue.withCtx(() => [
29
76
  (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(Component), {
30
- key: viewKey(r.matched, r.path)
77
+ key: routeKey(r)
31
78
  }))
32
79
  ]),
33
80
  _: 2
34
81
  }, 1032, ["name"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(Component), {
35
- key: viewKey(r.matched, r.path)
82
+ key: routeKey(r)
36
83
  }))
37
84
  ]),
38
85
  _: 1
@@ -223,7 +270,8 @@ function createBloxApp(options) {
223
270
  plugins = [],
224
271
  globalComponents = {},
225
272
  setup: userSetup,
226
- plausible
273
+ plausible,
274
+ navigation = "spa"
227
275
  } = options;
228
276
  if (plausible) injectPlausible(plausible);
229
277
  ssg_client.installBloxStateCache();
@@ -236,7 +284,9 @@ function createBloxApp(options) {
236
284
  if (collectionInterceptor && axiosInstance) {
237
285
  axiosInstance.interceptors.request.use(collectionInterceptor);
238
286
  }
239
- const app = vue.createApp({
287
+ const hasSsgState = typeof window !== "undefined" && (!!window[ssg_client.BLOX_STATE_WINDOW_KEY] || !!window[routes.BLOX_DATA_WINDOW_KEY]);
288
+ const createVueApp = hasSsgState ? vue.createSSRApp : vue.createApp;
289
+ const app = createVueApp({
240
290
  name: "BloxRoot",
241
291
  render: () => vue.h(vue.Suspense, null, { default: () => vue.h(rootComponent) })
242
292
  });
@@ -304,6 +354,7 @@ function createBloxApp(options) {
304
354
  if (userSetup) userSetup(app);
305
355
  router.isReady().then(() => {
306
356
  routes.installSmartLinks(router);
357
+ if (navigation === "document") installDocumentNavigation(router);
307
358
  app.mount(mountTarget);
308
359
  dataRegistry.hydrating = false;
309
360
  });
@@ -428,6 +479,7 @@ exports.buildBloxManifest = buildBloxManifest;
428
479
  exports.createBloxApp = createBloxApp;
429
480
  exports.defineBlock = defineBlock;
430
481
  exports.injectPlausible = injectPlausible;
482
+ exports.installDocumentNavigation = installDocumentNavigation;
431
483
  exports.serializeRegistry = serializeRegistry;
432
484
  exports.useBloxRuntime = useBloxRuntime;
433
485
  exports.useContentSeo = useContentSeo;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { configureApi, getWebsiteId, getWebsiteIdSync, listItems, resolvePath, setApiOrigin } from './api/index';
2
+ export { installDocumentNavigation } from './documentNavigation';
2
3
  export type { ListItemsOptions } from './api/index';
3
4
  export type { BindingWarning, Block, BloxPageApiAdapter, CollectionItem, CollectionItemsPage, ContentStatus, PageContent, PageCreateData, PageRead, PageResolveRead, PageUpdateData, WebsiteRead, } from './api/types';
4
5
  export { sendToEditor, sendToPreview } from './bridge';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAChH,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKnD,YAAY,EACX,cAAc,EACd,KAAK,EAEL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvI,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAK7D,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK5F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAKjD,OAAO,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GACjB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAK1E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKlE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/H,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAChH,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKnD,YAAY,EACX,cAAc,EACd,KAAK,EAEL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvI,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAK7D,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAK5F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAKjD,OAAO,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GACjB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAK1E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKlE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/H,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.mjs CHANGED
@@ -1,10 +1,51 @@
1
- import { j as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, h as BLOX_RUNTIME_KEY, k as useSeo, l as getRegistryData, m as getItemBySlug, o as getItemById, q as getContentRoute, p as provideBloxData, e as createBlox, g as generateContentRoutes, t as installContentFallback, i as installLocaleAwareResolve, b as setActiveLocale, v as installSmartLinks, w as consumePendingLocaleSwitch } from "./routes-BngHUX7M.js";
2
- import { _, x, y, z, B, A, C, D, E, F, P, G, H, c, d, I, J, K, L, M, N, O, Q, R, S, T, U, r, V, s, W, X, Y, Z } from "./routes-BngHUX7M.js";
3
- import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-DhWhfWxA.js";
4
- import { defineComponent, resolveComponent, openBlock, createBlock, withCtx, Transition, resolveDynamicComponent, inject, ref, watch, onMounted, onUnmounted, computed, onServerPrefetch, toValue, createApp, h, Suspense, markRaw } from "vue";
1
+ import { k as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, j as BLOX_RUNTIME_KEY, l as useSeo, m as getRegistryData, o as getItemBySlug, q as getItemById, t as getContentRoute, p as provideBloxData, f as createBlox, g as generateContentRoutes, v as installContentFallback, i as installLocaleAwareResolve, b as setActiveLocale, w as installSmartLinks, x as consumePendingLocaleSwitch, B as BLOX_DATA_WINDOW_KEY } from "./routes-BLRBaLOB.js";
2
+ import { _, y, z, A, C, D, E, F, G, P, H, I, c, d, J, K, L, M, N, O, Q, R, S, T, U, V, r, W, s, X, Y, Z, $ } from "./routes-BLRBaLOB.js";
3
+ import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-DmbZlg5I.js";
4
+ import { defineComponent, resolveComponent, openBlock, createBlock, withCtx, Transition, resolveDynamicComponent, inject, ref, watch, onMounted, onUnmounted, computed, onServerPrefetch, toValue, h, Suspense, markRaw, createSSRApp, createApp } from "vue";
5
5
  import { useRouter, useRoute } from "vue-router";
6
6
  import { createPinia } from "pinia";
7
- import { installBloxStateCache, installCollectionCache } from "./ssg/client.mjs";
7
+ import { installBloxStateCache, installCollectionCache, BLOX_STATE_WINDOW_KEY } from "./ssg/client.mjs";
8
+ const FORM_CONTROL_SELECTOR = "button, input, select, textarea, label, option";
9
+ function isEditorPreview() {
10
+ try {
11
+ return window.self !== window.top || window.location.pathname.startsWith("/_blox_preview");
12
+ } catch {
13
+ return true;
14
+ }
15
+ }
16
+ function installDocumentNavigation(router) {
17
+ if (typeof window === "undefined" || typeof document === "undefined" || isEditorPreview()) {
18
+ return () => {
19
+ };
20
+ }
21
+ const handleClick = (event) => {
22
+ if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
23
+ const target = event.target;
24
+ if (!(target instanceof Element)) return;
25
+ if (target.closest(FORM_CONTROL_SELECTOR) || target.closest('[contenteditable]:not([contenteditable="false"])')) return;
26
+ const anchor = target.closest("a[href]");
27
+ if (!anchor || anchor.hasAttribute("download") || anchor.hasAttribute("target")) return;
28
+ const rawHref = anchor.getAttribute("href");
29
+ if (!rawHref || rawHref.startsWith("#")) return;
30
+ let destination;
31
+ try {
32
+ destination = new URL(anchor.href, window.location.href);
33
+ } catch {
34
+ return;
35
+ }
36
+ if (!["http:", "https:"].includes(destination.protocol) || destination.origin !== window.location.origin) return;
37
+ const current = new URL(window.location.href);
38
+ const isHashOnly = destination.pathname === current.pathname && destination.search === current.search && destination.hash !== current.hash;
39
+ if (isHashOnly) return;
40
+ const resolved = router.resolve(`${destination.pathname}${destination.search}${destination.hash}`);
41
+ if (resolved.meta.navigation === "spa") return;
42
+ event.preventDefault();
43
+ event.stopImmediatePropagation();
44
+ window.location.assign(destination.href);
45
+ };
46
+ document.addEventListener("click", handleClick, { capture: true });
47
+ return () => document.removeEventListener("click", handleClick, { capture: true });
48
+ }
8
49
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
50
  __name: "BloxRouterView",
10
51
  props: {
@@ -15,6 +56,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15
56
  const leaf = matched[matched.length - 1];
16
57
  return (leaf == null ? void 0 : leaf.path) ?? fallback;
17
58
  }
59
+ function routeKey(route) {
60
+ return viewKey(
61
+ (route == null ? void 0 : route.matched) ?? [],
62
+ (route == null ? void 0 : route.path) ?? (typeof window !== "undefined" ? window.location.pathname : "/")
63
+ );
64
+ }
18
65
  return (_ctx, _cache) => {
19
66
  const _component_RouterView = resolveComponent("RouterView");
20
67
  return openBlock(), createBlock(_component_RouterView, null, {
@@ -26,12 +73,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26
73
  }, {
27
74
  default: withCtx(() => [
28
75
  (openBlock(), createBlock(resolveDynamicComponent(Component), {
29
- key: viewKey(r2.matched, r2.path)
76
+ key: routeKey(r2)
30
77
  }))
31
78
  ]),
32
79
  _: 2
33
80
  }, 1032, ["name"])) : (openBlock(), createBlock(resolveDynamicComponent(Component), {
34
- key: viewKey(r2.matched, r2.path)
81
+ key: routeKey(r2)
35
82
  }))
36
83
  ]),
37
84
  _: 1
@@ -222,7 +269,8 @@ function createBloxApp(options) {
222
269
  plugins = [],
223
270
  globalComponents = {},
224
271
  setup: userSetup,
225
- plausible
272
+ plausible,
273
+ navigation = "spa"
226
274
  } = options;
227
275
  if (plausible) injectPlausible(plausible);
228
276
  installBloxStateCache();
@@ -235,7 +283,9 @@ function createBloxApp(options) {
235
283
  if (collectionInterceptor && axiosInstance) {
236
284
  axiosInstance.interceptors.request.use(collectionInterceptor);
237
285
  }
238
- const app = createApp({
286
+ const hasSsgState = typeof window !== "undefined" && (!!window[BLOX_STATE_WINDOW_KEY] || !!window[BLOX_DATA_WINDOW_KEY]);
287
+ const createVueApp = hasSsgState ? createSSRApp : createApp;
288
+ const app = createVueApp({
239
289
  name: "BloxRoot",
240
290
  render: () => h(Suspense, null, { default: () => h(rootComponent) })
241
291
  });
@@ -303,6 +353,7 @@ function createBloxApp(options) {
303
353
  if (userSetup) userSetup(app);
304
354
  router.isReady().then(() => {
305
355
  installSmartLinks(router);
356
+ if (navigation === "document") installDocumentNavigation(router);
306
357
  app.mount(mountTarget);
307
358
  dataRegistry.hydrating = false;
308
359
  });
@@ -373,62 +424,63 @@ function buildBloxManifest(blox) {
373
424
  }
374
425
  export {
375
426
  _ as AdminEditBar,
376
- x as BLOX_ADMIN_CONFIG_KEY,
377
- y as BLOX_CONFIG_KEY,
378
- z as BLOX_DATA_KEY,
379
- B as BLOX_DATA_WINDOW_KEY,
380
- A as BLOX_LAYOUT_KEY,
427
+ y as BLOX_ADMIN_CONFIG_KEY,
428
+ z as BLOX_CONFIG_KEY,
429
+ A as BLOX_DATA_KEY,
430
+ BLOX_DATA_WINDOW_KEY,
431
+ C as BLOX_LAYOUT_KEY,
381
432
  BLOX_LOCALE_STRATEGY_KEY,
382
433
  BLOX_RUNTIME_KEY,
383
- C as BloxInstance,
434
+ D as BloxInstance,
384
435
  _sfc_main as BloxRouterView,
385
- D as CmsPageView,
386
- E as ContentDetailView,
387
- F as ContentHost,
436
+ E as CmsPageView,
437
+ F as ContentDetailView,
438
+ G as ContentHost,
388
439
  P as PageRenderer,
389
440
  _2 as PreviewApp,
390
441
  P2 as PreviewRenderer,
391
- G as applyLayoutChrome,
442
+ H as applyLayoutChrome,
392
443
  buildBloxManifest,
393
- H as classifyLink,
444
+ I as classifyLink,
394
445
  c as collectBloxData,
395
446
  d as collectBloxSeo,
396
- I as configureApi,
397
- J as contentRoutes,
447
+ J as configureApi,
448
+ K as contentRoutes,
398
449
  createBlox,
399
450
  createBloxApp,
400
451
  defineBlock,
401
- K as defineContent,
452
+ L as defineContent,
402
453
  generateContentRoutes,
403
454
  getContentRoute,
404
- L as getContentRouteByCollection,
455
+ M as getContentRouteByCollection,
405
456
  getItemById,
406
457
  getItemBySlug,
407
- M as getWebsiteId,
408
- N as getWebsiteIdSync,
458
+ N as getWebsiteId,
459
+ O as getWebsiteIdSync,
409
460
  injectPlausible,
410
461
  installContentFallback,
462
+ installDocumentNavigation,
411
463
  installSmartLinks,
412
- O as isAbsoluteExternal,
413
- Q as isSoloContentPage,
414
- R as isSpecialScheme,
415
- S as listItems,
464
+ Q as isAbsoluteExternal,
465
+ R as isSoloContentPage,
466
+ S as isSpecialScheme,
467
+ T as listItems,
416
468
  normalizeLink,
417
- T as normalizeTo,
469
+ U as normalizeTo,
418
470
  provideBloxData,
419
- U as provideContentItem,
471
+ V as provideContentItem,
420
472
  r as resolveBlockProps,
421
- V as resolvePath,
473
+ W as resolvePath,
422
474
  s2 as sendToEditor,
423
475
  a as sendToPreview,
424
476
  serializeRegistry,
425
477
  s as setApiOrigin,
426
- W as toInternalPath,
427
- X as useBloxEdit,
478
+ X as toInternalPath,
479
+ Y as useBloxEdit,
428
480
  useBloxRuntime,
429
- Y as useContentItem,
481
+ Z as useContentItem,
430
482
  useContentSeo,
431
- Z as useData,
483
+ $ as useData,
432
484
  useGlobalBlock,
433
485
  useLocale,
434
486
  useLocaleNav,
@@ -102,6 +102,7 @@ const BLOX_REGISTRY_KEY = Symbol("blox:registry");
102
102
  const BLOX_CONFIG_KEY = Symbol("blox:config");
103
103
  const BLOX_LOCALE_STRATEGY_KEY = Symbol("blox:locale-strategy");
104
104
  const BLOX_RUNTIME_KEY = Symbol("blox:runtime");
105
+ const BLOX_SSR_ROUTE_STATE_KEY = Symbol("blox:ssr-route-state");
105
106
  const BLOX_ADMIN_CONFIG_KEY = Symbol("blox:admin-config");
106
107
  const BLOX_LAYOUT_KEY = Symbol("blox:layout");
107
108
  const STORAGE_KEY = "blox:edit";
@@ -358,6 +359,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
358
359
  const router = useRouter();
359
360
  const { locale: locale2, setLocale, setAlternates } = useLocale();
360
361
  const strategy = inject(BLOX_LOCALE_STRATEGY_KEY, null);
362
+ const ssrRouteState = inject(BLOX_SSR_ROUTE_STATE_KEY, null);
361
363
  const blocks = ref([]);
362
364
  const contexts = ref({});
363
365
  provide("contexts", contexts);
@@ -372,25 +374,43 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
372
374
  isPreview: ref(false),
373
375
  loading: computed(() => initialLoading.value || navigating.value)
374
376
  });
377
+ function currentRoutePath() {
378
+ return typeof (route == null ? void 0 : route.path) === "string" && route.path ? route.path : typeof window !== "undefined" ? window.location.pathname || "/" : "/";
379
+ }
380
+ function currentRouteTarget(fallback) {
381
+ return typeof (route == null ? void 0 : route.fullPath) === "string" && route.fullPath ? route.fullPath : currentRoutePath() || fallback;
382
+ }
375
383
  function navigableAlternates(alternates, resolvedSlug) {
376
384
  const keys = Object.keys(alternates ?? {});
377
385
  if (!keys.length) return { [locale2.value]: resolvedSlug };
378
386
  return Object.fromEntries(keys.map((l) => [l, resolvedSlug]));
379
387
  }
380
388
  function tryHydrateFromState(path) {
381
- var _a, _b, _c;
389
+ if ((ssrRouteState == null ? void 0 : ssrRouteState.path) === path && ssrRouteState.resolved) {
390
+ applyResolvedState(ssrRouteState.resolved, path);
391
+ return true;
392
+ }
382
393
  const win = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : void 0;
383
394
  if (!win) return false;
384
395
  const state = win[BLOX_STATE_WINDOW_KEY];
385
396
  if (!state || typeof state !== "object") return false;
386
397
  const entry = state[path];
387
398
  if (!entry) return false;
399
+ applyResolvedState(entry, path);
400
+ return true;
401
+ }
402
+ function applyResolvedState(entry, path) {
403
+ var _a, _b, _c;
388
404
  blocks.value = ((_b = (_a = entry.page) == null ? void 0 : _a.content) == null ? void 0 : _b.blocks) ?? [];
389
405
  contexts.value = entry.contexts ?? {};
390
406
  currentPageId.value = ((_c = entry.page) == null ? void 0 : _c.id) ?? null;
391
407
  setAlternates(entry.alternates && Object.keys(entry.alternates).length ? entry.alternates : { [locale2.value]: path });
392
408
  updateDocumentTitle(entry);
393
- return true;
409
+ }
410
+ function hasEmbeddedState() {
411
+ if (typeof window === "undefined") return false;
412
+ const state = window[BLOX_STATE_WINDOW_KEY];
413
+ return !!state && typeof state === "object" && !Array.isArray(state);
394
414
  }
395
415
  function updateDocumentTitle(resolved) {
396
416
  if (typeof document === "undefined") return;
@@ -403,9 +423,9 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
403
423
  var _a;
404
424
  if (strategy) {
405
425
  const hostname = typeof window !== "undefined" ? ((_a = window.location) == null ? void 0 : _a.hostname) ?? "" : "";
406
- return strategy.detect(hostname, route.path).slug;
426
+ return strategy.detect(hostname, currentRoutePath()).slug;
407
427
  }
408
- return route.path || "/";
428
+ return currentRoutePath();
409
429
  })();
410
430
  const ssrHydrated = tryHydrateFromState(initialSlug);
411
431
  if (ssrHydrated) initialLoading.value = false;
@@ -413,12 +433,16 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
413
433
  var _a;
414
434
  notFound.value = false;
415
435
  error.value = null;
416
- const { locale: urlLocale, slug } = strategy ? strategy.detect(typeof window !== "undefined" ? window.location.hostname : "", route.path) : { locale: locale2.value, slug: route.path || "/" };
436
+ const { locale: urlLocale, slug } = strategy ? strategy.detect(typeof window !== "undefined" ? window.location.hostname : "", currentRoutePath()) : { locale: locale2.value, slug: currentRoutePath() };
417
437
  if (urlLocale !== locale2.value) setLocale(urlLocale);
418
438
  if (tryHydrateFromState(slug)) {
419
439
  initialLoading.value = false;
420
440
  return;
421
441
  }
442
+ if (hasEmbeddedState() && typeof window !== "undefined") {
443
+ window.location.assign(currentRouteTarget(slug));
444
+ return;
445
+ }
422
446
  navigating.value = true;
423
447
  try {
424
448
  const resolved = await resolvePath(slug, urlLocale);
@@ -443,7 +467,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
443
467
  if (!ssrHydrated) {
444
468
  load();
445
469
  }
446
- watch(() => route.path, load);
470
+ watch(currentRoutePath, load);
447
471
  onMounted(() => {
448
472
  if (adminConfig && !websiteId.value) {
449
473
  getWebsiteId().then((id) => {
@@ -921,7 +945,7 @@ class BloxInstance {
921
945
  }
922
946
  router.addRoute({
923
947
  path: "/_blox_preview",
924
- component: () => import("./PreviewApp-f5pmxF9e.js"),
948
+ component: () => import("./PreviewApp-B9SNVb5d.js"),
925
949
  beforeEnter: () => window.parent !== window ? true : "/"
926
950
  });
927
951
  router.addRoute({ path: "/:pathMatch(.*)*", component: _sfc_main$2 });
@@ -1232,57 +1256,58 @@ function hasEmbeddedContentItem(collection, slug, locale2) {
1232
1256
  return `content:${collection}:${slug}:${locale2}` in payload;
1233
1257
  }
1234
1258
  export {
1235
- BLOX_LAYOUT_KEY as A,
1259
+ useData as $,
1260
+ BLOX_DATA_KEY as A,
1236
1261
  BLOX_DATA_WINDOW_KEY as B,
1237
- BloxInstance as C,
1238
- _sfc_main$2 as D,
1239
- _sfc_main$1 as E,
1240
- _sfc_main as F,
1241
- applyLayoutChrome as G,
1242
- classifyLink as H,
1243
- configureApi as I,
1244
- contentRoutes as J,
1245
- defineContent as K,
1246
- getContentRouteByCollection as L,
1247
- getWebsiteId as M,
1248
- getWebsiteIdSync as N,
1249
- isAbsoluteExternal as O,
1262
+ BLOX_LAYOUT_KEY as C,
1263
+ BloxInstance as D,
1264
+ _sfc_main$2 as E,
1265
+ _sfc_main$1 as F,
1266
+ _sfc_main as G,
1267
+ applyLayoutChrome as H,
1268
+ classifyLink as I,
1269
+ configureApi as J,
1270
+ contentRoutes as K,
1271
+ defineContent as L,
1272
+ getContentRouteByCollection as M,
1273
+ getWebsiteId as N,
1274
+ getWebsiteIdSync as O,
1250
1275
  PageRenderer as P,
1251
- isSoloContentPage as Q,
1252
- isSpecialScheme as R,
1253
- listItems as S,
1254
- normalizeTo as T,
1255
- provideContentItem as U,
1256
- resolvePath as V,
1257
- toInternalPath as W,
1258
- useBloxEdit as X,
1259
- useContentItem as Y,
1260
- useData as Z,
1276
+ isAbsoluteExternal as Q,
1277
+ isSoloContentPage as R,
1278
+ isSpecialScheme as S,
1279
+ listItems as T,
1280
+ normalizeTo as U,
1281
+ provideContentItem as V,
1282
+ resolvePath as W,
1283
+ toInternalPath as X,
1284
+ useBloxEdit as Y,
1285
+ useContentItem as Z,
1261
1286
  _sfc_main$3 as _,
1262
1287
  setCollectionResolver as a,
1263
1288
  setActiveLocale as b,
1264
1289
  collectBloxData as c,
1265
1290
  collectBloxSeo as d,
1266
- createBlox as e,
1267
- BLOX_REGISTRY_KEY as f,
1291
+ BLOX_SSR_ROUTE_STATE_KEY as e,
1292
+ createBlox as f,
1268
1293
  generateContentRoutes as g,
1269
- BLOX_RUNTIME_KEY as h,
1294
+ BLOX_REGISTRY_KEY as h,
1270
1295
  installLocaleAwareResolve as i,
1271
- BLOX_LOCALE_STRATEGY_KEY as j,
1272
- useSeo as k,
1273
- getRegistryData as l,
1274
- getItemBySlug as m,
1296
+ BLOX_RUNTIME_KEY as j,
1297
+ BLOX_LOCALE_STRATEGY_KEY as k,
1298
+ useSeo as l,
1299
+ getRegistryData as m,
1275
1300
  normalizeLink as n,
1276
- getItemById as o,
1301
+ getItemBySlug as o,
1277
1302
  provideBloxData as p,
1278
- getContentRoute as q,
1303
+ getItemById as q,
1279
1304
  resolveBlockProps as r,
1280
1305
  setApiOrigin as s,
1281
- installContentFallback as t,
1306
+ getContentRoute as t,
1282
1307
  useLocale as u,
1283
- installSmartLinks as v,
1284
- consumePendingLocaleSwitch as w,
1285
- BLOX_ADMIN_CONFIG_KEY as x,
1286
- BLOX_CONFIG_KEY as y,
1287
- BLOX_DATA_KEY as z
1308
+ installContentFallback as v,
1309
+ installSmartLinks as w,
1310
+ consumePendingLocaleSwitch as x,
1311
+ BLOX_ADMIN_CONFIG_KEY as y,
1312
+ BLOX_CONFIG_KEY as z
1288
1313
  };
@@ -103,6 +103,7 @@ const BLOX_REGISTRY_KEY = Symbol("blox:registry");
103
103
  const BLOX_CONFIG_KEY = Symbol("blox:config");
104
104
  const BLOX_LOCALE_STRATEGY_KEY = Symbol("blox:locale-strategy");
105
105
  const BLOX_RUNTIME_KEY = Symbol("blox:runtime");
106
+ const BLOX_SSR_ROUTE_STATE_KEY = Symbol("blox:ssr-route-state");
106
107
  const BLOX_ADMIN_CONFIG_KEY = Symbol("blox:admin-config");
107
108
  const BLOX_LAYOUT_KEY = Symbol("blox:layout");
108
109
  const STORAGE_KEY = "blox:edit";
@@ -359,6 +360,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
359
360
  const router = vueRouter.useRouter();
360
361
  const { locale: locale2, setLocale, setAlternates } = useLocale();
361
362
  const strategy = vue.inject(BLOX_LOCALE_STRATEGY_KEY, null);
363
+ const ssrRouteState = vue.inject(BLOX_SSR_ROUTE_STATE_KEY, null);
362
364
  const blocks = vue.ref([]);
363
365
  const contexts = vue.ref({});
364
366
  vue.provide("contexts", contexts);
@@ -373,25 +375,43 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
373
375
  isPreview: vue.ref(false),
374
376
  loading: vue.computed(() => initialLoading.value || navigating.value)
375
377
  });
378
+ function currentRoutePath() {
379
+ return typeof (route == null ? void 0 : route.path) === "string" && route.path ? route.path : typeof window !== "undefined" ? window.location.pathname || "/" : "/";
380
+ }
381
+ function currentRouteTarget(fallback) {
382
+ return typeof (route == null ? void 0 : route.fullPath) === "string" && route.fullPath ? route.fullPath : currentRoutePath() || fallback;
383
+ }
376
384
  function navigableAlternates(alternates, resolvedSlug) {
377
385
  const keys = Object.keys(alternates ?? {});
378
386
  if (!keys.length) return { [locale2.value]: resolvedSlug };
379
387
  return Object.fromEntries(keys.map((l) => [l, resolvedSlug]));
380
388
  }
381
389
  function tryHydrateFromState(path) {
382
- var _a, _b, _c;
390
+ if ((ssrRouteState == null ? void 0 : ssrRouteState.path) === path && ssrRouteState.resolved) {
391
+ applyResolvedState(ssrRouteState.resolved, path);
392
+ return true;
393
+ }
383
394
  const win = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : void 0;
384
395
  if (!win) return false;
385
396
  const state = win[ssg_client.BLOX_STATE_WINDOW_KEY];
386
397
  if (!state || typeof state !== "object") return false;
387
398
  const entry = state[path];
388
399
  if (!entry) return false;
400
+ applyResolvedState(entry, path);
401
+ return true;
402
+ }
403
+ function applyResolvedState(entry, path) {
404
+ var _a, _b, _c;
389
405
  blocks.value = ((_b = (_a = entry.page) == null ? void 0 : _a.content) == null ? void 0 : _b.blocks) ?? [];
390
406
  contexts.value = entry.contexts ?? {};
391
407
  currentPageId.value = ((_c = entry.page) == null ? void 0 : _c.id) ?? null;
392
408
  setAlternates(entry.alternates && Object.keys(entry.alternates).length ? entry.alternates : { [locale2.value]: path });
393
409
  updateDocumentTitle(entry);
394
- return true;
410
+ }
411
+ function hasEmbeddedState() {
412
+ if (typeof window === "undefined") return false;
413
+ const state = window[ssg_client.BLOX_STATE_WINDOW_KEY];
414
+ return !!state && typeof state === "object" && !Array.isArray(state);
395
415
  }
396
416
  function updateDocumentTitle(resolved) {
397
417
  if (typeof document === "undefined") return;
@@ -404,9 +424,9 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
404
424
  var _a;
405
425
  if (strategy) {
406
426
  const hostname = typeof window !== "undefined" ? ((_a = window.location) == null ? void 0 : _a.hostname) ?? "" : "";
407
- return strategy.detect(hostname, route.path).slug;
427
+ return strategy.detect(hostname, currentRoutePath()).slug;
408
428
  }
409
- return route.path || "/";
429
+ return currentRoutePath();
410
430
  })();
411
431
  const ssrHydrated = tryHydrateFromState(initialSlug);
412
432
  if (ssrHydrated) initialLoading.value = false;
@@ -414,12 +434,16 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
414
434
  var _a;
415
435
  notFound.value = false;
416
436
  error.value = null;
417
- const { locale: urlLocale, slug } = strategy ? strategy.detect(typeof window !== "undefined" ? window.location.hostname : "", route.path) : { locale: locale2.value, slug: route.path || "/" };
437
+ const { locale: urlLocale, slug } = strategy ? strategy.detect(typeof window !== "undefined" ? window.location.hostname : "", currentRoutePath()) : { locale: locale2.value, slug: currentRoutePath() };
418
438
  if (urlLocale !== locale2.value) setLocale(urlLocale);
419
439
  if (tryHydrateFromState(slug)) {
420
440
  initialLoading.value = false;
421
441
  return;
422
442
  }
443
+ if (hasEmbeddedState() && typeof window !== "undefined") {
444
+ window.location.assign(currentRouteTarget(slug));
445
+ return;
446
+ }
423
447
  navigating.value = true;
424
448
  try {
425
449
  const resolved = await resolvePath(slug, urlLocale);
@@ -444,7 +468,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
444
468
  if (!ssrHydrated) {
445
469
  load();
446
470
  }
447
- vue.watch(() => route.path, load);
471
+ vue.watch(currentRoutePath, load);
448
472
  vue.onMounted(() => {
449
473
  if (adminConfig && !websiteId.value) {
450
474
  getWebsiteId().then((id) => {
@@ -922,7 +946,7 @@ class BloxInstance {
922
946
  }
923
947
  router.addRoute({
924
948
  path: "/_blox_preview",
925
- component: () => Promise.resolve().then(() => require("./PreviewApp-CTrrFgIL.cjs")),
949
+ component: () => Promise.resolve().then(() => require("./PreviewApp-DGaEtgeQ.cjs")),
926
950
  beforeEnter: () => window.parent !== window ? true : "/"
927
951
  });
928
952
  router.addRoute({ path: "/:pathMatch(.*)*", component: _sfc_main$2 });
@@ -1240,6 +1264,7 @@ exports.BLOX_LAYOUT_KEY = BLOX_LAYOUT_KEY;
1240
1264
  exports.BLOX_LOCALE_STRATEGY_KEY = BLOX_LOCALE_STRATEGY_KEY;
1241
1265
  exports.BLOX_REGISTRY_KEY = BLOX_REGISTRY_KEY;
1242
1266
  exports.BLOX_RUNTIME_KEY = BLOX_RUNTIME_KEY;
1267
+ exports.BLOX_SSR_ROUTE_STATE_KEY = BLOX_SSR_ROUTE_STATE_KEY;
1243
1268
  exports.BloxInstance = BloxInstance;
1244
1269
  exports.PageRenderer = PageRenderer;
1245
1270
  exports._sfc_main = _sfc_main$3;
@@ -1 +1 @@
1
- {"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSSREntry.d.ts","sourceRoot":"","sources":["../../src/ssg/createSSREntry.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ const ssg_buildGrant = require("./build-grant.cjs");
27
27
  const ssg_client = require("./client.cjs");
28
28
  const pinia = require("pinia");
29
29
  const vue = require("vue");
30
- const routes = require("../routes-BYHlDu-i.cjs");
30
+ const routes = require("../routes-ClmCqqhk.cjs");
31
31
  async function renderBloxSsgPage(options) {
32
32
  var _a, _b, _c, _d;
33
33
  const {
@@ -47,81 +47,67 @@ async function renderBloxSsgPage(options) {
47
47
  if (resolvedData != null && !websiteId) {
48
48
  throw new Error(`CMS page "${url}" requires a websiteId for hydration`);
49
49
  }
50
- const g = globalThis;
51
- const prevState = g[stateWindowKey];
52
- if (resolvedData != null) {
53
- g[stateWindowKey] = { [stateKey]: resolvedData };
50
+ const { app, router, dataRegistry } = createAppForUrl(url, resolvedData, stateKey);
51
+ await router.push(url);
52
+ await router.isReady();
53
+ const html = await renderToString(app);
54
+ const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${safeJson({ [stateKey]: resolvedData })};${"<"}/script>` : "";
55
+ const collectionsScript = "";
56
+ const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
57
+ const seoHead = dataRegistry && collectSeo ? collectSeo(dataRegistry) : void 0;
58
+ const seoOverride = seoHead && Object.keys(seoHead).length > 0 ? seoHead : void 0;
59
+ const bloxData = dataRegistry && collectData ? collectData(dataRegistry) : {};
60
+ const serializedData = safeJson(bloxData);
61
+ const maxDataBytes = Number(
62
+ typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BLOX_SSG_MAX_DATA_BYTES : void 0
63
+ ) || 1024 * 1024;
64
+ const dataBytes = new TextEncoder().encode(serializedData).byteLength;
65
+ if (dataBytes > maxDataBytes) {
66
+ const largest = Object.entries(bloxData).map(([key, value]) => ({
67
+ key,
68
+ bytes: new TextEncoder().encode(safeJson(value)).byteLength
69
+ })).sort((a, b) => b.bytes - a.bytes).slice(0, 5).map(({ key, bytes }) => `${key}=${bytes}`).join(", ");
70
+ throw new Error(
71
+ `Blox hydration payload for "${url}" is ${dataBytes} bytes (limit ${maxDataBytes}); largest keys: ${largest}`
72
+ );
54
73
  }
55
- try {
56
- const { app, router, dataRegistry } = createAppForUrl(url);
57
- await router.push(url);
58
- await router.isReady();
59
- const html = await renderToString(app);
60
- const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${JSON.stringify({ [stateKey]: resolvedData })};${"<"}/script>` : "";
61
- const collectionsScript = "";
62
- const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
63
- const seoHead = dataRegistry && collectSeo ? collectSeo(dataRegistry) : void 0;
64
- const seoOverride = seoHead && Object.keys(seoHead).length > 0 ? seoHead : void 0;
65
- const bloxData = dataRegistry && collectData ? collectData(dataRegistry) : {};
66
- const serializedData = safeJson(bloxData);
67
- const maxDataBytes = Number(
68
- typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BLOX_SSG_MAX_DATA_BYTES : void 0
69
- ) || 1024 * 1024;
70
- const dataBytes = new TextEncoder().encode(serializedData).byteLength;
71
- if (dataBytes > maxDataBytes) {
72
- const largest = Object.entries(bloxData).map(([key, value]) => ({
73
- key,
74
- bytes: new TextEncoder().encode(safeJson(value)).byteLength
75
- })).sort((a, b) => b.bytes - a.bytes).slice(0, 5).map(({ key, bytes }) => `${key}=${bytes}`).join(", ");
76
- throw new Error(
77
- `Blox hydration payload for "${url}" is ${dataBytes} bytes (limit ${maxDataBytes}); largest keys: ${largest}`
78
- );
79
- }
80
- const dataScript = Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(routes.BLOX_DATA_WINDOW_KEY)}]=${serializedData};${"<"}/script>` : "";
81
- let head = llmArtifacts.buildPageHead({
74
+ const dataScript = Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(routes.BLOX_DATA_WINDOW_KEY)}]=${serializedData};${"<"}/script>` : "";
75
+ let head = llmArtifacts.buildPageHead({
76
+ url,
77
+ resolvedData,
78
+ website,
79
+ locale,
80
+ override: seoOverride,
81
+ stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
82
+ });
83
+ const seoData = resolvedData;
84
+ const primary = llmArtifacts.primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
85
+ if ((llm == null ? void 0 : llm.jsonLd) !== false) {
86
+ const jsonLd = llmArtifacts.buildJsonLd({
82
87
  url,
83
- resolvedData,
88
+ page: seoData == null ? void 0 : seoData.page,
84
89
  website,
85
- locale,
86
- override: seoOverride,
87
- stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
90
+ contextKey: primary == null ? void 0 : primary.key,
91
+ context: primary == null ? void 0 : primary.ctx,
92
+ config: llm
88
93
  });
89
- const seoData = resolvedData;
90
- const primary = llmArtifacts.primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
91
- if ((llm == null ? void 0 : llm.jsonLd) !== false) {
92
- const jsonLd = llmArtifacts.buildJsonLd({
93
- url,
94
- page: seoData == null ? void 0 : seoData.page,
95
- website,
96
- contextKey: primary == null ? void 0 : primary.key,
97
- context: primary == null ? void 0 : primary.ctx,
98
- locale,
99
- config: llm
100
- });
101
- if (jsonLd) head += `
94
+ if (jsonLd) head += `
102
95
  ${jsonLd}`;
103
- }
104
- let llmEntry;
105
- if ((llm == null ? void 0 : llm.enabled) !== false) {
106
- const title = (seoOverride == null ? void 0 : seoOverride.title) || ((_b = seoData == null ? void 0 : seoData.page) == null ? void 0 : _b.meta_title) || ((_c = seoData == null ? void 0 : seoData.page) == null ? void 0 : _c.title) || "";
107
- const description = (seoOverride == null ? void 0 : seoOverride.description) || ((_d = seoData == null ? void 0 : seoData.page) == null ? void 0 : _d.meta_description) || void 0;
108
- llmEntry = {
109
- url,
110
- title,
111
- description,
112
- text: (llm == null ? void 0 : llm.fullText) !== false ? llmArtifacts.extractPageText(html) : void 0
113
- };
114
- }
115
- const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
116
- const htmlAttrs = `lang="${lang}"`;
117
- return { html, head, htmlAttrs, llm: llmEntry };
118
- } finally {
119
- if (prevState !== void 0) {
120
- g[stateWindowKey] = prevState;
121
- } else {
122
- delete g[stateWindowKey];
123
- }
124
96
  }
97
+ let llmEntry;
98
+ if ((llm == null ? void 0 : llm.enabled) !== false) {
99
+ const title = (seoOverride == null ? void 0 : seoOverride.title) || ((_b = seoData == null ? void 0 : seoData.page) == null ? void 0 : _b.meta_title) || ((_c = seoData == null ? void 0 : seoData.page) == null ? void 0 : _c.title) || "";
100
+ const description = (seoOverride == null ? void 0 : seoOverride.description) || ((_d = seoData == null ? void 0 : seoData.page) == null ? void 0 : _d.meta_description) || void 0;
101
+ llmEntry = {
102
+ url,
103
+ title,
104
+ description,
105
+ text: (llm == null ? void 0 : llm.fullText) !== false ? llmArtifacts.extractPageText(html) : void 0
106
+ };
107
+ }
108
+ const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
109
+ const htmlAttrs = `lang="${lang}"`;
110
+ return { html, head, htmlAttrs, llm: llmEntry };
125
111
  }
126
112
  function safeJson(value) {
127
113
  return JSON.stringify(value).replace(/</g, "\\u003c");
@@ -250,13 +236,17 @@ function createBloxSSREntry(options) {
250
236
  throw error;
251
237
  }
252
238
  }
253
- function buildApp(url) {
239
+ function buildApp(url, resolvedData, stateKey) {
254
240
  const router = createRouter("memory", url);
255
241
  const app = vue.createSSRApp({
256
242
  name: "BloxSsgRoot",
257
243
  render: () => vue.h(vue.Suspense, null, { default: () => vue.h(rootComponent) })
258
244
  });
259
245
  const dataRegistry = routes.provideBloxData(app, { server: true });
246
+ app.provide(routes.BLOX_SSR_ROUTE_STATE_KEY, {
247
+ path: stateKey,
248
+ resolved: resolvedData
249
+ });
260
250
  const pinia$1 = pinia.createPinia();
261
251
  pinia$1.use(({ store: s }) => {
262
252
  s.router = vue.markRaw(router);
@@ -5,7 +5,7 @@ import { BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs"
5
5
  import { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, getCollectionCache, getEmbeddedWebsiteId, installBloxStateCache, installCollectionCache } from "./client.mjs";
6
6
  import { createPinia } from "pinia";
7
7
  import { createSSRApp, h, Suspense, markRaw } from "vue";
8
- import { B as BLOX_DATA_WINDOW_KEY2, s as setApiOrigin, a as setCollectionResolver, b as setActiveLocale, c as collectBloxData, d as collectBloxSeo, p as provideBloxData, e as createBlox, g as generateContentRoutes, i as installLocaleAwareResolve } from "../routes-BngHUX7M.js";
8
+ import { B as BLOX_DATA_WINDOW_KEY2, s as setApiOrigin, a as setCollectionResolver, b as setActiveLocale, c as collectBloxData, d as collectBloxSeo, p as provideBloxData, e as BLOX_SSR_ROUTE_STATE_KEY, f as createBlox, g as generateContentRoutes, i as installLocaleAwareResolve } from "../routes-BLRBaLOB.js";
9
9
  async function renderBloxSsgPage(options) {
10
10
  var _a, _b, _c, _d;
11
11
  const {
@@ -25,81 +25,67 @@ async function renderBloxSsgPage(options) {
25
25
  if (resolvedData != null && !websiteId) {
26
26
  throw new Error(`CMS page "${url}" requires a websiteId for hydration`);
27
27
  }
28
- const g2 = globalThis;
29
- const prevState = g2[stateWindowKey];
30
- if (resolvedData != null) {
31
- g2[stateWindowKey] = { [stateKey]: resolvedData };
28
+ const { app, router, dataRegistry } = createAppForUrl(url, resolvedData, stateKey);
29
+ await router.push(url);
30
+ await router.isReady();
31
+ const html = await renderToString(app);
32
+ const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${safeJson({ [stateKey]: resolvedData })};${"<"}/script>` : "";
33
+ const collectionsScript = "";
34
+ const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
35
+ const seoHead = dataRegistry && collectSeo ? collectSeo(dataRegistry) : void 0;
36
+ const seoOverride = seoHead && Object.keys(seoHead).length > 0 ? seoHead : void 0;
37
+ const bloxData = dataRegistry && collectData ? collectData(dataRegistry) : {};
38
+ const serializedData = safeJson(bloxData);
39
+ const maxDataBytes = Number(
40
+ typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BLOX_SSG_MAX_DATA_BYTES : void 0
41
+ ) || 1024 * 1024;
42
+ const dataBytes = new TextEncoder().encode(serializedData).byteLength;
43
+ if (dataBytes > maxDataBytes) {
44
+ const largest = Object.entries(bloxData).map(([key, value]) => ({
45
+ key,
46
+ bytes: new TextEncoder().encode(safeJson(value)).byteLength
47
+ })).sort((a2, b) => b.bytes - a2.bytes).slice(0, 5).map(({ key, bytes }) => `${key}=${bytes}`).join(", ");
48
+ throw new Error(
49
+ `Blox hydration payload for "${url}" is ${dataBytes} bytes (limit ${maxDataBytes}); largest keys: ${largest}`
50
+ );
32
51
  }
33
- try {
34
- const { app, router, dataRegistry } = createAppForUrl(url);
35
- await router.push(url);
36
- await router.isReady();
37
- const html = await renderToString(app);
38
- const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${JSON.stringify({ [stateKey]: resolvedData })};${"<"}/script>` : "";
39
- const collectionsScript = "";
40
- const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
41
- const seoHead = dataRegistry && collectSeo ? collectSeo(dataRegistry) : void 0;
42
- const seoOverride = seoHead && Object.keys(seoHead).length > 0 ? seoHead : void 0;
43
- const bloxData = dataRegistry && collectData ? collectData(dataRegistry) : {};
44
- const serializedData = safeJson(bloxData);
45
- const maxDataBytes = Number(
46
- typeof process !== "undefined" ? (_a = process.env) == null ? void 0 : _a.BLOX_SSG_MAX_DATA_BYTES : void 0
47
- ) || 1024 * 1024;
48
- const dataBytes = new TextEncoder().encode(serializedData).byteLength;
49
- if (dataBytes > maxDataBytes) {
50
- const largest = Object.entries(bloxData).map(([key, value]) => ({
51
- key,
52
- bytes: new TextEncoder().encode(safeJson(value)).byteLength
53
- })).sort((a2, b) => b.bytes - a2.bytes).slice(0, 5).map(({ key, bytes }) => `${key}=${bytes}`).join(", ");
54
- throw new Error(
55
- `Blox hydration payload for "${url}" is ${dataBytes} bytes (limit ${maxDataBytes}); largest keys: ${largest}`
56
- );
57
- }
58
- const dataScript = Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(BLOX_DATA_WINDOW_KEY2)}]=${serializedData};${"<"}/script>` : "";
59
- let head = buildPageHead({
52
+ const dataScript = Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(BLOX_DATA_WINDOW_KEY2)}]=${serializedData};${"<"}/script>` : "";
53
+ let head = buildPageHead({
54
+ url,
55
+ resolvedData,
56
+ website,
57
+ locale,
58
+ override: seoOverride,
59
+ stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
60
+ });
61
+ const seoData = resolvedData;
62
+ const primary = primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
63
+ if ((llm == null ? void 0 : llm.jsonLd) !== false) {
64
+ const jsonLd = buildJsonLd({
60
65
  url,
61
- resolvedData,
66
+ page: seoData == null ? void 0 : seoData.page,
62
67
  website,
63
- locale,
64
- override: seoOverride,
65
- stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
68
+ contextKey: primary == null ? void 0 : primary.key,
69
+ context: primary == null ? void 0 : primary.ctx,
70
+ config: llm
66
71
  });
67
- const seoData = resolvedData;
68
- const primary = primaryContextEntry(seoData == null ? void 0 : seoData.contexts);
69
- if ((llm == null ? void 0 : llm.jsonLd) !== false) {
70
- const jsonLd = buildJsonLd({
71
- url,
72
- page: seoData == null ? void 0 : seoData.page,
73
- website,
74
- contextKey: primary == null ? void 0 : primary.key,
75
- context: primary == null ? void 0 : primary.ctx,
76
- locale,
77
- config: llm
78
- });
79
- if (jsonLd) head += `
72
+ if (jsonLd) head += `
80
73
  ${jsonLd}`;
81
- }
82
- let llmEntry;
83
- if ((llm == null ? void 0 : llm.enabled) !== false) {
84
- const title = (seoOverride == null ? void 0 : seoOverride.title) || ((_b = seoData == null ? void 0 : seoData.page) == null ? void 0 : _b.meta_title) || ((_c = seoData == null ? void 0 : seoData.page) == null ? void 0 : _c.title) || "";
85
- const description = (seoOverride == null ? void 0 : seoOverride.description) || ((_d = seoData == null ? void 0 : seoData.page) == null ? void 0 : _d.meta_description) || void 0;
86
- llmEntry = {
87
- url,
88
- title,
89
- description,
90
- text: (llm == null ? void 0 : llm.fullText) !== false ? extractPageText(html) : void 0
91
- };
92
- }
93
- const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
94
- const htmlAttrs = `lang="${lang}"`;
95
- return { html, head, htmlAttrs, llm: llmEntry };
96
- } finally {
97
- if (prevState !== void 0) {
98
- g2[stateWindowKey] = prevState;
99
- } else {
100
- delete g2[stateWindowKey];
101
- }
102
74
  }
75
+ let llmEntry;
76
+ if ((llm == null ? void 0 : llm.enabled) !== false) {
77
+ const title = (seoOverride == null ? void 0 : seoOverride.title) || ((_b = seoData == null ? void 0 : seoData.page) == null ? void 0 : _b.meta_title) || ((_c = seoData == null ? void 0 : seoData.page) == null ? void 0 : _c.title) || "";
78
+ const description = (seoOverride == null ? void 0 : seoOverride.description) || ((_d = seoData == null ? void 0 : seoData.page) == null ? void 0 : _d.meta_description) || void 0;
79
+ llmEntry = {
80
+ url,
81
+ title,
82
+ description,
83
+ text: (llm == null ? void 0 : llm.fullText) !== false ? extractPageText(html) : void 0
84
+ };
85
+ }
86
+ const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
87
+ const htmlAttrs = `lang="${lang}"`;
88
+ return { html, head, htmlAttrs, llm: llmEntry };
103
89
  }
104
90
  function safeJson(value) {
105
91
  return JSON.stringify(value).replace(/</g, "\\u003c");
@@ -228,13 +214,17 @@ function createBloxSSREntry(options) {
228
214
  throw error;
229
215
  }
230
216
  }
231
- function buildApp(url) {
217
+ function buildApp(url, resolvedData, stateKey) {
232
218
  const router = createRouter("memory", url);
233
219
  const app = createSSRApp({
234
220
  name: "BloxSsgRoot",
235
221
  render: () => h(Suspense, null, { default: () => h(rootComponent) })
236
222
  });
237
223
  const dataRegistry = provideBloxData(app, { server: true });
224
+ app.provide(BLOX_SSR_ROUTE_STATE_KEY, {
225
+ path: stateKey,
226
+ resolved: resolvedData
227
+ });
238
228
  const pinia = createPinia();
239
229
  pinia.use(({ store: s2 }) => {
240
230
  s2.router = markRaw(router);
@@ -21,7 +21,7 @@ export declare function renderBloxSsgPage<TApp>(options: {
21
21
  url: string;
22
22
  resolvedData: unknown | null;
23
23
  renderToString: (app: TApp) => Promise<string>;
24
- createAppForUrl: (url: string) => {
24
+ createAppForUrl: (url: string, resolvedData: unknown | null, stateKey: string) => {
25
25
  app: TApp;
26
26
  router: BloxSsgRouterLike;
27
27
  dataRegistry?: BloxDataRegistry;
@@ -53,4 +53,6 @@ export declare function renderBloxSsgPage<TApp>(options: {
53
53
  htmlAttrs?: string;
54
54
  llm?: LlmPageEntry;
55
55
  }>;
56
+ /** JSON for embedding in a <script> tag — escapes `<` so `</script>` can't break out. */
57
+ export declare function safeJson(value: unknown): string;
56
58
  //# sourceMappingURL=render-resolved-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9C,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC3G,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACvC,8EAA8E;IAC9E,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACxB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsInF"}
1
+ {"version":3,"file":"render-resolved-page.d.ts","sourceRoot":"","sources":["../../src/ssg/render-resolved-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGvE,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;IACtD,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9C,eAAe,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,KACZ;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAA;IAC9E,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,WAAW,CAAA;IACxD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACvC,8EAA8E;IAC9E,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACxB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsHnF;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE/C"}
package/dist/symbols.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { InjectionKey, Ref } from 'vue';
2
2
  import { LocaleStrategy } from './localeStrategy';
3
3
  import { BlockDefinition } from './schema';
4
+ import { PageResolveRead } from './api/types';
4
5
  export declare const BLOX_REGISTRY_KEY: InjectionKey<Record<string, BlockDefinition>>;
5
6
  export interface BloxConfig {
6
7
  defaultLocale: string;
@@ -15,6 +16,10 @@ export interface BloxRuntimeContext {
15
16
  loading: Ref<boolean>;
16
17
  }
17
18
  export declare const BLOX_RUNTIME_KEY: InjectionKey<BloxRuntimeContext>;
19
+ export declare const BLOX_SSR_ROUTE_STATE_KEY: InjectionKey<{
20
+ path: string;
21
+ resolved: PageResolveRead | null;
22
+ } | null>;
18
23
  /**
19
24
  * Opt-in "edit this page" feature for marketing sites.
20
25
  *
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAClD,CAAA;AAE1B,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,UAAU,CAAyB,CAAA;AAE9E,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,cAAc,CAAkC,CAAA;AAEpG,MAAM,WAAW,kBAAkB;IAClC,yDAAyD;IACzD,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,2EAA2E;IAC3E,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAA0B,CAAA;AAExF;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,eAAe,CAClC,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,gBAAgB,CACnC,CAAA"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAClD,CAAA;AAE1B,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,UAAU,CAAyB,CAAA;AAE9E,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,cAAc,CAAkC,CAAA;AAEpG,MAAM,WAAW,kBAAkB;IAClC,yDAAyD;IACzD,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,2EAA2E;IAC3E,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAA0B,CAAA;AAExF,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAChC,GAAG,IAAI,CAAkC,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAA;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,eAAe,CAClC,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,gBAAgB,CACnC,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/blox",
3
3
  "type": "module",
4
- "version": "1.15.556",
4
+ "version": "1.15.562",
5
5
  "description": "Blox page builder library for drag-and-drop page building and static data management",
6
6
  "author": {
7
7
  "name": "Bagel Studio",