@riverbankcms/sdk 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/client/client.js +1 -1
  2. package/dist/client/client.js.map +1 -1
  3. package/dist/client/client.mjs +1 -1
  4. package/dist/client/client.mjs.map +1 -1
  5. package/dist/server/{chunk-Z5ZA6Q4D.mjs → chunk-74XUVNOO.mjs} +5 -3
  6. package/dist/server/chunk-74XUVNOO.mjs.map +1 -0
  7. package/dist/server/{chunk-3B364WO2.js → chunk-7BVRA5MY.js} +4 -49
  8. package/dist/server/chunk-7BVRA5MY.js.map +1 -0
  9. package/dist/server/{chunk-I7ZR2WO3.mjs → chunk-7FIJSGHU.mjs} +2 -2
  10. package/dist/server/{chunk-I7ZR2WO3.mjs.map → chunk-7FIJSGHU.mjs.map} +1 -1
  11. package/dist/server/chunk-ARNCLSQT.mjs +52 -0
  12. package/dist/server/chunk-ARNCLSQT.mjs.map +1 -0
  13. package/dist/server/chunk-BNQV3PXP.js +69 -0
  14. package/dist/server/chunk-BNQV3PXP.js.map +1 -0
  15. package/dist/server/{chunk-I2D7KOEA.js → chunk-JWRNMNWI.js} +5 -3
  16. package/dist/server/chunk-JWRNMNWI.js.map +1 -0
  17. package/dist/server/{chunk-IVHIQFJH.js → chunk-P7UVAMK6.js} +2 -2
  18. package/dist/server/{chunk-IVHIQFJH.js.map → chunk-P7UVAMK6.js.map} +1 -1
  19. package/dist/server/{chunk-XXFF4RVR.mjs → chunk-RBJFXNDM.mjs} +1 -46
  20. package/dist/server/chunk-RBJFXNDM.mjs.map +1 -0
  21. package/dist/server/chunk-SWYWZT3L.mjs +69 -0
  22. package/dist/server/chunk-SWYWZT3L.mjs.map +1 -0
  23. package/dist/server/chunk-T26N3P26.js +52 -0
  24. package/dist/server/chunk-T26N3P26.js.map +1 -0
  25. package/dist/server/components.js +5 -3
  26. package/dist/server/components.js.map +1 -1
  27. package/dist/server/components.mjs +5 -3
  28. package/dist/server/index-BTwWvSBu.d.ts +130 -0
  29. package/dist/server/index-DI_qlYx3.d.mts +130 -0
  30. package/dist/server/index.js +2 -2
  31. package/dist/server/index.mjs +1 -1
  32. package/dist/server/{loadContent-BS-3wesN.d.mts → loadContent-C-YYUKQa.d.mts} +10 -2
  33. package/dist/server/{loadContent-Buvmudee.d.ts → loadContent-DmgpFcFC.d.ts} +10 -2
  34. package/dist/server/metadata.d.mts +8 -135
  35. package/dist/server/metadata.d.ts +8 -135
  36. package/dist/server/metadata.js +5 -65
  37. package/dist/server/metadata.js.map +1 -1
  38. package/dist/server/metadata.mjs +4 -64
  39. package/dist/server/metadata.mjs.map +1 -1
  40. package/dist/server/next.d.mts +274 -0
  41. package/dist/server/next.d.ts +274 -0
  42. package/dist/server/next.js +150 -0
  43. package/dist/server/next.js.map +1 -0
  44. package/dist/server/next.mjs +150 -0
  45. package/dist/server/next.mjs.map +1 -0
  46. package/dist/server/rendering/server.js +5 -3
  47. package/dist/server/rendering/server.js.map +1 -1
  48. package/dist/server/rendering/server.mjs +5 -3
  49. package/dist/server/rendering.d.mts +1 -1
  50. package/dist/server/rendering.d.ts +1 -1
  51. package/dist/server/rendering.js +6 -4
  52. package/dist/server/rendering.js.map +1 -1
  53. package/dist/server/rendering.mjs +6 -4
  54. package/dist/server/server.d.mts +1 -1
  55. package/dist/server/server.d.ts +1 -1
  56. package/dist/server/server.js +3 -3
  57. package/dist/server/server.mjs +2 -2
  58. package/package.json +13 -1
  59. package/dist/server/chunk-3B364WO2.js.map +0 -1
  60. package/dist/server/chunk-I2D7KOEA.js.map +0 -1
  61. package/dist/server/chunk-XXFF4RVR.mjs.map +0 -1
  62. package/dist/server/chunk-Z5ZA6Q4D.mjs.map +0 -1
@@ -3,7 +3,6 @@ import {
3
3
  buildMenu
4
4
  } from "./chunk-YXA4GAAQ.mjs";
5
5
  import {
6
- PageRenderer,
7
6
  buildThemeRuntime,
8
7
  renderBlock
9
8
  } from "./chunk-LNOUXALA.mjs";
@@ -12,49 +11,6 @@ import {
12
11
  siteHeaderManifest
13
12
  } from "./chunk-BYBJA6SP.mjs";
14
13
 
15
- // src/rendering/components/Page.tsx
16
- import { jsx } from "react/jsx-runtime";
17
- function Page({
18
- page,
19
- theme,
20
- themeTokens: providedTokens,
21
- siteId,
22
- resolvedData,
23
- routeMap,
24
- wrapBlock,
25
- registry,
26
- usePlaceholders = false,
27
- blockOverrides,
28
- sdkConfig,
29
- supabaseUrl,
30
- dataContext
31
- }) {
32
- const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;
33
- const themeTokens = sdkConfig?.theme?.palette ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } } : baseTokens;
34
- return /* @__PURE__ */ jsx(
35
- PageRenderer,
36
- {
37
- theme,
38
- page,
39
- themeTokens,
40
- usePlaceholders,
41
- dataContext: {
42
- siteId,
43
- resolvedData,
44
- routes: routeMap,
45
- occurrenceContext: dataContext?.occurrenceContext ?? null,
46
- contentEntry: dataContext?.contentEntry ?? null,
47
- supabaseUrl
48
- },
49
- routeMap,
50
- wrapBlock,
51
- registry,
52
- blockOverrides,
53
- sdkConfig
54
- }
55
- );
56
- }
57
-
58
14
  // src/rendering/components/Layout.tsx
