@riverbankcms/sdk 0.135.1 → 0.137.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 (220) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/README.md +4 -8
  3. package/dist/{PreviewEditorSidebar-D4p_5TdY.mjs → PreviewEditorSidebar-Bn6cONPa.mjs} +8 -8
  4. package/dist/{PreviewEditorUI-D0cRoTX1.mjs → PreviewEditorUI-LAwXZPSx.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-DcgaESkm.mjs → PreviewQueryProvider-ztQUdsNo.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-BKLtM3Nz.mjs → SdkPreviewModeRuntime-BbbGsI_v.mjs} +621 -238
  7. package/dist/{SiteChromeCustomizeContext-61X2m7QV.mjs → SiteChromeCustomizeContext-BbkNSt5a.mjs} +5041 -2407
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +18 -850
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +412 -2316
  10. package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
  11. package/dist/_dts/api/src/accessAdmin.d.ts +1 -9
  12. package/dist/_dts/api/src/accountApi.d.ts +49 -2
  13. package/dist/_dts/api/src/contentRuntime.d.ts +7 -4
  14. package/dist/_dts/api/src/domainConnection.d.ts +41 -0
  15. package/dist/_dts/api/src/endpoints.d.ts +201 -181
  16. package/dist/_dts/api/src/index.d.ts +5 -3
  17. package/dist/_dts/api/src/media.d.ts +19 -2
  18. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
  19. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +26 -0
  20. package/dist/_dts/api/src/sdkBlockContentAdmission.d.ts +5 -0
  21. package/dist/_dts/api/src/sdkContracts.d.ts +2 -15
  22. package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
  23. package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +61 -0
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +21 -436
  25. package/dist/_dts/api/src/siteInfrastructure.d.ts +17 -23
  26. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +7 -21
  27. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +27 -3
  28. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
  29. package/dist/_dts/api/src/types.d.ts +1 -1
  30. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +2 -3
  31. package/dist/_dts/block-form/src/utils/slug.d.ts +6 -0
  32. package/dist/_dts/blocks/src/PageRenderer.d.ts +13 -7
  33. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +48 -0
  34. package/dist/_dts/blocks/src/definitions.d.ts +14 -0
  35. package/dist/_dts/blocks/src/index.d.ts +4 -3
  36. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +49 -0
  37. package/dist/_dts/blocks/src/pageRendererBlockSupport.d.ts +75 -0
  38. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +2 -0
  39. package/dist/_dts/blocks/src/server.d.ts +2 -2
  40. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  42. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +78 -0
  43. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +2 -18
  44. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +103 -16
  45. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  46. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +4 -2
  47. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  48. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +19 -0
  50. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +52 -0
  51. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -0
  52. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +47 -21
  53. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +38 -9
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +8 -3
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +5 -2
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.client.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +40 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +43 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +31 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +3 -1
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarNavigationChevron.d.ts +4 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModalContext.d.ts +3 -2
  80. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +4 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +31 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +3 -1
  84. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +9 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +4 -3
  88. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -1
  89. package/dist/_dts/calendar/src/grid.d.ts +24 -66
  90. package/dist/_dts/calendar/src/index.d.ts +2 -2
  91. package/dist/_dts/calendar/src/timetable.d.ts +5 -9
  92. package/dist/_dts/commerce/src/purchase/allocation.d.ts +11 -0
  93. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
  94. package/dist/_dts/commerce/src/purchase/index.d.ts +3 -0
  95. package/dist/_dts/commerce/src/purchase/settlement.d.ts +33 -0
  96. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +8 -0
  97. package/dist/_dts/content-model/src/templates/defaults.d.ts +6 -0
  98. package/dist/_dts/core/src/slug.d.ts +20 -5
  99. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +8 -40
  100. package/dist/_dts/db/src/index.d.ts +1 -0
  101. package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
  102. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
  103. package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
  104. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +1 -1
  105. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  106. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  107. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
  108. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +2 -1
  109. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
  110. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
  111. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
  112. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
  113. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
  114. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
  115. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +6 -0
  116. package/dist/_dts/sdk/src/public-api/contracts.d.ts +7 -2
  117. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +10 -6
  118. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +0 -1
  119. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  120. package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +3 -0
  121. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -0
  122. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  123. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +17 -0
  124. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +9 -3
  125. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +1 -1
  126. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  127. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +7 -4
  128. package/dist/_dts/sdk/src/version.d.ts +1 -1
  129. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  130. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
  133. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +25 -2
  134. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -6
  135. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -810
  136. package/dist/_dts/theme-core/src/schema.d.ts +460 -1285
  137. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
  138. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +223 -1
  139. package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
  140. package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
  142. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -38
  143. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyles.d.ts +10 -0
  144. package/dist/_dts/theme-core/src/site-styles/headerLayoutTypes.d.ts +8 -5
  145. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +4 -4
  146. package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
  147. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
  148. package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
  149. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +25 -2
  150. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +465 -0
  151. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +168 -0
  152. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  153. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  154. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
  155. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
  156. package/dist/client/{BookingConsentAgreement-Bz9znbpn.mjs → BookingConsentAgreement--_fUCZe-.mjs} +2 -2
  157. package/dist/client/{DiscountCodeDisclosure-35Ru8yB9.mjs → DiscountCodeDisclosure-BMipSoDJ.mjs} +1 -1
  158. package/dist/client/{EventCombined.client-BKB0ZxRR.mjs → EventCombined.client-CwJOxn7A.mjs} +274 -278
  159. package/dist/client/{EventListing.client-Dx8I21ok.mjs → EventListing.client-eVwiylPW.mjs} +2 -2
  160. package/dist/client/{LeafletStaticMap-CEWx-Bhe.mjs → LeafletStaticMap-IKenna5u.mjs} +1 -1
  161. package/dist/client/{accordion-KIDsKTwS.mjs → accordion-MGAO3PuE.mjs} +1 -1
  162. package/dist/client/{bookingForm-D96Rmp-5.mjs → bookingForm-CudlQPUu.mjs} +5 -5
  163. package/dist/client/bookings.mjs +476 -98
  164. package/dist/client/capacity-BW00PO7s.mjs +271 -0
  165. package/dist/client/{carousel-YwUgyL66.mjs → carousel-BrbGJ2Jl.mjs} +1 -1
  166. package/dist/client/{cart-BbwuNrUT.mjs → cart-Bq5eU0xZ.mjs} +3 -3
  167. package/dist/client/{checkout-hp1ucmEY.mjs → checkout-BAFVRdrK.mjs} +3 -3
  168. package/dist/client/client.mjs +4641 -2721
  169. package/dist/client/{context-DljQn8L5.mjs → context-DCkiHVdD.mjs} +20 -5
  170. package/dist/client/dates-2RPXHQy4.mjs +264 -0
  171. package/dist/client/{eventCalendar-DU4iNLpo.mjs → eventCalendar-B0O-hPF7.mjs} +261 -126
  172. package/dist/client/{eventCombined-CZuupW8m.mjs → eventCombined-DCkDaoDI.mjs} +3 -3
  173. package/dist/client/{eventDetails-DPQWwCIi.mjs → eventDetails-D8GG2dnD.mjs} +7 -4
  174. package/dist/client/{eventListing-C7oMidwS.mjs → eventListing-3ssV_bxz.mjs} +3 -3
  175. package/dist/client/{eventRegistration-zEiunlUs.mjs → eventRegistration-bPQo3kVw.mjs} +610 -313
  176. package/dist/client/{form-D2KIyCVJ.mjs → form-qMv8RDkk.mjs} +2 -2
  177. package/dist/client/{headerSection-CK5uChUK.mjs → headerSection-CH0Sc5hX.mjs} +2 -2
  178. package/dist/client/hooks.mjs +2514 -308
  179. package/dist/client/{locationMap-DLQNH1ln.mjs → locationMap-0_xlBnNI.mjs} +2 -2
  180. package/dist/client/{newsletterForm-ZuhIG7fZ.mjs → newsletterForm-NUW7m9RI.mjs} +2 -2
  181. package/dist/client/{productDetail-7hIcGeae.mjs → productDetail-FBEOM7jW.mjs} +3 -3
  182. package/dist/client/{productList-T4Cii1ot.mjs → productList-R0OSGhnn.mjs} +3 -3
  183. package/dist/client/{propsDecoder-mB0aC_Fi.mjs → propsDecoder-pYvx_Srl.mjs} +179 -401
  184. package/dist/client/rendering/client.mjs +3496 -2223
  185. package/dist/client/rendering/islands.mjs +17 -17
  186. package/dist/client/rendering.mjs +4400 -2510
  187. package/dist/client/{scrollToBlock-Du5mHgvL.mjs → scrollToBlock-ByQv96M2.mjs} +1 -1
  188. package/dist/client/{shop-B5zAcKZn.mjs → shop-RUG9DmRE.mjs} +6 -6
  189. package/dist/client/{shop-commerce-BKBZB6l5.mjs → shop-commerce-B76Jz23B.mjs} +5 -5
  190. package/dist/client/{shop-commerce-store-Cq4qlNtQ.mjs → shop-commerce-store-QuQNdDsD.mjs} +1 -1
  191. package/dist/client/{shopShared-DYGzEs9D.mjs → shopShared-vXU1omwJ.mjs} +3 -3
  192. package/dist/client/{useEventFilters-Bphkda8m.mjs → useEventFilters-ByuU6HLA.mjs} +33 -18
  193. package/dist/preview-next/before-render.mjs +86 -51
  194. package/dist/preview-next/client/runtime.mjs +4 -4
  195. package/dist/preview-next/keepAlive.mjs +86 -51
  196. package/dist/preview-next/middleware.mjs +86 -51
  197. package/dist/{previewAuthStore-C7ksxt5b.mjs → previewAuthStore-L_cKW8Sb.mjs} +86 -51
  198. package/dist/{sdk-runtime-BbIC8G4J.mjs → sdk-runtime-sUMr5d70.mjs} +2 -2
  199. package/dist/{separator-CadhAtI7.mjs → separator-BIHkie5i.mjs} +1 -1
  200. package/dist/server/components.mjs +4397 -2960
  201. package/dist/server/config-validation.mjs +354 -145
  202. package/dist/server/config.mjs +354 -145
  203. package/dist/server/data.mjs +354 -144
  204. package/dist/server/index.mjs +201 -55
  205. package/dist/server/manifest.mjs +0 -1
  206. package/dist/server/next.mjs +4046 -2611
  207. package/dist/server/page-converter.mjs +225 -122
  208. package/dist/server/prebuild.mjs +1 -1
  209. package/dist/server/rendering/server.mjs +4105 -2636
  210. package/dist/server/rendering.mjs +4522 -3087
  211. package/dist/server/routing.mjs +3289 -1637
  212. package/dist/server/server.mjs +23175 -21079
  213. package/dist/server/theme-bridge.mjs +708 -272
  214. package/dist/server/theme.mjs +29 -25
  215. package/dist/styles/index.css +624 -181
  216. package/package.json +1 -1
  217. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
  218. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
  219. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
  220. /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,120 @@ and then gets the version it went out in.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ### Theme contract changes (#1318)
