@bagelink/blox 1.15.174 → 1.15.178

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 (47) hide show
  1. package/dist/{PreviewApp-Dz003khp.cjs → PreviewApp-B8EmNfyH.cjs} +1 -1
  2. package/dist/{PreviewApp-CsC6qej1.js → PreviewApp-DdkAQqw2.js} +1 -1
  3. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-C1SwhjdY.js → PreviewApp.vue_vue_type_style_index_0_lang-1JKQVLm2.js} +1 -1
  4. package/dist/{PreviewApp.vue_vue_type_style_index_0_lang-BNKK7Vhs.cjs → PreviewApp.vue_vue_type_style_index_0_lang-CPBuld3j.cjs} +1 -1
  5. package/dist/components/BloxRouterView.vue.d.ts +18 -0
  6. package/dist/components/BloxRouterView.vue.d.ts.map +1 -0
  7. package/dist/composables/useData.d.ts +22 -0
  8. package/dist/composables/useData.d.ts.map +1 -0
  9. package/dist/composables/useLocaleNav.d.ts +8 -0
  10. package/dist/composables/useLocaleNav.d.ts.map +1 -1
  11. package/dist/composables/useSeo.d.ts +20 -0
  12. package/dist/composables/useSeo.d.ts.map +1 -0
  13. package/dist/content/ContentDetailHost.vue.d.ts +3 -0
  14. package/dist/content/ContentDetailHost.vue.d.ts.map +1 -0
  15. package/dist/content/defineContent.d.ts +22 -0
  16. package/dist/content/defineContent.d.ts.map +1 -0
  17. package/dist/content/useContentItem.d.ts +6 -0
  18. package/dist/content/useContentItem.d.ts.map +1 -0
  19. package/dist/content/useContentSeo.d.ts +10 -0
  20. package/dist/content/useContentSeo.d.ts.map +1 -0
  21. package/dist/{core-CbOrSpOU.js → core-Bp2bf8e4.js} +187 -33
  22. package/dist/{core-fPjj9xyJ.cjs → core-KRHc4Bob.cjs} +171 -17
  23. package/dist/core.d.ts.map +1 -1
  24. package/dist/index.cjs +121 -4
  25. package/dist/index.d.ts +12 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.mjs +141 -23
  28. package/dist/{prerender-BLECK5o5.cjs → prerender-H72-UrK4.cjs} +11 -11
  29. package/dist/{prerender-CzpA4sYd.js → prerender-NHAqrTm3.js} +11 -11
  30. package/dist/routing/withLocaleRoutes.d.ts +8 -0
  31. package/dist/routing/withLocaleRoutes.d.ts.map +1 -0
  32. package/dist/ssg/cli.cjs +1 -1
  33. package/dist/ssg/cli.mjs +1 -1
  34. package/dist/ssg/client.cjs +4 -0
  35. package/dist/ssg/client.d.ts +1 -1
  36. package/dist/ssg/client.d.ts.map +1 -1
  37. package/dist/ssg/client.mjs +4 -0
  38. package/dist/ssg/constants.d.ts +4 -0
  39. package/dist/ssg/constants.d.ts.map +1 -1
  40. package/dist/ssg/index.cjs +18 -3
  41. package/dist/ssg/index.d.ts +1 -1
  42. package/dist/ssg/index.d.ts.map +1 -1
  43. package/dist/ssg/index.mjs +20 -5
  44. package/dist/ssg/render-resolved-page.d.ts.map +1 -1
  45. package/dist/ssg/seo.d.ts +7 -0
  46. package/dist/ssg/seo.d.ts.map +1 -1
  47. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,10 +1,11 @@
1
- import { a as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, c as createBlox, i as installSmartLinks } from "./core-CbOrSpOU.js";
2
- import { _, b, d, e, f, h, j, G, P, k, l, m, o, g, p, q, r, s, t, v, w } from "./core-CbOrSpOU.js";
3
- import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-C1SwhjdY.js";
4
- import { ref, onMounted, onUnmounted, inject, computed, createApp, markRaw } from "vue";
5
- import { useRouter } from "vue-router";
1
+ import { a as BLOX_LOCALE_STRATEGY_KEY, u as useLocale, n as normalizeLink, c as createBlox, i as installSmartLinks } from "./core-Bp2bf8e4.js";
2
+ import { _, b, d, e, f, h, j, k, G, l, P, m, o, p, q, r, s, g, t, v, w, x, y, z, A, C, D, E } from "./core-Bp2bf8e4.js";
3
+ import { _ as _2, P as P2, s as s2, a } from "./PreviewApp.vue_vue_type_style_index_0_lang-1JKQVLm2.js";
4
+ import { ref, onMounted, onUnmounted, inject, computed, toValue, onServerPrefetch, watch, defineComponent, resolveComponent, openBlock, createBlock, Suspense, withCtx, createVNode, resolveDynamicComponent, renderSlot, createApp, markRaw } from "vue";
5
+ import { useRouter, useRoute } from "vue-router";
6
+ import { BLOX_PAGE_SEO_WINDOW_KEY, installBloxStateCache, installCollectionCache } from "./ssg/client.mjs";
7
+ import { BLOX_DATA_WINDOW_KEY } from "./ssg/client.mjs";
6
8
  import { createPinia } from "pinia";
