@riverbankcms/sdk 0.8.1 → 0.9.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 (187) hide show
  1. package/README.md +298 -2
  2. package/dist/cli/index.js +1996 -618
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/init-docs/content/agents-section.md +11 -0
  5. package/dist/cli/init-docs/content/cli-reference.md +15 -1
  6. package/dist/cli/init-docs/content/workflow-add-block.md +7 -0
  7. package/dist/cli/init-docs/content/workflow-block-extensions.md +361 -0
  8. package/dist/cli/init-docs/content/workflow-cmsify-page.md +357 -0
  9. package/dist/cli/init-docs/content/workflow-content-types.md +328 -0
  10. package/dist/cli/init-docs/content/workflow-create-page.md +9 -0
  11. package/dist/cli/init-docs/content/workflow-custom-block.md +446 -0
  12. package/dist/client/client.d.mts +2 -2
  13. package/dist/client/client.d.ts +2 -2
  14. package/dist/client/client.js +262 -17
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +262 -17
  17. package/dist/client/client.mjs.map +1 -1
  18. package/dist/client/hooks.d.mts +2 -2
  19. package/dist/client/hooks.d.ts +2 -2
  20. package/dist/client/hooks.js +6 -6
  21. package/dist/client/hooks.js.map +1 -1
  22. package/dist/client/hooks.mjs +6 -6
  23. package/dist/client/hooks.mjs.map +1 -1
  24. package/dist/client/rendering/client.js +29 -6
  25. package/dist/client/rendering/client.js.map +1 -1
  26. package/dist/client/rendering/client.mjs +29 -6
  27. package/dist/client/rendering/client.mjs.map +1 -1
  28. package/dist/client/usePage--LiGLbVz.d.mts +7195 -0
  29. package/dist/client/usePage-BwQJlxpe.d.mts +7218 -0
  30. package/dist/client/usePage-Ds-ow1-d.d.ts +7195 -0
  31. package/dist/client/usePage-Duc2GC-H.d.ts +7218 -0
  32. package/dist/client/usePage-DyzrgxqR.d.mts +7215 -0
  33. package/dist/client/usePage-lTWkuVMZ.d.ts +7215 -0
  34. package/dist/server/{Layout-CZ-kxKfl.d.ts → Layout-BHGokJmV.d.ts} +1 -1
  35. package/dist/server/{Layout-ESG8zvrk.d.mts → Layout-CXkMcTR4.d.mts} +1 -1
  36. package/dist/server/chunk-274Y2CUE.js +341 -0
  37. package/dist/server/chunk-274Y2CUE.js.map +1 -0
  38. package/dist/server/{chunk-IJTJH4J3.js → chunk-2WL52ZOE.js} +8 -8
  39. package/dist/server/{chunk-IJTJH4J3.js.map → chunk-2WL52ZOE.js.map} +1 -1
  40. package/dist/server/{chunk-DAXWU3S3.js → chunk-5HGVBSWA.js} +9 -9
  41. package/dist/server/{chunk-DAXWU3S3.js.map → chunk-5HGVBSWA.js.map} +1 -1
  42. package/dist/server/chunk-7WJGJY3B.js +7 -0
  43. package/dist/server/chunk-7WJGJY3B.js.map +1 -0
  44. package/dist/server/chunk-AGAOKSPY.mjs +22 -0
  45. package/dist/server/chunk-AGAOKSPY.mjs.map +1 -0
  46. package/dist/server/{chunk-A3UZ2LDH.mjs → chunk-BOYBN4KN.mjs} +3 -3
  47. package/dist/server/chunk-BOYBN4KN.mjs.map +1 -0
  48. package/dist/server/{chunk-FUFPKTSI.mjs → chunk-CKZDJBMC.mjs} +33 -9
  49. package/dist/server/chunk-CKZDJBMC.mjs.map +1 -0
  50. package/dist/server/{chunk-PGZJUNCY.mjs → chunk-E4R5ILRE.mjs} +3 -3
  51. package/dist/server/{chunk-MFNWLB5G.js → chunk-EC2AA2IP.js} +275 -297
  52. package/dist/server/chunk-EC2AA2IP.js.map +1 -0
  53. package/dist/server/{chunk-HE3RTUDX.js → chunk-F4U4LC5D.js} +8 -8
  54. package/dist/server/{chunk-HE3RTUDX.js.map → chunk-F4U4LC5D.js.map} +1 -1
  55. package/dist/server/{chunk-T5PAA22U.mjs → chunk-H44G72AB.mjs} +2 -2
  56. package/dist/server/{chunk-KGORQCHF.js → chunk-JVLQDZTZ.js} +6 -6
  57. package/dist/server/{chunk-KGORQCHF.js.map → chunk-JVLQDZTZ.js.map} +1 -1
  58. package/dist/server/{chunk-ADD3O2QO.mjs → chunk-KKUR3PDT.mjs} +4 -4
  59. package/dist/server/chunk-NTG7XP3E.js +264 -0
  60. package/dist/server/chunk-NTG7XP3E.js.map +1 -0
  61. package/dist/server/{chunk-TR7MSLWL.mjs → chunk-OSTUHBFE.mjs} +3 -3
  62. package/dist/server/chunk-PAHSKNY5.mjs +264 -0
  63. package/dist/server/chunk-PAHSKNY5.mjs.map +1 -0
  64. package/dist/server/chunk-PSN6HXUD.js +22 -0
  65. package/dist/server/chunk-PSN6HXUD.js.map +1 -0
  66. package/dist/server/{chunk-GRFFJUCO.mjs → chunk-QS6ZTLLB.mjs} +242 -264
  67. package/dist/server/chunk-QS6ZTLLB.mjs.map +1 -0
  68. package/dist/server/{chunk-K44OPKLA.js → chunk-R6T3Z4W5.js} +3 -3
  69. package/dist/server/{chunk-K44OPKLA.js.map → chunk-R6T3Z4W5.js.map} +1 -1
  70. package/dist/server/{chunk-KDCVCDW6.js → chunk-RIROJYPX.js} +4 -4
  71. package/dist/server/{chunk-KDCVCDW6.js.map → chunk-RIROJYPX.js.map} +1 -1
  72. package/dist/server/chunk-SVEQVEA5.mjs +341 -0
  73. package/dist/server/chunk-SVEQVEA5.mjs.map +1 -0
  74. package/dist/server/{chunk-HDHY4236.mjs → chunk-TBN35TGI.mjs} +6 -6
  75. package/dist/server/{chunk-HDHY4236.mjs.map → chunk-TBN35TGI.mjs.map} +1 -1
  76. package/dist/server/{chunk-5GCSRTIU.mjs → chunk-TBX6CXBM.mjs} +2 -2
  77. package/dist/server/{chunk-6ERSDFTY.js → chunk-U2F4BWKW.js} +3 -3
  78. package/dist/server/chunk-U2F4BWKW.js.map +1 -0
  79. package/dist/server/chunk-WWGVFOLS.mjs +7 -0
  80. package/dist/server/chunk-WWGVFOLS.mjs.map +1 -0
  81. package/dist/server/{chunk-TLZHVGTL.js → chunk-X4REO3S7.js} +4 -4
  82. package/dist/server/{chunk-TLZHVGTL.js.map → chunk-X4REO3S7.js.map} +1 -1
  83. package/dist/server/{chunk-BNHK7YOC.mjs → chunk-YUD7ONZG.mjs} +2 -2
  84. package/dist/server/{chunk-F2NDLDDA.js → chunk-ZJXFRSTC.js} +92 -68
  85. package/dist/server/chunk-ZJXFRSTC.js.map +1 -0
  86. package/dist/server/{components-iEDvl2Yw.d.mts → components-Bqn4xmR6.d.mts} +74 -5
  87. package/dist/server/{components-CE48wJM1.d.ts → components-C7j9yzAt.d.ts} +74 -5
  88. package/dist/server/components.d.mts +5 -5
  89. package/dist/server/components.d.ts +5 -5
  90. package/dist/server/components.js +7 -5
  91. package/dist/server/components.js.map +1 -1
  92. package/dist/server/components.mjs +6 -4
  93. package/dist/server/config-validation.js +5 -5
  94. package/dist/server/config-validation.mjs +4 -4
  95. package/dist/server/config.js +5 -5
  96. package/dist/server/config.mjs +4 -4
  97. package/dist/server/data.d.mts +2 -2
  98. package/dist/server/data.d.ts +2 -2
  99. package/dist/server/data.js +3 -3
  100. package/dist/server/data.mjs +2 -2
  101. package/dist/server/{index-BHLK2mgQ.d.ts → index-Bns_1a4N.d.ts} +1 -1
  102. package/dist/server/{index-DTBg8eXj.d.ts → index-CHp2kyp0.d.ts} +2 -2
  103. package/dist/server/{index-Cgvb5fVQ.d.mts → index-CPDT8kn9.d.mts} +1 -1
  104. package/dist/server/{index-BrH_NIRO.d.mts → index-Cm9nMPkf.d.mts} +2 -2
  105. package/dist/server/index.d.mts +193 -215
  106. package/dist/server/index.d.ts +193 -215
  107. package/dist/server/index.js +9 -288
  108. package/dist/server/index.js.map +1 -1
  109. package/dist/server/index.mjs +10 -289
  110. package/dist/server/index.mjs.map +1 -1
  111. package/dist/server/{loadContent-BUK6IVJf.d.ts → loadContent-DD7J5_WO.d.ts} +3 -3
  112. package/dist/server/{loadContent-au9Weoy0.d.mts → loadContent-DTEgYI-l.d.mts} +3 -3
  113. package/dist/server/{loadPage-DiHEl8BA.d.mts → loadPage-B578Xg2W.d.mts} +2 -2
  114. package/dist/server/{loadPage-JOIbF7ih.d.ts → loadPage-Dkiimbsg.d.ts} +2 -2
  115. package/dist/server/loadPage-IBX7FXGH.mjs +11 -0
  116. package/dist/server/loadPage-KG74OG4V.js +11 -0
  117. package/dist/server/{loadPage-CMHYAW2J.js.map → loadPage-KG74OG4V.js.map} +1 -1
  118. package/dist/server/metadata.d.mts +4 -4
  119. package/dist/server/metadata.d.ts +4 -4
  120. package/dist/server/navigation.d.mts +2 -2
  121. package/dist/server/navigation.d.ts +2 -2
  122. package/dist/server/next.d.mts +5 -5
  123. package/dist/server/next.d.ts +5 -5
  124. package/dist/server/next.js +17 -14
  125. package/dist/server/next.js.map +1 -1
  126. package/dist/server/next.mjs +9 -6
  127. package/dist/server/next.mjs.map +1 -1
  128. package/dist/server/prebuild-loader.d.mts +87 -0
  129. package/dist/server/prebuild-loader.d.ts +87 -0
  130. package/dist/server/prebuild-loader.js +15 -0
  131. package/dist/server/prebuild-loader.js.map +1 -0
  132. package/dist/server/prebuild-loader.mjs +15 -0
  133. package/dist/server/prebuild-loader.mjs.map +1 -0
  134. package/dist/server/prebuild-types.d.mts +201 -0
  135. package/dist/server/prebuild-types.d.ts +201 -0
  136. package/dist/server/prebuild-types.js +1 -0
  137. package/dist/server/prebuild-types.js.map +1 -0
  138. package/dist/server/prebuild-types.mjs +1 -0
  139. package/dist/server/prebuild-types.mjs.map +1 -0
  140. package/dist/server/prebuild.d.mts +46 -0
  141. package/dist/server/prebuild.d.ts +46 -0
  142. package/dist/server/prebuild.js +10 -0
  143. package/dist/server/prebuild.js.map +1 -0
  144. package/dist/server/prebuild.mjs +10 -0
  145. package/dist/server/prebuild.mjs.map +1 -0
  146. package/dist/server/rendering/server.d.mts +4 -4
  147. package/dist/server/rendering/server.d.ts +4 -4
  148. package/dist/server/rendering/server.js +7 -7
  149. package/dist/server/rendering/server.mjs +6 -6
  150. package/dist/server/rendering.d.mts +8 -8
  151. package/dist/server/rendering.d.ts +8 -8
  152. package/dist/server/rendering.js +11 -9
  153. package/dist/server/rendering.js.map +1 -1
  154. package/dist/server/rendering.mjs +10 -8
  155. package/dist/server/routing.d.mts +3 -3
  156. package/dist/server/routing.d.ts +3 -3
  157. package/dist/server/routing.js +1 -1
  158. package/dist/server/routing.mjs +1 -1
  159. package/dist/server/server.d.mts +5 -5
  160. package/dist/server/server.d.ts +5 -5
  161. package/dist/server/server.js +9 -6
  162. package/dist/server/server.js.map +1 -1
  163. package/dist/server/server.mjs +8 -5
  164. package/dist/server/theme-bridge.js +8 -8
  165. package/dist/server/theme-bridge.mjs +2 -2
  166. package/dist/server/{types-BAM1kcGA.d.mts → types-B6P_iaDz.d.mts} +295 -1
  167. package/dist/server/{types-_SNCu2ZZ.d.ts → types-C4jfCjaP.d.ts} +295 -1
  168. package/dist/server/{types-DDNKxQXw.d.mts → types-CSvCkmYi.d.mts} +12 -3
  169. package/dist/server/{types-CmBB0Osp.d.ts → types-gKcrQV09.d.ts} +12 -3
  170. package/dist/styles/index.css +419 -0
  171. package/package.json +17 -3
  172. package/dist/server/chunk-6ERSDFTY.js.map +0 -1
  173. package/dist/server/chunk-A3UZ2LDH.mjs.map +0 -1
  174. package/dist/server/chunk-F2NDLDDA.js.map +0 -1
  175. package/dist/server/chunk-FUFPKTSI.mjs.map +0 -1
  176. package/dist/server/chunk-GRFFJUCO.mjs.map +0 -1
  177. package/dist/server/chunk-MFNWLB5G.js.map +0 -1
  178. package/dist/server/loadPage-AWYZ2QA2.mjs +0 -11
  179. package/dist/server/loadPage-CMHYAW2J.js +0 -11
  180. package/src/styles/index.css +0 -10
  181. /package/dist/server/{chunk-PGZJUNCY.mjs.map → chunk-E4R5ILRE.mjs.map} +0 -0
  182. /package/dist/server/{chunk-T5PAA22U.mjs.map → chunk-H44G72AB.mjs.map} +0 -0
  183. /package/dist/server/{chunk-ADD3O2QO.mjs.map → chunk-KKUR3PDT.mjs.map} +0 -0
  184. /package/dist/server/{chunk-TR7MSLWL.mjs.map → chunk-OSTUHBFE.mjs.map} +0 -0
  185. /package/dist/server/{chunk-5GCSRTIU.mjs.map → chunk-TBX6CXBM.mjs.map} +0 -0
  186. /package/dist/server/{chunk-BNHK7YOC.mjs.map → chunk-YUD7ONZG.mjs.map} +0 -0
  187. /package/dist/server/{loadPage-AWYZ2QA2.mjs.map → loadPage-IBX7FXGH.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ // src/version.ts
2
+ var SDK_VERSION = "0.9.0";
3
+
4
+ export {
5
+ SDK_VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-WWGVFOLS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/version.ts"],"sourcesContent":["/**\n * SDK version - MUST match version in package.json\n *\n * This version is sent to the API in the x-sdk-version header\n * to help with debugging and compatibility tracking.\n *\n * IMPORTANT: When releasing a new SDK version, update BOTH:\n * 1. This constant\n * 2. The \"version\" field in package.json\n */\nexport const SDK_VERSION = '0.9.0';\n"],"mappings":";AAUO,IAAM,cAAc;","names":[]}
@@ -1,7 +1,7 @@
1
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
2
 
3
3
 
4
- var _chunkF2NDLDDAjs = require('./chunk-F2NDLDDA.js');
4
+ var _chunkZJXFRSTCjs = require('./chunk-ZJXFRSTC.js');
5
5
 
6
6
  // src/rendering/components/Page.tsx
7
7
  var _jsxruntime = require('react/jsx-runtime');
@@ -20,10 +20,10 @@ function Page({
20
20
  supabaseUrl,
21
21
  dataContext
22
22
  }) {
23
- const baseTokens = _nullishCoalesce(providedTokens, () => ( _chunkF2NDLDDAjs.buildThemeRuntime.call(void 0, theme).tokens));
23
+ const baseTokens = _nullishCoalesce(providedTokens, () => ( _chunkZJXFRSTCjs.buildThemeRuntime.call(void 0, theme).tokens));
24
24
  const themeTokens = _optionalChain([sdkConfig, 'optionalAccess', _ => _.theme, 'optionalAccess', _2 => _2.palette]) ? { ...baseTokens, palette: { ...baseTokens.palette, ...sdkConfig.theme.palette } } : baseTokens;
25
25
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26
- _chunkF2NDLDDAjs.PageRenderer,
26
+ _chunkZJXFRSTCjs.PageRenderer,
27
27
  {
28
28
  theme,
29
29
  page,
@@ -49,4 +49,4 @@ function Page({
49
49
 
50
50
 
51
51
  exports.Page = Page;
52
- //# sourceMappingURL=chunk-TLZHVGTL.js.map
52
+ //# sourceMappingURL=chunk-X4REO3S7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-TLZHVGTL.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-TLZHVGTL.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
+ {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-X4REO3S7.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-X4REO3S7.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"]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-A2FZMRDW.mjs";
5
5
  import {
6
6
  prefetchBlockData
7
- } from "./chunk-HDHY4236.mjs";
7
+ } from "./chunk-TBN35TGI.mjs";
8
8
 
9
9
  // src/rendering/helpers/loadPage.ts
10
10
  async function loadPage(params) {
@@ -85,4 +85,4 @@ async function loadPage(params) {
85
85
  export {
86
86
  loadPage
87
87
  };
88
- //# sourceMappingURL=chunk-BNHK7YOC.mjs.map
88
+ //# sourceMappingURL=chunk-YUD7ONZG.mjs.map
@@ -39,7 +39,7 @@
39
39
 
40
40
 
41
41
 
42
- var _chunk6ERSDFTYjs = require('./chunk-6ERSDFTY.js');
42
+ var _chunkU2F4BWKWjs = require('./chunk-U2F4BWKW.js');
43
43
 
44
44
 
45
45
  var _chunkZ6ZWNWWRjs = require('./chunk-Z6ZWNWWR.js');
@@ -91,6 +91,16 @@ function getDirectImageUrl(supabaseUrl, storagePath, storageBucket = "media", si
91
91
 
92
92
  // ../blocks/src/system/runtime/nodes/media.tsx
93
93
  var _jsxruntime = require('react/jsx-runtime');
94
+ var ImagePresets = {
95
+ /** Small thumbnails (200px) - for block previews, lists */
96
+ thumbnail: { width: 200, quality: 80, resize: "contain" },
97
+ /** Card-sized images (600px) - for cards, grids */
98
+ card: { width: 600, quality: 80, resize: "contain" },
99
+ /** Hero images (1200px) - for above-fold content */
100
+ hero: { width: 1200, quality: 85, resize: "contain" },
101
+ /** Full-width images (1920px) - for backgrounds, large displays */
102
+ full: { width: 1920, quality: 85, resize: "contain" }
103
+ };
94
104
  var _serverStorage = null;
95
105
  var _serverStorageChecked = false;
96
106
  function getServerStorage() {
@@ -167,21 +177,21 @@ var debugMediaNodeLog = (...args) => {
167
177
  console.log("[MediaNode]", ...args);
168
178
  }
169
179
  };
170
- var MediaNode = ({ value, className, style }) => {
180
+ var MediaNode = ({ value, className, style, size = ImagePresets.full }) => {
171
181
  if (!value) return null;
172
182
  if (value.type === "video") {
173
183
  const src = value.src;
174
184
  if (!src) return null;
175
185
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "video", { className, style, src, autoPlay: true, muted: true, loop: true, playsInline: true, "aria-label": _nullishCoalesce(value.alt, () => ( "")) });
176
186
  }
177
- const imageUrl = resolveImageUrl(value);
187
+ const imageUrl = resolveImageUrl(value, size);
178
188
  if (!imageUrl) {
179
189
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
180
190
  "div",
181
191
  {
182
192
  className: clsx_default("flex h-48 w-full items-center justify-center", className),
183
- style: _chunk6ERSDFTYjs.mergeStyles.call(void 0, _chunk6ERSDFTYjs.backgroundColorStyle.call(void 0, "neutral-200"), style),
184
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", style: _chunk6ERSDFTYjs.textColorStyle.call(void 0, "neutral-600"), children: "Image unavailable" })
193
+ style: _chunkU2F4BWKWjs.mergeStyles.call(void 0, _chunkU2F4BWKWjs.backgroundColorStyle.call(void 0, "neutral-200"), style),
194
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm", style: _chunkU2F4BWKWjs.textColorStyle.call(void 0, "neutral-600"), children: "Image unavailable" })
185
195
  }
186
196
  );
187
197
  }
@@ -195,7 +205,7 @@ var MediaNode = ({ value, className, style }) => {
195
205
  src: imageUrl,
196
206
  alt: _nullishCoalesce(value.alt, () => ( "")),
197
207
  className,
198
- style: _chunk6ERSDFTYjs.mergeStyles.call(void 0, style, hotspotStyle),
208
+ style: _chunkU2F4BWKWjs.mergeStyles.call(void 0, style, hotspotStyle),
199
209
  loading: "lazy"
200
210
  }
201
211
  );
@@ -203,13 +213,14 @@ var MediaNode = ({ value, className, style }) => {
203
213
  function isRelativePath(storagePath) {
204
214
  return storagePath.startsWith("originals/") || storagePath.startsWith("variants/") || storagePath.startsWith("imports/");
205
215
  }
206
- function resolveImageUrl(value) {
216
+ function resolveImageUrl(value, options) {
207
217
  if (value.type !== "image") return void 0;
208
218
  debugMediaNodeLog("resolveImageUrl input", {
209
219
  assetId: value.assetId,
210
220
  storagePath: value.storagePath,
211
221
  src: value.src,
212
- type: value.type
222
+ type: value.type,
223
+ options
213
224
  });
214
225
  if (value.storagePath && value.storagePath.length > 0) {
215
226
  const supabaseUrl = getSupabaseUrl();
@@ -220,12 +231,24 @@ function resolveImageUrl(value) {
220
231
  `[blocks] Relative storagePath "${value.storagePath}" requires siteId context. Image URL may be incorrect. Ensure siteId is set via runWithMediaContext or setContextSiteId.`
221
232
  );
222
233
  }
223
- const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket, siteId);
234
+ let transformOptions;
235
+ if ("original" in options && options.original) {
236
+ transformOptions = void 0;
237
+ } else {
238
+ transformOptions = {
239
+ width: "width" in options ? options.width : void 0,
240
+ height: "height" in options ? options.height : void 0,
241
+ quality: "quality" in options ? options.quality : void 0,
242
+ resize: "resize" in options ? options.resize : void 0
243
+ };
244
+ }
245
+ const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket, siteId, transformOptions);
224
246
  debugMediaNodeLog("resolve:direct-supabase", {
225
247
  storagePath: value.storagePath,
226
248
  siteId,
227
249
  bucket,
228
- directUrl
250
+ directUrl,
251
+ transformOptions
229
252
  });
230
253
  return directUrl;
231
254
  }
@@ -3189,7 +3212,7 @@ function generateNeutralScale({
3189
3212
  for (let i = 0; i < count; i++) {
3190
3213
  const t = i / (count - 1);
3191
3214
  const tone = isDark ? mix(0.06, 0.92, t) : mix(0.98, 0.1, t);
3192
- const hex2 = _chunk6ERSDFTYjs.oklchToHexGamut.call(void 0, tone, 0.02, warm ? 85 : 250);
3215
+ const hex2 = _chunkU2F4BWKWjs.oklchToHexGamut.call(void 0, tone, 0.02, warm ? 85 : 250);
3193
3216
  const name = `neutral-${shadeNames[i]}`;
3194
3217
  scale.push({ name, hex: hex2 });
3195
3218
  }
@@ -3209,7 +3232,7 @@ function colorsToMap(palette) {
3209
3232
  }
3210
3233
  function isBackgroundDark(hex2) {
3211
3234
  try {
3212
- return _chunk6ERSDFTYjs.featuresFromHex.call(void 0, hex2).Y < 0.5;
3235
+ return _chunkU2F4BWKWjs.featuresFromHex.call(void 0, hex2).Y < 0.5;
3213
3236
  } catch (e3) {
3214
3237
  return false;
3215
3238
  }
@@ -3242,7 +3265,7 @@ function generateCssVars(palette) {
3242
3265
  const cssVars = {};
3243
3266
  Object.entries(palette).forEach(([key, value]) => {
3244
3267
  if (value !== null && value !== void 0) {
3245
- const { r: r2, g, b } = _chunk6ERSDFTYjs.hexToRgb.call(void 0, value);
3268
+ const { r: r2, g, b } = _chunkU2F4BWKWjs.hexToRgb.call(void 0, value);
3246
3269
  cssVars[`--tb-${key}`] = `${r2} ${g} ${b}`;
3247
3270
  }
3248
3271
  });
@@ -7406,11 +7429,11 @@ function buildReferenceSchema(field) {
7406
7429
  return schema;
7407
7430
  }
7408
7431
  function buildRepeaterSchema(field, allowNull, allowIncomplete) {
7409
- const parsed = _chunk6ERSDFTYjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([field, 'access', _87 => _87.schema, 'optionalAccess', _88 => _88.fields]), () => ( [])));
7432
+ const parsed = _chunkU2F4BWKWjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([field, 'access', _87 => _87.schema, 'optionalAccess', _88 => _88.fields]), () => ( [])));
7410
7433
  const childShape = {};
7411
7434
  for (const child of parsed) {
7412
7435
  if (child.type === "group" && _optionalChain([child, 'access', _89 => _89.ui, 'optionalAccess', _90 => _90.flattenInRepeater])) {
7413
- const groupParsed = _chunk6ERSDFTYjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([child, 'access', _91 => _91.schema, 'optionalAccess', _92 => _92.fields]), () => ( [])));
7436
+ const groupParsed = _chunkU2F4BWKWjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([child, 'access', _91 => _91.schema, 'optionalAccess', _92 => _92.fields]), () => ( [])));
7414
7437
  for (const gc of groupParsed) {
7415
7438
  childShape[gc.id] = buildFieldSchema(gc, allowNull, allowIncomplete);
7416
7439
  }
@@ -7429,7 +7452,7 @@ function buildRepeaterSchema(field, allowNull, allowIncomplete) {
7429
7452
  return arraySchema;
7430
7453
  }
7431
7454
  function buildGroupSchema(field, allowNull, allowIncomplete) {
7432
- const parsed = _chunk6ERSDFTYjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([field, 'access', _93 => _93.schema, 'optionalAccess', _94 => _94.fields]), () => ( [])));
7455
+ const parsed = _chunkU2F4BWKWjs.fieldSchema.array().parse(_nullishCoalesce(_optionalChain([field, 'access', _93 => _93.schema, 'optionalAccess', _94 => _94.fields]), () => ( [])));
7433
7456
  const childShape = {};
7434
7457
  for (const child of parsed) {
7435
7458
  childShape[child.id] = buildFieldSchema(child, allowNull, allowIncomplete);
@@ -7447,7 +7470,7 @@ function finalizeSchema(schema, required, allowNull, allowIncomplete = false) {
7447
7470
  }
7448
7471
 
7449
7472
  // ../blocks/src/system/fragments/library/headerCta.ts
7450
- var headerCtaFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7473
+ var headerCtaFragment = _chunkU2F4BWKWjs.defineFragment.call(void 0, {
7451
7474
  id: "headerCta",
7452
7475
  title: "Header CTA",
7453
7476
  description: "Single call-to-action button for the site header.",
@@ -7487,7 +7510,7 @@ var headerCtaFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7487
7510
  }
7488
7511
  ],
7489
7512
  layout: [
7490
- _chunk6ERSDFTYjs.ctaButton.call(void 0, {
7513
+ _chunkU2F4BWKWjs.ctaButton.call(void 0, {
7491
7514
  basePath: "cta",
7492
7515
  // Relative path
7493
7516
  whenPath: "cta.label"
@@ -7497,7 +7520,7 @@ var headerCtaFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7497
7520
  });
7498
7521
 
7499
7522
  // ../blocks/src/system/fragments/library/singleButton.ts
7500
- var singleButtonFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7523
+ var singleButtonFragment = _chunkU2F4BWKWjs.defineFragment.call(void 0, {
7501
7524
  id: "singleButton",
7502
7525
  title: "Single Button Content",
7503
7526
  description: "Heading and primary button for the single button block.",
@@ -7509,7 +7532,7 @@ var singleButtonFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7509
7532
  required: true,
7510
7533
  maxLength: 120
7511
7534
  },
7512
- _chunk6ERSDFTYjs.createButtonGroup.call(void 0, {
7535
+ _chunkU2F4BWKWjs.createButtonGroup.call(void 0, {
7513
7536
  showGroupLabel: true,
7514
7537
  groupId: "button",
7515
7538
  groupLabel: "Button",
@@ -7517,9 +7540,9 @@ var singleButtonFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7517
7540
  })
7518
7541
  ],
7519
7542
  layout: [
7520
- _chunk6ERSDFTYjs.headingGroup.call(void 0, { titlePath: "title" }),
7543
+ _chunkU2F4BWKWjs.headingGroup.call(void 0, { titlePath: "title" }),
7521
7544
  // Relative path
7522
- _chunk6ERSDFTYjs.ctaButton.call(void 0, { basePath: "button" })
7545
+ _chunkU2F4BWKWjs.ctaButton.call(void 0, { basePath: "button" })
7523
7546
  // Relative path
7524
7547
  ]
7525
7548
  });
@@ -7527,26 +7550,26 @@ var singleButtonFragment = _chunk6ERSDFTYjs.defineFragment.call(void 0, {
7527
7550
  // ../blocks/src/system/fragments/lazyInit.ts
7528
7551
  var initialized = false;
7529
7552
  var ALL_FRAGMENTS = [
7530
- _chunk6ERSDFTYjs.bodyCopyFragment,
7531
- _chunk6ERSDFTYjs.heroCopyFragment,
7532
- _chunk6ERSDFTYjs.ctaRowFragment,
7533
- _chunk6ERSDFTYjs.ctaCopyFragment,
7534
- _chunk6ERSDFTYjs.testimonialsHeadingFragment,
7535
- _chunk6ERSDFTYjs.testimonialsCarouselFragment,
7536
- _chunk6ERSDFTYjs.formCopyFragment,
7537
- _chunk6ERSDFTYjs.formEmbedFragment,
7538
- _chunk6ERSDFTYjs.footerBottomTextFragment,
7539
- _chunk6ERSDFTYjs.footerLinkGroupsFragment,
7553
+ _chunkU2F4BWKWjs.bodyCopyFragment,
7554
+ _chunkU2F4BWKWjs.heroCopyFragment,
7555
+ _chunkU2F4BWKWjs.ctaRowFragment,
7556
+ _chunkU2F4BWKWjs.ctaCopyFragment,
7557
+ _chunkU2F4BWKWjs.testimonialsHeadingFragment,
7558
+ _chunkU2F4BWKWjs.testimonialsCarouselFragment,
7559
+ _chunkU2F4BWKWjs.formCopyFragment,
7560
+ _chunkU2F4BWKWjs.formEmbedFragment,
7561
+ _chunkU2F4BWKWjs.footerBottomTextFragment,
7562
+ _chunkU2F4BWKWjs.footerLinkGroupsFragment,
7540
7563
  headerCtaFragment,
7541
7564
  singleButtonFragment,
7542
- _chunk6ERSDFTYjs.blogFeaturedPostFragment,
7543
- _chunk6ERSDFTYjs.blogListGridFragment,
7544
- _chunk6ERSDFTYjs.blogListStackFragment,
7545
- _chunk6ERSDFTYjs.faqHeadingFragment,
7546
- _chunk6ERSDFTYjs.faqAccordionFragment,
7547
- _chunk6ERSDFTYjs.cardFragment,
7548
- _chunk6ERSDFTYjs.headingFragment,
7549
- _chunk6ERSDFTYjs.richTextFragment
7565
+ _chunkU2F4BWKWjs.blogFeaturedPostFragment,
7566
+ _chunkU2F4BWKWjs.blogListGridFragment,
7567
+ _chunkU2F4BWKWjs.blogListStackFragment,
7568
+ _chunkU2F4BWKWjs.faqHeadingFragment,
7569
+ _chunkU2F4BWKWjs.faqAccordionFragment,
7570
+ _chunkU2F4BWKWjs.cardFragment,
7571
+ _chunkU2F4BWKWjs.headingFragment,
7572
+ _chunkU2F4BWKWjs.richTextFragment
7550
7573
  ];
7551
7574
  function lazyRegisterFragments(registerFn) {
7552
7575
  if (initialized) return;
@@ -7642,7 +7665,7 @@ var resolveImageStyleTransform = {
7642
7665
  style.width = scaleValue;
7643
7666
  style.height = scaleValue;
7644
7667
  }
7645
- if (position && !_chunk6ERSDFTYjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position)) {
7668
+ if (position && !_chunkU2F4BWKWjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position)) {
7646
7669
  style.objectPosition = position;
7647
7670
  }
7648
7671
  return style;
@@ -7673,12 +7696,12 @@ var resolveImageClassNameTransform = {
7673
7696
  if (!needsAnchoring) {
7674
7697
  return `${baseClass} inset-0 h-full w-full`;
7675
7698
  }
7676
- const isPreset = position && _chunk6ERSDFTYjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
7699
+ const isPreset = position && _chunkU2F4BWKWjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
7677
7700
  const isCustom = position && !isPreset;
7678
7701
  if (isCustom) {
7679
7702
  return baseClass;
7680
7703
  }
7681
- const anchorClasses = _chunk6ERSDFTYjs.getAnchorClasses.call(void 0, position);
7704
+ const anchorClasses = _chunkU2F4BWKWjs.getAnchorClasses.call(void 0, position);
7682
7705
  return `${baseClass} ${anchorClasses}`;
7683
7706
  }
7684
7707
  };
@@ -7806,13 +7829,13 @@ var spacingTransform = {
7806
7829
  return baseClass.trim() || "";
7807
7830
  }
7808
7831
  const trimmed = value.trim();
7809
- if (!_chunk6ERSDFTYjs.isSemanticSpacing.call(void 0, trimmed)) {
7832
+ if (!_chunkU2F4BWKWjs.isSemanticSpacing.call(void 0, trimmed)) {
7810
7833
  if (process.env.NODE_ENV !== "production") {
7811
7834
  console.warn(`[spacing] Invalid spacing value: "${trimmed}". Expected one of: none, compact, cozy, medium, comfortable, spacious.`);
7812
7835
  }
7813
7836
  return baseClass.trim() || "";
7814
7837
  }
7815
- const spacingClass = _chunk6ERSDFTYjs.resolveSpacing.call(void 0, trimmed, axis);
7838
+ const spacingClass = _chunkU2F4BWKWjs.resolveSpacing.call(void 0, trimmed, axis);
7816
7839
  return baseClass ? `${baseClass.trim()} ${spacingClass}` : spacingClass;
7817
7840
  }
7818
7841
  };
@@ -7917,7 +7940,7 @@ var sectionClassNameTransform = {
7917
7940
  if (value && typeof value === "object") {
7918
7941
  const input = value;
7919
7942
  if (typeof input.spacing === "string") {
7920
- if (_chunk6ERSDFTYjs.isSemanticSpacing.call(void 0, input.spacing)) {
7943
+ if (_chunkU2F4BWKWjs.isSemanticSpacing.call(void 0, input.spacing)) {
7921
7944
  spacing = input.spacing;
7922
7945
  } else if (process.env.NODE_ENV !== "production") {
7923
7946
  console.warn(`[sectionStyles] Invalid spacing value in _sectionStyles: "${input.spacing}". Expected one of: none, compact, cozy, medium, comfortable, spacious.`);
@@ -7927,7 +7950,7 @@ var sectionClassNameTransform = {
7927
7950
  if (adjustedBaseClass) classes.push(adjustedBaseClass);
7928
7951
  const effectiveSpacing = _nullishCoalesce(spacing, () => ( defaultSpacing));
7929
7952
  if (effectiveSpacing) {
7930
- const spacingClass = _chunk6ERSDFTYjs.resolveSpacing.call(void 0, effectiveSpacing, "y");
7953
+ const spacingClass = _chunkU2F4BWKWjs.resolveSpacing.call(void 0, effectiveSpacing, "y");
7931
7954
  classes.push(spacingClass);
7932
7955
  }
7933
7956
  return classes.join(" ").trim();
@@ -7966,10 +7989,10 @@ var boxStylesTransforms = [
7966
7989
 
7967
7990
  // ../blocks/src/system/transforms/registry/index.ts
7968
7991
  var builtinTransformDefinitions = [
7969
- ..._chunk6ERSDFTYjs.formattingTransforms,
7970
- ..._chunk6ERSDFTYjs.layoutTransforms,
7971
- ..._chunk6ERSDFTYjs.uiTransforms,
7972
- ..._chunk6ERSDFTYjs.mediaTransforms,
7992
+ ..._chunkU2F4BWKWjs.formattingTransforms,
7993
+ ..._chunkU2F4BWKWjs.layoutTransforms,
7994
+ ..._chunkU2F4BWKWjs.uiTransforms,
7995
+ ..._chunkU2F4BWKWjs.mediaTransforms,
7973
7996
  ...backgroundTransforms,
7974
7997
  ...linksTransforms,
7975
7998
  ...boxStylesTransforms
@@ -7992,8 +8015,8 @@ function Section({
7992
8015
  }) {
7993
8016
  const overflowClass = allowOverflow ? "overflow-visible" : "overflow-hidden";
7994
8017
  const alwaysClass = clsx_default("relative isolate", overflowClass, className);
7995
- const backgroundStyle = background ? _chunk6ERSDFTYjs.backgroundColorStyle.call(void 0, background) : void 0;
7996
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Comp, { className: alwaysClass, style: _chunk6ERSDFTYjs.mergeStyles.call(void 0, backgroundStyle, style), "data-slot": _nullishCoalesce(dataSlot, () => ( "section")), children });
8018
+ const backgroundStyle = background ? _chunkU2F4BWKWjs.backgroundColorStyle.call(void 0, background) : void 0;
8019
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Comp, { className: alwaysClass, style: _chunkU2F4BWKWjs.mergeStyles.call(void 0, backgroundStyle, style), "data-slot": _nullishCoalesce(dataSlot, () => ( "section")), children });
7997
8020
  }
7998
8021
 
7999
8022
  // ../blocks/src/primitives/layout/Stack.tsx
@@ -8260,10 +8283,10 @@ var FormNodeSSR = ({ value, submitLabel, successMessage: _successMessage, classN
8260
8283
  "div",
8261
8284
  {
8262
8285
  className: clsx_default("rounded-md border border-dashed p-6 text-sm", className),
8263
- style: _chunk6ERSDFTYjs.mergeStyles.call(void 0,
8264
- _chunk6ERSDFTYjs.backgroundColorStyle.call(void 0, "surface"),
8265
- _chunk6ERSDFTYjs.borderColorStyle.call(void 0, "border"),
8266
- _chunk6ERSDFTYjs.textColorStyle.call(void 0, "mutedText")
8286
+ style: _chunkU2F4BWKWjs.mergeStyles.call(void 0,
8287
+ _chunkU2F4BWKWjs.backgroundColorStyle.call(void 0, "surface"),
8288
+ _chunkU2F4BWKWjs.borderColorStyle.call(void 0, "border"),
8289
+ _chunkU2F4BWKWjs.textColorStyle.call(void 0, "mutedText")
8267
8290
  ),
8268
8291
  children: "Missing or unknown form."
8269
8292
  }
@@ -8975,7 +8998,7 @@ function extractRouteMapFromViewModel(viewModel) {
8975
8998
  }
8976
8999
  function parseBinding(raw, origin) {
8977
9000
  try {
8978
- return _chunk6ERSDFTYjs.bindingSchema.parse(raw);
9001
+ return _chunkU2F4BWKWjs.bindingSchema.parse(raw);
8979
9002
  } catch (error) {
8980
9003
  const message = error instanceof Error ? error.message : String(error);
8981
9004
  throw new Error(`Failed to parse binding (${origin}): ${message}`);
@@ -9064,7 +9087,7 @@ function applyScopes(node, context) {
9064
9087
  if (!node.$scopes) return context;
9065
9088
  const scopeContext = { ...context, scopes: [...context.scopes] };
9066
9089
  for (const scope of node.$scopes) {
9067
- const binding = _chunk6ERSDFTYjs.bindingSchema.parse(scope.from);
9090
+ const binding = _chunkU2F4BWKWjs.bindingSchema.parse(scope.from);
9068
9091
  const value = resolveBindingValue(binding, scopeContext);
9069
9092
  scopeContext.scopes.push({ name: scope.name, value });
9070
9093
  }
@@ -9537,7 +9560,7 @@ function PageRenderer({
9537
9560
  setContextSupabaseUrl(_optionalChain([dataContext, 'optionalAccess', _141 => _141.supabaseUrl]));
9538
9561
  setContextSiteId(_optionalChain([dataContext, 'optionalAccess', _142 => _142.siteId]));
9539
9562
  if (!page || page.blocks.length === 0) {
9540
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-6 text-sm", style: _chunk6ERSDFTYjs.textColorStyle.call(void 0, "mutedText"), children: "No blocks found." });
9563
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-6 text-sm", style: _chunkU2F4BWKWjs.textColorStyle.call(void 0, "mutedText"), children: "No blocks found." });
9541
9564
  }
9542
9565
  const themeTokens = _nullishCoalesce(providedThemeTokens, () => ( buildThemeRuntime(theme).tokens));
9543
9566
  const resolvedRegistry = _nullishCoalesce(registry, () => ( getDefaultComponentRegistry()));
@@ -9605,7 +9628,7 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
9605
9628
  sdkConfig
9606
9629
  }) {
9607
9630
  const OverrideComponent = getBlockOverride(block.kind, blockOverrides);
9608
- let definition = _chunk6ERSDFTYjs.getBlockDefinition.call(void 0, block.kind);
9631
+ let definition = _chunkU2F4BWKWjs.getBlockDefinition.call(void 0, block.kind);
9609
9632
  if (!definition && block.kind.startsWith("custom.") && _optionalChain([sdkConfig, 'optionalAccess', _143 => _143.customBlocks])) {
9610
9633
  const sdkBlock = sdkConfig.customBlocks.find((b) => b.id === block.kind);
9611
9634
  if (sdkBlock) {
@@ -9706,7 +9729,7 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
9706
9729
  return prev.block === next.block && prev.registry === next.registry && prev.dataContext === next.dataContext && prev.themeTokens === next.themeTokens && prev.themeConfig === next.themeConfig && prev.routeMap === next.routeMap && prev.usePlaceholders === next.usePlaceholders && prev.wrapBlock === next.wrapBlock && prev.blockOverrides === next.blockOverrides && prev.sdkConfig === next.sdkConfig;
9707
9730
  });
9708
9731
  function fallback(message) {
9709
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-6 text-sm", style: _chunk6ERSDFTYjs.textColorStyle.call(void 0, "mutedText"), children: message });
9732
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-6 text-sm", style: _chunkU2F4BWKWjs.textColorStyle.call(void 0, "mutedText"), children: message });
9710
9733
  }
9711
9734
  function resolveBlockData({ block, definition, dataContext }) {
9712
9735
  if (!definition.dataLoaders || Object.keys(definition.dataLoaders).length === 0) {
@@ -9811,7 +9834,7 @@ function resolveBackground(background, theme) {
9811
9834
  let imageStyle = {};
9812
9835
  let imageClassName = "absolute inset-0 -z-10 h-full w-full object-cover";
9813
9836
  if (background.image) {
9814
- const url = resolveImageUrl(background.image);
9837
+ const url = resolveImageUrl(background.image, ImagePresets.full);
9815
9838
  if (url) {
9816
9839
  image = {
9817
9840
  url,
@@ -9846,7 +9869,7 @@ function resolveBackground(background, theme) {
9846
9869
  imageStyle.width = scaleValue;
9847
9870
  imageStyle.height = scaleValue;
9848
9871
  }
9849
- const isPresetPosition = position && _chunk6ERSDFTYjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
9872
+ const isPresetPosition = position && _chunkU2F4BWKWjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
9850
9873
  if (position && !isPresetPosition) {
9851
9874
  imageStyle.objectPosition = position;
9852
9875
  }
@@ -9870,11 +9893,11 @@ function buildImageClassName(objectFit, position, scaleValue) {
9870
9893
  return `${baseClass} inset-0 h-full w-full ${fitClass}`;
9871
9894
  }
9872
9895
  if ((objectFit === "custom" || objectFit === "original") && scaleValue) {
9873
- const isPresetPosition = position && _chunk6ERSDFTYjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
9896
+ const isPresetPosition = position && _chunkU2F4BWKWjs.BACKGROUND_POSITION_PRESET_VALUES.includes(position);
9874
9897
  if (position && !isPresetPosition) {
9875
9898
  return baseClass;
9876
9899
  }
9877
- const anchorClasses = _chunk6ERSDFTYjs.getAnchorClasses.call(void 0, position);
9900
+ const anchorClasses = _chunkU2F4BWKWjs.getAnchorClasses.call(void 0, position);
9878
9901
  return `${baseClass} ${anchorClasses}`;
9879
9902
  }
9880
9903
  return `${baseClass} inset-0 h-full w-full`;
@@ -10318,7 +10341,8 @@ function getDefaultInputSettings() {
10318
10341
 
10319
10342
 
10320
10343
 
10321
- exports.resolveImageUrl = resolveImageUrl; exports.getDefaultComponentRegistry = getDefaultComponentRegistry; exports.makeDefaultBlockComponent = makeDefaultBlockComponent; exports.renderBlock = renderBlock; exports.buildThemeRuntime = buildThemeRuntime; exports.PageRenderer = PageRenderer; exports.generateButtonCoreCss = generateButtonCoreCss; exports.getDefaultButtonVariants = getDefaultButtonVariants; exports.generateCardCoreCss = generateCardCoreCss; exports.getDefaultCardVariants = getDefaultCardVariants; exports.generateInputCoreCss = generateInputCoreCss; exports.getDefaultInputSettings = getDefaultInputSettings; exports.RichText = RichText2; exports.resolveBackground = resolveBackground; exports.SectionBackground = SectionBackground;
10344
+
10345
+ exports.ImagePresets = ImagePresets; exports.resolveImageUrl = resolveImageUrl; exports.getDefaultComponentRegistry = getDefaultComponentRegistry; exports.makeDefaultBlockComponent = makeDefaultBlockComponent; exports.renderBlock = renderBlock; exports.buildThemeRuntime = buildThemeRuntime; exports.PageRenderer = PageRenderer; exports.generateButtonCoreCss = generateButtonCoreCss; exports.getDefaultButtonVariants = getDefaultButtonVariants; exports.generateCardCoreCss = generateCardCoreCss; exports.getDefaultCardVariants = getDefaultCardVariants; exports.generateInputCoreCss = generateInputCoreCss; exports.getDefaultInputSettings = getDefaultInputSettings; exports.RichText = RichText2; exports.resolveBackground = resolveBackground; exports.SectionBackground = SectionBackground;
10322
10346
  /*! Bundled license information:
10323
10347
 
10324
10348
  chroma-js/src/utils/contrastAPCA.js:
@@ -10336,4 +10360,4 @@ chroma-js/src/utils/contrastAPCA.js:
10336
10360
  * https://readtech.org/ARC/
10337
10361
  *)
10338
10362
  */
10339
- //# sourceMappingURL=chunk-F2NDLDDA.js.map
10363
+ //# sourceMappingURL=chunk-ZJXFRSTC.js.map