59
15
  import { Fragment, jsxs } from "react/jsx-runtime";
60
16
  async function Layout({
@@ -128,7 +84,6 @@ async function Layout({
128
84
  }
129
85
 
130
86
  export {
131
- Page,
132
87
  Layout
133
88
  };
134
- //# sourceMappingURL=chunk-XXFF4RVR.mjs.map
89
+ //# sourceMappingURL=chunk-RBJFXNDM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/rendering/components/Layout.tsx"],"sourcesContent":["/**\n * Layout component with header and footer\n *\n * Renders site header and footer around content. Fetches site data if not provided.\n */\n\nimport { renderBlock, siteFooterManifest, siteHeaderManifest, buildThemeRuntime } from '@riverbankcms/blocks';\nimport { buildMenu, buildLogo } from '../../navigation';\nimport type { RiverbankClient, SiteResponse } from '../../client/types';\n\nexport type HeaderData = {\n menu: ReturnType<typeof buildMenu>;\n logo: ReturnType<typeof buildLogo>;\n site: SiteResponse['site'];\n theme: SiteResponse['theme'];\n routes: SiteResponse['routes'];\n};\n\nexport type LayoutProps = {\n // Option 1: Pass pre-fetched site data\n siteData?: SiteResponse;\n\n // Option 2: Fetch site data (provide client + identifier)\n client?: RiverbankClient;\n siteId?: string;\n slug?: string;\n domain?: string;\n\n // Content\n children: React.ReactNode;\n\n // Control rendering\n header?: boolean | ((data: HeaderData) => React.ReactNode);\n footer?: boolean;\n\n // Header variant override (if using default header)\n headerVariant?: 'classic' | 'centered' | 'transparent' | 'floating' | 'editorial';\n};\n\n/**\n * Layout component that wraps content with site header and footer.\n *\n * @example With pre-fetched site data (recommended)\n * ```tsx\n * const site = await client.getSite({ slug: 'my-site' });\n *\n * <Layout siteData={site}>\n * <Page {...pageData} />\n * </Layout>\n * ```\n *\n * @example With automatic fetching\n * ```tsx\n * <Layout client={client} slug=\"my-site\">\n * <Page {...pageData} />\n * </Layout>\n * ```\n */\nexport async function Layout({\n siteData: providedSiteData,\n client,\n siteId,\n slug,\n domain,\n children,\n header = true,\n footer = true,\n headerVariant,\n}: LayoutProps) {\n // Fetch site data if not provided\n let siteData = providedSiteData;\n if (!siteData) {\n if (!client) {\n throw new Error('Layout: must provide either siteData or client');\n }\n if (!siteId && !slug && !domain) {\n throw new Error('Layout: must provide siteId, slug, or domain when using client');\n }\n\n siteData = await client.getSite({ id: siteId, slug, domain });\n }\n\n const { site, theme, navigation, layout, routes } = siteData;\n const themeRuntime = buildThemeRuntime(theme);\n\n // Build view models for header/footer\n const menuViewModel = buildMenu(navigation, routes);\n const logoViewModel = buildLogo(layout.logo ?? null, site.title);\n\n // Prepare header data for custom headers\n const headerData: HeaderData = {\n menu: menuViewModel,\n logo: logoViewModel,\n site,\n theme,\n routes,\n };\n\n // Override header variant if specified\n const headerContent = headerVariant\n ? { ...layout.header, variant: headerVariant }\n : layout.header;\n\n // Override theme header variant if specified\n const themeWithVariant = headerVariant\n ? {\n ...theme,\n header: { ...theme.header, variant: headerVariant },\n }\n : theme;\n\n const viewModelOverrides = {\n $root: {\n siteId: site.id,\n routes,\n theme: themeWithVariant,\n },\n site,\n menu: menuViewModel,\n content: {\n logo: logoViewModel,\n },\n };\n\n // Render header based on type\n let headerElement: React.ReactNode = null;\n if (header === true) {\n // Default header rendering\n headerElement = renderBlock(siteHeaderManifest, headerContent, {\n theme: themeRuntime.tokens,\n themeConfig: themeWithVariant,\n viewModelOverrides,\n });\n } else if (typeof header === 'function') {\n // Custom header rendering\n headerElement = header(headerData);\n }\n\n return (\n <>\n {headerElement}\n\n {children}\n\n {footer && renderBlock(siteFooterManifest, layout.footer, {\n theme: themeRuntime.tokens,\n themeConfig: theme,\n viewModelOverrides,\n })}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA2II;AAjFJ,eAAsB,OAAO;AAAA,EAC3B,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT;AACF,GAAgB;AAEd,MAAI,WAAW;AACf,MAAI,CAAC,UAAU;AACb,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,QAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ;AAC/B,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AAEA,eAAW,MAAM,OAAO,QAAQ,EAAE,IAAI,QAAQ,MAAM,OAAO,CAAC;AAAA,EAC9D;AAEA,QAAM,EAAE,MAAM,OAAO,YAAY,QAAQ,OAAO,IAAI;AACpD,QAAM,eAAe,kBAAkB,KAAK;AAG5C,QAAM,gBAAgB,UAAU,YAAY,MAAM;AAClD,QAAM,gBAAgB,UAAU,OAAO,QAAQ,MAAM,KAAK,KAAK;AAG/D,QAAM,aAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,QAAM,gBAAgB,gBAClB,EAAE,GAAG,OAAO,QAAQ,SAAS,cAAc,IAC3C,OAAO;AAGX,QAAM,mBAAmB,gBACrB;AAAA,IACE,GAAG;AAAA,IACH,QAAQ,EAAE,GAAG,MAAM,QAAQ,SAAS,cAAc;AAAA,EACpD,IACA;AAEJ,QAAM,qBAAqB;AAAA,IACzB,OAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AAGA,MAAI,gBAAiC;AACrC,MAAI,WAAW,MAAM;AAEnB,oBAAgB,YAAY,oBAAoB,eAAe;AAAA,MAC7D,OAAO,aAAa;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH,WAAW,OAAO,WAAW,YAAY;AAEvC,oBAAgB,OAAO,UAAU;AAAA,EACnC;AAEA,SACE,iCACG;AAAA;AAAA,IAEA;AAAA,IAEA,UAAU,YAAY,oBAAoB,OAAO,QAAQ;AAAA,MACxD,OAAO,aAAa;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,IACF,CAAC;AAAA,KACH;AAEJ;","names":[]}
@@ -0,0 +1,69 @@
1
+ // src/metadata/generatePageMetadata.ts
2
+ function generatePageMetadata(input) {
3
+ const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
4
+ const pageTitle = overrides?.title ?? page.name;
5
+ const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;
6
+ const description = overrides?.description ?? page.purpose;
7
+ const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;
8
+ const fullUrl = `${siteUrl}${path}`;
9
+ const metadata = {
10
+ title: fullTitle,
11
+ description: description ?? void 0,
12
+ alternates: {
13
+ canonical: canonicalUrl
14
+ },
15
+ openGraph: {
16
+ title: pageTitle,
17
+ description: description ?? void 0,
18
+ url: fullUrl,
19
+ siteName: site.title,
20
+ type: "website",
21
+ ...overrides?.ogImage ? {
22
+ images: [
23
+ {
24
+ url: overrides.ogImage,
25
+ alt: pageTitle
26
+ }
27
+ ]
28
+ } : {}
29
+ },
30
+ twitter: {
31
+ card: "summary_large_image",
32
+ title: pageTitle,
33
+ description: description ?? void 0,
34
+ ...overrides?.ogImage ? {
35
+ images: [overrides.ogImage]
36
+ } : {}
37
+ }
38
+ };
39
+ if (overrides?.robots) {
40
+ metadata.robots = {
41
+ index: overrides.robots.index ?? true,
42
+ follow: overrides.robots.follow ?? true
43
+ };
44
+ }
45
+ if (googleSiteVerification) {
46
+ metadata.verification = {
47
+ google: googleSiteVerification
48
+ };
49
+ }
50
+ return metadata;
51
+ }
52
+ function generatePreviewMetadata(input) {
53
+ return generatePageMetadata({
54
+ ...input,
55
+ overrides: {
56
+ ...input.overrides,
57
+ robots: {
58
+ index: false,
59
+ follow: false
60
+ }
61
+ }
62
+ });
63
+ }
64
+
65
+ export {
66
+ generatePageMetadata,
67
+ generatePreviewMetadata
68
+ };
69
+ //# sourceMappingURL=chunk-SWYWZT3L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/metadata/generatePageMetadata.ts"],"sourcesContent":["/**\n * Metadata generation helper for Next.js pages\n *\n * Generates SEO-optimized metadata from Builder page data for use in\n * Next.js generateMetadata() functions.\n */\n\nimport type { LoadPageResult } from '../rendering/helpers/loadPage';\nimport type { SiteResponse } from '../client/types';\n\n/**\n * Next.js Metadata type\n * Simplified version to avoid requiring Next.js as a dependency\n */\nexport type Metadata = {\n title?: string;\n description?: string;\n alternates?: {\n canonical?: string;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string;\n siteName?: string;\n type?: string;\n images?: Array<{\n url: string;\n alt?: string;\n }>;\n };\n twitter?: {\n card?: string;\n title?: string;\n description?: string;\n images?: string[];\n };\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n verification?: {\n google?: string;\n };\n};\n\nexport type PageMetadataInput = {\n /**\n * Page data from loadPage() or custom page object\n */\n page: LoadPageResult['page'] | {\n name: string;\n purpose?: string;\n };\n\n /**\n * Site data from client.getSite()\n */\n site: SiteResponse['site'];\n\n /**\n * Current URL path (e.g., '/about', '/blog/post-1')\n */\n path: string;\n\n /**\n * Full site URL for canonical and OG URLs\n * Example: 'https://example.com'\n */\n siteUrl: string;\n\n /**\n * Optional custom metadata overrides\n */\n overrides?: {\n title?: string;\n description?: string;\n ogImage?: string;\n canonicalUrl?: string;\n robots?: {\n index?: boolean;\n follow?: boolean;\n };\n };\n\n /**\n * Optional Google site verification token\n */\n googleSiteVerification?: string;\n};\n\n/**\n * Generate Next.js Metadata object from Builder page data\n *\n * @example\n * ```tsx\n * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';\n * import { loadPage } from '@riverbankcms/sdk';\n *\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const siteData = await client.getSite({ id: siteId });\n *\n * return generatePageMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePageMetadata(input: PageMetadataInput): Metadata {\n const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;\n\n // Build page title\n const pageTitle = overrides?.title ?? page.name;\n const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;\n\n // Use page purpose as description fallback\n const description = overrides?.description ?? page.purpose;\n\n // Build full URLs\n const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;\n const fullUrl = `${siteUrl}${path}`;\n\n // Build metadata object\n const metadata: Metadata = {\n title: fullTitle,\n description: description ?? undefined,\n alternates: {\n canonical: canonicalUrl,\n },\n openGraph: {\n title: pageTitle,\n description: description ?? undefined,\n url: fullUrl,\n siteName: site.title,\n type: 'website',\n ...(overrides?.ogImage\n ? {\n images: [\n {\n url: overrides.ogImage,\n alt: pageTitle,\n },\n ],\n }\n : {}),\n },\n twitter: {\n card: 'summary_large_image',\n title: pageTitle,\n description: description ?? undefined,\n ...(overrides?.ogImage\n ? {\n images: [overrides.ogImage],\n }\n : {}),\n },\n };\n\n // Add robots meta if specified\n if (overrides?.robots) {\n metadata.robots = {\n index: overrides.robots.index ?? true,\n follow: overrides.robots.follow ?? true,\n };\n }\n\n // Add Google site verification if provided\n if (googleSiteVerification) {\n metadata.verification = {\n google: googleSiteVerification,\n };\n }\n\n return metadata;\n}\n\n/**\n * Generate metadata for preview/staging environments\n *\n * This helper adds noindex/nofollow robots tags to prevent search engines\n * from indexing preview or staging URLs.\n *\n * @example\n * ```tsx\n * export async function generateMetadata({ params }) {\n * const pageData = await loadPage({ client, siteId, path: params.slug });\n * const isPreview = process.env.VERCEL_ENV !== 'production';\n *\n * return generatePreviewMetadata({\n * page: pageData.page,\n * site: siteData.site,\n * path: params.slug,\n * siteUrl: 'https://example.com',\n * });\n * }\n * ```\n */\nexport function generatePreviewMetadata(input: PageMetadataInput): Metadata {\n return generatePageMetadata({\n ...input,\n overrides: {\n ...input.overrides,\n robots: {\n index: false,\n follow: false,\n },\n },\n });\n}\n"],"mappings":";AAgHO,SAAS,qBAAqB,OAAoC;AACvE,QAAM,EAAE,MAAM,MAAM,MAAM,SAAS,WAAW,uBAAuB,IAAI;AAGzE,QAAM,YAAY,WAAW,SAAS,KAAK;AAC3C,QAAM,YAAY,cAAc,KAAK,QAAQ,YAAY,GAAG,SAAS,MAAM,KAAK,KAAK;AAGrF,QAAM,cAAc,WAAW,eAAe,KAAK;AAGnD,QAAM,eAAe,WAAW,gBAAgB,GAAG,OAAO,GAAG,IAAI;AACjE,QAAM,UAAU,GAAG,OAAO,GAAG,IAAI;AAGjC,QAAM,WAAqB;AAAA,IACzB,OAAO;AAAA,IACP,aAAa,eAAe;AAAA,IAC5B,YAAY;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,aAAa,eAAe;AAAA,MAC5B,KAAK;AAAA,MACL,UAAU,KAAK;AAAA,MACf,MAAM;AAAA,MACN,GAAI,WAAW,UACX;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,KAAK,UAAU;AAAA,YACf,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa,eAAe;AAAA,MAC5B,GAAI,WAAW,UACX;AAAA,QACE,QAAQ,CAAC,UAAU,OAAO;AAAA,MAC5B,IACA,CAAC;AAAA,IACP;AAAA,EACF;AAGA,MAAI,WAAW,QAAQ;AACrB,aAAS,SAAS;AAAA,MAChB,OAAO,UAAU,OAAO,SAAS;AAAA,MACjC,QAAQ,UAAU,OAAO,UAAU;AAAA,IACrC;AAAA,EACF;AAGA,MAAI,wBAAwB;AAC1B,aAAS,eAAe;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;AAuBO,SAAS,wBAAwB,OAAoC;AAC1E,SAAO,qBAAqB;AAAA,IAC1B,GAAG;AAAA,IACH,WAAW;AAAA,MACT,GAAG,MAAM;AAAA,MACT,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunk7UPVCT3Kjs = require('./chunk-7UPVCT3K.js');
5
+
6
+ // src/rendering/components/Page.tsx
7
+ var _jsxruntime = require('react/jsx-runtime');
8
+ function Page({
9
+ page,
10
+ theme,
11
+ themeTokens: providedTokens,
12
+ siteId,
13
+ resolvedData,
14
+ routeMap,
15
+ wrapBlock,
16
+ registry,
17
+ usePlaceholders = false,
18
+ blockOverrides,
19
+ sdkConfig,
20
+ supabaseUrl,
21
+ dataContext
22
+ }) {
23
+ const baseTokens = _nullishCoalesce(providedTokens, () => ( _chunk7UPVCT3Kjs.buildThemeRuntime.call(void 0, theme).tokens));
24
+ const themeTokens = _optionalChain([sdkConfig, 'optionalAccess', _ => _.theme, 'optionalAccess', _2 => _2.palette]) ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } } : baseTokens;
25
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26
+ _chunk7UPVCT3Kjs.PageRenderer,
27
+ {
28
+ theme,
29
+ page,
30
+ themeTokens,
31
+ usePlaceholders,
32
+ dataContext: {
33
+ siteId,
34
+ resolvedData,
35
+ routes: routeMap,
36
+ occurrenceContext: _nullishCoalesce(_optionalChain([dataContext, 'optionalAccess', _3 => _3.occurrenceContext]), () => ( null)),
37
+ contentEntry: _nullishCoalesce(_optionalChain([dataContext, 'optionalAccess', _4 => _4.contentEntry]), () => ( null)),
38
+ supabaseUrl
39
+ },
40
+ routeMap,
41
+ wrapBlock,
42
+ registry,
43
+ blockOverrides,
44
+ sdkConfig
45
+ }
46
+ );
47
+ }
48
+
49
+
50
+
51
+ exports.Page = Page;
52
+ //# sourceMappingURL=chunk-T26N3P26.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-T26N3P26.js","../../src/rendering/components/Page.tsx"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B;AACA;AC0II,+CAAA;AAzBG,SAAS,IAAA,CAAK;AAAA,EACnB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,EAAa,cAAA;AAAA,EACb,MAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA,EAAkB,KAAA;AAAA,EAClB,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAc;AAEZ,EAAA,MAAM,WAAA,mBAAa,cAAA,UAAkB,gDAAA,KAAuB,CAAA,CAAE,QAAA;AAI9D,EAAA,MAAM,YAAA,kBAAc,SAAA,2BAAW,KAAA,6BAAO,UAAA,EAClC,EAAE,GAAG,UAAA,EAAY,OAAA,EAAS,EAAE,GAAG,UAAA,CAAW,OAAA,EAAS,GAAG,SAAA,CAAU,KAAA,CAAM,QAAQ,EAAE,EAAA,EAChF,UAAA;AAEJ,EAAA,uBACE,6BAAA;AAAA,IAAC,6BAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA,EAAQ,QAAA;AAAA,QACR,iBAAA,mCAAmB,WAAA,6BAAa,mBAAA,UAAqB,MAAA;AAAA,QACrD,YAAA,mCAAc,WAAA,6BAAa,cAAA,UAAgB,MAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;ADpHA;AACA;AACE;AACF,oBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-T26N3P26.js","sourcesContent":[null,"/**\n * Pure Page renderer component for Riverbank CMS.\n *\n * This component expects all data to be provided via props.\n * For data fetching, use:\n * - Server-side: `await loadPage({ client, siteId, path })`\n * - Client-side: `usePage({ client, siteId, path })`\n */\n\nimport { PageRenderer, buildThemeRuntime } from '@riverbankcms/blocks';\nimport type { PageOutline, RouteMap, Theme, ThemeTokens, BlockOverrides, OccurrenceContextData } from '@riverbankcms/blocks';\nimport type { ResolvedBlockData } from '../../data';\nimport type { RuntimeSdkConfig } from '../helpers/loadPage';\n\n// Re-export OccurrenceContextData for SDK consumers\nexport type { OccurrenceContextData };\n\nexport type PageProps = {\n // Required data (must be provided by caller)\n page: PageOutline;\n theme: Theme;\n siteId: string;\n\n // Optional data\n themeTokens?: ThemeTokens; // If not provided, will be built from theme\n resolvedData?: ResolvedBlockData; // Pre-fetched block data\n routeMap?: RouteMap;\n /**\n * SDK site configuration containing theme palette overrides.\n * When provided, the SDK palette tokens are merged into the theme tokens,\n * allowing blocks to use SDK-defined color tokens for section backgrounds.\n */\n sdkConfig?: RuntimeSdkConfig | null;\n /**\n * Supabase storage URL for direct image access.\n * SDK sites receive this from the API instead of requiring NEXT_PUBLIC_SUPABASE_URL env var.\n */\n supabaseUrl?: string;\n\n /**\n * Additional context data for content entry pages.\n * Used to pass occurrence context and content entry data to blocks.\n */\n dataContext?: {\n /** Occurrence context for event pages (from URL like /events/yoga/2025-01-15) */\n occurrenceContext?: OccurrenceContextData | null;\n /** Content entry data for template pages */\n contentEntry?: Record<string, unknown> | null;\n };\n\n // Customization\n wrapBlock?: (blockId: string, rendered: React.ReactNode) => React.ReactNode;\n registry?: Parameters<typeof PageRenderer>[0]['registry'];\n usePlaceholders?: boolean;\n /**\n * Custom components to override default block rendering.\n * Keys can be full block kind (\"block.hero\") or short form (\"hero\").\n *\n * This is SSR-safe - no context or hooks required.\n *\n * @example\n * ```tsx\n * <Page\n * {...pageData}\n * blockOverrides={{\n * 'hero': MyCustomHero,\n * 'block.testimonials': MyCustomTestimonials,\n * }}\n * />\n * ```\n */\n blockOverrides?: BlockOverrides;\n};\n\n/**\n * Pure renderer for Riverbank CMS pages.\n *\n * This component expects all data to be provided via props.\n * For data fetching, use:\n * - Server-side: `await loadPage({ client, siteId, path })`\n * - Client-side: `usePage({ client, siteId, path })`\n *\n * @example Server-side (Next.js App Router)\n * ```tsx\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n * import { loadPage, Page } from '@riverbankcms/sdk/rendering';\n *\n * const client = createRiverbankClient({ apiKey, baseUrl });\n *\n * export default async function PageRoute({ params }) {\n * const pageData = await loadPage({\n * client,\n * siteId: 'site-id',\n * path: `/${params.slug}`,\n * });\n *\n * return <Page {...pageData} />;\n * }\n * ```\n *\n * @example Client-side\n * ```tsx\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n * import { usePage, Page } from '@riverbankcms/sdk/rendering';\n *\n * const client = createRiverbankClient({ apiKey, baseUrl });\n *\n * function MyPage({ path }) {\n * const pageData = usePage({ client, siteId: 'site-id', path });\n *\n * if (pageData.loading) return <LoadingState />;\n * if (pageData.error) return <ErrorState error={pageData.error} />;\n * if (!pageData.page) return <NotFound />;\n *\n * return <Page {...pageData} />;\n * }\n * ```\n */\nexport function Page({\n page,\n theme,\n themeTokens: providedTokens,\n siteId,\n resolvedData,\n routeMap,\n wrapBlock,\n registry,\n usePlaceholders = false,\n blockOverrides,\n sdkConfig,\n supabaseUrl,\n dataContext,\n}: PageProps) {\n // Build theme tokens if not provided\n const baseTokens = providedTokens ?? buildThemeRuntime(theme).tokens;\n\n // Merge SDK palette tokens into theme tokens\n // This allows blocks to resolve SDK-defined color tokens (e.g., 'primary' -> '#6d28d9')\n const themeTokens = sdkConfig?.theme?.palette\n ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } }\n : baseTokens;\n\n return (\n <PageRenderer\n theme={theme}\n page={page}\n themeTokens={themeTokens}\n usePlaceholders={usePlaceholders}\n dataContext={{\n siteId,\n resolvedData,\n routes: routeMap,\n occurrenceContext: dataContext?.occurrenceContext ?? null,\n contentEntry: dataContext?.contentEntry ?? null,\n supabaseUrl,\n }}\n routeMap={routeMap}\n wrapBlock={wrapBlock}\n registry={registry}\n blockOverrides={blockOverrides}\n sdkConfig={sdkConfig}\n />\n );\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
-
4
- var _chunk3B364WO2js = require('./chunk-3B364WO2.js');
3
+ var _chunk7BVRA5MYjs = require('./chunk-7BVRA5MY.js');
5
4
  require('./chunk-EIVISR62.js');
