@riverbankcms/sdk 0.104.3 → 0.107.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 (236) hide show
  1. package/README.md +84 -51
  2. package/dist/{PreviewEditorSidebar-CBMhU9p_.mjs → PreviewEditorSidebar-DpAbAl08.mjs} +1811 -1179
  3. package/dist/{PreviewEditorUI-C5KEw4M8.mjs → PreviewEditorUI-O7cn6Xxv.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-CStABBUh.mjs → PreviewQueryProvider-D0tnKl0t.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Iq12HjL7.mjs → SdkPreviewModeRuntime-CVB7urtl.mjs} +2144 -393
  6. package/dist/{SiteChromeCustomizeContext-Cx0NMdyv.mjs → SiteChromeCustomizeContext-C_sizso-.mjs} +3825 -2653
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +32945 -1339
  8. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  9. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +5 -1
  10. package/dist/_dts/api/src/contentRuntime.d.ts +6 -15
  11. package/dist/_dts/api/src/courses.d.ts +68 -10
  12. package/dist/_dts/api/src/endpoints.d.ts +29 -0
  13. package/dist/_dts/api/src/index.d.ts +124 -124
  14. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +9 -0
  15. package/dist/_dts/api/src/sdkContracts.d.ts +116 -6
  16. package/dist/_dts/api/src/siteOperations.d.ts +1 -0
  17. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +26 -4
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +31 -46
  19. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +36 -4
  20. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  21. package/dist/_dts/blocks/src/portal/types.d.ts +25 -7
  22. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +2 -2
  23. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -0
  24. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +4 -0
  26. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule-projection.d.ts +52 -0
  27. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +22 -0
  28. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +45 -0
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +10 -0
  30. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -1
  31. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +9 -0
  33. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +8 -2
  34. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +8 -8
  35. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +24 -24
  36. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +29 -0
  37. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  38. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +2 -5
  40. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +1 -0
  42. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +2 -2
  43. package/dist/_dts/blocks/src/system/node/fragments/styledCard.d.ts +3 -0
  44. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  45. package/dist/_dts/blocks/src/system/runtime/blockComposition.d.ts +2 -0
  46. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +90 -6
  47. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +45 -3
  48. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +2 -1
  51. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +2 -1
  53. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +17 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +9 -18
  58. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +106 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/events/RecurringSchedule.d.ts +11 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +7 -3
  61. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +11 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +6 -6
  66. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +11 -5
  67. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  68. package/dist/_dts/blocks/src/system/runtime/nodes/svg.d.ts +7 -0
  69. package/dist/_dts/core/src/branded.d.ts +44 -0
  70. package/dist/_dts/core/src/dated-offering-settlement.d.ts +47 -0
  71. package/dist/_dts/core/src/event-page-surface-subject.d.ts +44 -0
  72. package/dist/_dts/core/src/index.d.ts +49 -47
  73. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +1452 -15
  74. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +1 -1
  75. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +4 -1
  76. package/dist/_dts/media-core/src/index.d.ts +2 -1
  77. package/dist/_dts/media-core/src/storagePathDomain.d.ts +47 -0
  78. package/dist/_dts/media-core/src/url.d.ts +1 -21
  79. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  80. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -1
  81. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -1
  82. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -9
  83. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +7 -11
  84. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -9
  85. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +2 -6
  86. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +5 -9
  87. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +81 -43
  88. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.typography.d.ts +61 -0
  89. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +7 -17
  90. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +15 -8
  91. package/dist/_dts/preview-next/src/client/preview/typographyFontCatalog.d.ts +57 -0
  92. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -1
  93. package/dist/_dts/sdk/src/cli/commands/push/execute/theme.d.ts +4 -7
  94. package/dist/_dts/sdk/src/cli/commands/style.d.ts +24 -10
  95. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +3 -3
  96. package/dist/_dts/sdk/src/cli/sync/media.d.ts +16 -2
  97. package/dist/_dts/sdk/src/client/management/blocks.d.ts +1 -1
  98. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  99. package/dist/_dts/sdk/src/client/management/types.d.ts +132 -23
  100. package/dist/_dts/sdk/src/client/types.d.ts +2 -0
  101. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  102. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  103. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  104. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +23 -3
  105. package/dist/_dts/sdk/src/data/dataLoaderContext.d.ts +17 -0
  106. package/dist/_dts/sdk/src/data/dataLoaderValue.d.ts +36 -0
  107. package/dist/_dts/sdk/src/data/defineOwnDataProperty.d.ts +2 -0
  108. package/dist/_dts/sdk/src/data/executeCodeLoaders.d.ts +36 -40
  109. package/dist/_dts/sdk/src/data/index.d.ts +3 -3
  110. package/dist/_dts/sdk/src/data/resolveBlockData.d.ts +54 -0
  111. package/dist/_dts/sdk/src/data/types.d.ts +43 -78
  112. package/dist/_dts/sdk/src/next/index.d.ts +1 -0
  113. package/dist/_dts/sdk/src/next/redirect-destination.d.ts +1 -1
  114. package/dist/_dts/sdk/src/next/resolveTheme.d.ts +2 -1
  115. package/dist/_dts/sdk/src/next/types.d.ts +10 -1
  116. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -8
  117. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +9 -4
  118. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +6 -10
  119. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  120. package/dist/_dts/sdk/src/server.d.ts +4 -3
  121. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  122. package/dist/_dts/sdk/src/version.d.ts +1 -1
  123. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +2 -2
  124. package/dist/_dts/site-commands/src/commands.d.ts +921 -30
  125. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +5 -1
  126. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  127. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +17 -0
  128. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +2 -2
  129. package/dist/_dts/theme-core/src/buttons/types.d.ts +9 -5
  130. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/fonts/types.d.ts +6 -0
  133. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  134. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -24
  135. package/dist/_dts/theme-core/src/palette/colors.d.ts +12 -0
  136. package/dist/_dts/theme-core/src/palette/curated/brand-led.d.ts +10 -5
  137. package/dist/_dts/theme-core/src/palette/curated/high-contrast.d.ts +6 -3
  138. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +31 -236
  139. package/dist/_dts/theme-core/src/palette/curated/soft-natural.d.ts +8 -4
  140. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +14 -12
  141. package/dist/_dts/theme-core/src/palette/curated/warm-dark.d.ts +4 -2
  142. package/dist/_dts/theme-core/src/palette/curated/warm-neutral.d.ts +8 -4
  143. package/dist/_dts/theme-core/src/palette/editorState.d.ts +33 -3
  144. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -4
  145. package/dist/_dts/theme-core/src/palette/libraryModel.d.ts +12 -6
  146. package/dist/_dts/theme-core/src/palette/persistenceReadSource.d.ts +20 -72
  147. package/dist/_dts/theme-core/src/palette/resolveSelection.d.ts +29 -4
  148. package/dist/_dts/theme-core/src/palette/selection.d.ts +6 -4
  149. package/dist/_dts/theme-core/src/schema.d.ts +121 -4
  150. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +218 -158
  151. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -6
  152. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +218 -158
  153. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +1 -0
  154. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  155. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +161 -51
  156. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +6 -0
  157. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  158. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -1
  159. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +24 -1
  160. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +14 -48
  161. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +10 -23
  162. package/dist/_dts/theme-core/src/site-styles/siteStyleThemeCompiler.d.ts +1 -2
  163. package/dist/_dts/theme-core/src/site-styles/siteStyleTypography.d.ts +456 -0
  164. package/dist/_dts/theme-core/src/site-styles/types.d.ts +52 -3
  165. package/dist/cli/index.mjs +3155 -1701
  166. package/dist/client/{DiscountCodeDisclosure-BXM73_E5.mjs → DiscountCodeDisclosure-BwGkvmVH.mjs} +1 -1
  167. package/dist/client/{EventCombined.client-DT5elP7j.mjs → EventCombined.client-JnWE6Hzc.mjs} +3 -3
  168. package/dist/client/{EventListing.client-pTYGfV9C.mjs → EventListing.client-DQewc_kg.mjs} +2 -2
  169. package/dist/client/{LeafletStaticMap-dQrhlUe3.mjs → LeafletStaticMap-DPAU3SFt.mjs} +1 -1
  170. package/dist/client/{MagicLinkForm-u6Dul4j5.mjs → MagicLinkForm-D4kpWCbW.mjs} +2 -2
  171. package/dist/client/{StepIndicator-nWqineJ2.mjs → StepIndicator-CBlkb4rA.mjs} +2 -2
  172. package/dist/client/{accordion-CSJcTUyH.mjs → accordion-DAIBVpTS.mjs} +1 -1
  173. package/dist/client/{bookingForm-C73wOuVa.mjs → bookingForm-DZ-4l5_1.mjs} +7 -7
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{buttons-DfYyqt8C.mjs → buttons-DJgynGHQ.mjs} +122 -58
  176. package/dist/client/{carousel-fMBb0JSc.mjs → carousel-D-SLfX8r.mjs} +1 -1
  177. package/dist/client/{cart-BtaCwT3S.mjs → cart-CEgbgJhX.mjs} +3 -3
  178. package/dist/client/{checkout-DkTwZSnh.mjs → checkout-CXWrCRAA.mjs} +3 -3
  179. package/dist/client/client.mjs +4300 -1560
  180. package/dist/client/{colorStyles-Wyl6JujD.mjs → colorStyles-jZS6KfkP.mjs} +1 -1
  181. package/dist/client/{colorTokenParts-dT8MISgJ.mjs → colorTokenParts-CMugwvX_.mjs} +3 -1
  182. package/dist/client/{courseRegistration-DnLmapJu.mjs → courseRegistration-DVmLrRVz.mjs} +56 -21
  183. package/dist/client/{eventCalendar-BvLOc9KY.mjs → eventCalendar-DCuyPY_c.mjs} +29 -21
  184. package/dist/client/{eventCombined-kShgJPQr.mjs → eventCombined-kP2CA2D4.mjs} +2 -2
  185. package/dist/client/{eventDetails-C5NTM0Vo.mjs → eventDetails-DU0LeF5e.mjs} +4 -4
  186. package/dist/client/{eventListing-B82ZdKP6.mjs → eventListing-CcHF87BI.mjs} +2 -2
  187. package/dist/client/{eventRegistration-qJVFqBWo.mjs → eventRegistration-DJnR0yFH.mjs} +8 -8
  188. package/dist/client/{form-BvAcKiuu.mjs → form-CH1lCusH.mjs} +2 -2
  189. package/dist/client/{headerSection-NvAiEHAg.mjs → headerSection-CBPFZoku.mjs} +3 -3
  190. package/dist/client/hooks.mjs +2958 -1848
  191. package/dist/client/{locationMap-D0j52xfI.mjs → locationMap-Cx1hBg5n.mjs} +3 -3
  192. package/dist/client/{media-BCW_g2cQ.mjs → media-DHtSxS5V.mjs} +61 -56
  193. package/dist/client/{newsletterForm-B8_i93qH.mjs → newsletterForm-1ZL_ti9u.mjs} +3 -3
  194. package/dist/client/{pricing-DIYnyHOk.mjs → pricing-BIbzmV0G.mjs} +1 -1
  195. package/dist/client/{productDetail-w0eAHkuQ.mjs → productDetail-BTh5gHBV.mjs} +3 -3
  196. package/dist/client/{productList-Vsguq5Xt.mjs → productList-Cc7OMrqN.mjs} +3 -3
  197. package/dist/client/{propsDecoder-CD2pJ1WB.mjs → propsDecoder-oR-M-ISN.mjs} +192 -59
  198. package/dist/client/rendering/client.mjs +2031 -1239
  199. package/dist/client/rendering/islands.mjs +20 -20
  200. package/dist/client/rendering.mjs +4889 -1712
  201. package/dist/client/{shop-Dgxs-Q8F.mjs → shop-CQ_YbCnn.mjs} +8 -8
  202. package/dist/client/{shop-commerce-DJAhsTaT.mjs → shop-commerce-BM-AoD3M.mjs} +6 -6
  203. package/dist/client/{shop-commerce-store-CfCXltXW.mjs → shop-commerce-store-DFMQhU5p.mjs} +1 -1
  204. package/dist/client/{shopShared-CmDcPXUt.mjs → shopShared-D0SKO2Cu.mjs} +3 -3
  205. package/dist/client/{useDiscountCodeUi-CirrT2bM.mjs → useDiscountCodeUi-CrG4_ARt.mjs} +1 -1
  206. package/dist/client/{useEventFilters-CNZxlCcO.mjs → useEventFilters-CxK8Fekl.mjs} +6 -6
  207. package/dist/client/{usePolling-Baks_iBI.mjs → usePolling-jcVryNgZ.mjs} +2 -2
  208. package/dist/preview-next/before-render.mjs +40 -1
  209. package/dist/preview-next/client/runtime.mjs +4 -4
  210. package/dist/preview-next/middleware.mjs +40 -1
  211. package/dist/{previewAuthStore-CfquDtTh.mjs → previewAuthStore-BPcJPzdz.mjs} +40 -1
  212. package/dist/{sdk-runtime-BfNiFeNJ.mjs → sdk-runtime-C39Rsk-x.mjs} +2 -2
  213. package/dist/{separator-BhAR_Xmf.mjs → separator-BoMSQnsP.mjs} +1 -1
  214. package/dist/server/components.mjs +4661 -2162
  215. package/dist/server/config-validation.mjs +2728 -1847
  216. package/dist/server/config.mjs +2728 -1847
  217. package/dist/server/data.mjs +3381 -1915
  218. package/dist/server/index.mjs +46 -4
  219. package/dist/server/next/middleware.mjs +1 -1
  220. package/dist/server/next.mjs +5555 -2225
  221. package/dist/server/page-converter.mjs +3058 -2182
  222. package/dist/server/prebuild.mjs +1 -1
  223. package/dist/server/rendering/server.mjs +4850 -2125
  224. package/dist/server/rendering.mjs +5664 -2464
  225. package/dist/server/routing.mjs +3027 -1509
  226. package/dist/server/server.mjs +3844 -2217
  227. package/dist/server/theme-bridge.mjs +9121 -7765
  228. package/dist/server/theme.mjs +152 -59
  229. package/dist/styles/index.css +1217 -31
  230. package/package.json +1 -1
  231. package/dist/_dts/preview-next/src/client/preview/typographySelectionInput.d.ts +0 -16
  232. package/dist/_dts/theme-core/src/palette/historicalThemePalette.d.ts +0 -44
  233. package/dist/_dts/theme-core/src/palette/legacyRuntimeProjection.d.ts +0 -55
  234. package/dist/_dts/theme-core/src/palette/legacySelection.d.ts +0 -45
  235. package/dist/_dts/theme-core/src/palette/paletteCompatibilityTransition.d.ts +0 -232
  236. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +0 -234