11
+
12
+ - **`saveSiteChromeSelection`'s header body no longer carries a `theme`.** The
13
+ surface used to send the whole compiled theme alongside `layoutId`, `styleId`
14
+ and `preferences` — the Phase 4b dual write — and the server compared the two
15
+ headers and logged a mismatch. The server has been the author of those bytes
16
+ since 4b, so the second copy was only ever a measurement: it is gone, and with
17
+ it the `theme:site_chrome_selection:header_compilation_mismatch` log. The
18
+ footer surface still sends a theme, because a footer save's change *is* a
19
+ theme. The save response is unchanged and still returns the persisted theme,
20
+ which is what a client reconciles to.
21
+
22
+ - **`sdkUpsertTheme`'s update body takes a theme with no `header`.** `POST
23
+ /sdk/{siteId}/theme` used to accept and persist whatever `theme.header` an SDK
24
+ consumer sent, which was the last route through which raw header bytes reached
25
+ persistence. `theme` is now `SdkThemeWireWithoutHeader` (exported from
26
+ `@riverbankcms/api`), and the header is compiled server-side from the site's
27
+ stored selection and `header_preferences` against the site style the body
28
+ authors. A body carrying a `header` is rejected rather than silently stripped.
29
+ A site whose current theme row cannot be read is refused rather than
30
+ re-provisioned.
31
+
32
+ - **`saveSiteTheme`'s body takes a theme with no `header`.** `theme` is now
33
+ `Omit<Theme, 'header'>` (`ThemeWithoutHeader`, exported from
34
+ `@riverbankcms/api`), derived at the route from `themeSchema.omit({ header:
35
+ true })`. The header is compiled server-side from the row's stored selection
36
+ and `header_preferences`; `headerSelection` still names the selection to
37
+ compile for. This was the last path by which hand-written header bytes could
38
+ reach persistence. A save against a site with no current theme selection is
39
+ now refused with `THEME_SELECTION_NOT_FOUND` rather than falling back to a
40
+ site-style default, and the header selection it stores is the one the shared
41
+ pipeline resolves — which applies the site style's **curated** repair, not
42
+ only the catalogue's. A body naming a (layout, style) pair the site style does
43
+ not offer now stores the repaired pair, so the persisted ids and the persisted
44
+ bytes always name the same selection.
45
+
46
+ - **`HeaderPreferences` gains a required `brandPresentation` field**
47
+ (`'recommended' | 'plain'`), and `headerPreferencesSchema` requires it. It
48
+ says whether the header wears a brand presentation block at all. `'plain'` is
49
+ the state several live rows persist — no `logo` object — which the record
50
+ could not express before, so a recompile would have given those sites a logo
51
+ treatment they have never rendered. This is a **widening**: `'recommended'` is
52
+ the default and reproduces the previous behaviour exactly, and the header
53
+ parity lockfile is unchanged. Consumers that construct a `HeaderPreferences`
54
+ literal must add the field; consumers that only read one are unaffected.
55
+
56
+ - **`readHeaderPreferences` is no longer exported.** It gained a fourth
57
+ argument — the two headers the brand-presentation modes compile to, because
58
+ the mode is derived by comparing the persisted `logo` against both — and the
59
+ type of that argument was never on the package surface, so the export was a
60
+ function no consumer could call. Deriving a record from persisted bytes goes
61
+ through `recompileSiteChromeHeaderFromPersistedIntent`, which builds the
62
+ candidates itself and has always been the supported way to do it.
63
+
64
+ - **`headerPreferencesWireSchema` is exported alongside `headerPreferencesSchema`.** It is the
65
+ same record with `brandPresentation` defaulting to `'recommended'`, for bodies arriving from a
66
+ client build that predates the field. The field is not client-authored — the server reads the
67
+ mode off the row — so defaulting it on the wire loses nothing, and the persisted schema keeps
68
+ requiring it so a stored record can never be incomplete.
69
+
70
+ - **`headerLogoShapeContext` is exported from
71
+ `@riverbankcms/theme-core/site-styles`.** It is the one definition of "the
72
+ site's logo as the header pipeline sees it", from an asset (or its absence)
73
+ and the accommodation the row persists. The dashboard's server lookup and the
74
+ #1318 Phase 4c migration generator both go through it.
75
+
76
+ - **`APIEndpoints` no longer carries `createTheme`, and `POST /ai/chat/create-theme`
77
+ no longer exists.** The endpoint generated theme proposals from a site id and
78
+ had no caller anywhere — not in the dashboard, not in the SDK's own
79
+ `PublicAPIEndpoints`, not in the e2e or integration suites. Site creation goes
80
+ through `generateThemes` (`POST /theme/generate`), which is what the wizard has
81
+ always called. The `ThemeGenerationTurn` type it was the sole user of is
82
+ removed with it.
83
+
84
+ - **`APIEndpoints` no longer carries `generateThemes`, and `POST /theme/generate`
85
+ no longer exists.** It generated three AI theme proposals for a site, and its
86
+ only caller was the site-creation wizard's theme step, which no navigation
87
+ ever reached — the page was reachable only by typing its URL. The step and the
88
+ whole generator chain behind it are gone. Like `createTheme`, this endpoint is
89
+ not in `PublicAPIEndpoints`, so the SDK's hand-written public surface is
90
+ unchanged; what narrows is the bundled `@riverbankcms/api` declarations.
91
+ `ThemeRow` stays exported from the package — it was only ever this endpoint's
92
+ response element there, but it is a general row type.
93
+
94
+ - **`header.maxWidth` is now optional on the way in.** It gained a schema
95
+ default of `'container'`, so `SdkThemeWire` (`z.input<typeof themeSchema>`)
96
+ accepts a theme body that omits it, where before the field was required and a
97
+ body without it failed to parse. This is a widening — every theme that parsed
98
+ before still parses, and the parsed value is unchanged, since the field only
99
+ ever holds `'container'` in practice. Nothing authors it any more: the field
100
+ is layout-owned, and full-bleed headers will come back as a layout facet
101
+ rather than a free-form value if they are ever wanted.
102
+
103
+ - **`header.interactionPalette` accepts a fourth value, `'quiet'`.** The header
104
+ hover-colour vocabulary was `primary | secondary | accent`, all of which fill
105
+ the nav link with a colour on hover and focus. `'quiet'` means "no fill" — the
106
+ header style's own hover treatment stands and the palette step writes nothing.
107
+ This is a widening of the persisted theme enum, so every theme that parsed
108
+ before still parses and no existing value changes meaning; a consumer that
109
+ exhaustively switches on the palette needs a branch for it.
110
+
111
+ ### Breaking: manifest content uses explicit trust stages (#1245)
112
+
113
+ - SDK rendering now exposes `RenderablePageOutline` values whose blocks carry a
114
+ closed render-admission result. Valid blocks contain renderable content;
115
+ invalid content or an unavailable manifest remains represented as an invalid
116
+ block admission so hosts can diagnose it without receiving rejected content.
117
+ - `EditorPageRenderer` is the explicit raw/incomplete editor entrypoint. The
118
+ production renderer no longer accepts the `usePlaceholders` trust-stage
119
+ switch.
120
+ - The JSON transport remains record-shaped, but consumers constructing or
121
+ inspecting renderer page outlines must handle the new admission contract.
122
+ No deprecated aliases or compatibility mode are retained.
123
+
10
124
  ### Routable content includes native page surfaces (#1332)
11
125
 
12
126
  - **`RoutableContentItem` is now a discriminated union.** The public routable-
package/README.md CHANGED
@@ -1135,16 +1135,12 @@ const { baseUrl } = getRiverbankEnv();
1135
1135
  pageId="page-456"
1136
1136
  previewStage="preview" // or "published"
1137
1137
  client={client}
1138
-
1139
- // Editor-mid-edit fallback: when strict manifest validation fails (e.g.
1140
- // a required field is temporarily empty), retry against a relaxed
1141
- // validator over the same content so valid in-flight fields still
1142
- // render instead of flipping the block to the red "Invalid content"
1143
- // fallback. Leave unset (or `false`) for production frontends.
1144
- usePlaceholders={true}
1145
1138
  />
1146
1139
  ```