6
5
 
7
6
 
7
+ var _chunkT26N3P26js = require('./chunk-T26N3P26.js');
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -22,5 +24,5 @@ require('./chunk-DGUM43GV.js');
22
24
 
23
25
 
24
26
 
25
- exports.Layout = _chunk3B364WO2js.Layout; exports.Page = _chunk3B364WO2js.Page; exports.PageRenderer = _chunk7UPVCT3Kjs.PageRenderer; exports.RichText = _chunk7UPVCT3Kjs.RichText; exports.SectionBackground = _chunk7UPVCT3Kjs.SectionBackground; exports.buildThemeRuntime = _chunk7UPVCT3Kjs.buildThemeRuntime; exports.resolveBackground = _chunk7UPVCT3Kjs.resolveBackground; exports.resolveImageUrl = _chunk7UPVCT3Kjs.resolveImageUrl;
27
+ exports.Layout = _chunk7BVRA5MYjs.Layout; exports.Page = _chunkT26N3P26js.Page; exports.PageRenderer = _chunk7UPVCT3Kjs.PageRenderer; exports.RichText = _chunk7UPVCT3Kjs.RichText; exports.SectionBackground = _chunk7UPVCT3Kjs.SectionBackground; exports.buildThemeRuntime = _chunk7UPVCT3Kjs.buildThemeRuntime; exports.resolveBackground = _chunk7UPVCT3Kjs.resolveBackground; exports.resolveImageUrl = _chunk7UPVCT3Kjs.resolveImageUrl;
26
28
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/components.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+aAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/components.js"}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/components.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+aAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/components.js"}
@@ -1,8 +1,10 @@
1
1
  import {
2
- Layout,
3
- Page
4
- } from "./chunk-XXFF4RVR.mjs";
2
+ Layout
3
+ } from "./chunk-RBJFXNDM.mjs";
5
4
  import "./chunk-YXA4GAAQ.mjs";