@@ -485,6 +485,8 @@ export interface RiverbankClient {
485
485
  eventSurface?: string;
486
486
  eventPresets?: string;
487
487
  scheduleScope?: string;
488
+ detailLevel?: 'full' | 'listing';
489
+ readProfile?: string;
488
490
  /** Optional: filter to a specific content entry (event series) */
489
491
  entryId?: string;
490
492
  /** Optional: filter to a specific seriesId */
@@ -45,7 +45,7 @@ export type BlockCategory = 'marketing' | 'content' | 'blog' | 'media' | 'layout
45
45
  *
46
46
  * Re-exported from `@riverbankcms/blocks` (single source of truth).
47
47
  */
48
- export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "getPublicEventDetails", "listPublicCourses", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices", "getPublicWeeklySlotAvailability"];
48
+ export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "listPublicRecurringSchedule", "getPublicEventDetails", "listPublicCourses", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices", "getPublicWeeklySlotAvailability"];
49
49
  export type SdkLoaderEndpoint = (typeof SUPPORTED_LOADER_ENDPOINTS)[number];
50
50
  export type LoaderParamBinding = {
51
51
  $bind: {
@@ -144,6 +144,7 @@ export declare const sdkLoaderEndpointSchema: z.ZodEnum<{
144
144
  listPublicProducts: "listPublicProducts";
145
145
  getPublishedEntryPreview: "getPublishedEntryPreview";
146
146
  listPublishedEntries: "listPublishedEntries";
147
+ listPublicRecurringSchedule: "listPublicRecurringSchedule";
147
148
  getPublicEventDetails: "getPublicEventDetails";
148
149
  listPublicRouteCandidates: "listPublicRouteCandidates";
149
150
  }>;
@@ -233,6 +234,7 @@ export declare const sdkConfigLoaderSchema: z.ZodObject<{
233
234
  listPublicProducts: "listPublicProducts";
234
235
  getPublishedEntryPreview: "getPublishedEntryPreview";
235
236
  listPublishedEntries: "listPublishedEntries";
237
+ listPublicRecurringSchedule: "listPublicRecurringSchedule";
236
238
  getPublicEventDetails: "getPublicEventDetails";
237
239
  listPublicRouteCandidates: "listPublicRouteCandidates";
238
240
  }>;
@@ -298,6 +300,7 @@ export declare const sdkDataLoadersSchema: z.ZodOptional<z.ZodRecord<z.ZodString
298
300
  listPublicProducts: "listPublicProducts";
299
301
  getPublishedEntryPreview: "getPublishedEntryPreview";
300
302
  listPublishedEntries: "listPublishedEntries";
303
+ listPublicRecurringSchedule: "listPublicRecurringSchedule";
301
304
  getPublicEventDetails: "getPublicEventDetails";
302
305
  listPublicRouteCandidates: "listPublicRouteCandidates";
303
306
  }>;
@@ -1,5 +1,5 @@
1
1
  export type { TipTapNode, TipTapMark, InlineText, InlineTextAccentTone, InlineTextHighlightTone, InlineTextMark, InlineTextRun, Media, LinkValue, InternalRouteOnlyLinkValue, InternalResolvedLinkValue, InternalLinkValue, ExternalLinkValue, CustomLinkValue, PageLinkValue, EntryLinkValue, RichTextPrimitiveProps, RichTextVariant, } from './content';
2
- export type { AppointmentBookingContent, BlogListingContent, BlogPostContent, BodyTextAlignment, BodyTextContent, ButtonVariant, CalendarTabViews, CartContent, CardStylesContent, CheckoutContent, CollectionContent, ColumnsContent, ColumnOption, ContainerStylesContent, CourseDetailsContent, CourseRegistrationContent, CtaFullContent, DisplayMode, EmbedContent, EventCalendarContent, EventDetailsContent, EventLayout, EventListingContent, EventRegistrationContent, EventSpotlightContent, FaqContent, FaqItem, FilterAutoShow, FormBlockContent, GiftingContent, HeroContent, HeroCta, HeroCtaInput, HeroMedia, ImageColSize, ImageGalleryContent, LocationMapContent, LayoutAlign, LayoutWidth, MediaTextAlignment, MediaTextAspectRatio, MediaTextContent, MediaTextImagePosition, NewsletterSignupContent, NewsletterSignupPreset, ProductDetailContent, ProductListContent, SectionStylesContent, SemanticIconId, SemanticSpacing, ShopContent, SingleButtonContent, SiteFooterContent, SiteHeaderContent, StackContentAlignment, StackImagePosition, SystemBlockContentByFullKind, SystemBlockContentByKind, SystemBlockContentFor, SystemBlockShortKind, TeamMembersContent, TestimonialEntryContent, TestimonialsBlockContent, ThumbnailPadding, ThumbnailShape, VideoGridContent, WeekStart, BlockIconValue, FeatureCardIconTreatment, } from './system-block-content';
2
+ export type { AppointmentBookingContent, BlogListingContent, BlogPostContent, BodyTextAlignment, BodyTextContent, ButtonVariant, CalendarTabViews, CartContent, CardStylesContent, CheckoutContent, CollectionContent, ColumnsContent, ColumnOption, ContainerStylesContent, CourseDetailsContent, CourseRegistrationContent, CtaFullContent, DisplayMode, EmbedContent, EventCalendarContent, EventDetailsContent, EventLayout, EventListingContent, EventRegistrationContent, EventSpotlightContent, FaqContent, FaqItem, FilterAutoShow, FormBlockContent, GiftingContent, HeroContent, HeroCta, HeroCtaInput, HeroMedia, ImageColSize, ImageGalleryContent, LocationMapContent, LayoutAlign, LayoutWidth, MediaTextAlignment, MediaTextAspectRatio, MediaTextContent, MediaTextImagePosition, NewsletterSignupContent, NewsletterSignupPreset, ProductDetailContent, ProductListContent, RecurringScheduleContent, SectionStylesContent, SemanticIconId, SemanticSpacing, ShopContent, SingleButtonContent, SiteFooterContent, SiteHeaderContent, StackContentAlignment, StackImagePosition, SystemBlockContentByFullKind, SystemBlockContentByKind, SystemBlockContentFor, SystemBlockShortKind, TeamMembersContent, TestimonialEntryContent, TestimonialsBlockContent, ThumbnailPadding, ThumbnailShape, VideoGridContent, WeekStart, BlockIconValue, FeatureCardIconTreatment, } from './system-block-content';
3
3
  export type { PageOutline, PageRuntimeBoundary, BlockOutline, RouteMap, RouteMapEntry, OccurrenceContextData, EntrySubrouteContextData, } from './page';
4
4
  export type { Theme, ThemeTokens } from './theme';
5
5
  export type { CustomCssDeclarationsInput, CustomCssRuleInput, CustomCssNestedRuleInput, CustomCssAtRuleInput, KeyframesAtRuleInput, FontFaceAtRuleInput, MediaAtRuleInput, SupportsAtRuleInput, RawAtRuleInput, } from './custom-css';
@@ -322,7 +322,7 @@ export type EventSpotlightContent = {
322
322
  };
323
323
  export type OfferingsPreviewSourceKey = 'eventPreset:class' | 'eventPreset:workshop' | 'eventPreset:retreat' | 'eventPreset:performance' | 'course';
324
324
  export type OfferingsPreviewCtaMode = 'auto' | 'custom' | 'hidden';
325
- export type OfferingsPreviewGroupPresentation = 'compact-list' | 'single-card';
325
+ export type OfferingsPreviewGroupPresentation = 'compact-list' | 'single-card' | 'featured-summary';
326
326
  export type OfferingsPreviewGroupOverride = {
327
327
  sourceKey?: OfferingsPreviewSourceKey | null;
328
328
  title?: string | null;
@@ -359,6 +359,7 @@ export type FaqContent = {
359
359
  _containerStyles?: ContainerStylesContent;
360
360
  };
361
361
  export type FeatureCard = {
362
+ surfaceRole?: 'open' | 'panel' | null;
362
363
  media?: Media | null;
363
364
  aspectRatio?: StandardAspectRatio | null;
364
365
  icon?: BlockIconValue | SemanticIconId | null;
@@ -367,11 +368,14 @@ export type FeatureCard = {
367
368
  ctas?: BlockCtaContent[] | null;
368
369
  };
369
370
  export type FeatureCardsContent = {
370
- variant?: 'cards' | null;
371
+ variant?: 'cards' | 'editorial-diptych' | 'editorial-pathways' | null;
372
+ eyebrow?: string | null;
371
373
  title?: string | null;
372
374
  description?: TipTapNode | null;
373
375
  columns?: '2' | '3' | '4' | null;
376
+ cardMarker?: 'icons' | 'numbers' | 'none' | null;
374
377
  _iconTreatment?: FeatureCardIconTreatment | null;
378
+ _generatedIconSizePx?: number | null;
375
379
  cards?: FeatureCard[] | null;
376
380
  };
377
381
  export type HeroCta = {
@@ -461,11 +465,25 @@ export type NewsletterSignupContent = {
461
465
  preset: NewsletterSignupPreset;
462
466
  includePhone?: boolean | null;
463
467
  buttonLabel?: string | null;
468
+ buttonVariant?: 'primary' | 'secondary' | 'outline' | null;
464
469
  successMessage?: string | null;
465
470
  privacyNote?: string | null;
466
471
  tags?: string | null;
467
472
  _sectionStyles?: SectionStylesContent;
468
473
  };
474
+ export type RecurringScheduleContent = {
475
+ eyebrow?: string | null;
476
+ heading?: string | null;
477
+ description?: TipTapNode | null;
478
+ showVenue?: boolean | null;
479
+ buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link' | null;
480
+ buttonText?: string | null;
481
+ seeAllButtonVariant?: 'primary' | 'secondary' | 'outline' | 'link' | null;
482
+ seeAllUrl?: LinkValue | null;
483
+ seeAllLabel?: string | null;
484
+ emptyMessage?: string | null;
485
+ _sectionStyles?: SectionStylesContent;
486
+ };
469
487
  export type ContactNewsletterContent = {
470
488
  newsletterTitle?: string | null;
471
489
  newsletterSubtitle?: RichTextDoc | null;
@@ -486,11 +504,12 @@ export type ContactNewsletterContent = {
486
504
  export type ShopContent = {
487
505
  showPasses?: boolean | null;
488
506
  showMemberships?: boolean | null;
489
- layout?: 'grid' | 'list' | null;
507
+ layout?: 'grid' | 'list' | 'register' | null;
490
508
  columns?: '1' | '2' | '3' | '4' | null;
491
509
  showDescriptions?: boolean | null;
492
510
  showValidityPeriod?: boolean | null;
493
511
  showPricePerCredit?: boolean | null;
512
+ buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link' | null;
494
513
  passesHeading?: string | null;
495
514
  membershipsHeading?: string | null;
496
515
  buyButtonText?: string | null;
@@ -727,6 +746,7 @@ export type SystemBlockContentByFullKind = {
727
746
  'block.event-spotlight': EventSpotlightContent;
728
747
  'block.event-listing': EventListingContent;
729
748
  'block.event-calendar': EventCalendarContent;
749
+ 'block.recurring-schedule': RecurringScheduleContent;
730
750
  'block.offerings-preview': OfferingsPreviewContent;
731
751
  'block.shop': ShopContent;
732
752
  'block.product-list': ProductListContent;
@@ -0,0 +1,17 @@
1
+ import type { BlockOutline } from '../contracts';
2
+ import type { BlockKind } from '../types';
3
+ import type { DataLoaderContext, DataLoaderPreviewStage, DataLoaderRenderTarget, DataLoaderSearchParams } from './types';
4
+ type IncomingSearchParams = Readonly<Record<string, string | readonly string[] | undefined>>;
5
+ export declare function getDataLoaderOwnerPageId(target: DataLoaderRenderTarget): string;
6
+ export declare function normalizeDataLoaderSearchParams(input: IncomingSearchParams | undefined): DataLoaderSearchParams;
7
+ export declare function resolveDataLoaderBlockContent(block: BlockOutline, previewStage: DataLoaderPreviewStage): Readonly<Record<string, unknown>>;
8
+ export declare function createDataLoaderContext(input: Readonly<{
9
+ siteId: string;
10
+ renderTarget: DataLoaderRenderTarget;
11
+ blockId: string;
12
+ blockKind: BlockKind;
13
+ content: Readonly<Record<string, unknown>>;
14
+ previewStage: DataLoaderPreviewStage;
15
+ searchParams: DataLoaderSearchParams;
16
+ }>): DataLoaderContext;
17
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { DataLoaderValue } from './types';
2
+ type UnsupportedDataLoaderValueType = 'undefined' | 'bigint' | 'symbol' | 'function';
3
+ export type DataLoaderValueIssue = Readonly<{
4
+ kind: 'unsupported-type';
5
+ valueType: UnsupportedDataLoaderValueType;
6
+ }> | Readonly<{
7
+ kind: 'non-finite-number';
8
+ }> | Readonly<{
9
+ kind: 'non-plain-object';
10
+ }> | Readonly<{
11
+ kind: 'accessor-property';
12
+ }> | Readonly<{
13
+ kind: 'symbol-key';
14
+ }> | Readonly<{
15
+ kind: 'invalid-array';
16
+ }> | Readonly<{
17
+ kind: 'cycle';
18
+ }> | Readonly<{
19
+ kind: 'inspection-failed';
20
+ }> | Readonly<{
21
+ kind: 'complexity-limit-exceeded';
22
+ }>;
23
+ export type DataLoaderValueValidation = Readonly<{
24
+ ok: true;
25
+ value: DataLoaderValue;
26
+ }> | Readonly<{
27
+ ok: false;
28
+ issue: DataLoaderValueIssue;
29
+ }>;
30
+ /**
31
+ * Validates and snapshots arbitrary loader output without invoking getters,
32
+ * setters, or conversion hooks. Reflection failures are returned as data,
33
+ * never thrown, and accepted containers are detached and frozen.
34
+ */
35
+ export declare function validateDataLoaderValue(input: unknown): DataLoaderValueValidation;
36
+ export {};
@@ -0,0 +1,2 @@
1
+ /** Define a string key as ordinary data without invoking legacy prototype setters. */
2
+ export declare function defineOwnDataProperty<Value>(target: Record<string, Value>, key: string, value: Value): void;
@@ -1,44 +1,40 @@
1
- /**
2
- * Execute code-based data loaders for SDK custom blocks.
3
- *
4
- * Code loaders are user-defined async functions that can fetch data
5
- * from any API (not just whitelisted CMS endpoints). They run
6
- * server-side during loadPage().
7
- */
1
+ /** Execute server-side host data loaders for SDK blocks. */
8
2
  import type { PageOutline } from '../contracts';
9
- import type { PrefetchContext, ResolvedBlockData } from './prefetchBlockData';
10
- import type { DataLoaderOverrides } from './types';
11
- /**
12
- * Execute code-based data loaders for blocks on a page.
13
- *
14
- * Iterates through page blocks and executes any registered loader
15
- * functions for matching block kinds. Runs all loaders in parallel.
16
- *
17
- * @param page - Page outline with blocks to process
18
- * @param context - Prefetch context (siteId, pageId, previewStage)
19
- * @param overrides - Map of block kinds to loader functions
20
- * @returns Resolved data keyed by blockId, then loader key
21
- *
22
- * @example
23
- * ```typescript
24
- * const codeData = await executeCodeLoaders(page, context, {
25
- * 'custom.featured-products': {
26
- * products: async (ctx) => fetchProducts(ctx.content.categoryId),
27
- * },
28
- * });
29
- * // codeData: { 'block-123': { products: [...] } }
30
- * ```
31
- */
32
- export declare function executeCodeLoaders(page: PageOutline, context: PrefetchContext & {
33
- searchParams?: Record<string, string | string[] | undefined>;
34
- }, overrides: DataLoaderOverrides): Promise<ResolvedBlockData>;
3
+ import { type BlockKind } from '../types';
4
+ import { type DataLoaderValueIssue } from './dataLoaderValue';
5
+ import type { ResolvedBlockData } from './prefetchBlockData';
6
+ import type { DataLoaderOverrides, DataLoaderPreviewStage, DataLoaderRenderTarget, DataLoaderSearchParams } from './types';
7
+ export type CodeLoaderFailureKind = 'execution-failed' | 'invalid-result';
8
+ type CodeLoaderFailureCoordinates = Readonly<{
9
+ siteId: string;
10
+ pageId: string;
11
+ blockId: string;
12
+ blockKind: BlockKind;
13
+ loaderKey: string;
14
+ previewStage: DataLoaderPreviewStage;
15
+ renderTargetKind: DataLoaderRenderTarget['kind'];
16
+ }>;
17
+ export type CodeLoaderFailure = CodeLoaderFailureCoordinates & (Readonly<{
18
+ kind: 'execution-failed';
19
+ }> | Readonly<{
20
+ kind: 'invalid-result';
21
+ validationIssueKind: DataLoaderValueIssue['kind'];
22
+ }>);
23
+ export type ExecuteCodeLoadersResult = Readonly<{
24
+ data: ResolvedBlockData;
25
+ failures: readonly CodeLoaderFailure[];
26
+ }>;
27
+ export type ExecuteCodeLoadersContext = Readonly<{
28
+ siteId: string;
29
+ renderTarget: DataLoaderRenderTarget;
30
+ previewStage: DataLoaderPreviewStage;
31
+ searchParams: DataLoaderSearchParams;
32
+ }>;
35
33
  /**
36
- * Merge resolved data from config loaders and code loaders.
37
- *
38
- * Code loader results take precedence on key conflicts.
39
- *
40
- * @param configResults - Data from config-based loaders (CMS endpoints)
41
- * @param codeResults - Data from code-based loaders (external APIs)
42
- * @returns Merged data with code results overwriting config on conflicts
34
+ * Runs all matching host loaders concurrently. The function returns closed
35
+ * outcomes and never logs; warning ownership belongs to the shared resolver.
43
36
  */
37
+ export declare function executeCodeLoaders(page: PageOutline, context: ExecuteCodeLoadersContext, overrides: DataLoaderOverrides): Promise<ExecuteCodeLoadersResult>;
38
+ /** Successful host values take precedence on per-block loader-key collisions. */
44
39
  export declare function mergeLoaderResults(configResults: ResolvedBlockData, codeResults: ResolvedBlockData): ResolvedBlockData;
40
+ export {};
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Block data loading utilities for SDK
3
3
  */
4
- export { prefetchBlockData, SUPPORTED_LOADER_ENDPOINTS } from './prefetchBlockData';
5
- export type { PrefetchContext, ResolvedBlockData, SdkPrefetchOptions, SupportedLoaderEndpoint } from './prefetchBlockData';
4
+ export { prefetchBlockData, SUPPORTED_LOADER_ENDPOINTS, } from './prefetchBlockData';
5
+ export type { PrefetchContext, ResolvedBlockData, SdkPrefetchOptions, SupportedLoaderEndpoint, } from './prefetchBlockData';
6
6
  export { executeCodeLoaders, mergeLoaderResults } from './executeCodeLoaders';
7
- export type { DataLoaderContext, DataLoaderFn, BlockLoaderMap, DataLoaderOverrides, } from './types';
7
+ export type { BlockLoaderMap, DataLoaderContext, DataLoaderFn, DataLoaderOverrides, DataLoaderPreviewStage, DataLoaderRenderTarget, DataLoaderSearchParams, DataLoaderValue, } from './types';
@@ -0,0 +1,54 @@
1
+ import type { RiverbankClient } from '../client/types';
2
+ import type { PageOutline } from '../contracts';
3
+ import type { SdkCustomBlock } from '../config/types';
4
+ import { executeCodeLoaders, mergeLoaderResults, type CodeLoaderFailure } from './executeCodeLoaders';
5
+ import { prefetchBlockData, type ResolvedBlockData } from './prefetchBlockData';
6
+ import type { DataLoaderOverrides, DataLoaderPreviewStage, DataLoaderRenderTarget, DataLoaderSearchParams } from './types';
7
+ import type { BlockKind } from '../types';
8
+ export type BlockDataLoadPolicy = Readonly<{
9
+ kind: 'config-only';
10
+ }> | Readonly<{
11
+ kind: 'config-and-host';
12
+ overrides: DataLoaderOverrides;
13
+ searchParams: DataLoaderSearchParams;
14
+ }>;
15
+ export declare const CONFIG_ONLY_BLOCK_DATA_POLICY: BlockDataLoadPolicy;
16
+ type HostDataLoaderWarningCoordinates = Readonly<{
17
+ siteId: string;
18
+ pageId: string;
19
+ blockId: string;
20
+ blockKind: BlockKind;
21
+ loaderKey: string;
22
+ previewStage: DataLoaderPreviewStage;
23
+ renderTargetKind: DataLoaderRenderTarget['kind'];
24
+ }>;
25
+ export type HostDataLoaderWarning = HostDataLoaderWarningCoordinates & (Readonly<{
26
+ failureKind: 'execution-failed';
27
+ }> | Readonly<{
28
+ failureKind: 'invalid-result';
29
+ validationIssueKind: Extract<CodeLoaderFailure, {
30
+ kind: 'invalid-result';
31
+ }>['validationIssueKind'];
32
+ }>);
33
+ export type ResolveBlockDataDeps = Readonly<{
34
+ prefetchBlockData: typeof prefetchBlockData;
35
+ executeCodeLoaders: typeof executeCodeLoaders;
36
+ mergeLoaderResults: typeof mergeLoaderResults;
37
+ warn: (warning: HostDataLoaderWarning) => void;
38
+ }>;
39
+ export declare function warnHostDataLoaderFailure(warning: HostDataLoaderWarning): void;
40
+ export declare const DEFAULT_RESOLVE_BLOCK_DATA_DEPS: ResolveBlockDataDeps;
41
+ export declare function hasRegisteredDataLoaders(overrides: DataLoaderOverrides | undefined): overrides is DataLoaderOverrides;
42
+ export declare function createBlockDataLoadPolicy(overrides: DataLoaderOverrides | undefined, searchParams: DataLoaderSearchParams): BlockDataLoadPolicy;
43
+ export type ResolveBlockDataInput = Readonly<{
44
+ page: PageOutline;
45
+ siteId: string;
46
+ renderTarget: DataLoaderRenderTarget;
47
+ previewStage: DataLoaderPreviewStage;
48
+ policy: BlockDataLoadPolicy;
49
+ client: RiverbankClient;
50
+ customBlocks?: SdkCustomBlock[];
51
+ }>;
52
+ export declare function resolveBlockData(input: ResolveBlockDataInput): Promise<ResolvedBlockData>;
53
+ export declare function resolveBlockDataWithDeps(deps: ResolveBlockDataDeps, input: ResolveBlockDataInput): Promise<ResolvedBlockData>;
54
+ export {};
@@ -1,90 +1,55 @@
1
1
  /**
2
- * Code-based data loader types for SDK custom blocks.
3
- *
4
- * These types enable SDK sites to define loader functions that fetch
5
- * data from external APIs (not just CMS endpoints).
2
+ * Server-side host data loader contracts for SDK custom blocks.
6
3
  */
4
+ import type { SdkRuntimePageSurfaceSubject } from '../public-api/contracts';
7
5
  import type { BlockKind } from '../types';
6
+ export type DataLoaderPreviewStage = 'published' | 'preview';
7
+ /** Values that are safe to pass through Riverbank's RSC/rendering boundary. */
8
+ export type DataLoaderValue = string | number | boolean | null | readonly DataLoaderValue[] | {
9
+ readonly [key: string]: DataLoaderValue;
10
+ };
11
+ /** Immutable URL search parameters exposed to host loaders. */
12
+ export type DataLoaderSearchParams = Readonly<Record<string, string | readonly string[] | undefined>>;
8
13
  /**
9
- * Context provided to code-based data loaders.
14
+ * The content owner being rendered by a block data loader.
10
15
  *
11
- * Contains block metadata and page context for making informed
12
- * data fetching decisions.
16
+ * Template targets carry both the template ID and the underlying content
17
+ * identity so callers never have to interpret nullable entry/surface fields.
13
18
  */
14
- export interface DataLoaderContext {
15
- /** Site ID from page context */
19
+ export type DataLoaderRenderTarget = Readonly<{
20
+ kind: 'page';
21
+ pageId: string;
22
+ }> | Readonly<{
23
+ kind: 'entry-template';
24
+ templateId: string;
25
+ entryId: string;
26
+ entryType: string | null;
27
+ }> | Readonly<{
28
+ kind: 'page-surface-template';
29
+ templateId: string;
30
+ pageSurfaceId: string;
31
+ routeId: string;
32
+ subject: SdkRuntimePageSurfaceSubject;
33
+ }>;
34
+ /** Context supplied to each server-side host data loader. */
35
+ export type DataLoaderContext = Readonly<{
16
36
  siteId: string;
17
- /** Page ID from page context */
37
+ /** Page ID for pages; template ID for template-backed content. */
18
38
  pageId: string;
19
- /** Unique block instance ID */
20
39
  blockId: string;
21
- /** Block kind (e.g., 'custom.featured-products') */
22
40
  blockKind: BlockKind;
23
- /**
24
- * The block's CMS content.
25
- * Use this to access field values for parameterizing API calls.
26
- */
27
- content: Record<string, unknown>;
28
- /** Whether fetching preview/draft content */
29
- previewStage: 'published' | 'preview';
30
- /**
31
- * URL search parameters from the page request.
32
- * Use for pagination, filtering, or sorting based on URL params.
33
- *
34
- * Always defined (defaults to empty object if not provided to loadPage).
35
- * This allows loaders to safely access properties without null checks.
36
- *
37
- * @example
38
- * ```typescript
39
- * const page = parseInt(searchParams?.page as string || '1', 10);
40
- * const limit = parseInt(content.postsPerPage as string || '12', 10);
41
- * const offset = (page - 1) * limit;
42
- * ```
43
- */
44
- searchParams: Record<string, string | string[] | undefined>;
45
- }
46
- /**
47
- * A code-based data loader function.
48
- *
49
- * Receives context about the block and returns fetched data.
50
- * Runs server-side during `loadPage()`.
51
- *
52
- * @example
53
- * ```typescript
54
- * const productsLoader: DataLoaderFn = async (ctx) => {
55
- * const categoryId = ctx.content.categoryId;
56
- * const response = await fetch(`https://api.shop.com/products?category=${categoryId}`);
57
- * return response.json();
58
- * };
59
- * ```
60
- */
61
- export type DataLoaderFn = (context: DataLoaderContext) => Promise<unknown>;
41
+ /** Stage-resolved block content used by the renderer. */
42
+ content: Readonly<Record<string, unknown>>;
43
+ previewStage: DataLoaderPreviewStage;
44
+ searchParams: DataLoaderSearchParams;
45
+ renderTarget: DataLoaderRenderTarget;
46
+ }>;
62
47
  /**
63
- * Map of loader key to loader function for a block kind.
64
- *
65
- * Keys become the property names in the `data` prop passed to the component.
66
- */
67
- export type BlockLoaderMap = Record<string, DataLoaderFn>;
68
- /**
69
- * Registry of code-based data loaders.
70
- *
71
- * Keys are block kinds (e.g., 'custom.featured-products').
72
- * Values are maps of loader keys to loader functions.
73
- *
74
- * @example
75
- * ```typescript
76
- * const dataLoaderOverrides: DataLoaderOverrides = {
77
- * 'custom.featured-products': {
78
- * products: async (ctx) => {
79
- * return fetchProducts(ctx.content.categoryId);
80
- * },
81
- * },
82
- * 'custom.instagram-feed': {
83
- * posts: async (ctx) => {
84
- * return fetchInstagramPosts(ctx.content.accessToken);
85
- * },
86
- * },
87
- * };
88
- * ```
48
+ * A host loader must return JSON-safe data. Parse untrusted network responses
49
+ * before returning them; runtime validation remains as a JavaScript/`any`
50
+ * boundary safeguard.
89
51
  */
90
- export type DataLoaderOverrides = Record<string, BlockLoaderMap>;
52
+ export type DataLoaderFn = (context: DataLoaderContext) => Promise<DataLoaderValue>;
53
+ export type BlockLoaderMap = Readonly<Record<string, DataLoaderFn>>;
54
+ /** Registry keyed by full SDK block kind, for example `custom.products`. */
55
+ export type DataLoaderOverrides = Readonly<Partial<Record<BlockKind, BlockLoaderMap>>>;
@@ -40,6 +40,7 @@
40
40
  export { createCatchAllPage } from './catch-all';
41
41
  export { RiverbankContentLoadError, SdkContentLoadError, classifyContentLoadError, isSdkContentLoadError, toContentLoadFailureLogFields, type CatchAllContentLoadFailureContext, type CatchAllRequestContext, type ClassifiedContentLoadError, type SdkContentLoadFailure, type SdkContentLoadFailureKind, type SdkContentLoadNotFound, } from './content-load-failure';
42
42
  export type { CreateCatchAllPageOptions, CreateCatchAllPageResult, CatchAllPageProps, CatchAllContext, ThemeSwitchConfigV1, ThemeResolverContext, } from './types';
43
+ export type { BlockLoaderMap, DataLoaderContext, DataLoaderFn, DataLoaderOverrides, DataLoaderPreviewStage, DataLoaderRenderTarget, DataLoaderSearchParams, DataLoaderValue, } from '../data/types';
43
44
  export { createGenerateStaticParams, generateAllStaticParams, normalizeStaticRoutePath, validateStaticParamsEnv, pathToSlugArray, routesToStaticParams, type CreateGenerateStaticParamsOptions, type GenerateAllStaticParamsOptions, type StaticParam, type StaticParamsClient, type StaticParamsEnvResult, type StaticParamsFailureContext, type StaticParamsFailureMode, type StaticParamsRoute, } from './static-params';
44
45
  export { createSitemap, type CreateSitemapOptions, type SitemapGenerator, } from './sitemap';
45
46
  export { createRobots, type CreateRobotsOptions } from './robots';
@@ -1,3 +1,3 @@
1
- type IncomingSearch = string | URLSearchParams | Readonly<Record<string, string | string[] | undefined>> | null | undefined;
1
+ type IncomingSearch = string | URLSearchParams | Readonly<Record<string, string | readonly string[] | undefined>> | null | undefined;
2
2
  export declare function appendSearchToRedirectDestination(destination: string, incomingSearch: IncomingSearch): string;
3
3
  export {};
@@ -1,6 +1,7 @@
1
1
  import type { Theme } from '../contracts';
2
2
  import type { RiverbankSiteConfig } from '../config/types';
3
3
  import type { ThemeResolverContext, ThemeSwitchConfigV1 } from './types';
4
+ import type { DataLoaderSearchParams } from '../data/types';
4
5
  export type ResolveThemeResult = {
5
6
  kind: 'resolved';
6
7
  theme: Theme;
@@ -24,7 +25,7 @@ export type ThemeOptionsForResolver = {
24
25
  export interface ResolveThemeInput {
25
26
  config: Pick<RiverbankSiteConfig, 'themeSource' | 'activeTheme'>;
26
27
  contentTheme: Theme;
27
- searchParams: Record<string, string | string[] | undefined>;
28
+ searchParams: DataLoaderSearchParams;
28
29
  isDevelopment: boolean;
29
30
  themeOptions: ThemeOptionsForResolver;
30
31
  context: ThemeResolverContext;
@@ -12,6 +12,7 @@ import type { SdkThemeRuntime } from '../rendering/themeRuntime';
12
12
  import type { BlockOverrideRegistrations } from '../rendering/overrides';
13
13
  import type { Metadata } from '../metadata/generatePageMetadata';
14
14
  import type { LoadContentResult } from '../rendering/helpers/loadContent';
15
+ import type { DataLoaderOverrides, DataLoaderSearchParams } from '../data/types';
15
16
  import type { CatchAllContentLoadFailureContext, CatchAllRequestContext } from './content-load-failure';
16
17
  /**
17
18
  * Context passed to escape hatch callbacks.
@@ -30,7 +31,7 @@ export interface CatchAllContext {
30
31
  */
31
32
  themeRuntime: SdkThemeRuntime;
32
33
  /** Search parameters from the URL (for filtering, pagination, etc.) */
33
- searchParams: Record<string, string | string[] | undefined>;
34
+ searchParams: DataLoaderSearchParams;
34
35
  }
35
36
  export type CreateCatchAllContentContract = 'compat' | 'native';
36
37
  export type CreateCatchAllContentContractResolverContext = Readonly<{
@@ -205,6 +206,14 @@ export type CreateCatchAllPageOptions = {
205
206
  * promise-returning functions are not lazy override registrations.
206
207
  */
207
208
  blockOverrides?: BlockOverrideRegistrations;
209
+ /**
210
+ * Server-only host data loaders for custom blocks.
211
+ *
212
+ * Loader functions run during page rendering after CMS/config loaders. Their
213
+ * JSON-safe results win on key collisions. They are never invoked by
214
+ * `generateMetadata()` and must be declared in a server-only module.
215
+ */
216
+ dataLoaderOverrides?: DataLoaderOverrides;
208
217
  /**
209
218
  * Override site URL for metadata generation.
210
219
  * Defaults to `config.liveUrl` or `config.previewUrl` based on preview mode.
@@ -1,8 +1,8 @@
1
1
  import type { AddressedLocationValue, BusinessAddress, BookingFlexibleBalanceConfig, BookingInstalmentPlanConfig, PublicEventPricing } from '../../../core/src/index';
2
- import type { SdkRuntimePageSurfaceSubject as ApiSdkRuntimePageSurfaceSubject } from '../../../api/src/index';
2
+ import type { PublicEventRecurrence as ApiPublicEventRecurrence, SdkRuntimePageSurfaceSubject as ApiSdkRuntimePageSurfaceSubject } from '../../../api/src/index';
3
3
  import type { Media, MediaAssetIndexItem, SiteFooterContent, SiteHeaderContent, Theme } from '../contracts';
4
4
  import type { CompiledBoundaryRuntime } from '../../../theme-core/src/site-styles/index';
5
- import type { PaletteOverrides, RuntimePaletteState } from '../../../theme-core/src/palette/index';
5
+ import type { RuntimePaletteState } from '../../../theme-core/src/palette/index';
6
6
  import type { BlockFieldConfig as SdkBlockFieldConfig, BlockFieldOptionsMap as SdkBlockFieldOptionsMap, ContentConfig as SdkContentConfig, ContainerOptionsConfig as SdkContainerOptionsConfig, FieldSelectOption as SdkFieldSelectOption, SdkCustomBlock, SdkThemeConfig, SdkThemePalette, SectionBackground as SdkSectionBackground, SectionOptionsConfig as SdkSectionOptionsConfig, SiteStyleConfig as SdkSiteStyleConfig } from '../config/types';
7
7
  export type PublicTeamMemberSummary = {
8
8
  id: string;
@@ -318,14 +318,8 @@ export type SiteResponse = {
318
318
  */
319
319
  selectionButtonPersonalityId?: string | null;
320
320
  runtimePaletteState?: RuntimePaletteState | null;
321
- /** Temporary legacy compatibility projection for stale runtime clients. */
322
- selectionPaletteVariantId?: string | null;
323
- selectionPaletteOverrides?: PaletteOverrides | null;
324
321
  selectionHeaderLayoutId?: string | null;
325
322
  selectionHeaderStyleId?: string | null;
326
- selectionTypographyPresetId?: string | null;
327
- selectionTypographyBodyFontOverride?: string | null;
328
- selectionTypographyHeadingFontOverride?: string | null;
329
323
  selectionHeaderLookId?: string | null;
330
324
  selectionFooterLookId?: string | null;
331
325
  navigation: NavigationMenuWithItems[];
@@ -630,6 +624,7 @@ export type PublicEventDestination = Readonly<{
630
624
  }>;
631
625
  export type PublicEventsResponse = Array<{
632
626
  kind?: 'event' | 'course_session';
627
+ recurrence?: ApiPublicEventRecurrence;
633
628
  destination: PublicEventDestination;
634
629
  id: string;
635
630
  occurrenceId: string;
@@ -8,8 +8,9 @@ import type { MediaAssetIndexItem, RouteMap, Theme } from '../../contracts';
8
8
  import type { RiverbankClient, PageResponse, SiteResponse } from '../../client/types';
9
9
  import type { SdkRuntimePageSurfaceSubject } from '../../public-api/contracts';
10
10
  import type { PageProps } from '../components/Page';
11
- import { prefetchBlockData } from '../../data/prefetchBlockData';
12
11
  import type { ResolvedBlockData } from '../../data/prefetchBlockData';
12
+ import { type ResolveBlockDataDeps } from '../../data/resolveBlockData';
13
+ import type { DataLoaderOverrides, DataLoaderSearchParams } from '../../data/types';
13
14
  import type { SdkCustomBlock } from '../../config/types';
14
15
  import { type RuntimeSdkConfig } from './pageRuntimeSupport';
15
16
  /**
@@ -34,6 +35,10 @@ export type LoadContentParams = {
34
35
  * @default false
35
36
  */
36
37
  preview?: boolean;
38
+ /** Server-side host data loaders for custom block data. */
39
+ dataLoaderOverrides?: DataLoaderOverrides;
40
+ /** URL search parameters passed only to host data loaders. */
41
+ searchParams?: DataLoaderSearchParams;
37
42
  };
38
43
  export type LoadContentFromContentResponseParams = {
39
44
  client: RiverbankClient;
@@ -41,6 +46,8 @@ export type LoadContentFromContentResponseParams = {
41
46
  site: SiteResponse;
42
47
  contentResponse: PageResponse;
43
48
  preview?: boolean;
49
+ dataLoaderOverrides?: DataLoaderOverrides;
50
+ searchParams?: DataLoaderSearchParams;
44
51
  };
45
52
  /**
46
53
  * Content entry data returned when a path resolves to an entry
@@ -228,9 +235,7 @@ export type PageSurfaceContentResult = {
228
235
  * Discriminated union result from loadContent
229
236
  */
230
237
  export type LoadContentResult = PageContentResult | EntryContentResult | PageSurfaceContentResult;
231
- export type LoadContentDeps = Readonly<{
232
- prefetchBlockData: typeof prefetchBlockData;
233
- }>;
238
+ export type LoadContentDeps = ResolveBlockDataDeps;
234
239
  /**
235
240
  * Type guard to check if result is a page
236
241
  */