1147
1140
 
1141
+ `Block` uses strict manifest validation. Editor-owned incomplete draft previews
1142
+ must use the editor renderer rather than weakening this production boundary.
1143
+
1148
1144
  ### CTA Links with Page/Entry Identifiers
1149
1145
 
1150
1146
  Block content can reference pages and content entries using stable identifiers instead of UUIDs. These links are resolved at render time:
@@ -2680,7 +2676,7 @@ The optional theme-independent wrapper belongs inside `rendering`: use `runtime:
2680
2676
 
2681
2677
  `SiteResponse.theme` is required but nullable: `Theme | null`. A null value means the CMS has no theme; it does not select a rendering mode. Override-only rendering deliberately ignores it. Themed catch-all rendering first prefers explicit `theme`, `themes`, or `getTheme` inputs, then uses the CMS theme. If none resolves, it throws the exported `MissingSdkThemeError` with code `missing_sdk_theme` before theme parsing or token construction.
2682
2678
 
2683
- The nullable contract must be published before the server stops supplying its temporary fallback. Externally pinned hosts must upgrade to this SDK contract and either opt into override-only rendering or provide a real local/CMS theme before that server cutover.
2679
+ The nullable contract was published before the server stopped supplying its temporary fallback. Externally pinned hosts must use that SDK contract and either opt into override-only rendering or provide a real local/CMS theme.
2684
2680
 
2685
2681
  Keep the `server-only` marker at the top of the registry so Next.js turns an accidental Client Component import into a build error. `generateMetadata()` never receives or runs host loaders—even with `customMetadata`—so a normal request does not repeat host queries for metadata and rendering.
2686
2682
 
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { $ as FooterComposerPanel, $a as Maximize2, $i as SelectTrigger, A as markApplySaved, B as resetTypographyToSaved, Bt as useEditorUiStoreInstance, C as applyTypographyDraftPatch, Ca as DropdownMenuContent, Ci as updateButtonStyleSelectionChoice, Cr as curatedSiteStyles, D as dismissWarnings, Da as DropdownMenuTrigger, Dr as findFooterLook, E as deriveStyleConfiguratorCapabilities, Ea as DropdownMenuSeparator, En as ThemeScope, F as previewCuratedPalette, Fa as assertNever$1, Fr as curatedPalettes, Ga as Smartphone, H as styleConfiguratorHistoryEntryForPersistedSelection, I as previewFooterLook, Ka as SlidersHorizontal, L as previewHeaderLayout, M as openRow, N as palettePreviewProjection, Na as unsafeAsEditorBlockId, Ni as paletteColorEntries, Nt as BlockEditor, O as isPreviewingChange, Or as getHeaderLayout, P as previewButtonStyle, Pi as paletteColorsSchema, Q as resolvePreviewSidebarTab, Qa as Monitor, Qi as SelectItem, R as previewHeaderStyle, S as applyResolvedSelections, Sa as DropdownMenu, Si as updateButtonStyleHoverPreference, T as createStyleConfiguratorState, Ta as DropdownMenuLabel, Ti as themeButtonClassName, Tr as getCuratedSiteStyle, U as syncStyleConfiguratorState, Ua as Tablet, V as setPaletteColors, W as toggleRow, Xi as Select, Z as createOptimisticActionRunner, Zi as SelectContent, _ as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, _n as listEntryPageContentSlots, aa as PopoverContent, an as resolveContentTitle, ao as ChevronRight, at as useUISelector, b as cycleSiteChromeSelectionId, ba as CollapsibleTrigger, bi as findButtonStyleRecipe, c as selectionSnapshotFromApplySiteStyleSelectionResponse, ca as Tabs, cn as ManifestForm, co as Check, ct as useEntryController, d as resolveStyleConfiguratorInitialSnapshot, da as TabsTrigger, dn as FormRenderer, ea as SelectValue, eo as LoaderCircle, ia as Popover, in as resolvePageRouteSlug, it as ContentFieldsForm, j as markApplySaving, ja as cn, ji as VARIANT_ROLES, k as markApplyFailed, ka as Button, kr as getHeaderStyle, l as deriveSiteStylePreviewUpdate, la as TabsContent, n as useSiteChromeCustomizeOptional, na as CalloutDescription, oa as PopoverTrigger, oo as ChevronLeft, p as usePreviewDesignCoordinator, pn as createStoreBackend, ra as SearchInput, rn as deriveRouteMetadataPresentation, s as buildApplySiteStyleSelectionBody, sa as Input, so as ChevronDown, ta as Callout, tn as isAdapterReferenceKind, u as planSiteStylePreviewChange, ua as TabsList, un as createManifestValidation, v as reportPreviewDesignError, va as Collapsible, vi as buttonStyleHoverPreferenceValue, w as cancelPreview, wa as DropdownMenuItem, wi as buttonStyleSelectionKey, x as planSiteChromeSelection, xa as Surface, xi as resolveButtonStyleSelection, y as buildSiteChromeSelectionModels, ya as CollapsibleContent, yi as buttonStyleSelectionParameterValue, z as previewSiteStyle, za as X$1, zt as useEditorUiStore } from "./SiteChromeCustomizeContext-61X2m7QV.mjs";
3
- import { d as unwrapResponse, f as getDashboardUrl, r as usePreviewAuth } from "./previewAuthStore-C7ksxt5b.mjs";
4
- import { t as Separator } from "./separator-CadhAtI7.mjs";
5
- import { S as getSiteFontsStorageUrl, _ as usePreviewBlockCustomizeSelectionOptional, b as buildFontPreviewUrl, d as buildPreviewDashboardSetupUrl, f as resolvePreviewDashboardSetupHandoff, g as useBlockCustomizeControls, h as usePreviewSiteFontStorageUrl, m as resolvePreviewSidebarChromeModel, p as resolvePreviewEditorGuidanceModel, u as canInspectSiteStyle, v as PreviewFormProvider, x as generateFontFaceCss, y as previewWidgetOverrides } from "./SdkPreviewModeRuntime-BKLtM3Nz.mjs";
2
+ import { $ as FooterComposerPanel, $a as Monitor, $i as SelectItem, A as markApplySaving, Aa as Button, Ar as getHeaderStyle, B as setPaletteColors, Ba as X$1, Bt as useEditorUiStoreInstance, C as cancelPreview, Ca as DropdownMenu, Ci as updateButtonStyleHoverPreference, D as isPreviewingChange, Da as DropdownMenuSeparator, E as dismissWarnings, Ea as DropdownMenuLabel, Ei as themeButtonClassName, En as ThemeScope, Er as getCuratedSiteStyle, F as previewFooterLook, Fi as paletteColorsSchema, H as syncStyleConfiguratorState, I as previewHeaderLayout, Ia as assertNever$1, Ir as curatedPalettes, Ka as Smartphone, L as previewHeaderStyle, M as palettePreviewProjection, Ma as cn, Mi as VARIANT_ROLES, N as previewButtonStyle, Nt as BlockEditor, O as markApplyFailed, Oa as DropdownMenuTrigger, Or as findFooterLook, P as previewCuratedPalette, Pa as unsafeAsEditorBlockId, Pi as paletteColorEntries, Q as resolvePreviewSidebarTab, Qi as SelectContent, R as previewSiteStyle, S as applyTypographyDraftPatch, Sa as Surface, Si as resolveButtonStyleSelection, T as deriveStyleConfiguratorCapabilities, Ta as DropdownMenuItem, Ti as buttonStyleSelectionKey, U as toggleRow, V as styleConfiguratorHistoryEntryForPersistedSelection, Wa as Tablet, X as resolveStyleConfiguratorInitialSnapshot, Z as createOptimisticActionRunner, Zi as Select, _ as reportPreviewDesignError, _n as listEntryPageContentSlots, aa as Popover, an as resolveContentTitle, at as useUISelector, b as planSiteChromeSelection, ba as CollapsibleContent, bi as buttonStyleSelectionParameterValue, c as selectionSnapshotFromApplySiteStyleSelectionResponse, ca as Input, cn as ManifestForm, co as ChevronDown, ct as useEntryController, da as TabsList, dn as FormRenderer, ea as SelectTrigger, eo as Maximize2, f as usePreviewDesignCoordinator, fa as TabsTrigger, g as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, ia as SearchInput, in as resolvePageRouteSlug, it as ContentFieldsForm, j as openRow, k as markApplySaved, kr as getHeaderLayout, l as deriveSiteStylePreviewUpdate, la as Tabs, lo as Check, n as useSiteChromeCustomizeOptional, na as Callout, oa as PopoverContent, oo as ChevronRight, pn as createStoreBackend, qa as SlidersHorizontal, ra as CalloutDescription, rn as deriveRouteMetadataPresentation, s as buildApplySiteStyleSelectionBody, sa as PopoverTrigger, so as ChevronLeft, ta as SelectValue, tn as isAdapterReferenceKind, to as LoaderCircle, u as planConfiguratorPreview, ua as TabsContent, un as createManifestValidation, v as buildSiteChromeSelectionModels, w as createStyleConfiguratorState, wa as DropdownMenuContent, wi as updateButtonStyleSelectionChoice, wr as curatedSiteStyles, x as applyResolvedSelections, xa as CollapsibleTrigger, xi as findButtonStyleRecipe, y as cycleSiteChromeSelectionId, ya as Collapsible, yi as buttonStyleHoverPreferenceValue, z as resetTypographyToSaved, zt as useEditorUiStore } from "./SiteChromeCustomizeContext-BbkNSt5a.mjs";
3
+ import { d as unwrapResponse, f as getDashboardUrl, r as usePreviewAuth } from "./previewAuthStore-L_cKW8Sb.mjs";
4
+ import { t as Separator } from "./separator-BIHkie5i.mjs";
5
+ import { S as getSiteFontsStorageUrl, _ as usePreviewBlockCustomizeSelectionOptional, b as buildFontPreviewUrl, d as buildPreviewDashboardSetupUrl, f as resolvePreviewDashboardSetupHandoff, g as useBlockCustomizeControls, h as usePreviewSiteFontStorageUrl, m as resolvePreviewSidebarChromeModel, p as resolvePreviewEditorGuidanceModel, u as canInspectSiteStyle, v as PreviewFormProvider, x as generateFontFaceCss, y as previewWidgetOverrides } from "./SdkPreviewModeRuntime-BbbGsI_v.mjs";
6
6
  import React, { createContext, forwardRef, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { useQuery, useQueryClient } from "@tanstack/react-query";
@@ -3670,7 +3670,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3670
3670
  clearPreview("style-configurator");
3671
3671
  return;
3672
3672
  }
3673
- previewTheme("style-configurator", planSiteStylePreviewChange({
3673
+ previewTheme("style-configurator", planConfiguratorPreview({
3674
3674
  siteStyle,
3675
3675
  selection: state.previewed,
3676
3676
  headerLogoContext,
@@ -3706,7 +3706,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3706
3706
  const next = previewSiteStyle(current, siteStyleId);
3707
3707
  const siteStyle = getCuratedSiteStyle(siteStyleId);
3708
3708
  if (!siteStyle) return next;
3709
- const result = planSiteStylePreviewChange({
3709
+ const result = planConfiguratorPreview({
3710
3710
  siteStyle,
3711
3711
  selection: next.previewed,
3712
3712
  headerLogoContext,
@@ -3754,7 +3754,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3754
3754
  if (!current) return current;
3755
3755
  const siteStyle = getCuratedSiteStyle(current.previewed.siteStyleId);
3756
3756
  if (!siteStyle) return current;
3757
- return applyTypographyDraftPatch(current, planSiteStylePreviewChange({
3757
+ return applyTypographyDraftPatch(current, planConfiguratorPreview({
3758
3758
  siteStyle,
3759
3759
  selection: current.previewed,
3760
3760
  headerLogoContext,
@@ -3876,7 +3876,7 @@ function StyleConfigurator({ siteId, apiClient, theme, selectionId, selectionVer
3876
3876
  });
3877
3877
  const currentPalette = palettePreviewProjection(state.previewed.palette);
3878
3878
  const paletteControlsDisabled = saving || !stagedCapabilities.canPreviewStaged;
3879
- const currentPreviewPlan = planSiteStylePreviewChange({
3879
+ const currentPreviewPlan = planConfiguratorPreview({
3880
3880
  siteStyle: currentSiteStyle,
3881
3881
  selection: state.previewed,
3882
3882
  headerLogoContext,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { Aa as cva, At as useEditor, Bt as useEditorUiStoreInstance, Ca as DropdownMenuContent, Da as DropdownMenuTrigger, Ha as TriangleAlert, Ja as Redo2, Ji as TooltipContent, Rt as classifyHistoryShortcut, Sa as DropdownMenu, Va as Undo2, Wa as Sparkles, Xa as PenLine, Xt as useMultiAutosave, Ya as Pencil, Yi as TooltipTrigger, Za as Palette, _a as DialogTitle, a as previewDesignHistoryDomainForCommand, eo as LoaderCircle, fa as Dialog, ga as DialogHeader, i as usePreviewDesignHistoryOrder, io as EllipsisVertical, ja as cn, ka as Button, lt as useEntryEditorController, ma as DialogDescription, n as useSiteChromeCustomizeOptional, o as selectPreviewDesignHistoryDomain, pa as DialogContent, qi as Tooltip, ro as Eye, so as ChevronDown, wa as DropdownMenuItem, zt as useEditorUiStore } from "./SiteChromeCustomizeContext-61X2m7QV.mjs";
3
- import { d as unwrapResponse, r as usePreviewAuth } from "./previewAuthStore-C7ksxt5b.mjs";
4
- import { C as FixedBottomSurface, a as usePreviewPageDesignEditorState, c as applyPreviewChromeSurfaceToElement, l as resolvePreviewChromeSurface, o as PREVIEW_CHROME_PORTAL_CLASS_NAME, s as PREVIEW_CHROME_THEME_CLASS_NAME } from "./SdkPreviewModeRuntime-BKLtM3Nz.mjs";
2
+ import { Aa as Button, At as useEditor, Bt as useEditorUiStoreInstance, Ca as DropdownMenu, Ga as Sparkles, Ha as Undo2, Ji as Tooltip, Ma as cn, Oa as DropdownMenuTrigger, Qa as Palette, Rt as classifyHistoryShortcut, Ta as DropdownMenuItem, Ua as TriangleAlert, Xa as Pencil, Xi as TooltipTrigger, Xt as useMultiAutosave, Ya as Redo2, Yi as TooltipContent, Za as PenLine, _a as DialogHeader, a as previewDesignHistoryDomainForCommand, ao as EllipsisVertical, co as ChevronDown, ha as DialogDescription, i as usePreviewDesignHistoryOrder, io as Eye, ja as cva, lt as useEntryEditorController, ma as DialogContent, n as useSiteChromeCustomizeOptional, o as selectPreviewDesignHistoryDomain, pa as Dialog, to as LoaderCircle, va as DialogTitle, wa as DropdownMenuContent, zt as useEditorUiStore } from "./SiteChromeCustomizeContext-BbkNSt5a.mjs";
3
+ import { d as unwrapResponse, r as usePreviewAuth } from "./previewAuthStore-L_cKW8Sb.mjs";
4
+ import { C as FixedBottomSurface, a as usePreviewPageDesignEditorState, c as applyPreviewChromeSurfaceToElement, l as resolvePreviewChromeSurface, o as PREVIEW_CHROME_PORTAL_CLASS_NAME, s as PREVIEW_CHROME_THEME_CLASS_NAME } from "./SdkPreviewModeRuntime-BbbGsI_v.mjs";
5
5
  import * as React$1 from "react";
6
6
  import { useCallback, useEffect, useMemo, useState, useTransition } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as markPreviewAuthExpired, s as ApiRequestError } from "./previewAuthStore-C7ksxt5b.mjs";
2
+ import { n as markPreviewAuthExpired, s as ApiRequestError } from "./previewAuthStore-L_cKW8Sb.mjs";
3
3
  import { createContext, useContext, useRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { MutationCache, QueryCache, QueryClient, QueryClientProvider } from "@tanstack/react-query";