5
+ import {
6
+ Page
7
+ } from "./chunk-ARNCLSQT.mjs";
6
8
  import {
7
9
  PageRenderer,
8
10
  RichText,
@@ -0,0 +1,130 @@
1
+ import { a as LoadPageResult } from './loadPage-DP3nrHBi.js';
2
+ import { S as SiteResponse } from './types-BvcJU7zk.js';
3
+
4
+ /**
5
+ * Metadata generation helper for Next.js pages
6
+ *
7
+ * Generates SEO-optimized metadata from Builder page data for use in
8
+ * Next.js generateMetadata() functions.
9
+ */
10
+
11
+ /**
12
+ * Next.js Metadata type
13
+ * Simplified version to avoid requiring Next.js as a dependency
14
+ */
15
+ type Metadata = {
16
+ title?: string;
17
+ description?: string;
18
+ alternates?: {
19
+ canonical?: string;
20
+ };
21
+ openGraph?: {
22
+ title?: string;
23
+ description?: string;
24
+ url?: string;
25
+ siteName?: string;
26
+ type?: string;
27
+ images?: Array<{
28
+ url: string;
29
+ alt?: string;
30
+ }>;
31
+ };
32
+ twitter?: {
33
+ card?: string;
34
+ title?: string;
35
+ description?: string;
36
+ images?: string[];
37
+ };
38
+ robots?: {
39
+ index?: boolean;
40
+ follow?: boolean;
41
+ };
42
+ verification?: {
43
+ google?: string;
44
+ };
45
+ };
46
+ type PageMetadataInput = {
47
+ /**
48
+ * Page data from loadPage() or custom page object
49
+ */
50
+ page: LoadPageResult['page'] | {
51
+ name: string;
52
+ purpose?: string;
53
+ };
54
+ /**
55
+ * Site data from client.getSite()
56
+ */
57
+ site: SiteResponse['site'];
58
+ /**
59
+ * Current URL path (e.g., '/about', '/blog/post-1')
60
+ */
61
+ path: string;
62
+ /**
63
+ * Full site URL for canonical and OG URLs
64
+ * Example: 'https://example.com'
65
+ */
66
+ siteUrl: string;
67
+ /**
68
+ * Optional custom metadata overrides
69
+ */
70
+ overrides?: {
71
+ title?: string;
72
+ description?: string;
73
+ ogImage?: string;
74
+ canonicalUrl?: string;
75
+ robots?: {
76
+ index?: boolean;
77
+ follow?: boolean;
78
+ };
79
+ };
80
+ /**
81
+ * Optional Google site verification token
82
+ */
83
+ googleSiteVerification?: string;
84
+ };
85
+ /**
86
+ * Generate Next.js Metadata object from Builder page data
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';
91
+ * import { loadPage } from '@riverbankcms/sdk';
92
+ *
93
+ * export async function generateMetadata({ params }) {
94
+ * const pageData = await loadPage({ client, siteId, path: params.slug });
95
+ * const siteData = await client.getSite({ id: siteId });
96
+ *
97
+ * return generatePageMetadata({
98
+ * page: pageData.page,
99
+ * site: siteData.site,
100
+ * path: params.slug,
101
+ * siteUrl: 'https://example.com',
102
+ * });
103
+ * }
104
+ * ```
105
+ */
106
+ declare function generatePageMetadata(input: PageMetadataInput): Metadata;
107
+ /**
108
+ * Generate metadata for preview/staging environments
109
+ *
110
+ * This helper adds noindex/nofollow robots tags to prevent search engines
111
+ * from indexing preview or staging URLs.
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * export async function generateMetadata({ params }) {
116
+ * const pageData = await loadPage({ client, siteId, path: params.slug });
117
+ * const isPreview = process.env.VERCEL_ENV !== 'production';
118
+ *
119
+ * return generatePreviewMetadata({
120
+ * page: pageData.page,
121
+ * site: siteData.site,
122
+ * path: params.slug,
123
+ * siteUrl: 'https://example.com',
124
+ * });
125
+ * }
126
+ * ```
127
+ */
128
+ declare function generatePreviewMetadata(input: PageMetadataInput): Metadata;
129
+
130
+ export { type Metadata as M, type PageMetadataInput as P, generatePreviewMetadata as a, generatePageMetadata as g };
@@ -0,0 +1,130 @@
1
+ import { a as LoadPageResult } from './loadPage-B8mQUUSo.mjs';
2
+ import { S as SiteResponse } from './types-1cLz0vnq.mjs';
3
+
4
+ /**
5
+ * Metadata generation helper for Next.js pages
6
+ *
7
+ * Generates SEO-optimized metadata from Builder page data for use in
8
+ * Next.js generateMetadata() functions.
9
+ */
10
+
11
+ /**
12
+ * Next.js Metadata type
13
+ * Simplified version to avoid requiring Next.js as a dependency
14
+ */
15
+ type Metadata = {
16
+ title?: string;
17
+ description?: string;
18
+ alternates?: {
19
+ canonical?: string;
20
+ };
21
+ openGraph?: {
22
+ title?: string;
23
+ description?: string;
24
+ url?: string;
25
+ siteName?: string;
26
+ type?: string;
27
+ images?: Array<{
28
+ url: string;
29
+ alt?: string;
30
+ }>;
31
+ };
32
+ twitter?: {
33
+ card?: string;
34
+ title?: string;
35
+ description?: string;
36
+ images?: string[];
37
+ };
38
+ robots?: {
39
+ index?: boolean;
40
+ follow?: boolean;
41
+ };
42
+ verification?: {
43
+ google?: string;
44
+ };
45
+ };
46
+ type PageMetadataInput = {
47
+ /**
48
+ * Page data from loadPage() or custom page object
49
+ */
50
+ page: LoadPageResult['page'] | {
51
+ name: string;
52
+ purpose?: string;
53
+ };
54
+ /**
55
+ * Site data from client.getSite()
56
+ */
57
+ site: SiteResponse['site'];
58
+ /**
59
+ * Current URL path (e.g., '/about', '/blog/post-1')
60
+ */
61
+ path: string;
62
+ /**
63
+ * Full site URL for canonical and OG URLs
64
+ * Example: 'https://example.com'
65
+ */
66
+ siteUrl: string;
67
+ /**
68
+ * Optional custom metadata overrides
69
+ */
70
+ overrides?: {
71
+ title?: string;
72
+ description?: string;
73
+ ogImage?: string;
74
+ canonicalUrl?: string;
75
+ robots?: {
76
+ index?: boolean;
77
+ follow?: boolean;
78
+ };
79
+ };
80
+ /**
81
+ * Optional Google site verification token
82
+ */
83
+ googleSiteVerification?: string;
84
+ };
85
+ /**
86
+ * Generate Next.js Metadata object from Builder page data
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * import { generatePageMetadata } from '@riverbankcms/sdk/metadata';
91
+ * import { loadPage } from '@riverbankcms/sdk';
92
+ *
93
+ * export async function generateMetadata({ params }) {
94
+ * const pageData = await loadPage({ client, siteId, path: params.slug });
95
+ * const siteData = await client.getSite({ id: siteId });
96
+ *
97
+ * return generatePageMetadata({
98
+ * page: pageData.page,
99
+ * site: siteData.site,
100
+ * path: params.slug,
101
+ * siteUrl: 'https://example.com',
102
+ * });
103
+ * }
104
+ * ```
105
+ */
106
+ declare function generatePageMetadata(input: PageMetadataInput): Metadata;
107
+ /**
108
+ * Generate metadata for preview/staging environments
109
+ *
110
+ * This helper adds noindex/nofollow robots tags to prevent search engines
111
+ * from indexing preview or staging URLs.
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * export async function generateMetadata({ params }) {
116
+ * const pageData = await loadPage({ client, siteId, path: params.slug });
117
+ * const isPreview = process.env.VERCEL_ENV !== 'production';
118
+ *
119
+ * return generatePreviewMetadata({
120
+ * page: pageData.page,
121
+ * site: siteData.site,
122
+ * path: params.slug,
123
+ * siteUrl: 'https://example.com',
124
+ * });
125
+ * }
126
+ * ```
127
+ */
128
+ declare function generatePreviewMetadata(input: PageMetadataInput): Metadata;
129
+
130
+ export { type Metadata as M, type PageMetadataInput as P, generatePreviewMetadata as a, generatePageMetadata as g };
@@ -5,7 +5,7 @@ var _chunkGERCMTPQjs = require('./chunk-GERCMTPQ.js');
5
5
 
6
6
 
7
7
 
8
- var _chunkIVHIQFJHjs = require('./chunk-IVHIQFJH.js');
8
+ var _chunkP7UVAMK6js = require('./chunk-P7UVAMK6.js');
9
9
  require('./chunk-DGUM43GV.js');
10
10
 
11
11
  // ../api/src/aiPlayground.ts
@@ -101,5 +101,5 @@ var MultiPageUpdateResponse = _zod.z.object({
101
101
 
102
102
 
103
103
 
104
- exports.API_ENDPOINTS = _chunkIVHIQFJHjs.API_ENDPOINTS; exports.SYSTEM_BLOCK_KINDS = _chunkGERCMTPQjs.SYSTEM_BLOCK_KINDS; exports.buildEndpointURL = _chunkIVHIQFJHjs.buildEndpointURL; exports.createRiverbankClient = _chunkIVHIQFJHjs.createRiverbankClient;
104
+ exports.API_ENDPOINTS = _chunkP7UVAMK6js.API_ENDPOINTS; exports.SYSTEM_BLOCK_KINDS = _chunkGERCMTPQjs.SYSTEM_BLOCK_KINDS; exports.buildEndpointURL = _chunkP7UVAMK6js.buildEndpointURL; exports.createRiverbankClient = _chunkP7UVAMK6js.createRiverbankClient;
105
105
  //# sourceMappingURL=index.js.map
@@ -5,7 +5,7 @@ import {
5
5
  API_ENDPOINTS,
6
6
  buildEndpointURL,
7
7
  createRiverbankClient
8
- } from "./chunk-I7ZR2WO3.mjs";
8
+ } from "./chunk-7FIJSGHU.mjs";
9
9
  import "./chunk-BJTO5JO5.mjs";
10
10
 
11
11
  // ../api/src/aiPlayground.ts
@@ -1,6 +1,6 @@
1
1
  import { T as Theme } from './types-Dsu9wsUh.mjs';
2
2
  import './schema-Z6-afHJG.mjs';
3
- import { R as RiverbankClient } from './types-1cLz0vnq.mjs';
3
+ import { R as RiverbankClient, S as SiteResponse } from './types-1cLz0vnq.mjs';
4
4
  import { P as PageProps } from './loadPage-B8mQUUSo.mjs';
5
5
  import { R as ResolvedBlockData } from './types-CbagRQ_7.mjs';
6
6
 
@@ -11,6 +11,10 @@ import { R as ResolvedBlockData } from './types-CbagRQ_7.mjs';
11
11
  * a page or a content entry.
12
12
  */
13
13
 
14
+ /**
15
+ * Site data included in content results for metadata generation.
16
+ */
17
+ type SiteData = SiteResponse['site'];
14
18
  type LoadContentParams = {
15
19
  client: RiverbankClient;
16
20
  siteId: string;
@@ -56,6 +60,8 @@ type PageContentResult = {
56
60
  siteId: string;
57
61
  /** Pre-fetched block data for data loaders */
58
62
  resolvedData: ResolvedBlockData;
63
+ /** Site data for metadata generation */
64
+ site: SiteData;
59
65
  };
60
66
  /**
61
67
  * Result when path resolves to a content entry
@@ -76,6 +82,8 @@ type EntryContentResult = {
76
82
  theme: Theme;
77
83
  /** Site ID */
78
84
  siteId: string;
85
+ /** Site data for metadata generation */
86
+ site: SiteData;
79
87
  };
80
88
  /**
81
89
  * Discriminated union result from loadContent
@@ -150,4 +158,4 @@ declare function isEntryContent(result: LoadContentResult): result is EntryConte
150
158
  */
151
159
  declare function loadContent(params: LoadContentParams): Promise<LoadContentResult>;
152
160
 
153
- export { type ContentEntryData as C, type EntryContentResult as E, type LoadContentParams as L, type PageContentResult as P, isEntryContent as a, type LoadContentResult as b, isPageContent as i, loadContent as l };
161
+ export { type ContentEntryData as C, type EntryContentResult as E, type LoadContentParams as L, type PageContentResult as P, type SiteData as S, isEntryContent as a, type LoadContentResult as b, isPageContent as i, loadContent as l };
@@ -1,6 +1,6 @@
1
1
  import { T as Theme } from './types-CVykEqXN.js';
2
2
  import './schema-Z6-afHJG.js';
3
- import { R as RiverbankClient } from './types-BvcJU7zk.js';
3
+ import { R as RiverbankClient, S as SiteResponse } from './types-BvcJU7zk.js';
4
4
  import { P as PageProps } from './loadPage-DP3nrHBi.js';
5
5
  import { R as ResolvedBlockData } from './types-DuQCNVV0.js';
6
6
 
@@ -11,6 +11,10 @@ import { R as ResolvedBlockData } from './types-DuQCNVV0.js';
11
11
  * a page or a content entry.
12
12
  */
13
13
 
14
+ /**
15
+ * Site data included in content results for metadata generation.
16
+ */
17
+ type SiteData = SiteResponse['site'];
14
18
  type LoadContentParams = {
15
19
  client: RiverbankClient;
16
20
  siteId: string;
@@ -56,6 +60,8 @@ type PageContentResult = {
56
60
  siteId: string;
57
61
  /** Pre-fetched block data for data loaders */
58
62
  resolvedData: ResolvedBlockData;
63
+ /** Site data for metadata generation */
64
+ site: SiteData;
59
65
  };
60
66
  /**
61
67
  * Result when path resolves to a content entry
@@ -76,6 +82,8 @@ type EntryContentResult = {
76
82
  theme: Theme;
77
83
  /** Site ID */
78
84
  siteId: string;
85
+ /** Site data for metadata generation */
86
+ site: SiteData;
79
87
  };
80
88
  /**
81
89
  * Discriminated union result from loadContent
@@ -150,4 +158,4 @@ declare function isEntryContent(result: LoadContentResult): result is EntryConte
150
158
  */
151
159
  declare function loadContent(params: LoadContentParams): Promise<LoadContentResult>;
152
160
 
153
- export { type ContentEntryData as C, type EntryContentResult as E, type LoadContentParams as L, type PageContentResult as P, isEntryContent as a, type LoadContentResult as b, isPageContent as i, loadContent as l };
161
+ export { type ContentEntryData as C, type EntryContentResult as E, type LoadContentParams as L, type PageContentResult as P, type SiteData as S, isEntryContent as a, type LoadContentResult as b, isPageContent as i, loadContent as l };