@riverbankcms/sdk 0.2.0 → 0.3.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 (184) hide show
  1. package/dist/cli/index.js +4840 -9
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/client/bookings.d.mts +82 -2
  4. package/dist/client/bookings.d.ts +82 -2
  5. package/dist/client/bookings.js +1623 -3
  6. package/dist/client/bookings.js.map +1 -1
  7. package/dist/client/bookings.mjs +1610 -5
  8. package/dist/client/bookings.mjs.map +1 -1
  9. package/dist/client/client.d.mts +8 -5
  10. package/dist/client/client.d.ts +8 -5
  11. package/dist/client/client.js +16873 -322
  12. package/dist/client/client.js.map +1 -1
  13. package/dist/client/client.mjs +16855 -307
  14. package/dist/client/client.mjs.map +1 -1
  15. package/dist/client/hooks.d.mts +10 -7
  16. package/dist/client/hooks.d.ts +10 -7
  17. package/dist/client/hooks.js +5074 -4
  18. package/dist/client/hooks.js.map +1 -1
  19. package/dist/client/hooks.mjs +5074 -4
  20. package/dist/client/hooks.mjs.map +1 -1
  21. package/dist/client/rendering/client.d.mts +7 -1
  22. package/dist/client/rendering/client.d.ts +7 -1
  23. package/dist/client/rendering/client.js +17388 -2
  24. package/dist/client/rendering/client.js.map +1 -1
  25. package/dist/client/rendering/client.mjs +17382 -2
  26. package/dist/client/rendering/client.mjs.map +1 -1
  27. package/dist/client/resolver-BhueZVxZ.d.mts +61 -0
  28. package/dist/client/resolver-BhueZVxZ.d.ts +61 -0
  29. package/dist/client/usePage-BBcFCxOU.d.ts +6297 -0
  30. package/dist/client/usePage-BydHcMYB.d.mts +6297 -0
  31. package/dist/client/usePage-CrKw1H6Y.d.ts +6338 -0
  32. package/dist/client/usePage-DMI8ImsU.d.mts +6338 -0
  33. package/dist/server/Layout-BM_KmCxO.d.ts +44 -0
  34. package/dist/server/Layout-CsAQ-0Fv.d.mts +44 -0
  35. package/dist/server/{chunk-JB4LIEFS.js → chunk-5R4NMVXA.js} +15 -8
  36. package/dist/server/chunk-5R4NMVXA.js.map +1 -0
  37. package/dist/server/{chunk-ADREPXFU.js → chunk-62ZJI564.js} +3 -3
  38. package/dist/server/{chunk-ADREPXFU.js.map → chunk-62ZJI564.js.map} +1 -1
  39. package/dist/server/chunk-7DS4Q3GA.mjs +333 -0
  40. package/dist/server/chunk-7DS4Q3GA.mjs.map +1 -0
  41. package/dist/server/chunk-BJTO5JO5.mjs +11 -0
  42. package/dist/server/{chunk-4Z5FBFRL.mjs → chunk-BPKYRPCQ.mjs} +7 -3
  43. package/dist/server/{chunk-4Z5FBFRL.mjs.map → chunk-BPKYRPCQ.mjs.map} +1 -1
  44. package/dist/server/chunk-DGUM43GV.js +11 -0
  45. package/dist/server/chunk-DGUM43GV.js.map +1 -0
  46. package/dist/server/chunk-EGTDJ4PL.js +5461 -0
  47. package/dist/server/chunk-EGTDJ4PL.js.map +1 -0
  48. package/dist/server/chunk-FK64TZBT.mjs +831 -0
  49. package/dist/server/chunk-FK64TZBT.mjs.map +1 -0
  50. package/dist/server/chunk-HOY77YBF.js +333 -0
  51. package/dist/server/chunk-HOY77YBF.js.map +1 -0
  52. package/dist/server/chunk-INWKF3IC.js +831 -0
  53. package/dist/server/chunk-INWKF3IC.js.map +1 -0
  54. package/dist/server/{chunk-2RW5HAQQ.mjs → chunk-JTAERCX2.mjs} +2 -2
  55. package/dist/server/chunk-O5DC7MYW.mjs +9606 -0
  56. package/dist/server/chunk-O5DC7MYW.mjs.map +1 -0
  57. package/dist/server/{chunk-PEAXKTDU.mjs → chunk-OP2GHK27.mjs} +2 -2
  58. package/dist/server/{chunk-WKG57P2H.mjs → chunk-PN3CHDVX.mjs} +10 -3
  59. package/dist/server/{chunk-WKG57P2H.mjs.map → chunk-PN3CHDVX.mjs.map} +1 -1
  60. package/dist/server/chunk-QFFQTOY3.mjs +2128 -0
  61. package/dist/server/chunk-QFFQTOY3.mjs.map +1 -0
  62. package/dist/server/chunk-SF63XAX7.js +9606 -0
  63. package/dist/server/chunk-SF63XAX7.js.map +1 -0
  64. package/dist/server/{chunk-F472SMKX.js → chunk-TO7FD6TQ.js} +4 -4
  65. package/dist/server/{chunk-F472SMKX.js.map → chunk-TO7FD6TQ.js.map} +1 -1
  66. package/dist/server/chunk-UFVCBGBY.js +2128 -0
  67. package/dist/server/chunk-UFVCBGBY.js.map +1 -0
  68. package/dist/server/chunk-USQF2XTU.mjs +5461 -0
  69. package/dist/server/chunk-USQF2XTU.mjs.map +1 -0
  70. package/dist/server/{chunk-SW7LE4M3.js → chunk-XLVL5WPH.js} +12 -8
  71. package/dist/server/chunk-XLVL5WPH.js.map +1 -0
  72. package/dist/server/components-CI3JiOYA.d.mts +305 -0
  73. package/dist/server/components-DJBLu_yc.d.ts +305 -0
  74. package/dist/server/components.d.mts +14 -49
  75. package/dist/server/components.d.ts +14 -49
  76. package/dist/server/components.js +7 -4
  77. package/dist/server/components.js.map +1 -1
  78. package/dist/server/components.mjs +9 -6
  79. package/dist/server/components.mjs.map +1 -1
  80. package/dist/server/config-validation.d.mts +2 -2
  81. package/dist/server/config-validation.d.ts +2 -2
  82. package/dist/server/config-validation.js +6 -3
  83. package/dist/server/config-validation.js.map +1 -1
  84. package/dist/server/config-validation.mjs +5 -2
  85. package/dist/server/config.d.mts +3 -3
  86. package/dist/server/config.d.ts +3 -3
  87. package/dist/server/config.js +6 -3
  88. package/dist/server/config.js.map +1 -1
  89. package/dist/server/config.mjs +5 -2
  90. package/dist/server/config.mjs.map +1 -1
  91. package/dist/server/data.d.mts +10 -8
  92. package/dist/server/data.d.ts +10 -8
  93. package/dist/server/data.js +4 -2
  94. package/dist/server/data.js.map +1 -1
  95. package/dist/server/data.mjs +3 -1
  96. package/dist/server/{index-B0yI_V6Z.d.mts → index-DoX3ELQn.d.mts} +1 -1
  97. package/dist/server/{index-C6M0Wfjq.d.ts → index-Dus2gkY6.d.ts} +1 -1
  98. package/dist/server/index.d.mts +1568 -5
  99. package/dist/server/index.d.ts +1568 -5
  100. package/dist/server/index.js +4 -4
  101. package/dist/server/index.js.map +1 -1
  102. package/dist/server/index.mjs +4 -4
  103. package/dist/server/index.mjs.map +1 -1
  104. package/dist/server/{loadContent-CJcbYF3J.d.ts → loadContent-CdXDGsJM.d.ts} +5 -4
  105. package/dist/server/{loadContent-zhlL4YSE.d.mts → loadContent-v2n6pOlO.d.mts} +5 -4
  106. package/dist/server/loadPage-3ECPF426.js +11 -0
  107. package/dist/server/loadPage-3ECPF426.js.map +1 -0
  108. package/dist/server/loadPage-LW273NYO.mjs +11 -0
  109. package/dist/server/loadPage-LW273NYO.mjs.map +1 -0
  110. package/dist/server/{loadPage-CCf15nt8.d.mts → loadPage-bejlajm9.d.ts} +147 -5
  111. package/dist/server/{loadPage-BYmVMk0V.d.ts → loadPage-en10WQrt.d.mts} +147 -5
  112. package/dist/server/metadata.d.mts +10 -6
  113. package/dist/server/metadata.d.ts +10 -6
  114. package/dist/server/metadata.js +3 -1
  115. package/dist/server/metadata.js.map +1 -1
  116. package/dist/server/metadata.mjs +2 -0
  117. package/dist/server/metadata.mjs.map +1 -1
  118. package/dist/server/navigation.d.mts +100 -0
  119. package/dist/server/navigation.d.ts +100 -0
  120. package/dist/server/navigation.js +44 -0
  121. package/dist/server/navigation.js.map +1 -0
  122. package/dist/server/navigation.mjs +44 -0
  123. package/dist/server/navigation.mjs.map +1 -0
  124. package/dist/server/rendering/server.d.mts +10 -7
  125. package/dist/server/rendering/server.d.ts +10 -7
  126. package/dist/server/rendering/server.js +7 -4
  127. package/dist/server/rendering/server.js.map +1 -1
  128. package/dist/server/rendering/server.mjs +6 -3
  129. package/dist/server/rendering.d.mts +173 -9
  130. package/dist/server/rendering.d.ts +173 -9
  131. package/dist/server/rendering.js +12 -9
  132. package/dist/server/rendering.js.map +1 -1
  133. package/dist/server/rendering.mjs +14 -11
  134. package/dist/server/rendering.mjs.map +1 -1
  135. package/dist/server/routing.d.mts +10 -6
  136. package/dist/server/routing.d.ts +10 -6
  137. package/dist/server/routing.js +4 -2
  138. package/dist/server/routing.js.map +1 -1
  139. package/dist/server/routing.mjs +3 -1
  140. package/dist/server/routing.mjs.map +1 -1
  141. package/dist/server/schema-Bpy9N5ZI.d.mts +1870 -0
  142. package/dist/server/schema-Bpy9N5ZI.d.ts +1870 -0
  143. package/dist/server/server.d.mts +12 -8
  144. package/dist/server/server.d.ts +12 -8
  145. package/dist/server/server.js +7 -5
  146. package/dist/server/server.js.map +1 -1
  147. package/dist/server/server.mjs +6 -4
  148. package/dist/server/theme-bridge.js +13 -10
  149. package/dist/server/theme-bridge.js.map +1 -1
  150. package/dist/server/theme-bridge.mjs +10 -7
  151. package/dist/server/theme-bridge.mjs.map +1 -1
  152. package/dist/server/theme.js +3 -1
  153. package/dist/server/theme.js.map +1 -1
  154. package/dist/server/theme.mjs +2 -0
  155. package/dist/server/theme.mjs.map +1 -1
  156. package/dist/server/{types-BCeqWtI2.d.mts → types-Bq3520hK.d.mts} +3 -3
  157. package/dist/server/{types-C6gmRHLe.d.mts → types-CLusapsM.d.mts} +1 -1
  158. package/dist/server/types-Cc7lyPkN.d.ts +4043 -0
  159. package/dist/server/{types-BCeqWtI2.d.ts → types-D-rqOU5I.d.ts} +3 -3
  160. package/dist/server/{types-C6gmRHLe.d.ts → types-Ls6BkLKg.d.ts} +1 -1
  161. package/dist/server/{types-Bbo01M7P.d.mts → types-_nDnPHpv.d.mts} +27 -1
  162. package/dist/server/{types-Bbo01M7P.d.ts → types-_nDnPHpv.d.ts} +27 -1
  163. package/dist/server/types-nVerjjdv.d.mts +4043 -0
  164. package/package.json +22 -17
  165. package/dist/server/chunk-3KKZVGH4.mjs +0 -179
  166. package/dist/server/chunk-3KKZVGH4.mjs.map +0 -1
  167. package/dist/server/chunk-4Z3GPTCS.js +0 -179
  168. package/dist/server/chunk-4Z3GPTCS.js.map +0 -1
  169. package/dist/server/chunk-JB4LIEFS.js.map +0 -1
  170. package/dist/server/chunk-QQ6U4QX6.js +0 -120
  171. package/dist/server/chunk-QQ6U4QX6.js.map +0 -1
  172. package/dist/server/chunk-R5YGLRUG.mjs +0 -122
  173. package/dist/server/chunk-R5YGLRUG.mjs.map +0 -1
  174. package/dist/server/chunk-SW7LE4M3.js.map +0 -1
  175. package/dist/server/chunk-W3K7LVPS.mjs +0 -120
  176. package/dist/server/chunk-W3K7LVPS.mjs.map +0 -1
  177. package/dist/server/chunk-YHEZMVTS.js +0 -122
  178. package/dist/server/chunk-YHEZMVTS.js.map +0 -1
  179. package/dist/server/loadPage-DVH3DW6E.js +0 -9
  180. package/dist/server/loadPage-DVH3DW6E.js.map +0 -1
  181. package/dist/server/loadPage-PHQZ6XQZ.mjs +0 -9
  182. /package/dist/server/{loadPage-PHQZ6XQZ.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
  183. /package/dist/server/{chunk-2RW5HAQQ.mjs.map → chunk-JTAERCX2.mjs.map} +0 -0
  184. /package/dist/server/{chunk-PEAXKTDU.mjs.map → chunk-OP2GHK27.mjs.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk4Z3GPTCSjs = require('./chunk-4Z3GPTCS.js');
4
3
 
5
- // src/index.ts
6
- var _api = require('@riverbankcms/api');
7
4
 
5
+ var _chunkUFVCBGBYjs = require('./chunk-UFVCBGBY.js');
6
+ require('./chunk-DGUM43GV.js');
8
7
 
9
8
 
10
9
 
11
- exports.API_ENDPOINTS = _api.API_ENDPOINTS; exports.buildEndpointURL = _api.buildEndpointURL; exports.createRiverbankClient = _chunk4Z3GPTCSjs.createRiverbankClient;
10
+
11
+ exports.API_ENDPOINTS = _chunkUFVCBGBYjs.API_ENDPOINTS; exports.buildEndpointURL = _chunkUFVCBGBYjs.buildEndpointURL; exports.createRiverbankClient = _chunkUFVCBGBYjs.createRiverbankClient;
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/index.js","../../src/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;AC+BA,wCAAgD;AD7BhD;AACE;AACA;AACA;AACF,qKAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/index.js","sourcesContent":[null,"/**\n * Riverbank CMS SDK\n *\n * A TypeScript SDK for consuming Riverbank CMS content in your own applications.\n *\n * @example\n * ```ts\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n *\n * const client = createRiverbankClient({\n * apiKey: process.env.RIVERBANK_API_KEY!,\n * baseUrl: `${process.env.NEXT_PUBLIC_DASHBOARD_URL}/api`,\n * });\n *\n * const site = await client.getSite({ slug: 'my-site' });\n * ```\n *\n * @packageDocumentation\n */\n\n// Client factory and types (server-safe)\nexport { createRiverbankClient } from './client/index';\nexport type {\n RiverbankClient,\n RiverbankClientConfig,\n SiteResponse,\n PageResponse,\n EntriesResponse,\n EntryResponse,\n} from './client/types';\n\n// Re-export API client type for convenience\nexport type { ApiClient } from '@riverbankcms/api';\n\n// Re-export endpoint utilities for building API URLs\nexport { buildEndpointURL, API_ENDPOINTS } from '@riverbankcms/api';\n\n// Note: For loadPage, Page, Layout, Block, import from '@riverbankcms/sdk/rendering'\n// Note: For client-side hooks (usePage, useContent), import from '@riverbankcms/sdk/client'\n\n// Site configuration types (for SDK sites defining their own config)\nexport type {\n RiverbankSiteConfig,\n SiteStyleConfig,\n SectionBackground,\n SectionOptionsConfig,\n ContainerOptionsConfig,\n SectionSpacing,\n ContainerMaxWidth,\n ContainerAlignment,\n} from './config';\n"]}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACF,6LAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/index.js"}
@@ -1,9 +1,9 @@
1
1
  import {
2
+ API_ENDPOINTS,
3
+ buildEndpointURL,
2
4
  createRiverbankClient
3
- } from "./chunk-3KKZVGH4.mjs";
4
-
5
- // src/index.ts
6
- import { buildEndpointURL, API_ENDPOINTS } from "@riverbankcms/api";
5
+ } from "./chunk-QFFQTOY3.mjs";
6
+ import "./chunk-BJTO5JO5.mjs";
7
7
  export {
8
8
  API_ENDPOINTS,
9
9
  buildEndpointURL,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["/**\n * Riverbank CMS SDK\n *\n * A TypeScript SDK for consuming Riverbank CMS content in your own applications.\n *\n * @example\n * ```ts\n * import { createRiverbankClient } from '@riverbankcms/sdk';\n *\n * const client = createRiverbankClient({\n * apiKey: process.env.RIVERBANK_API_KEY!,\n * baseUrl: `${process.env.NEXT_PUBLIC_DASHBOARD_URL}/api`,\n * });\n *\n * const site = await client.getSite({ slug: 'my-site' });\n * ```\n *\n * @packageDocumentation\n */\n\n// Client factory and types (server-safe)\nexport { createRiverbankClient } from './client/index';\nexport type {\n RiverbankClient,\n RiverbankClientConfig,\n SiteResponse,\n PageResponse,\n EntriesResponse,\n EntryResponse,\n} from './client/types';\n\n// Re-export API client type for convenience\nexport type { ApiClient } from '@riverbankcms/api';\n\n// Re-export endpoint utilities for building API URLs\nexport { buildEndpointURL, API_ENDPOINTS } from '@riverbankcms/api';\n\n// Note: For loadPage, Page, Layout, Block, import from '@riverbankcms/sdk/rendering'\n// Note: For client-side hooks (usePage, useContent), import from '@riverbankcms/sdk/client'\n\n// Site configuration types (for SDK sites defining their own config)\nexport type {\n RiverbankSiteConfig,\n SiteStyleConfig,\n SectionBackground,\n SectionOptionsConfig,\n ContainerOptionsConfig,\n SectionSpacing,\n ContainerMaxWidth,\n ContainerAlignment,\n} from './config';\n"],"mappings":";;;;;AAmCA,SAAS,kBAAkB,qBAAqB;","names":[]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,7 +1,8 @@
1
- import { Theme } from '@riverbankcms/blocks';
2
- import { R as RiverbankClient } from './types-C6gmRHLe.js';
3
- import { b as PageProps } from './loadPage-BYmVMk0V.js';
4
- import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
1
+ import { T as Theme } from './types-Cc7lyPkN.js';
2
+ import './schema-Bpy9N5ZI.js';
3
+ import { R as RiverbankClient } from './types-Ls6BkLKg.js';
4
+ import { P as PageProps } from './loadPage-bejlajm9.js';
5
+ import { R as ResolvedBlockData } from './types-_nDnPHpv.js';
5
6
 
6
7
  /**
7
8
  * Server-side helper to fetch content (page or entry) by path.
@@ -1,7 +1,8 @@
1
- import { Theme } from '@riverbankcms/blocks';
2
- import { R as RiverbankClient } from './types-C6gmRHLe.mjs';
3
- import { b as PageProps } from './loadPage-CCf15nt8.mjs';
4
- import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
1
+ import { T as Theme } from './types-nVerjjdv.mjs';
2
+ import './schema-Bpy9N5ZI.mjs';
3
+ import { R as RiverbankClient } from './types-CLusapsM.mjs';
4
+ import { P as PageProps } from './loadPage-en10WQrt.mjs';
5
+ import { R as ResolvedBlockData } from './types-_nDnPHpv.mjs';
5
6
 
6
7
  /**
7
8
  * Server-side helper to fetch content (page or entry) by path.
@@ -0,0 +1,11 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunk62ZJI564js = require('./chunk-62ZJI564.js');
4
+ require('./chunk-YXDDFG3N.js');
5
+ require('./chunk-HOY77YBF.js');
6
+ require('./chunk-EGTDJ4PL.js');
7
+ require('./chunk-DGUM43GV.js');
8
+
9
+
10
+ exports.loadPage = _chunk62ZJI564js.loadPage;
11
+ //# sourceMappingURL=loadPage-3ECPF426.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/loadPage-3ECPF426.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,6CAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/loadPage-3ECPF426.js"}
@@ -0,0 +1,11 @@
1
+ import {
2
+ loadPage
3
+ } from "./chunk-JTAERCX2.mjs";
4
+ import "./chunk-GWBMJPLH.mjs";
5
+ import "./chunk-7DS4Q3GA.mjs";
6
+ import "./chunk-USQF2XTU.mjs";
7
+ import "./chunk-BJTO5JO5.mjs";
8
+ export {
9
+ loadPage
10
+ };
11
+ //# sourceMappingURL=loadPage-LW273NYO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,8 +1,150 @@
1
- import { R as RiverbankClient, S as SiteResponse } from './types-C6gmRHLe.mjs';
1
+ import { R as RiverbankClient, S as SiteResponse } from './types-Ls6BkLKg.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- import { PageOutline, Theme, ThemeTokens, RouteMap, OccurrenceContextData, PageRenderer, BlockOverrides } from '@riverbankcms/blocks';
4
- import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
5
- import { D as DataLoaderOverrides } from './types-Bbo01M7P.mjs';
3
+ import * as React$1 from 'react';
4
+ import React__default, { ComponentType } from 'react';
5
+ import { P as PageOutline, S as SdkCustomBlock } from './schema-Bpy9N5ZI.js';
6
+ import { z } from 'zod';
7
+ import { T as Theme } from './types-Cc7lyPkN.js';
8
+ import { R as ResolvedBlockData, D as DataLoaderOverrides } from './types-_nDnPHpv.js';
9
+
10
+ declare const colorTokens: readonly ["background/base", "background/elevated", "surface/base", "surface/subtle", "surface/inverted", "content/primary", "content/secondary", "accent/primary", "accent/secondary", "border/base"];
11
+ declare const typographyTokens: readonly ["display/hero", "display/section", "heading/large", "heading/medium", "heading/small", "body/normal", "body/small", "caption"];
12
+ declare const spacingTokens: readonly ["none", "3xs", "2xs", "xs", "sm", "md", "lg", "xl", "2xl", "3xl"];
13
+ declare const radiusTokens: readonly ["none", "xs", "sm", "md", "lg", "pill", "full"];
14
+ declare const shadowTokens: readonly ["none", "soft", "medium", "strong"];
15
+ type ThemeTokens = {
16
+ color: Record<(typeof colorTokens)[number], string>;
17
+ typography: Record<(typeof typographyTokens)[number], {
18
+ fontSize: string;
19
+ lineHeight: string;
20
+ fontWeight?: string;
21
+ }>;
22
+ spacing: Record<(typeof spacingTokens)[number], string>;
23
+ radius: Record<(typeof radiusTokens)[number], string>;
24
+ shadow: Record<(typeof shadowTokens)[number], string>;
25
+ palette: Record<string, string>;
26
+ };
27
+
28
+ type RouteMapEntry = string | {
29
+ path?: string | null;
30
+ href?: string | null;
31
+ url?: string | null;
32
+ draftPath?: string | null;
33
+ [key: string]: unknown;
34
+ };
35
+ type RouteMap = Record<string, RouteMapEntry>;
36
+ type TransformContext = {
37
+ theme: ThemeTokens;
38
+ locale?: string;
39
+ routes?: RouteMap;
40
+ };
41
+ type TransformHandler<TOptions = unknown> = (value: unknown, options: TOptions, context: TransformContext) => unknown;
42
+ type TransformDefinition<TOptions = unknown> = {
43
+ id: string;
44
+ summary?: string;
45
+ kind: "formatter" | "collection" | "string" | "html";
46
+ schema?: z.ZodType<TOptions>;
47
+ run: TransformHandler<TOptions>;
48
+ };
49
+ type TransformRegistry = Map<string, TransformDefinition<any>>;
50
+
51
+ type ViewModel = Record<string, unknown>;
52
+ type ComponentRegistry = Record<string, React__default.ComponentType<any>>;
53
+ type ResolverContext = {
54
+ viewModel: ViewModel;
55
+ registry: ComponentRegistry;
56
+ transforms?: TransformRegistry;
57
+ theme?: ThemeTokens;
58
+ routes?: RouteMap;
59
+ pathBase?: string;
60
+ blockId?: string | null;
61
+ blockKind?: string;
62
+ blockContent?: unknown;
63
+ blockBindings?: Record<string, unknown>;
64
+ fragmentRegistry?: Record<string, any>;
65
+ };
66
+
67
+ type SystemBlockComponentProps<TContent = Record<string, unknown>> = {
68
+ content: TContent;
69
+ theme?: ThemeTokens;
70
+ themeConfig?: Theme;
71
+ registry?: ResolverContext["registry"];
72
+ transforms?: TransformRegistry;
73
+ viewModelOverrides?: Record<string, unknown>;
74
+ data?: Record<string, unknown>;
75
+ pathBase?: string;
76
+ blockId?: string | null;
77
+ blockKind?: string;
78
+ blockBindings?: Record<string, unknown>;
79
+ fragmentRegistry?: ResolverContext["fragmentRegistry"];
80
+ };
81
+ type SystemBlockComponent<TContent = Record<string, unknown>> = ComponentType<SystemBlockComponentProps<TContent>>;
82
+
83
+ /**
84
+ * Occurrence context for event pages.
85
+ * Passed through to blocks that need occurrence information (e.g., event-registration).
86
+ */
87
+ type OccurrenceContextData = {
88
+ id: string;
89
+ seriesId: string;
90
+ startsAt: string;
91
+ endsAt: string;
92
+ capacityOverride?: number | null;
93
+ overrides?: Record<string, unknown> | null;
94
+ };
95
+ type PageRendererDataContext = {
96
+ siteId?: string;
97
+ pageId?: string;
98
+ resolvedData?: Record<string, Record<string, unknown>>;
99
+ previewStage?: 'published' | 'preview';
100
+ routes?: RouteMap;
101
+ occurrenceContext?: OccurrenceContextData | null;
102
+ contentEntry?: Record<string, unknown> | null;
103
+ };
104
+ /**
105
+ * Block override component type.
106
+ * Override components receive the same props as default block components.
107
+ *
108
+ * Uses `any` for content type to allow typed components (e.g., SystemBlockComponentProps<HeroContent>)
109
+ * to be used as overrides without type errors. The actual content type is validated at runtime
110
+ * based on the block kind.
111
+ */
112
+ type BlockOverrideComponent = SystemBlockComponent<any>;
113
+ /**
114
+ * Map of block kinds to custom override components.
115
+ * Keys can be either:
116
+ * - Full block kind: "block.hero"
117
+ * - Short form: "hero" (will match "block.hero")
118
+ *
119
+ * @example
120
+ * ```tsx
121
+ * const overrides: BlockOverrides = {
122
+ * 'hero': CustomHero, // CustomHero: SystemBlockComponentProps<HeroContent>
123
+ * 'bodyText': CustomBodyText, // CustomBodyText: SystemBlockComponentProps<BodyTextContent>
124
+ * };
125
+ * ```
126
+ */
127
+ type BlockOverrides = Record<string, BlockOverrideComponent>;
128
+ /**
129
+ * SDK site configuration for custom block rendering.
130
+ * Minimal type containing only what PageRenderer needs.
131
+ */
132
+ type SdkConfigForRenderer = {
133
+ customBlocks?: SdkCustomBlock[];
134
+ };
135
+ interface PageRendererProps {
136
+ theme: Theme;
137
+ page: PageOutline | null;
138
+ usePlaceholders?: boolean;
139
+ dataContext?: PageRendererDataContext;
140
+ routeMap?: RouteMap;
141
+ wrapBlock?: (blockId: string, rendered: React$1.ReactNode) => React$1.ReactNode;
142
+ registry?: ResolverContext["registry"];
143
+ themeTokens?: ThemeTokens;
144
+ blockOverrides?: BlockOverrides;
145
+ sdkConfig?: SdkConfigForRenderer | null;
146
+ }
147
+ declare function PageRenderer({ theme, page, usePlaceholders, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, }: PageRendererProps): react_jsx_runtime.JSX.Element;
6
148
 
7
149
  type PageProps = {
8
150
  page: PageOutline;
@@ -213,4 +355,4 @@ type LoadPageResult = Omit<PageProps, 'registry' | 'wrapBlock' | 'usePlaceholder
213
355
  */
214
356
  declare function loadPage(params: LoadPageParams): Promise<LoadPageResult>;
215
357
 
216
- export { type LoadPageParams as L, Page as P, type RuntimeSdkConfig as R, type LoadPageResult as a, type PageProps as b, loadPage as l };
358
+ export { type BlockOverrides as B, type LoadPageParams as L, type PageProps as P, type RuntimeSdkConfig as R, type SystemBlockComponentProps as S, type ThemeTokens as T, type LoadPageResult as a, Page as b, PageRenderer as c, type RouteMap as d, type BlockOverrideComponent as e, loadPage as l };
@@ -1,8 +1,150 @@
1
- import { R as RiverbankClient, S as SiteResponse } from './types-C6gmRHLe.js';
1
+ import { R as RiverbankClient, S as SiteResponse } from './types-CLusapsM.mjs';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- import { PageOutline, Theme, ThemeTokens, RouteMap, OccurrenceContextData, PageRenderer, BlockOverrides } from '@riverbankcms/blocks';
4
- import { ResolvedBlockData } from '@riverbankcms/blocks/system/data';
5
- import { D as DataLoaderOverrides } from './types-Bbo01M7P.js';
3
+ import * as React$1 from 'react';
4
+ import React__default, { ComponentType } from 'react';
5
+ import { P as PageOutline, S as SdkCustomBlock } from './schema-Bpy9N5ZI.mjs';
6
+ import { z } from 'zod';
7
+ import { T as Theme } from './types-nVerjjdv.mjs';
8
+ import { R as ResolvedBlockData, D as DataLoaderOverrides } from './types-_nDnPHpv.mjs';
9
+
10
+ declare const colorTokens: readonly ["background/base", "background/elevated", "surface/base", "surface/subtle", "surface/inverted", "content/primary", "content/secondary", "accent/primary", "accent/secondary", "border/base"];
11
+ declare const typographyTokens: readonly ["display/hero", "display/section", "heading/large", "heading/medium", "heading/small", "body/normal", "body/small", "caption"];
12
+ declare const spacingTokens: readonly ["none", "3xs", "2xs", "xs", "sm", "md", "lg", "xl", "2xl", "3xl"];
13
+ declare const radiusTokens: readonly ["none", "xs", "sm", "md", "lg", "pill", "full"];
14
+ declare const shadowTokens: readonly ["none", "soft", "medium", "strong"];
15
+ type ThemeTokens = {
16
+ color: Record<(typeof colorTokens)[number], string>;
17
+ typography: Record<(typeof typographyTokens)[number], {
18
+ fontSize: string;
19
+ lineHeight: string;
20
+ fontWeight?: string;
21
+ }>;
22
+ spacing: Record<(typeof spacingTokens)[number], string>;
23
+ radius: Record<(typeof radiusTokens)[number], string>;
24
+ shadow: Record<(typeof shadowTokens)[number], string>;
25
+ palette: Record<string, string>;
26
+ };
27
+
28
+ type RouteMapEntry = string | {
29
+ path?: string | null;
30
+ href?: string | null;
31
+ url?: string | null;
32
+ draftPath?: string | null;
33
+ [key: string]: unknown;
34
+ };
35
+ type RouteMap = Record<string, RouteMapEntry>;
36
+ type TransformContext = {
37
+ theme: ThemeTokens;
38
+ locale?: string;
39
+ routes?: RouteMap;
40
+ };
41
+ type TransformHandler<TOptions = unknown> = (value: unknown, options: TOptions, context: TransformContext) => unknown;
42
+ type TransformDefinition<TOptions = unknown> = {
43
+ id: string;
44
+ summary?: string;
45
+ kind: "formatter" | "collection" | "string" | "html";
46
+ schema?: z.ZodType<TOptions>;
47
+ run: TransformHandler<TOptions>;
48
+ };
49
+ type TransformRegistry = Map<string, TransformDefinition<any>>;
50
+
51
+ type ViewModel = Record<string, unknown>;
52
+ type ComponentRegistry = Record<string, React__default.ComponentType<any>>;
53
+ type ResolverContext = {
54
+ viewModel: ViewModel;
55
+ registry: ComponentRegistry;
56
+ transforms?: TransformRegistry;
57
+ theme?: ThemeTokens;
58
+ routes?: RouteMap;
59
+ pathBase?: string;
60
+ blockId?: string | null;
61
+ blockKind?: string;
62
+ blockContent?: unknown;
63
+ blockBindings?: Record<string, unknown>;
64
+ fragmentRegistry?: Record<string, any>;
65
+ };
66
+
67
+ type SystemBlockComponentProps<TContent = Record<string, unknown>> = {
68
+ content: TContent;
69
+ theme?: ThemeTokens;
70
+ themeConfig?: Theme;
71
+ registry?: ResolverContext["registry"];
72
+ transforms?: TransformRegistry;
73
+ viewModelOverrides?: Record<string, unknown>;
74
+ data?: Record<string, unknown>;
75
+ pathBase?: string;
76
+ blockId?: string | null;
77
+ blockKind?: string;
78
+ blockBindings?: Record<string, unknown>;
79
+ fragmentRegistry?: ResolverContext["fragmentRegistry"];
80
+ };
81
+ type SystemBlockComponent<TContent = Record<string, unknown>> = ComponentType<SystemBlockComponentProps<TContent>>;
82
+
83
+ /**
84
+ * Occurrence context for event pages.
85
+ * Passed through to blocks that need occurrence information (e.g., event-registration).
86
+ */
87
+ type OccurrenceContextData = {
88
+ id: string;
89
+ seriesId: string;
90
+ startsAt: string;
91
+ endsAt: string;
92
+ capacityOverride?: number | null;
93
+ overrides?: Record<string, unknown> | null;
94
+ };
95
+ type PageRendererDataContext = {
96
+ siteId?: string;
97
+ pageId?: string;
98
+ resolvedData?: Record<string, Record<string, unknown>>;
99
+ previewStage?: 'published' | 'preview';
100
+ routes?: RouteMap;
101
+ occurrenceContext?: OccurrenceContextData | null;
102
+ contentEntry?: Record<string, unknown> | null;
103
+ };
104
+ /**
105
+ * Block override component type.
106
+ * Override components receive the same props as default block components.
107
+ *
108
+ * Uses `any` for content type to allow typed components (e.g., SystemBlockComponentProps<HeroContent>)
109
+ * to be used as overrides without type errors. The actual content type is validated at runtime
110
+ * based on the block kind.
111
+ */
112
+ type BlockOverrideComponent = SystemBlockComponent<any>;
113
+ /**
114
+ * Map of block kinds to custom override components.
115
+ * Keys can be either:
116
+ * - Full block kind: "block.hero"
117
+ * - Short form: "hero" (will match "block.hero")
118
+ *
119
+ * @example
120
+ * ```tsx
121
+ * const overrides: BlockOverrides = {
122
+ * 'hero': CustomHero, // CustomHero: SystemBlockComponentProps<HeroContent>
123
+ * 'bodyText': CustomBodyText, // CustomBodyText: SystemBlockComponentProps<BodyTextContent>
124
+ * };
125
+ * ```
126
+ */
127
+ type BlockOverrides = Record<string, BlockOverrideComponent>;
128
+ /**
129
+ * SDK site configuration for custom block rendering.
130
+ * Minimal type containing only what PageRenderer needs.
131
+ */
132
+ type SdkConfigForRenderer = {
133
+ customBlocks?: SdkCustomBlock[];
134
+ };
135
+ interface PageRendererProps {
136
+ theme: Theme;
137
+ page: PageOutline | null;
138
+ usePlaceholders?: boolean;
139
+ dataContext?: PageRendererDataContext;
140
+ routeMap?: RouteMap;
141
+ wrapBlock?: (blockId: string, rendered: React$1.ReactNode) => React$1.ReactNode;
142
+ registry?: ResolverContext["registry"];
143
+ themeTokens?: ThemeTokens;
144
+ blockOverrides?: BlockOverrides;
145
+ sdkConfig?: SdkConfigForRenderer | null;
146
+ }
147
+ declare function PageRenderer({ theme, page, usePlaceholders, dataContext, wrapBlock, registry, themeTokens: providedThemeTokens, routeMap, blockOverrides, sdkConfig, }: PageRendererProps): react_jsx_runtime.JSX.Element;
6
148
 
7
149
  type PageProps = {
8
150
  page: PageOutline;
@@ -213,4 +355,4 @@ type LoadPageResult = Omit<PageProps, 'registry' | 'wrapBlock' | 'usePlaceholder
213
355
  */
214
356
  declare function loadPage(params: LoadPageParams): Promise<LoadPageResult>;
215
357
 
216
- export { type LoadPageParams as L, Page as P, type RuntimeSdkConfig as R, type LoadPageResult as a, type PageProps as b, loadPage as l };
358
+ export { type BlockOverrides as B, type LoadPageParams as L, type PageProps as P, type RuntimeSdkConfig as R, type SystemBlockComponentProps as S, type ThemeTokens as T, type LoadPageResult as a, Page as b, PageRenderer as c, type RouteMap as d, type BlockOverrideComponent as e, loadPage as l };
@@ -1,10 +1,14 @@
1
- import { a as LoadPageResult } from './loadPage-CCf15nt8.mjs';
2
- import { S as SiteResponse } from './types-C6gmRHLe.mjs';
1
+ import { a as LoadPageResult } from './loadPage-en10WQrt.mjs';
2
+ import { S as SiteResponse } from './types-CLusapsM.mjs';
3
3
  import 'react/jsx-runtime';
4
- import '@riverbankcms/blocks';
5
- import '@riverbankcms/blocks/system/data';
6
- import './types-Bbo01M7P.mjs';
7
- import '@riverbankcms/api';
4
+ import 'react';
5
+ import './schema-Bpy9N5ZI.mjs';
6
+ import 'zod';
7
+ import './types-nVerjjdv.mjs';
8
+ import '@riverbankcms/ai';
9
+ import '@riverbankcms/media-storage-supabase';
10
+ import '@riverbankcms/db';
11
+ import './types-_nDnPHpv.mjs';
8
12
 
9
13
  /**
10
14
  * Metadata generation helper for Next.js pages
@@ -1,10 +1,14 @@
1
- import { a as LoadPageResult } from './loadPage-BYmVMk0V.js';
2
- import { S as SiteResponse } from './types-C6gmRHLe.js';
1
+ import { a as LoadPageResult } from './loadPage-bejlajm9.js';
2
+ import { S as SiteResponse } from './types-Ls6BkLKg.js';
3
3
  import 'react/jsx-runtime';
4
- import '@riverbankcms/blocks';
5
- import '@riverbankcms/blocks/system/data';
6
- import './types-Bbo01M7P.js';
7
- import '@riverbankcms/api';
4
+ import 'react';
5
+ import './schema-Bpy9N5ZI.js';
6
+ import 'zod';
7
+ import './types-Cc7lyPkN.js';
8
+ import '@riverbankcms/ai';
9
+ import '@riverbankcms/media-storage-supabase';
10
+ import '@riverbankcms/db';
11
+ import './types-_nDnPHpv.js';
8
12
 
9
13
  /**
10
14
  * Metadata generation helper for Next.js pages
@@ -1,4 +1,6 @@
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; }// src/metadata/generatePageMetadata.ts
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; }require('./chunk-DGUM43GV.js');
2
+
3
+ // src/metadata/generatePageMetadata.ts
2
4
  function generatePageMetadata(input) {
3
5
  const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
4
6
  const pageTitle = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _ => _.title]), () => ( page.name));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","../../src/metadata/generatePageMetadata.ts"],"names":[],"mappings":"AAAA;ACgHO,SAAS,oBAAA,CAAqB,KAAA,EAAoC;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,uBAAuB,EAAA,EAAI,KAAA;AAGzE,EAAA,MAAM,UAAA,mCAAY,SAAA,2BAAW,OAAA,UAAS,IAAA,CAAK,MAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,UAAA,IAAc,IAAA,CAAK,MAAA,EAAQ,UAAA,EAAY,CAAA,EAAA;AAGN,EAAA;AAGO,EAAA;AACzB,EAAA;AAGN,EAAA;AAClB,IAAA;AACqB,IAAA;AAChB,IAAA;AACC,MAAA;AACb,IAAA;AACW,IAAA;AACF,MAAA;AACqB,MAAA;AACvB,MAAA;AACU,MAAA;AACT,MAAA;AAEF,MAAA;AACU,QAAA;AACN,UAAA;AACiB,YAAA;AACV,YAAA;AACP,UAAA;AACF,QAAA;AAED,MAAA;AACP,IAAA;AACS,IAAA;AACD,MAAA;AACC,MAAA;AACqB,MAAA;AAExB,MAAA;AAC4B,QAAA;AAE3B,MAAA;AACP,IAAA;AACF,EAAA;AAGuB,EAAA;AACH,IAAA;AACiB,MAAA;AACE,MAAA;AACrC,IAAA;AACF,EAAA;AAG4B,EAAA;AACF,IAAA;AACd,MAAA;AACV,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAuB4E;AAC9C,EAAA;AACvB,IAAA;AACQ,IAAA;AACA,MAAA;AACD,MAAA;AACC,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACD,EAAA;AACH;ADrJ4D;AACA;AACA;AACA","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","sourcesContent":[null,"/**\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"]}
1
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","../../src/metadata/generatePageMetadata.ts"],"names":[],"mappings":"AAAA,gtBAA4B;AAC5B;AACA;AC8GO,SAAS,oBAAA,CAAqB,KAAA,EAAoC;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,uBAAuB,EAAA,EAAI,KAAA;AAGzE,EAAA,MAAM,UAAA,mCAAY,SAAA,2BAAW,OAAA,UAAS,IAAA,CAAK,MAAA;AAC3C,EAAA,MAAM,UAAA,EAAY,UAAA,IAAc,IAAA,CAAK,MAAA,EAAQ,UAAA,EAAY,CAAA,EAAA;AAGN,EAAA;AAGO,EAAA;AACzB,EAAA;AAGN,EAAA;AAClB,IAAA;AACqB,IAAA;AAChB,IAAA;AACC,MAAA;AACb,IAAA;AACW,IAAA;AACF,MAAA;AACqB,MAAA;AACvB,MAAA;AACU,MAAA;AACT,MAAA;AAEF,MAAA;AACU,QAAA;AACN,UAAA;AACiB,YAAA;AACV,YAAA;AACP,UAAA;AACF,QAAA;AAED,MAAA;AACP,IAAA;AACS,IAAA;AACD,MAAA;AACC,MAAA;AACqB,MAAA;AAExB,MAAA;AAC4B,QAAA;AAE3B,MAAA;AACP,IAAA;AACF,EAAA;AAGuB,EAAA;AACH,IAAA;AACiB,MAAA;AACE,MAAA;AACrC,IAAA;AACF,EAAA;AAG4B,EAAA;AACF,IAAA;AACd,MAAA;AACV,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAuB4E;AAC9C,EAAA;AACvB,IAAA;AACQ,IAAA;AACA,MAAA;AACD,MAAA;AACC,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACD,EAAA;AACH;ADnJ4D;AACA;AACA;AACA","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js","sourcesContent":[null,"/**\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"]}
@@ -1,3 +1,5 @@
1
+ import "./chunk-BJTO5JO5.mjs";
2
+
1
3
  // src/metadata/generatePageMetadata.ts
2
4
  function generatePageMetadata(input) {
3
5
  const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
@@ -1 +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":[]}
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":[]}