7
- import { installBloxStateCache, installCollectionCache } from "./ssg/client.mjs";
8
9
  function useGlobalBlock(blockType, loader) {
9
10
  const data = ref(null);
10
11
  const loading = ref(false);
@@ -41,6 +42,12 @@ function useLocaleNav() {
41
42
  const strategy = inject(BLOX_LOCALE_STRATEGY_KEY, null);
42
43
  const router = useRouter();
43
44
  const { locale, currentAlternates } = useLocale();
45
+ const availableLocales = computed(() => {
46
+ var _a;
47
+ const alts = Object.keys(currentAlternates.value ?? {});
48
+ if (alts.length) return alts;
49
+ return ((_a = strategy == null ? void 0 : strategy.locales) == null ? void 0 : _a.length) ? [...strategy.locales] : [];
50
+ });
44
51
  function switchLocale(targetLocale) {
45
52
  if (!strategy) return;
46
53
  const alts = currentAlternates.value;
@@ -55,7 +62,12 @@ function useLocaleNav() {
55
62
  const loc = String(locale.value || "").slice(0, 2).toLowerCase();
56
63
  return strategy.toPath(normalized, loc || void 0);
57
64
  }
58
- return { switchLocale, toPath, locale };
65
+ function detect(path) {
66
+ const hostname = typeof window !== "undefined" ? window.location.hostname : "";
67
+ if (!strategy) return { locale: String(locale.value || "en"), slug: path || "/" };
68
+ return strategy.detect(hostname, path);
69
+ }
70
+ return { switchLocale, toPath, locale, availableLocales, detect };
59
71
  }
60
72
  function usePageContext(key) {
61
73
  const contexts = inject("contexts");
@@ -65,6 +77,101 @@ function usePageContext(key) {
65
77
  return value;
66
78
  });
67
79
  }
80
+ function isServer() {
81
+ try {
82
+ if (false) ;
83
+ } catch {
84
+ }
85
+ return typeof window === "undefined";
86
+ }
87
+ function writePayload(seo) {
88
+ const root = typeof window !== "undefined" ? window : globalThis;
89
+ if (!seo) {
90
+ delete root[BLOX_PAGE_SEO_WINDOW_KEY];
91
+ return;
92
+ }
93
+ root[BLOX_PAGE_SEO_WINDOW_KEY] = { ...seo };
94
+ }
95
+ function applyClientHead(seo) {
96
+ if (typeof document === "undefined" || !seo) return;
97
+ if (seo.title) document.title = seo.title;
98
+ const ensureMeta = (attr, key, content) => {
99
+ let el = document.head.querySelector(`meta[${attr}="${key}"]`);
100
+ if (!el) {
101
+ el = document.createElement("meta");
102
+ el.setAttribute(attr, key);
103
+ document.head.appendChild(el);
104
+ }
105
+ el.setAttribute("content", content);
106
+ };
107
+ if (seo.description) {
108
+ ensureMeta("name", "description", seo.description);
109
+ ensureMeta("property", "og:description", seo.description);
110
+ }
111
+ if (seo.title) {
112
+ ensureMeta("property", "og:title", seo.title);
113
+ }
114
+ if (seo.image) {
115
+ ensureMeta("property", "og:image", seo.image);
116
+ }
117
+ }
118
+ function useSeo(getter) {
119
+ const resolved = computed(() => toValue(getter) ?? null);
120
+ function sync() {
121
+ const seo = resolved.value;
122
+ writePayload(seo ?? void 0);
123
+ if (!isServer()) applyClientHead(seo ?? void 0);
124
+ }
125
+ if (isServer()) {
126
+ onServerPrefetch(() => {
127
+ sync();
128
+ });
129
+ sync();
130
+ } else {
131
+ watch(resolved, sync, { immediate: true, deep: true });
132
+ }
133
+ onUnmounted(() => {
134
+ writePayload(void 0);
135
+ });
136
+ }
137
+ const _sfc_main = /* @__PURE__ */ defineComponent({
138
+ __name: "BloxRouterView",
139
+ setup(__props) {
140
+ return (_ctx, _cache) => {
141
+ const _component_RouterView = resolveComponent("RouterView");
142
+ return openBlock(), createBlock(Suspense, null, {
143
+ fallback: withCtx(() => [
144
+ renderSlot(_ctx.$slots, "fallback")
145
+ ]),
146
+ default: withCtx(() => [
147
+ createVNode(_component_RouterView, null, {
148
+ default: withCtx(({ Component }) => [
149
+ (openBlock(), createBlock(resolveDynamicComponent(Component)))
150
+ ]),
151
+ _: 1
152
+ })
153
+ ]),
154
+ _: 3
155
+ });
156
+ };
157
+ }
158
+ });
159
+ function useContentSeo(item, getter) {
160
+ const route = useRoute();
161
+ const { detect } = useLocaleNav();
162
+ useSeo(() => {
163
+ const base = toValue(getter);
164
+ if (!base) return null;
165
+ const row = item.value;
166
+ if (!row) return base;
167
+ const locales = Array.isArray(row.available_locales) ? row.available_locales.map((l2) => String(l2).slice(0, 2).toLowerCase()) : [];
168
+ if (!locales.length) return base;
169
+ const bare = detect(route.path).slug || route.path || "/";
170
+ const alternates = {};
171
+ for (const loc of locales) alternates[loc] = bare;
172
+ return { ...base, alternates };
173
+ });
174
+ }
68
175
  const DEFAULT_PLAUSIBLE_HOST = "https://analytics.bagel.to";
69
176
  function injectPlausible(config) {
70
177
  if (typeof document === "undefined") return;
@@ -199,39 +306,50 @@ export {
199
306
  _ as AdminEditBar,
200
307
  b as BLOX_ADMIN_CONFIG_KEY,
201
308
  d as BLOX_CONFIG_KEY,
202
- e as BLOX_GLOBAL_RESOLVER_KEY,
309
+ e as BLOX_CONTENT_ITEM_KEY,
310
+ BLOX_DATA_WINDOW_KEY,
311
+ f as BLOX_GLOBAL_RESOLVER_KEY,
203
312
  BLOX_LOCALE_STRATEGY_KEY,
204
- f as BloxInstance,
205
- h as CmsPageView,
206
- j as GLOBAL_REF_KEY,
313
+ h as BloxInstance,
314
+ _sfc_main as BloxRouterView,
315
+ j as CmsPageView,
316
+ k as GLOBAL_REF_KEY,
207
317
  G as GlobalBlockHost,
318
+ l as LocaleRouterLink,
208
319
  P as PageRenderer,
209
320
  _2 as PreviewApp,
210
321
  P2 as PreviewRenderer,
211
322
  buildBloxManifest,
212
- k as classifyLink,
213
- l as configureApi,
323
+ m as classifyLink,
324
+ o as configureApi,
325
+ p as contentRoutes,
214
326
  createBlox,
215
327
  createBloxApp,
216
328
  defineBlock,
217
- m as getWebsiteId,
218
- o as getWebsiteIdSync,
329
+ q as defineContent,
330
+ r as getWebsiteId,
331
+ s as getWebsiteIdSync,
219
332
  g as globalRefOf,
220
333
  injectPlausible,
221
334
  installSmartLinks,
222
- p as isAbsoluteExternal,
223
- q as isSpecialScheme,
224
- r as listItems,
335
+ t as isAbsoluteExternal,
336
+ v as isSpecialScheme,
337
+ w as listItems,
225
338
  normalizeLink,
226
- s as normalizeTo,
227
- t as resolvePath,
339
+ x as normalizeTo,
340
+ y as resolvePath,
228
341
  s2 as sendToEditor,
229
342
  a as sendToPreview,
230
343
  serializeRegistry,
231
- v as toInternalPath,
232
- w as useBloxEdit,
344
+ z as toInternalPath,
345
+ A as useBloxEdit,
346
+ C as useContentItem,
347
+ useContentSeo,
348
+ D as useData,
233
349
  useGlobalBlock,
234
350
  useLocale,
235
351
  useLocaleNav,
236
- usePageContext
352
+ usePageContext,
353
+ useSeo,
354
+ E as withLocaleRoutes
237
355
  };
@@ -186,17 +186,17 @@ function buildStructuredData(meta, locale) {
186
186
  }
187
187
  }
188
188
  function buildPageHead(options) {
189
- const { url, resolvedData, website, stateScript, locale } = options;
189
+ const { url, resolvedData, website, stateScript, locale, pageSeo } = options;
190
190
  const parts = [];
191
191
  const meta = (website == null ? void 0 : website.meta) ?? {};
192
192
  const page = resolvedData == null ? void 0 : resolvedData.page;
193
193
  const ctx = extractPrimaryContext(resolvedData == null ? void 0 : resolvedData.contexts);
194
- const title = (page == null ? void 0 : page.meta_title) || ctx.title || ((page == null ? void 0 : page.title) && meta.og_site_name ? `${page.title} · ${meta.og_site_name}` : null) || (page == null ? void 0 : page.title) || meta.default_meta_title;
194
+ const title = (pageSeo == null ? void 0 : pageSeo.title) || (page == null ? void 0 : page.meta_title) || ctx.title || ((page == null ? void 0 : page.title) && meta.og_site_name ? `${page.title} · ${meta.og_site_name}` : null) || (page == null ? void 0 : page.title) || meta.default_meta_title;
195
195
  if (title) {
196
- const fullTitle = ctx.title && meta.og_site_name && !ctx.title.includes(meta.og_site_name) ? `${esc(ctx.title)} · ${esc(meta.og_site_name)}` : esc(title);
196
+ const fullTitle = !(pageSeo == null ? void 0 : pageSeo.title) && ctx.title && meta.og_site_name && !ctx.title.includes(meta.og_site_name) ? `${esc(ctx.title)} · ${esc(meta.og_site_name)}` : esc(title);
197
197
  parts.push(`<title>${fullTitle}</title>`);
198
198
  }
199
- const description = (page == null ? void 0 : page.meta_description) || ctx.description || meta.default_meta_description;
199
+ const description = (pageSeo == null ? void 0 : pageSeo.description) || (page == null ? void 0 : page.meta_description) || ctx.description || meta.default_meta_description;
200
200
  if (description) {
201
201
  parts.push(`<meta name="description" content="${esc(description)}">`);
202
202
  }
@@ -204,9 +204,9 @@ function buildPageHead(options) {
204
204
  if (canonicalBase) {
205
205
  parts.push(`<link rel="canonical" href="${esc(canonicalBase + url)}">`);
206
206
  }
207
- const ogTitle = (page == null ? void 0 : page.meta_title) || ctx.title || (page == null ? void 0 : page.title) || meta.og_site_name || meta.default_meta_title;
208
- const ogDesc = (page == null ? void 0 : page.meta_description) || ctx.description || meta.og_description || meta.default_meta_description;
209
- const ogImage = absUrl((page == null ? void 0 : page.og_image) || ctx.image || meta.default_og_image);
207
+ const ogTitle = (pageSeo == null ? void 0 : pageSeo.title) || (page == null ? void 0 : page.meta_title) || ctx.title || (page == null ? void 0 : page.title) || meta.og_site_name || meta.default_meta_title;
208
+ const ogDesc = (pageSeo == null ? void 0 : pageSeo.description) || (page == null ? void 0 : page.meta_description) || ctx.description || meta.og_description || meta.default_meta_description;
209
+ const ogImage = absUrl((pageSeo == null ? void 0 : pageSeo.image) || (page == null ? void 0 : page.og_image) || ctx.image || meta.default_og_image);
210
210
  const ogType = meta.og_type || "website";
211
211
  if (ogTitle) parts.push(`<meta property="og:title" content="${esc(ogTitle)}">`);
212
212
  if (ogDesc) parts.push(`<meta property="og:description" content="${esc(ogDesc)}">`);
@@ -220,12 +220,12 @@ function buildPageHead(options) {
220
220
  if (ogDesc) parts.push(`<meta name="twitter:description" content="${esc(ogDesc)}">`);
221
221
  if (ogImage) parts.push(`<meta name="twitter:image" content="${esc(ogImage)}">`);
222
222
  if (meta.twitter_site) parts.push(`<meta name="twitter:site" content="${esc(meta.twitter_site)}">`);
223
- const alternates = resolvedData == null ? void 0 : resolvedData.alternates;
223
+ const alternates = (pageSeo == null ? void 0 : pageSeo.alternates) || (resolvedData == null ? void 0 : resolvedData.alternates);
224
224
  const defaultLocale = (website == null ? void 0 : website.default_locale) ?? "en";
225
225
  if (alternates && canonicalBase) {
226
- for (const [locale2, slug] of Object.entries(alternates)) {
227
- const href = locale2 === defaultLocale ? slug : slug === "/" ? `/${locale2}` : `/${locale2}${slug}`;
228
- parts.push(`<link rel="alternate" hreflang="${esc(locale2)}" href="${esc(canonicalBase + href)}">`);
226
+ for (const [loc, slug] of Object.entries(alternates)) {
227
+ const href = loc === defaultLocale ? slug : slug === "/" ? `/${loc}` : `/${loc}${slug}`;
228
+ parts.push(`<link rel="alternate" hreflang="${esc(loc)}" href="${esc(canonicalBase + href)}">`);
229
229
  }
230
230
  const defaultSlug = alternates[defaultLocale] ?? url;
231
231
  parts.push(`<link rel="alternate" hreflang="x-default" href="${esc(canonicalBase + defaultSlug)}">`);
@@ -163,17 +163,17 @@ function buildStructuredData(meta, locale) {
163
163
  }
164
164
  }
165
165
  function buildPageHead(options) {
166
- const { url, resolvedData, website, stateScript, locale } = options;
166
+ const { url, resolvedData, website, stateScript, locale, pageSeo } = options;
167
167
  const parts = [];
168
168
  const meta = (website == null ? void 0 : website.meta) ?? {};
169
169
  const page = resolvedData == null ? void 0 : resolvedData.page;
170
170
  const ctx = extractPrimaryContext(resolvedData == null ? void 0 : resolvedData.contexts);
171
- const title = (page == null ? void 0 : page.meta_title) || ctx.title || ((page == null ? void 0 : page.title) && meta.og_site_name ? `${page.title} · ${meta.og_site_name}` : null) || (page == null ? void 0 : page.title) || meta.default_meta_title;
171
+ const title = (pageSeo == null ? void 0 : pageSeo.title) || (page == null ? void 0 : page.meta_title) || ctx.title || ((page == null ? void 0 : page.title) && meta.og_site_name ? `${page.title} · ${meta.og_site_name}` : null) || (page == null ? void 0 : page.title) || meta.default_meta_title;
172
172
  if (title) {
173
- const fullTitle = ctx.title && meta.og_site_name && !ctx.title.includes(meta.og_site_name) ? `${esc(ctx.title)} · ${esc(meta.og_site_name)}` : esc(title);
173
+ const fullTitle = !(pageSeo == null ? void 0 : pageSeo.title) && ctx.title && meta.og_site_name && !ctx.title.includes(meta.og_site_name) ? `${esc(ctx.title)} · ${esc(meta.og_site_name)}` : esc(title);
174
174
  parts.push(`<title>${fullTitle}</title>`);
175
175
  }
176
- const description = (page == null ? void 0 : page.meta_description) || ctx.description || meta.default_meta_description;
176
+ const description = (pageSeo == null ? void 0 : pageSeo.description) || (page == null ? void 0 : page.meta_description) || ctx.description || meta.default_meta_description;
177
177
  if (description) {
178
178
  parts.push(`<meta name="description" content="${esc(description)}">`);
179
179
  }
@@ -181,9 +181,9 @@ function buildPageHead(options) {
181
181
  if (canonicalBase) {
182
182
  parts.push(`<link rel="canonical" href="${esc(canonicalBase + url)}">`);
183
183
  }
184
- const ogTitle = (page == null ? void 0 : page.meta_title) || ctx.title || (page == null ? void 0 : page.title) || meta.og_site_name || meta.default_meta_title;
185
- const ogDesc = (page == null ? void 0 : page.meta_description) || ctx.description || meta.og_description || meta.default_meta_description;
186
- const ogImage = absUrl((page == null ? void 0 : page.og_image) || ctx.image || meta.default_og_image);
184
+ const ogTitle = (pageSeo == null ? void 0 : pageSeo.title) || (page == null ? void 0 : page.meta_title) || ctx.title || (page == null ? void 0 : page.title) || meta.og_site_name || meta.default_meta_title;
185
+ const ogDesc = (pageSeo == null ? void 0 : pageSeo.description) || (page == null ? void 0 : page.meta_description) || ctx.description || meta.og_description || meta.default_meta_description;
186
+ const ogImage = absUrl((pageSeo == null ? void 0 : pageSeo.image) || (page == null ? void 0 : page.og_image) || ctx.image || meta.default_og_image);
187
187
  const ogType = meta.og_type || "website";
188
188
  if (ogTitle) parts.push(`<meta property="og:title" content="${esc(ogTitle)}">`);
189
189
  if (ogDesc) parts.push(`<meta property="og:description" content="${esc(ogDesc)}">`);
@@ -197,12 +197,12 @@ function buildPageHead(options) {
197
197
  if (ogDesc) parts.push(`<meta name="twitter:description" content="${esc(ogDesc)}">`);
198
198
  if (ogImage) parts.push(`<meta name="twitter:image" content="${esc(ogImage)}">`);
199
199
  if (meta.twitter_site) parts.push(`<meta name="twitter:site" content="${esc(meta.twitter_site)}">`);
200
- const alternates = resolvedData == null ? void 0 : resolvedData.alternates;
200
+ const alternates = (pageSeo == null ? void 0 : pageSeo.alternates) || (resolvedData == null ? void 0 : resolvedData.alternates);
201
201
  const defaultLocale = (website == null ? void 0 : website.default_locale) ?? "en";
202
202
  if (alternates && canonicalBase) {
203
- for (const [locale2, slug] of Object.entries(alternates)) {
204
- const href = locale2 === defaultLocale ? slug : slug === "/" ? `/${locale2}` : `/${locale2}${slug}`;
205
- parts.push(`<link rel="alternate" hreflang="${esc(locale2)}" href="${esc(canonicalBase + href)}">`);
203
+ for (const [loc, slug] of Object.entries(alternates)) {
204
+ const href = loc === defaultLocale ? slug : slug === "/" ? `/${loc}` : `/${loc}${slug}`;
205
+ parts.push(`<link rel="alternate" hreflang="${esc(loc)}" href="${esc(canonicalBase + href)}">`);
206
206
  }
207
207
  const defaultSlug = alternates[defaultLocale] ?? url;
208
208
  parts.push(`<link rel="alternate" hreflang="x-default" href="${esc(canonicalBase + defaultSlug)}">`);
@@ -0,0 +1,8 @@
1
+ import { Component } from 'vue';
2
+ import { RouteRecordRaw } from 'vue-router';
3
+ /**
4
+ * Duplicate a route for the default locale (bare path) and every non-default
5
+ * locale as `/:locale(xx|yy)/…`.
6
+ */
7
+ export declare function withLocaleRoutes(path: string, component: RouteRecordRaw['component'] | Component, locales: readonly string[], defaultLocale: string): RouteRecordRaw[];
8
+ //# sourceMappingURL=withLocaleRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withLocaleRoutes.d.ts","sourceRoot":"","sources":["../../src/routing/withLocaleRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,SAAS,EAClD,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACnB,cAAc,EAAE,CAiBlB"}
package/dist/ssg/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  "use strict";
3
3
  const process = require("node:process");
4
- const prerender = require("../prerender-BLECK5o5.cjs");
4
+ const prerender = require("../prerender-H72-UrK4.cjs");
5
5
  async function resolveApiBase(mode) {
6
6
  if (process.env.BAGELINK_API_URL != null && process.env.BAGELINK_API_URL !== "") {
7
7
  return { apiBase: process.env.BAGELINK_API_URL };
package/dist/ssg/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  import process from "node:process";
3
- import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-CzpA4sYd.js";
3
+ import { p as polyfillBloxSsgGlobals, f as fetchCmsSiteData, a as prerender } from "../prerender-NHAqrTm3.js";
4
4
  async function resolveApiBase(mode) {
5
5
  if (process.env.BAGELINK_API_URL != null && process.env.BAGELINK_API_URL !== "") {
6
6
  return { apiBase: process.env.BAGELINK_API_URL };
@@ -3,6 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const BLOX_STATE_WINDOW_KEY = "__BLOX_STATE__";
4
4
  const BLOX_COLLECTIONS_WINDOW_KEY = "__BLOX_COLLECTIONS__";
5
5
  const BLOX_WEBSITE_ID_WINDOW_KEY = "__BLOX_WEBSITE_ID__";
6
+ const BLOX_DATA_WINDOW_KEY = "__BLOX_DATA__";
7
+ const BLOX_PAGE_SEO_WINDOW_KEY = "__BLOX_PAGE_SEO__";
6
8
  let _cache = null;
7
9
  function readCache() {
8
10
  if (_cache != null) return _cache;
@@ -69,6 +71,8 @@ function installBloxStateCache(globalKey = BLOX_STATE_WINDOW_KEY) {
69
71
  };
70
72
  }
71
73
  exports.BLOX_COLLECTIONS_WINDOW_KEY = BLOX_COLLECTIONS_WINDOW_KEY;
74
+ exports.BLOX_DATA_WINDOW_KEY = BLOX_DATA_WINDOW_KEY;
75
+ exports.BLOX_PAGE_SEO_WINDOW_KEY = BLOX_PAGE_SEO_WINDOW_KEY;
72
76
  exports.BLOX_STATE_WINDOW_KEY = BLOX_STATE_WINDOW_KEY;
73
77
  exports.BLOX_WEBSITE_ID_WINDOW_KEY = BLOX_WEBSITE_ID_WINDOW_KEY;
74
78
  exports.getCollectionCache = getCollectionCache;
@@ -5,6 +5,6 @@ export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from
5
5
  * Use this import in client entry files (main.ts / entry-client.ts).
6
6
  * It does NOT pull in Node.js modules (fs, path, url, happy-dom).
7
7
  */
8
- export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
8
+ export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
9
9
  export { installBloxStateCache } from './state-cache';
10
10
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ssg/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/ssg/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5J,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,6 +1,8 @@
1
1
  const BLOX_STATE_WINDOW_KEY = "__BLOX_STATE__";
2
2
  const BLOX_COLLECTIONS_WINDOW_KEY = "__BLOX_COLLECTIONS__";
3
3
  const BLOX_WEBSITE_ID_WINDOW_KEY = "__BLOX_WEBSITE_ID__";
4
+ const BLOX_DATA_WINDOW_KEY = "__BLOX_DATA__";
5
+ const BLOX_PAGE_SEO_WINDOW_KEY = "__BLOX_PAGE_SEO__";
4
6
  let _cache = null;
5
7
  function readCache() {
6
8
  if (_cache != null) return _cache;
@@ -68,6 +70,8 @@ function installBloxStateCache(globalKey = BLOX_STATE_WINDOW_KEY) {
68
70
  }
69
71
  export {
70
72
  BLOX_COLLECTIONS_WINDOW_KEY,
73
+ BLOX_DATA_WINDOW_KEY,
74
+ BLOX_PAGE_SEO_WINDOW_KEY,
71
75
  BLOX_STATE_WINDOW_KEY,
72
76
  BLOX_WEBSITE_ID_WINDOW_KEY,
73
77
  getCollectionCache,
@@ -4,4 +4,8 @@ export declare const BLOX_STATE_WINDOW_KEY: "__BLOX_STATE__";
4
4
  export declare const BLOX_COLLECTIONS_WINDOW_KEY: "__BLOX_COLLECTIONS__";
5
5
  /** Global key for the pre-resolved website ID (avoids GET /blox/websites on client). */
6
6
  export declare const BLOX_WEBSITE_ID_WINDOW_KEY: "__BLOX_WEBSITE_ID__";
7
+ /** Global key for `useData()` payload (keyed by composable cache key). */
8
+ export declare const BLOX_DATA_WINDOW_KEY: "__BLOX_DATA__";
9
+ /** Global key for `useSeo()` payload written during SSR for head injection. */
10
+ export declare const BLOX_PAGE_SEO_WINDOW_KEY: "__BLOX_PAGE_SEO__";
7
11
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/ssg/constants.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,EAAG,gBAAyB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAG,sBAA+B,CAAA;AAE1E,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,EAAG,qBAA8B,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/ssg/constants.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,EAAG,gBAAyB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,EAAG,sBAA+B,CAAA;AAE1E,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,EAAG,qBAA8B,CAAA;AAExE,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,EAAG,eAAwB,CAAA;AAE5D,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,EAAG,mBAA4B,CAAA"}
@@ -22,11 +22,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
- const prerender = require("../prerender-BLECK5o5.cjs");
25
+ const prerender = require("../prerender-H72-UrK4.cjs");
26
26
  const ssg_client = require("./client.cjs");
27
27
  const pinia = require("pinia");
28
28
  const vue = require("vue");
29
- const core = require("../core-fPjj9xyJ.cjs");
29
+ const core = require("../core-KRHc4Bob.cjs");
30
30
  async function renderBloxSsgPage(options) {
31
31
  const {
32
32
  url,
@@ -42,9 +42,12 @@ async function renderBloxSsgPage(options) {
42
42
  } = options;
43
43
  const g = globalThis;
44
44
  const prevState = g[stateWindowKey];
45
+ const prevData = g[ssg_client.BLOX_DATA_WINDOW_KEY];
45
46
  if (resolvedData != null) {
46
47
  g[stateWindowKey] = { [stateKey]: resolvedData };
47
48
  }
49
+ g[ssg_client.BLOX_DATA_WINDOW_KEY] = {};
50
+ delete g[ssg_client.BLOX_PAGE_SEO_WINDOW_KEY];
48
51
  try {
49
52
  const { app, router } = createAppForUrl(url);
50
53
  await router.push(url);
@@ -53,12 +56,16 @@ async function renderBloxSsgPage(options) {
53
56
  const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${JSON.stringify({ [stateKey]: resolvedData })};${"<"}/script>` : "";
54
57
  const collectionsScript = collections && Object.keys(collections).length > 0 ? `<script>window[${JSON.stringify(ssg_client.BLOX_COLLECTIONS_WINDOW_KEY)}]=${JSON.stringify(collections)};${"<"}/script>` : "";
55
58
  const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
59
+ const bloxData = g[ssg_client.BLOX_DATA_WINDOW_KEY];
60
+ const dataScript = bloxData && Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(ssg_client.BLOX_DATA_WINDOW_KEY)}]=${JSON.stringify(bloxData)};${"<"}/script>` : "";
61
+ const pageSeo = g[ssg_client.BLOX_PAGE_SEO_WINDOW_KEY] ?? null;
56
62
  const head = prerender.buildPageHead({
57
63
  url,
58
64
  resolvedData,
59
65
  website,
60
66
  locale,
61
- stateScript: [stateScript, collectionsScript, websiteIdScript].filter(Boolean).join("\n")
67
+ pageSeo,
68
+ stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
62
69
  });
63
70
  const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
64
71
  const htmlAttrs = `lang="${lang}"`;
@@ -69,6 +76,12 @@ async function renderBloxSsgPage(options) {
69
76
  } else {
70
77
  delete g[stateWindowKey];
71
78
  }
79
+ if (prevData !== void 0) {
80
+ g[ssg_client.BLOX_DATA_WINDOW_KEY] = prevData;
81
+ } else {
82
+ delete g[ssg_client.BLOX_DATA_WINDOW_KEY];
83
+ }
84
+ delete g[ssg_client.BLOX_PAGE_SEO_WINDOW_KEY];
72
85
  }
73
86
  }
74
87
  let _websiteId = null;
@@ -179,6 +192,8 @@ exports.getSiteIconFlags = prerender.getSiteIconFlags;
179
192
  exports.polyfillBloxSsgGlobals = prerender.polyfillBloxSsgGlobals;
180
193
  exports.prerender = prerender.prerender;
181
194
  exports.BLOX_COLLECTIONS_WINDOW_KEY = ssg_client.BLOX_COLLECTIONS_WINDOW_KEY;
195
+ exports.BLOX_DATA_WINDOW_KEY = ssg_client.BLOX_DATA_WINDOW_KEY;
196
+ exports.BLOX_PAGE_SEO_WINDOW_KEY = ssg_client.BLOX_PAGE_SEO_WINDOW_KEY;
182
197
  exports.BLOX_STATE_WINDOW_KEY = ssg_client.BLOX_STATE_WINDOW_KEY;
183
198
  exports.BLOX_WEBSITE_ID_WINDOW_KEY = ssg_client.BLOX_WEBSITE_ID_WINDOW_KEY;
184
199
  exports.getCollectionCache = ssg_client.getCollectionCache;
@@ -12,7 +12,7 @@ export { getCollectionCache, getEmbeddedWebsiteId, installCollectionCache } from
12
12
  * - Full prerender orchestrator with crawl support
13
13
  * - SEO asset generation (sitemap.xml, robots.txt, _redirects)
14
14
  */
15
- export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
15
+ export { BLOX_COLLECTIONS_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, BLOX_STATE_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from './constants';
16
16
  export { createBloxSSREntry } from './createSSREntry';
17
17
  export type { BloxSSREntry, CreateBloxSSREntryOptions } from './createSSREntry';
18
18
  export { polyfillBloxSsgGlobals } from './polyfill-node';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACvI,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrG;;;;;;;;;;GAUG;AACH,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAC5J,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACvI,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,10 +1,10 @@
1
- import { b as buildPageHead } from "../prerender-CzpA4sYd.js";
2
- import { c, d, f, g, e, h, i, p, a } from "../prerender-CzpA4sYd.js";
3
- import { BLOX_STATE_WINDOW_KEY, BLOX_COLLECTIONS_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs";
1
+ import { b as buildPageHead } from "../prerender-NHAqrTm3.js";
2
+ import { c, d, f, g, e, h, i, p, a } from "../prerender-NHAqrTm3.js";
3
+ import { BLOX_STATE_WINDOW_KEY, BLOX_DATA_WINDOW_KEY, BLOX_PAGE_SEO_WINDOW_KEY, BLOX_COLLECTIONS_WINDOW_KEY, BLOX_WEBSITE_ID_WINDOW_KEY } from "./client.mjs";
4
4
  import { getCollectionCache, getEmbeddedWebsiteId, installBloxStateCache, installCollectionCache } from "./client.mjs";
5
5
  import { createPinia } from "pinia";
6
6
  import { createSSRApp, markRaw } from "vue";
7
- import { c as createBlox } from "../core-CbOrSpOU.js";
7
+ import { c as createBlox } from "../core-Bp2bf8e4.js";
8
8
  async function renderBloxSsgPage(options) {
9
9
  const {
10
10
  url,
@@ -20,9 +20,12 @@ async function renderBloxSsgPage(options) {
20
20
  } = options;
21
21
  const g2 = globalThis;
22
22
  const prevState = g2[stateWindowKey];
23
+ const prevData = g2[BLOX_DATA_WINDOW_KEY];
23
24
  if (resolvedData != null) {
24
25
  g2[stateWindowKey] = { [stateKey]: resolvedData };
25
26
  }
27
+ g2[BLOX_DATA_WINDOW_KEY] = {};
28
+ delete g2[BLOX_PAGE_SEO_WINDOW_KEY];
26
29
  try {
27
30
  const { app, router } = createAppForUrl(url);
28
31
  await router.push(url);
@@ -31,12 +34,16 @@ async function renderBloxSsgPage(options) {
31
34
  const stateScript = resolvedData != null ? `<script>window[${JSON.stringify(stateWindowKey)}]=${JSON.stringify({ [stateKey]: resolvedData })};${"<"}/script>` : "";
32
35
  const collectionsScript = collections && Object.keys(collections).length > 0 ? `<script>window[${JSON.stringify(BLOX_COLLECTIONS_WINDOW_KEY)}]=${JSON.stringify(collections)};${"<"}/script>` : "";
33
36
  const websiteIdScript = websiteId ? `<script>window[${JSON.stringify(BLOX_WEBSITE_ID_WINDOW_KEY)}]=${JSON.stringify(websiteId)};${"<"}/script>` : "";
37
+ const bloxData = g2[BLOX_DATA_WINDOW_KEY];
38
+ const dataScript = bloxData && Object.keys(bloxData).length > 0 ? `<script>window[${JSON.stringify(BLOX_DATA_WINDOW_KEY)}]=${JSON.stringify(bloxData)};${"<"}/script>` : "";
39
+ const pageSeo = g2[BLOX_PAGE_SEO_WINDOW_KEY] ?? null;
34
40
  const head = buildPageHead({
35
41
  url,
36
42
  resolvedData,
37
43
  website,
38
44
  locale,
39
- stateScript: [stateScript, collectionsScript, websiteIdScript].filter(Boolean).join("\n")
45
+ pageSeo,
46
+ stateScript: [stateScript, collectionsScript, websiteIdScript, dataScript].filter(Boolean).join("\n")
40
47
  });
41
48
  const lang = locale || (website == null ? void 0 : website.default_locale) || "en";
42
49
  const htmlAttrs = `lang="${lang}"`;
@@ -47,6 +54,12 @@ async function renderBloxSsgPage(options) {
47
54
  } else {
48
55
  delete g2[stateWindowKey];
49
56
  }
57
+ if (prevData !== void 0) {
58
+ g2[BLOX_DATA_WINDOW_KEY] = prevData;
59
+ } else {
60
+ delete g2[BLOX_DATA_WINDOW_KEY];
61
+ }
62
+ delete g2[BLOX_PAGE_SEO_WINDOW_KEY];
50
63
  }
51
64
  }
52
65
  let _websiteId = null;
@@ -148,6 +161,8 @@ function createBloxSSREntry(options) {
148
161
  }
149
162
  export {
150
163
  BLOX_COLLECTIONS_WINDOW_KEY,
164
+ BLOX_DATA_WINDOW_KEY,
165
+ BLOX_PAGE_SEO_WINDOW_KEY,
151
166
  BLOX_STATE_WINDOW_KEY,
152
167
  BLOX_WEBSITE_ID_WINDOW_KEY,
153
168
  buildPageHead,
@@ -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;AAK/C,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,CAAA;KAAE,CAAA;IAC1E,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;CACvC,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8D/D"}
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;AAM/C,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,CAAA;KAAE,CAAA;IAC1E,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;CACvC,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgF/D"}
package/dist/ssg/seo.d.ts CHANGED
@@ -52,6 +52,13 @@ export declare function buildPageHead(options: {
52
52
  stateScript?: string;
53
53
  /** Active render locale — selects per-locale structured data. */
54
54
  locale?: string;
55
+ /** Runtime SEO from `useSeo()` during SSR (detail pages / blocks). */
56
+ pageSeo?: {
57
+ title?: string;
58
+ description?: string;
59
+ image?: string;
60
+ alternates?: Record<string, string>;
61
+ } | null;
55
62
  }): string;
56
63
  /**
57
64
  * Build site-wide `<head>` tags: verification, structured data, analytics, favicon.
@@ -1 +1 @@
1
- {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/ssg/seo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/ssg/seo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/blox",
3
3
  "type": "module",
4
- "version": "1.15.174",
4
+ "version": "1.15.178",
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",