@riverbankcms/sdk 0.143.0 → 0.145.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 (254) hide show
  1. package/dist/{PreviewEditorSidebar-DROGfMKi.mjs → PreviewEditorSidebar-O-V6Pl5a.mjs} +20 -26
  2. package/dist/{PreviewEditorUI-BaRjhFu-.mjs → PreviewEditorUI-1UlX_9cw.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-BxGwdOCV.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-OIABYLES.mjs → SdkPreviewModeRuntime-DYbA_4iv.mjs} +431 -351
  5. package/dist/{SiteChromeCustomizeContext-ohjTvZbc.mjs → SiteChromeCustomizeContext-CNTKQ9nx.mjs} +3989 -2769
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +4719 -66
  7. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +429 -6
  8. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  9. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  10. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  11. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  12. package/dist/_dts/api/src/billing.d.ts +1 -1
  13. package/dist/_dts/api/src/billingEndpointTypes.d.ts +8 -2
  14. package/dist/_dts/api/src/bookingConfig.d.ts +3 -1
  15. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -12
  16. package/dist/_dts/api/src/communications.d.ts +14 -22
  17. package/dist/_dts/api/src/contentRuntime.d.ts +2 -0
  18. package/dist/_dts/api/src/endpoints.d.ts +105 -58
  19. package/dist/_dts/api/src/index.d.ts +1 -1
  20. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  21. package/dist/_dts/api/src/launchReadiness.d.ts +2 -0
  22. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +4 -4
  23. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +0 -23
  24. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  25. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  26. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +1 -0
  27. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  28. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  29. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  30. package/dist/_dts/api/src/sdkContracts.d.ts +1 -1
  31. package/dist/_dts/api/src/sdkSettingsContracts.d.ts +8 -0
  32. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -6
  33. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +2 -8
  34. package/dist/_dts/api/src/siteSettings.d.ts +17 -7
  35. package/dist/_dts/api/src/types.d.ts +2 -1
  36. package/dist/_dts/billing/src/membership/index.d.ts +3 -0
  37. package/dist/_dts/block-form/src/backend/types.d.ts +14 -0
  38. package/dist/_dts/block-form/src/client/index.d.ts +1 -0
  39. package/dist/_dts/block-form/src/context/RepeaterHostActionsContext.d.ts +30 -0
  40. package/dist/_dts/block-form/src/context/index.d.ts +1 -0
  41. package/dist/_dts/block-form/src/index.d.ts +1 -0
  42. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +4 -1
  43. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +5 -2
  44. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +11 -1
  45. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +1 -0
  46. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useEmptyStateFocusAfterRemoval.d.ts +8 -0
  47. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +15 -1
  48. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterRowActionsDomain.d.ts +5 -2
  49. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  50. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  51. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +58 -10
  52. package/dist/_dts/blocks/src/index.d.ts +1 -1
  53. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  54. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  55. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  56. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  57. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -0
  58. package/dist/_dts/blocks/src/server.d.ts +1 -1
  59. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  60. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  61. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  62. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  63. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  64. package/dist/_dts/blocks/src/system/constants/events.d.ts +10 -0
  65. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  66. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +5 -0
  67. package/dist/_dts/blocks/src/system/runtime/api/context.d.ts +3 -3
  68. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +10 -0
  69. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +3 -2
  70. package/dist/_dts/blocks/src/system/runtime/api/readAuthority.d.ts +11 -0
  71. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +9 -0
  72. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +7 -13
  73. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -6
  74. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +9 -4
  75. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +0 -1
  76. package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.d.ts +1 -3
  77. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  78. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +7 -24
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  85. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/cart.server.d.ts +1 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +1 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +2 -1
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +2 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +2 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +2 -2
  95. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +8 -0
  96. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +4 -5
  97. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +7 -2
  98. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +7 -5
  99. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +5 -6
  100. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +6 -4
  101. package/dist/_dts/blocks/src/system/runtime/nodes/header-control.d.ts +10 -0
  102. package/dist/_dts/blocks/src/system/runtime/nodes/layout.d.ts +6 -21
  103. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  104. package/dist/_dts/blocks/src/system/runtime/nodes/product-detail.server.d.ts +1 -0
  105. package/dist/_dts/blocks/src/system/runtime/nodes/product-list.server.d.ts +1 -0
  106. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +13 -0
  107. package/dist/_dts/blocks/src/system/runtime/nodes/shop.server.d.ts +1 -0
  108. package/dist/_dts/blocks/src/system/runtime/shared/components/ThemedButton.d.ts +58 -0
  109. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  110. package/dist/_dts/blocks/src/system/transforms/registry/chromeLogo.d.ts +23 -0
  111. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +2 -1
  112. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +3 -1
  113. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +4 -1
  114. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -0
  115. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  116. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  117. package/dist/_dts/core/src/editor-state.d.ts +6 -0
  118. package/dist/_dts/core/src/event-catalogue.d.ts +27 -0
  119. package/dist/_dts/core/src/event-preset-vocabulary.d.ts +7 -0
  120. package/dist/_dts/core/src/index.d.ts +3 -0
  121. package/dist/_dts/core/src/public-profile.d.ts +9 -0
  122. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +676 -241
  123. package/dist/_dts/db/src/schemas/forms.d.ts +286 -2
  124. package/dist/_dts/editor-blocks/src/block-editor/{BlockCardHeader.d.ts → BlockCardFrame.d.ts} +11 -3
  125. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +6 -0
  126. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  127. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  128. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  129. package/dist/_dts/logger/src/console.d.ts +3 -0
  130. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  131. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  132. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +1 -0
  133. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  134. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  135. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  136. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  137. package/dist/_dts/sdk/src/client/publicEventReadOperations.d.ts +1 -0
  138. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  139. package/dist/_dts/sdk/src/client/types.d.ts +4 -1
  140. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  141. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  142. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  143. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  144. package/dist/_dts/sdk/src/navigation/index.d.ts +27 -0
  145. package/dist/_dts/sdk/src/public-api/contracts.d.ts +21 -15
  146. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -2
  147. package/dist/_dts/sdk/src/rendering/client.d.ts +1 -0
  148. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +1 -0
  149. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +7 -1
  150. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -2
  151. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  152. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +1 -1
  153. package/dist/_dts/sdk/src/rendering/islands/enhancers/routeIslandApiConfig.d.ts +3 -2
  154. package/dist/_dts/sdk/src/rendering/islands/enhancers/shopShared.d.ts +2 -0
  155. package/dist/_dts/sdk/src/rendering/overrides.d.ts +1 -0
  156. package/dist/_dts/sdk/src/version.d.ts +1 -1
  157. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  158. package/dist/_dts/theme-core/src/buttons/affordanceSuppression.d.ts +1 -1
  159. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +3 -13
  160. package/dist/_dts/theme-core/src/customCss/index.d.ts +1 -1
  161. package/dist/_dts/theme-core/src/customCss/patch.d.ts +0 -5
  162. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  163. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  164. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  165. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  166. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  167. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  168. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  169. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  170. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  171. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  172. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  173. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  174. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  175. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  176. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  177. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  178. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  179. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  180. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  181. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  182. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  183. package/dist/_dts/theme-core/src/surfaces/logoVariant.d.ts +26 -0
  184. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +10 -0
  185. package/dist/_dts/ui/src/editor-item-card.d.ts +116 -0
  186. package/dist/_dts/ui/src/index.d.ts +1 -0
  187. package/dist/client/{BookingConsentAgreement-BoCtvzzu.mjs → BookingConsentAgreement-DlVOmpW4.mjs} +4 -55
  188. package/dist/client/{DiscountCodeDisclosure-B5S30nZk.mjs → DiscountCodeDisclosure-T9q623PQ.mjs} +27 -17
  189. package/dist/client/{EventCombined.client-CeZ2-zSt.mjs → EventCombined.client-DnsUeONl.mjs} +54 -46
  190. package/dist/client/{EventListing.client-DJN3j8B3.mjs → EventListing.client-CNBFqJS4.mjs} +3 -4
  191. package/dist/client/{LeafletStaticMap-RjtGzDQT.mjs → LeafletStaticMap-C7higg52.mjs} +1 -1
  192. package/dist/client/ThemedButton-LAJTNrS8.mjs +412 -0
  193. package/dist/client/{accordion-DOmnDoyg.mjs → accordion-BcNF9TjX.mjs} +1 -1
  194. package/dist/client/{bookingForm-C0vk7pgS.mjs → bookingForm-BUaQ3S03.mjs} +161 -75
  195. package/dist/client/bookings.mjs +392 -182
  196. package/dist/client/{carousel-BZJ7pno3.mjs → carousel-CTdF6e0V.mjs} +2 -2
  197. package/dist/client/{carousel.client-DQTjCVQT.mjs → carousel.client-jahpU9Vz.mjs} +1 -1
  198. package/dist/client/{cart-CaeVAHJl.mjs → cart-pGtyf_XU.mjs} +3 -3
  199. package/dist/client/{checkout-7wmoNDtG.mjs → checkout-Da9WSn7Y.mjs} +3 -3
  200. package/dist/client/{checkoutUrls-FL6lRkrt.mjs → checkoutUrls-CW3-78uu.mjs} +1 -1
  201. package/dist/client/client.mjs +3819 -2717
  202. package/dist/client/{colorStyles-3013aRAY.mjs → colorStyles-CuJBiS-1.mjs} +16 -4
  203. package/dist/client/{context-BOimxE3U.mjs → context-BFeY_Wbm.mjs} +24 -8
  204. package/dist/client/{dates-BnzVksi4.mjs → dates-BhwVSxDg.mjs} +2 -2
  205. package/dist/client/{eventCalendar-l-fpaslC.mjs → eventCalendar-BAtdnR4s.mjs} +39 -50
  206. package/dist/client/{eventCombined-DGGvssK6.mjs → eventCombined-RksA3tRC.mjs} +5 -4
  207. package/dist/client/{eventDetails-DRiCm_hL.mjs → eventDetails-BB9hB4wR.mjs} +4 -4
  208. package/dist/client/{eventListing-dph8loYX.mjs → eventListing-BpJBkviM.mjs} +5 -4
  209. package/dist/client/{eventRegistration-ClBohmbY.mjs → eventRegistration-B18jFq_o.mjs} +83 -68
  210. package/dist/client/{form-BLVVAnd3.mjs → form-Dodt8Y8t.mjs} +9 -10
  211. package/dist/client/{headerSection-DHy4C8Ix.mjs → headerSection-B0qj9ttg.mjs} +23 -30
  212. package/dist/client/hooks.mjs +807 -162
  213. package/dist/client/{locationMap-6HuS28ck.mjs → locationMap-gn-iMk7a.mjs} +9 -10
  214. package/dist/client/{media-DHpfFwd3.mjs → media-BtJ37tzS.mjs} +1 -1
  215. package/dist/client/{newsletterForm-xOdcOhZP.mjs → newsletterForm-oByLdFkr.mjs} +31 -11
  216. package/dist/client/{pricing-ChinRYFt.mjs → pricing-BOU0_Hai.mjs} +1 -1
  217. package/dist/client/{productDetail-0chA5gbK.mjs → productDetail-D9v1zH2j.mjs} +3 -3
  218. package/dist/client/{productList-OoINA0h1.mjs → productList-D-mItx1n.mjs} +3 -3
  219. package/dist/client/{propsDecoder-CIZ-hbIG.mjs → propsDecoder-C3TP_z4x.mjs} +158 -61
  220. package/dist/client/rendering/client.mjs +2785 -2000
  221. package/dist/client/rendering/islands.mjs +19 -19
  222. package/dist/client/rendering.mjs +3855 -2694
  223. package/dist/client/{routeIslandApiConfig-UNsfPcYq.mjs → routeIslandApiConfig-DzN1W0sq.mjs} +8 -1
  224. package/dist/client/{scrollToBlock-BPZl0gPZ.mjs → scrollToBlock-CWs8EIdo.mjs} +1 -1
  225. package/dist/client/{shop-CLJFqNIq.mjs → shop-Dufw7N7o.mjs} +45 -58
  226. package/dist/client/{shop-commerce-PpANg5wB.mjs → shop-commerce-gklw_hLF.mjs} +42 -55
  227. package/dist/client/{shop-commerce-store-TA_Kz2ku.mjs → shop-commerce-store-Sf1eyTaZ.mjs} +1 -1
  228. package/dist/client/{shopShared-DzcFcA5g.mjs → shopShared-B5nyA41S.mjs} +6 -5
  229. package/dist/client/{useEventFilters-CFU21QZo.mjs → useEventFilters-CLL829vy.mjs} +66 -355
  230. package/dist/preview-next/before-render.mjs +147 -77
  231. package/dist/preview-next/client/runtime.mjs +4 -4
  232. package/dist/preview-next/editor-chrome.css +8 -0
  233. package/dist/preview-next/keepAlive.mjs +147 -77
  234. package/dist/preview-next/middleware.mjs +147 -77
  235. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-BxAFlu-j.mjs} +147 -77
  236. package/dist/{sdk-runtime-CDKl0Fr7.mjs → sdk-runtime-D0uZFev7.mjs} +2 -2
  237. package/dist/{separator-BTp96X32.mjs → separator-EvdCAn4V.mjs} +1 -1
  238. package/dist/server/components.mjs +2548 -1607
  239. package/dist/server/config-validation.mjs +794 -160
  240. package/dist/server/config.mjs +794 -160
  241. package/dist/server/data.mjs +806 -161
  242. package/dist/server/index.mjs +167 -85
  243. package/dist/server/navigation.mjs +28 -1
  244. package/dist/server/next.mjs +14930 -14036
  245. package/dist/server/page-converter.mjs +494 -113
  246. package/dist/server/prebuild.mjs +1 -1
  247. package/dist/server/rendering/server.mjs +2537 -1590
  248. package/dist/server/rendering.mjs +2571 -1618
  249. package/dist/server/routing.mjs +918 -200
  250. package/dist/server/server.mjs +819 -205
  251. package/dist/server/theme-bridge.mjs +1232 -28
  252. package/dist/server/theme.mjs +6 -4
  253. package/dist/styles/index.css +6 -0
  254. package/package.json +2 -1
@@ -944,6 +944,10 @@ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FAL
944
944
  if (role === "text") return `var(${roleVariable}, ${fallback})`;
945
945
  return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
946
946
  }
947
+ function surfaceForegroundValueWithOpacity(role, opacityPercent) {
948
+ if (!Number.isFinite(opacityPercent) || opacityPercent < 0 || opacityPercent > 100) throw new RangeError("Surface foreground opacity must be between 0 and 100.");
949
+ return `color-mix(in srgb, ${surfaceForegroundValue(role)} ${opacityPercent}%, transparent)`;
950
+ }
947
951
  function surfaceForegroundDeclarations(input) {
948
952
  const foregrounds = completeSurfaceForegrounds(input);
949
953
  return [`color: ${foregrounds.text}`, ...SURFACE_FOREGROUND_ROLES.map((role) => `${SURFACE_FOREGROUND_CSS_VARS[role]}: ${foregrounds[role]}`)];
@@ -1657,6 +1661,14 @@ function parseToken(source) {
1657
1661
  opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
1658
1662
  };
1659
1663
  }
1664
+ const SURFACE_TEXT_ROLE_BY_TOKEN = {
1665
+ text: "text",
1666
+ heading: "heading",
1667
+ mutedText: "supporting"
1668
+ };
1669
+ function surfaceRoleForTextToken(token) {
1670
+ return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
1671
+ }
1660
1672
  /**
1661
1673
  * Converts a theme color token to a CSS rgb value.
1662
1674
  * This is the primary function for applying theme colors to CSS properties.
@@ -1691,6 +1703,21 @@ function cssVarValue(token) {
1691
1703
  const { token: baseToken } = parseToken(token);
1692
1704
  return `var(${COLOR_VAR_PREFIX}${baseToken})`;
1693
1705
  }
1706
+ /**
1707
+ * Converts a text color token to a CSS color value that follows the enclosing
1708
+ * surface. The semantic text tokens (`text`, `heading`, `mutedText`) resolve
1709
+ * to the surface foreground variables, so text adapts when a section's
1710
+ * background changes; any other token is a fixed theme color.
1711
+ *
1712
+ * @param token - Theme color token
1713
+ * @returns CSS color value
1714
+ */
1715
+ function textColorValue(token) {
1716
+ const parsed = parseToken(token);
1717
+ const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
1718
+ if (!surfaceRole) return rgbColorValue(token);
1719
+ return parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent);
1720
+ }
1694
1721
  shadeBackgroundEffect({
1695
1722
  id: "darken-background",
1696
1723
  name: "Darken on Hover",
@@ -4782,12 +4809,23 @@ function defineExactCatalog() {
4782
4809
  function asDesignBlockId(value) {
4783
4810
  return brandNonEmptyString(value, "DesignBlockId");
4784
4811
  }
4812
+ function asDesignBoundaryId(value) {
4813
+ const boundaryId = brandNonEmptyString(value, "DesignBoundaryId");
4814
+ if (!boundaryId.startsWith("boundary:")) throw new Error(`DesignBoundaryId must start with "boundary:". Received: ${value}`);
4815
+ return boundaryId;
4816
+ }
4817
+ function asLayoutVariantKey(value) {
4818
+ return brandNonEmptyString(value, "LayoutVariantKey");
4819
+ }
4785
4820
  function asAppearancePresetId(value) {
4786
4821
  return brandNonEmptyString(value, "AppearancePresetId");
4787
4822
  }
4788
4823
  function asBoundaryOptionId(value) {
4789
4824
  return brandNonEmptyString(value, "BoundaryOptionId");
4790
4825
  }
4826
+ function asPageFlowPresetId(value) {
4827
+ return brandNonEmptyString(value, "PageFlowPresetId");
4828
+ }
4791
4829
  function asSiteStyleId(value) {
4792
4830
  const siteStyleId = brandNonEmptyString(value, "SiteStyleId");
4793
4831
  if (!siteStyleId.startsWith("site-style:")) throw new Error(`SiteStyleId must start with "site-style:". Received: ${value}`);
@@ -4796,6 +4834,18 @@ function asSiteStyleId(value) {
4796
4834
  function asDesignSystemTemplateId(value) {
4797
4835
  return brandNonEmptyString(value, "DesignSystemTemplateId");
4798
4836
  }
4837
+ function toNonEmptyReadonlyArray(values) {
4838
+ const [first, ...rest] = values;
4839
+ return first === void 0 ? null : [first, ...rest];
4840
+ }
4841
+ function requireNonEmptyReadonlyArray(values, message = "Expected a non-empty array.") {
4842
+ const result = toNonEmptyReadonlyArray(values);
4843
+ if (!result) throw new Error(message);
4844
+ return result;
4845
+ }
4846
+ function makeBoundaryId(previousBlockId, nextBlockId) {
4847
+ return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
4848
+ }
4799
4849
  function brandNonEmptyString(value, label) {
4800
4850
  if (value.length === 0) throw new Error(`${label} must be a non-empty string.`);
4801
4851
  return value;
@@ -4960,16 +5010,18 @@ const themeV2RuntimeStyleFieldNames = [
4960
5010
  "_frameStyles",
4961
5011
  "_sectionStyles",
4962
5012
  "_containerStyles",
4963
- "_cardStyles",
4964
- "_transitionStyles",
4965
- "styleGroup"
5013
+ "_cardStyles"
4966
5014
  ];
4967
5015
  const themeV2BlockSpecificRawStyleFieldNames = [
4968
5016
  "_contentCardStyles",
4969
5017
  "_heroLayoutStyles",
4970
5018
  "_textCardStyles"
4971
5019
  ];
4972
- const themeV2NormalEditorRawStyleFieldNames = [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
5020
+ const themeV2NormalEditorRawStyleFieldNames = [
5021
+ ...themeV2RuntimeStyleFieldNames,
5022
+ ...themeV2BlockSpecificRawStyleFieldNames,
5023
+ "styleGroup"
5024
+ ];
4973
5025
  new Set(themeV2NormalEditorRawStyleFieldNames);
4974
5026
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
4975
5027
  const pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
@@ -8914,6 +8966,261 @@ z.object({
8914
8966
  authority: styleAuthoritySchema
8915
8967
  }).strict();
8916
8968
  //#endregion
8969
+ //#region ../theme-core/src/site-styles/transitionCatalogue.ts
8970
+ /**
8971
+ * Family order for pickers. Entries below are listed family by family in this
8972
+ * same order, so the flat option list and the grouped families agree.
8973
+ */
8974
+ const transitionCatalogueFamilies = [
8975
+ {
8976
+ id: "gradient",
8977
+ label: "Gradient"
8978
+ },
8979
+ {
8980
+ id: "wave",
8981
+ label: "Wave"
8982
+ },
8983
+ {
8984
+ id: "angle",
8985
+ label: "Angle"
8986
+ }
8987
+ ];
8988
+ const mediumHeight = "6rem + 2px";
8989
+ const compactHeight = "4.5rem + 2px";
8990
+ const largeHeight = "7rem + 2px";
8991
+ /**
8992
+ * The single source of transition vocabulary. Order is significant: it is the
8993
+ * order of `boundaryOptions` (after `none`) and of each family's variants,
8994
+ * which persisted pins, page-flow presets and the editor picker all rely on.
8995
+ *
8996
+ * Shapes match what `generateLayoutCss` draws today. Structured
8997
+ * amplitude/frequency treatments (issue 826) extend this list later.
8998
+ */
8999
+ const transitionCatalogueEntries = defineExactCatalog()([
9000
+ {
9001
+ intent: "soft-fade-short",
9002
+ optionId: asBoundaryOptionId("break:soft"),
9003
+ family: "gradient",
9004
+ variantId: "soft",
9005
+ label: "Soft",
9006
+ variantLabel: "Soft",
9007
+ treatment: {
9008
+ kind: "soft-fade",
9009
+ height: "medium",
9010
+ curve: "soft"
9011
+ },
9012
+ size: "medium",
9013
+ heightExpression: mediumHeight,
9014
+ shape: { kind: "fade" }
9015
+ },
9016
+ {
9017
+ intent: "soft-fade-long",
9018
+ optionId: asBoundaryOptionId("break:spacious"),
9019
+ family: "gradient",
9020
+ variantId: "spacious",
9021
+ label: "Spacious",
9022
+ variantLabel: "Spacious",
9023
+ treatment: {
9024
+ kind: "soft-fade",
9025
+ height: "large",
9026
+ curve: "spacious"
9027
+ },
9028
+ size: "spacious",
9029
+ heightExpression: "10rem",
9030
+ shape: { kind: "fade" }
9031
+ },
9032
+ {
9033
+ intent: "soft-fade-expansive",
9034
+ optionId: asBoundaryOptionId("break:expansive"),
9035
+ family: "gradient",
9036
+ variantId: "expansive",
9037
+ label: "Expansive",
9038
+ variantLabel: "Expansive",
9039
+ treatment: {
9040
+ kind: "soft-fade",
9041
+ height: "expansive",
9042
+ curve: "expansive"
9043
+ },
9044
+ size: "expansive",
9045
+ heightExpression: "14rem",
9046
+ shape: { kind: "fade" }
9047
+ },
9048
+ {
9049
+ intent: "wave-edge-balanced",
9050
+ optionId: asBoundaryOptionId("break:wave-balanced"),
9051
+ family: "wave",
9052
+ variantId: "balanced",
9053
+ label: "Balanced wave",
9054
+ variantLabel: "Balanced",
9055
+ treatment: {
9056
+ kind: "wave-edge",
9057
+ height: "medium",
9058
+ amplitude: "balanced",
9059
+ rhythm: "double",
9060
+ symmetry: "symmetrical"
9061
+ },
9062
+ size: "medium",
9063
+ heightExpression: mediumHeight,
9064
+ shape: {
9065
+ kind: "wave",
9066
+ mask: "balanced"
9067
+ }
9068
+ },
9069
+ {
9070
+ intent: "wave-edge",
9071
+ optionId: asBoundaryOptionId("break:wave"),
9072
+ family: "wave",
9073
+ variantId: "classic",
9074
+ label: "Classic wave",
9075
+ variantLabel: "Classic",
9076
+ treatment: {
9077
+ kind: "wave-edge",
9078
+ height: "medium",
9079
+ amplitude: "balanced",
9080
+ rhythm: "double",
9081
+ symmetry: "asymmetrical"
9082
+ },
9083
+ size: "medium",
9084
+ heightExpression: mediumHeight,
9085
+ shape: {
9086
+ kind: "wave",
9087
+ mask: "classic"
9088
+ }
9089
+ },
9090
+ {
9091
+ intent: "wave-edge-gentle",
9092
+ optionId: asBoundaryOptionId("break:wave-gentle"),
9093
+ family: "wave",
9094
+ variantId: "gentle",
9095
+ label: "Gentle wave",
9096
+ variantLabel: "Gentle",
9097
+ treatment: {
9098
+ kind: "wave-edge",
9099
+ height: "compact",
9100
+ amplitude: "subtle",
9101
+ rhythm: "single",
9102
+ symmetry: "symmetrical"
9103
+ },
9104
+ size: "compact",
9105
+ heightExpression: compactHeight,
9106
+ shape: {
9107
+ kind: "wave",
9108
+ mask: "gentle"
9109
+ }
9110
+ },
9111
+ {
9112
+ intent: "wave-edge-bold",
9113
+ optionId: asBoundaryOptionId("break:wave-bold"),
9114
+ family: "wave",
9115
+ variantId: "bold",
9116
+ label: "Bold wave",
9117
+ variantLabel: "Bold",
9118
+ treatment: {
9119
+ kind: "wave-edge",
9120
+ height: "large",
9121
+ amplitude: "bold",
9122
+ rhythm: "double",
9123
+ symmetry: "symmetrical"
9124
+ },
9125
+ size: "large",
9126
+ heightExpression: largeHeight,
9127
+ shape: {
9128
+ kind: "wave",
9129
+ mask: "bold"
9130
+ }
9131
+ },
9132
+ {
9133
+ intent: "wave-edge-drift",
9134
+ optionId: asBoundaryOptionId("break:wave-drift"),
9135
+ family: "wave",
9136
+ variantId: "drift",
9137
+ label: "Drift wave",
9138
+ variantLabel: "Drift",
9139
+ treatment: {
9140
+ kind: "wave-edge",
9141
+ height: "medium",
9142
+ amplitude: "balanced",
9143
+ rhythm: "double",
9144
+ symmetry: "drift"
9145
+ },
9146
+ size: "medium",
9147
+ heightExpression: mediumHeight,
9148
+ shape: {
9149
+ kind: "wave",
9150
+ mask: "drift"
9151
+ }
9152
+ },
9153
+ {
9154
+ intent: "angle-edge-subtle",
9155
+ optionId: asBoundaryOptionId("break:angle-subtle"),
9156
+ family: "angle",
9157
+ variantId: "subtle",
9158
+ label: "Subtle angle",
9159
+ variantLabel: "Subtle",
9160
+ treatment: {
9161
+ kind: "angle-edge",
9162
+ height: "compact",
9163
+ slope: "subtle",
9164
+ direction: "forward"
9165
+ },
9166
+ size: "compact",
9167
+ heightExpression: compactHeight,
9168
+ shape: {
9169
+ kind: "angle",
9170
+ polygon: {
9171
+ startTopPercent: 34,
9172
+ endTopPercent: 18
9173
+ }
9174
+ }
9175
+ },
9176
+ {
9177
+ intent: "angle-edge",
9178
+ optionId: asBoundaryOptionId("break:angle-balanced"),
9179
+ family: "angle",
9180
+ variantId: "balanced",
9181
+ label: "Balanced angle",
9182
+ variantLabel: "Balanced",
9183
+ treatment: {
9184
+ kind: "angle-edge",
9185
+ height: "medium",
9186
+ slope: "balanced",
9187
+ direction: "forward"
9188
+ },
9189
+ size: "medium",
9190
+ heightExpression: mediumHeight,
9191
+ shape: {
9192
+ kind: "angle",
9193
+ polygon: {
9194
+ startTopPercent: 42,
9195
+ endTopPercent: 8
9196
+ }
9197
+ }
9198
+ },
9199
+ {
9200
+ intent: "angle-edge-steep",
9201
+ optionId: asBoundaryOptionId("break:angle-steep"),
9202
+ family: "angle",
9203
+ variantId: "steep",
9204
+ label: "Steep angle",
9205
+ variantLabel: "Steep",
9206
+ treatment: {
9207
+ kind: "angle-edge",
9208
+ height: "large",
9209
+ slope: "steep",
9210
+ direction: "forward"
9211
+ },
9212
+ size: "large",
9213
+ heightExpression: largeHeight,
9214
+ shape: {
9215
+ kind: "angle",
9216
+ polygon: {
9217
+ startTopPercent: 54,
9218
+ endTopPercent: 0
9219
+ }
9220
+ }
9221
+ }
9222
+ ]);
9223
+ //#endregion
8917
9224
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
8918
9225
  function boundaryRuntimeMetrics(family, size, heightExpression) {
8919
9226
  return {
@@ -8923,19 +9230,913 @@ function boundaryRuntimeMetrics(family, size, heightExpression) {
8923
9230
  reserveCss: `calc((${heightExpression}) / 2)`
8924
9231
  };
8925
9232
  }
8926
- boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"), boundaryRuntimeMetrics("gradient", "spacious", "10rem"), boundaryRuntimeMetrics("gradient", "expansive", "14rem"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"), boundaryRuntimeMetrics("wave", "large", "7rem + 2px"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"), boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"), boundaryRuntimeMetrics("angle", "large", "7rem + 2px");
8927
- asBoundaryOptionId("break:none");
8928
- asBoundaryOptionId("break:soft");
8929
- asBoundaryOptionId("break:spacious");
8930
- asBoundaryOptionId("break:expansive");
9233
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, entry]));
9234
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, boundaryRuntimeMetrics(entry.family, entry.size, entry.heightExpression)]));
9235
+ /**
9236
+ * The catalogue's compile-time coverage check guarantees an entry per
9237
+ * decorative intent, so a miss here is a broken invariant, not bad input.
9238
+ */
9239
+ function requireCatalogueValue(values, intent) {
9240
+ const value = values.get(intent);
9241
+ if (value === void 0) throw new Error(`Transition catalogue has no entry for ${intent}`);
9242
+ return value;
9243
+ }
9244
+ const noneBoundaryOption = {
9245
+ id: asBoundaryOptionId("break:none"),
9246
+ label: "None",
9247
+ transitionAfter: "none",
9248
+ treatment: { kind: "none" }
9249
+ };
9250
+ const boundaryOptionByIntent = new Map(transitionCatalogueEntries.map((entry) => [entry.intent, {
9251
+ id: entry.optionId,
9252
+ label: entry.label,
9253
+ transitionAfter: entry.intent,
9254
+ treatment: entry.treatment
9255
+ }]));
9256
+ function boundaryOptionForTransitionIntent(intent) {
9257
+ return requireCatalogueValue(boundaryOptionByIntent, intent);
9258
+ }
9259
+ const softBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-short");
9260
+ const spaciousBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-long");
9261
+ boundaryOptionForTransitionIntent("soft-fade-expansive");
9262
+ boundaryOptionForTransitionIntent("wave-edge");
9263
+ boundaryOptionForTransitionIntent("wave-edge-balanced");
9264
+ boundaryOptionForTransitionIntent("wave-edge-gentle");
9265
+ boundaryOptionForTransitionIntent("wave-edge-bold");
9266
+ boundaryOptionForTransitionIntent("wave-edge-drift");
9267
+ boundaryOptionForTransitionIntent("angle-edge-subtle");
9268
+ boundaryOptionForTransitionIntent("angle-edge");
9269
+ boundaryOptionForTransitionIntent("angle-edge-steep");
9270
+ /**
9271
+ * Must remain non-empty; downstream code indexes `[0]` as the documented default.
9272
+ */
9273
+ const boundaryOptions = [noneBoundaryOption, ...transitionCatalogueEntries.map((entry) => boundaryOptionForTransitionIntent(entry.intent))];
9274
+ const noneTransitionVariant = {
9275
+ familyId: "none",
9276
+ variantId: "none",
9277
+ label: "None",
9278
+ boundaryOption: noneBoundaryOption
9279
+ };
9280
+ function transitionVariantForEntry(entry) {
9281
+ return {
9282
+ familyId: entry.family,
9283
+ variantId: entry.variantId,
9284
+ label: entry.variantLabel,
9285
+ boundaryOption: boundaryOptionForTransitionIntent(entry.intent)
9286
+ };
9287
+ }
9288
+ const sectionTransitionFamilies = [{
9289
+ id: "none",
9290
+ label: "None",
9291
+ variants: [noneTransitionVariant]
9292
+ }, ...transitionCatalogueFamilies.map((family) => ({
9293
+ id: family.id,
9294
+ label: family.label,
9295
+ variants: requireNonEmptyReadonlyArray(transitionCatalogueEntries.filter((entry) => entry.family === family.id).map(transitionVariantForEntry), `Transition family ${family.id} has no catalogue entries.`)
9296
+ }))];
9297
+ new Map(boundaryOptions.map((option) => [option.id, option]));
9298
+ new Map(boundaryOptions.map((option) => [stableTreatmentKey(option.treatment), option]));
9299
+ new Map(sectionTransitionFamilies.flatMap((family) => family.variants.map((variant) => [variant.boundaryOption.id, variant])));
9300
+ new Map(sectionTransitionFamilies.map((family) => [family.id, family]));
9301
+ function stableTreatmentKey(treatment) {
9302
+ switch (treatment.kind) {
9303
+ case "none": return "none";
9304
+ case "soft-fade": return `${treatment.kind}:${treatment.height}:${treatment.curve}`;
9305
+ case "wave-edge": return [
9306
+ treatment.kind,
9307
+ treatment.height,
9308
+ treatment.amplitude,
9309
+ treatment.rhythm,
9310
+ treatment.symmetry
9311
+ ].join(":");
9312
+ case "angle-edge": return [
9313
+ treatment.kind,
9314
+ treatment.height,
9315
+ treatment.slope,
9316
+ treatment.direction
9317
+ ].join(":");
9318
+ case "legacy-unsupported": return `${treatment.kind}:${treatment.boundaryOptionId}`;
9319
+ }
9320
+ }
9321
+ asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
9322
+ asBoundaryOptionId("break:unknown");
9323
+ const pageDesignUserPinnedAppearanceChoiceSchema = z.object({
9324
+ kind: z.literal("user-pinned"),
9325
+ value: z.string().min(1).transform(asAppearancePresetId)
9326
+ }).strict();
9327
+ const pageDesignUserPinnedBoundaryChoiceSchema = z.object({
9328
+ kind: z.literal("user-pinned"),
9329
+ value: z.string().min(1).transform(asBoundaryOptionId)
9330
+ }).strict();
9331
+ const pageDesignBoundaryTreatmentSchema = z.discriminatedUnion("kind", [
9332
+ z.object({ kind: z.literal("none") }).strict(),
9333
+ z.object({
9334
+ kind: z.literal("soft-fade"),
9335
+ height: z.enum([
9336
+ "compact",
9337
+ "medium",
9338
+ "large",
9339
+ "expansive"
9340
+ ]),
9341
+ curve: z.enum([
9342
+ "soft",
9343
+ "spacious",
9344
+ "expansive"
9345
+ ])
9346
+ }).strict(),
9347
+ z.object({
9348
+ kind: z.literal("wave-edge"),
9349
+ height: z.enum([
9350
+ "compact",
9351
+ "medium",
9352
+ "large"
9353
+ ]),
9354
+ amplitude: z.enum([
9355
+ "subtle",
9356
+ "balanced",
9357
+ "bold"
9358
+ ]),
9359
+ rhythm: z.enum(["single", "double"]),
9360
+ symmetry: z.enum([
9361
+ "symmetrical",
9362
+ "asymmetrical",
9363
+ "drift"
9364
+ ])
9365
+ }).strict(),
9366
+ z.object({
9367
+ kind: z.literal("angle-edge"),
9368
+ height: z.enum([
9369
+ "compact",
9370
+ "medium",
9371
+ "large"
9372
+ ]),
9373
+ slope: z.enum([
9374
+ "subtle",
9375
+ "balanced",
9376
+ "steep"
9377
+ ]),
9378
+ direction: z.enum(["forward", "reverse"])
9379
+ }).strict(),
9380
+ z.object({
9381
+ kind: z.literal("legacy-unsupported"),
9382
+ boundaryOptionId: z.string().min(1).transform(asBoundaryOptionId)
9383
+ }).strict()
9384
+ ]);
9385
+ const pageDesignUserPinnedBoundaryTreatmentChoiceSchema = z.object({
9386
+ kind: z.literal("user-pinned"),
9387
+ value: pageDesignBoundaryTreatmentSchema
9388
+ }).strict();
9389
+ const pageDesignBlockLookPinSchema = z.object({
9390
+ blockId: z.string().min(1).transform(asDesignBlockId),
9391
+ blockKind: z.string().min(1),
9392
+ choice: pageDesignUserPinnedAppearanceChoiceSchema
9393
+ }).strict();
9394
+ const pageDesignBoundaryPinSchema = z.object({
9395
+ boundaryId: z.string().min(1).transform(asDesignBoundaryId),
9396
+ previousBlockId: z.string().min(1).transform(asDesignBlockId),
9397
+ nextBlockId: z.string().min(1).transform(asDesignBlockId),
9398
+ choice: pageDesignUserPinnedBoundaryTreatmentChoiceSchema
9399
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
9400
+ const legacyPageDesignBoundaryPinSchema = z.object({
9401
+ boundaryId: z.string().min(1).transform(asDesignBoundaryId),
9402
+ previousBlockId: z.string().min(1).transform(asDesignBlockId),
9403
+ nextBlockId: z.string().min(1).transform(asDesignBlockId),
9404
+ choice: pageDesignUserPinnedBoundaryChoiceSchema
9405
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
9406
+ z.object({
9407
+ schemaVersion: z.literal(1),
9408
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
9409
+ pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
9410
+ blockLookPins: z.array(pageDesignBlockLookPinSchema),
9411
+ boundaryPins: z.array(legacyPageDesignBoundaryPinSchema)
9412
+ }).strict().superRefine(validateUniquePageDesignPins);
9413
+ z.object({
9414
+ schemaVersion: z.literal(2),
9415
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
9416
+ pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
9417
+ blockLookPins: z.array(pageDesignBlockLookPinSchema),
9418
+ boundaryPins: z.array(pageDesignBoundaryPinSchema)
9419
+ }).strict().superRefine(validateUniquePageDesignPins);
9420
+ function addDuplicateStringIssues(ctx, input) {
9421
+ const seen = /* @__PURE__ */ new Set();
9422
+ const duplicates = /* @__PURE__ */ new Set();
9423
+ for (const value of input.values) {
9424
+ if (seen.has(value)) duplicates.add(value);
9425
+ seen.add(value);
9426
+ }
9427
+ for (const duplicate of duplicates) ctx.addIssue({
9428
+ code: z.ZodIssueCode.custom,
9429
+ path: [...input.path],
9430
+ message: `Duplicate ${input.label}: ${duplicate}.`
9431
+ });
9432
+ }
9433
+ function validateBoundaryPinIdMatchesBlocks(pin, ctx) {
9434
+ const expectedBoundaryId = makeBoundaryId(pin.previousBlockId, pin.nextBlockId);
9435
+ if (pin.boundaryId !== expectedBoundaryId) ctx.addIssue({
9436
+ code: z.ZodIssueCode.custom,
9437
+ path: ["boundaryId"],
9438
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
9439
+ });
9440
+ }
9441
+ function validateUniquePageDesignPins(intent, ctx) {
9442
+ addDuplicateStringIssues(ctx, {
9443
+ values: intent.blockLookPins.map((pin) => pin.blockId),
9444
+ path: ["blockLookPins"],
9445
+ label: "block Look pin"
9446
+ });
9447
+ addDuplicateStringIssues(ctx, {
9448
+ values: intent.boundaryPins.map((pin) => makeBoundaryId(pin.previousBlockId, pin.nextBlockId)),
9449
+ path: ["boundaryPins"],
9450
+ label: "boundary pin"
9451
+ });
9452
+ }
9453
+ //#endregion
9454
+ //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
9455
+ function assertValidOptionGroups(preset) {
9456
+ preset.optionGroups?.forEach((group) => {
9457
+ defineLookOptionGroup(group);
9458
+ });
9459
+ }
9460
+ /**
9461
+ * Every Look carries a card role. A Look that says nothing about cards renders
9462
+ * none, which is the overwhelming majority of them; the card-bearing ones name
9463
+ * the role they want and the site style owns how it looks.
9464
+ */
9465
+ function defineBlockAppearancePreset(preset) {
9466
+ assertValidOptionGroups(preset);
9467
+ return {
9468
+ ...preset,
9469
+ design: {
9470
+ ...preset.design,
9471
+ cardRole: preset.design.cardRole ?? "none"
9472
+ }
9473
+ };
9474
+ }
9475
+ //#endregion
9476
+ //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
9477
+ /**
9478
+ * A Look is a composition: which section surface, which content frame, and —
9479
+ * where it wants one — which *card role* it asks the site style for. It never
9480
+ * states how a card looks; that is the site style's identity.
9481
+ *
9482
+ * A Look with no `cardRole` asks the site style for no card at all
9483
+ * (`defineBlockAppearancePreset` defaults it to `none`) — the block's own
9484
+ * composition still governs how its items look. The per-Look rationale for the card-bearing ones lives
9485
+ * in `.project/plans/1297-card-role-contract-site-styles-own-card-surfaces/mapping-table.md`.
9486
+ */
9487
+ const brandScrimOptionGroups = [{
9488
+ id: "image-surface-treatment",
9489
+ label: "Treatment",
9490
+ defaultOptionId: "brand-scrim-primary",
9491
+ options: [{
9492
+ id: "brand-scrim-primary",
9493
+ label: "Brand scrim",
9494
+ designPatch: { imageSurfaceTreatment: {
9495
+ kind: "brand-scrim",
9496
+ token: "primary"
9497
+ } }
9498
+ }, {
9499
+ id: "neutral-scrim",
9500
+ label: "Neutral scrim",
9501
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
9502
+ }]
9503
+ }];
9504
+ const microBannerLayoutPatches = [{
9505
+ constraints: { layoutVariantKeys: ["micro"] },
9506
+ designPatch: { sectionHeight: "banner" }
9507
+ }];
9508
+ defineBlockAppearancePreset({
9509
+ id: "hero-immersive-image",
9510
+ target: "hero",
9511
+ label: "Immersive image hero",
9512
+ blockKinds: ["block.hero"],
9513
+ constraints: { layoutFamilies: ["centered", "compact"] },
9514
+ layoutPatches: [{
9515
+ constraints: { layoutVariantKeys: ["micro"] },
9516
+ designPatch: {
9517
+ sectionHeight: "banner",
9518
+ heroTypographyScale: "display"
9519
+ }
9520
+ }],
9521
+ design: {
9522
+ sectionSurface: "hero-image",
9523
+ contentFrame: plainFrame,
9524
+ sectionHeight: "hero",
9525
+ heroComposition: "center",
9526
+ heroTypographyScale: "display",
9527
+ imageSurfaceTreatment: { kind: "neutral-wash" }
9528
+ }
9529
+ }), defineBlockAppearancePreset({
9530
+ id: "hero-bottom-left-panel",
9531
+ target: "hero",
9532
+ label: "Bottom-left panel hero",
9533
+ blockKinds: ["block.hero"],
9534
+ constraints: { layoutFamilies: ["centered", "compact"] },
9535
+ optionGroups: [{
9536
+ id: "image-surface-treatment",
9537
+ label: "Treatment",
9538
+ defaultOptionId: "neutral-scrim",
9539
+ options: [{
9540
+ id: "neutral-scrim",
9541
+ label: "Neutral scrim",
9542
+ designPatch: { imageSurfaceTreatment: {
9543
+ kind: "neutral-scrim",
9544
+ intensity: "balanced"
9545
+ } }
9546
+ }, {
9547
+ id: "brand-scrim-primary",
9548
+ label: "Brand scrim",
9549
+ designPatch: { imageSurfaceTreatment: {
9550
+ kind: "brand-scrim",
9551
+ token: "primary",
9552
+ intensity: "balanced"
9553
+ } }
9554
+ }]
9555
+ }],
9556
+ layoutPatches: [{
9557
+ constraints: { layoutVariantKeys: ["micro"] },
9558
+ designPatch: {
9559
+ sectionHeight: "banner",
9560
+ heroTypographyScale: "editorial"
9561
+ }
9562
+ }],
9563
+ design: {
9564
+ sectionSurface: "hero-image",
9565
+ contentFrame: panelFrame("raised"),
9566
+ sectionHeight: "immersive",
9567
+ heroComposition: "bottom-left",
9568
+ heroTypographyScale: "display",
9569
+ imageSurfaceTreatment: {
9570
+ kind: "neutral-scrim",
9571
+ intensity: "balanced"
9572
+ }
9573
+ }
9574
+ }), defineBlockAppearancePreset({
9575
+ id: "hero-poster-image",
9576
+ target: "hero",
9577
+ label: "Poster image hero",
9578
+ blockKinds: ["block.hero"],
9579
+ constraints: { layoutFamilies: ["centered", "compact"] },
9580
+ layoutPatches: [{
9581
+ constraints: { layoutVariantKeys: ["micro"] },
9582
+ designPatch: {
9583
+ sectionHeight: "banner",
9584
+ heroTypographyScale: "display"
9585
+ }
9586
+ }],
9587
+ design: {
9588
+ sectionSurface: "hero-image",
9589
+ contentFrame: plainFrame,
9590
+ sectionHeight: "immersive",
9591
+ heroComposition: "center",
9592
+ heroTypographyScale: "poster",
9593
+ imageSurfaceTreatment: {
9594
+ kind: "brand-scrim",
9595
+ token: "primary",
9596
+ intensity: "strong"
9597
+ }
9598
+ }
9599
+ }), defineBlockAppearancePreset({
9600
+ id: "hero-brand-scrim",
9601
+ target: "hero",
9602
+ label: "Brand scrim image hero",
9603
+ blockKinds: ["block.hero"],
9604
+ constraints: { layoutFamilies: ["centered", "compact"] },
9605
+ optionGroups: brandScrimOptionGroups,
9606
+ layoutPatches: microBannerLayoutPatches,
9607
+ design: {
9608
+ sectionSurface: "hero-image",
9609
+ contentFrame: plainFrame,
9610
+ sectionHeight: "immersive",
9611
+ heroComposition: "center",
9612
+ heroTypographyScale: "display",
9613
+ imageSurfaceTreatment: {
9614
+ kind: "brand-scrim",
9615
+ token: "primary"
9616
+ }
9617
+ }
9618
+ }), defineBlockAppearancePreset({
9619
+ id: "hero-brand-scrim-fixed-frame",
9620
+ target: "hero",
9621
+ label: "Fixed-frame brand scrim hero",
9622
+ blockKinds: ["block.hero"],
9623
+ constraints: { layoutFamilies: ["centered", "compact"] },
9624
+ optionGroups: brandScrimOptionGroups,
9625
+ layoutPatches: microBannerLayoutPatches,
9626
+ design: {
9627
+ sectionSurface: "hero-image",
9628
+ contentFrame: plainFrame,
9629
+ sectionHeight: "immersive",
9630
+ heroComposition: "center",
9631
+ heroTypographyScale: "display",
9632
+ imageSurfaceTreatment: {
9633
+ kind: "brand-scrim",
9634
+ token: "primary"
9635
+ },
9636
+ imageSurfaceMotion: "fixed-frame",
9637
+ eyebrowTreatment: "accent-pill-bounce"
9638
+ }
9639
+ }), defineBlockAppearancePreset({
9640
+ id: "hero-brand-depth-expressive",
9641
+ target: "hero",
9642
+ label: "Expressive brand-depth hero",
9643
+ blockKinds: ["block.hero"],
9644
+ constraints: { layoutFamilies: ["centered", "compact"] },
9645
+ design: {
9646
+ sectionSurface: "brand-depth-band",
9647
+ contentFrame: plainFrame,
9648
+ heroComposition: "center",
9649
+ heroTypographyScale: "editorial",
9650
+ eyebrowTreatment: "accent-pill-bounce"
9651
+ }
9652
+ }), defineBlockAppearancePreset({
9653
+ id: "hero-contained-intro",
9654
+ target: "hero",
9655
+ label: "Contained intro hero",
9656
+ blockKinds: ["block.hero"],
9657
+ design: {
9658
+ sectionSurface: "muted-band",
9659
+ contentFrame: panelFrame("inset"),
9660
+ heroComposition: "center",
9661
+ heroTypographyScale: "editorial"
9662
+ }
9663
+ }), defineBlockAppearancePreset({
9664
+ id: "hero-split-editorial",
9665
+ target: "hero",
9666
+ label: "Editorial split hero",
9667
+ blockKinds: ["block.hero"],
9668
+ constraints: { layoutFamilies: ["split"] },
9669
+ design: {
9670
+ sectionSurface: "base",
9671
+ contentFrame: plainFrame,
9672
+ heroTypographyScale: "editorial"
9673
+ }
9674
+ }), defineBlockAppearancePreset({
9675
+ id: "hero-split-brand",
9676
+ target: "hero",
9677
+ label: "Brand split hero",
9678
+ blockKinds: ["block.hero"],
9679
+ constraints: { layoutFamilies: ["split"] },
9680
+ design: {
9681
+ sectionSurface: "brand-depth-band",
9682
+ contentFrame: plainFrame,
9683
+ heroTypographyScale: "display",
9684
+ eyebrowTreatment: "accent-pill-bounce"
9685
+ }
9686
+ }), defineBlockAppearancePreset({
9687
+ id: "hero-split-soft-panel",
9688
+ target: "hero",
9689
+ label: "Soft panel split hero",
9690
+ blockKinds: ["block.hero"],
9691
+ constraints: { layoutFamilies: ["split"] },
9692
+ design: {
9693
+ sectionSurface: "muted-band",
9694
+ contentFrame: panelFrame("raised"),
9695
+ heroTypographyScale: "editorial"
9696
+ }
9697
+ }), defineBlockAppearancePreset({
9698
+ id: "hero-split-accent",
9699
+ target: "hero",
9700
+ label: "Accent split hero",
9701
+ blockKinds: ["block.hero"],
9702
+ constraints: { layoutFamilies: ["split"] },
9703
+ design: {
9704
+ sectionSurface: "accent-band",
9705
+ contentFrame: panelFrame("raised"),
9706
+ heroTypographyScale: "display"
9707
+ }
9708
+ }), defineBlockAppearancePreset({
9709
+ id: "intro-editorial-statement",
9710
+ target: "intro",
9711
+ label: "Editorial intro statement",
9712
+ blockKinds: ["block.intro"],
9713
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
9714
+ design: {
9715
+ sectionSurface: "base",
9716
+ contentFrame: plainFrame,
9717
+ composition: {
9718
+ kind: "intro",
9719
+ treatment: "editorial-statement"
9720
+ }
9721
+ }
9722
+ }), defineBlockAppearancePreset({
9723
+ id: "intro-portrait-bio",
9724
+ target: "intro",
9725
+ label: "Portrait and bio",
9726
+ blockKinds: ["block.intro"],
9727
+ constraints: { layoutVariantKeys: ["media-copy"] },
9728
+ design: {
9729
+ sectionSurface: "base",
9730
+ contentFrame: plainFrame,
9731
+ composition: {
9732
+ kind: "intro",
9733
+ treatment: "portrait-bio"
9734
+ }
9735
+ }
9736
+ }), defineBlockAppearancePreset({
9737
+ id: "offerings-preview-default-cards",
9738
+ target: "offerings",
9739
+ label: "Default offering cards",
9740
+ blockKinds: ["block.offerings-preview"],
9741
+ design: {
9742
+ sectionSurface: "base",
9743
+ contentFrame: plainFrame,
9744
+ cardRole: "default"
9745
+ }
9746
+ }), defineBlockAppearancePreset({
9747
+ id: "offerings-preview-secondary-cards",
9748
+ target: "offerings",
9749
+ label: "Secondary offering cards",
9750
+ blockKinds: ["block.offerings-preview"],
9751
+ design: {
9752
+ sectionSurface: "muted-band",
9753
+ contentFrame: plainFrame,
9754
+ cardRole: "alternative"
9755
+ }
9756
+ }), defineBlockAppearancePreset({
9757
+ id: "offerings-preview-non-carded",
9758
+ target: "offerings",
9759
+ label: "Non-carded offerings",
9760
+ blockKinds: ["block.offerings-preview"],
9761
+ design: {
9762
+ sectionSurface: "muted-band",
9763
+ contentFrame: plainFrame,
9764
+ cardRole: "open"
9765
+ }
9766
+ }), defineBlockAppearancePreset({
9767
+ id: "offerings-preview-paired-feature-cards",
9768
+ target: "offerings",
9769
+ label: "Paired feature cards",
9770
+ blockKinds: ["block.offerings-preview"],
9771
+ constraints: { layoutVariantKeys: ["cards"] },
9772
+ design: {
9773
+ sectionSurface: "base",
9774
+ contentFrame: plainFrame,
9775
+ cardRole: "alternative",
9776
+ composition: {
9777
+ kind: "offerings-preview",
9778
+ treatment: "paired-feature-cards"
9779
+ }
9780
+ }
9781
+ }), defineBlockAppearancePreset({
9782
+ id: "offerings-preview-open-editorial-columns",
9783
+ target: "offerings",
9784
+ label: "Open editorial columns",
9785
+ blockKinds: ["block.offerings-preview"],
9786
+ constraints: { layoutVariantKeys: ["cards"] },
9787
+ design: {
9788
+ sectionSurface: "base",
9789
+ contentFrame: plainFrame,
9790
+ cardRole: "open",
9791
+ composition: {
9792
+ kind: "offerings-preview",
9793
+ treatment: "open-editorial-columns"
9794
+ }
9795
+ }
9796
+ }), defineBlockAppearancePreset({
9797
+ id: "offerings-preview-joined-programme-panel",
9798
+ target: "offerings",
9799
+ label: "Joined programme panel",
9800
+ blockKinds: ["block.offerings-preview"],
9801
+ constraints: { layoutVariantKeys: ["cards"] },
9802
+ design: {
9803
+ sectionSurface: "base",
9804
+ contentFrame: plainFrame,
9805
+ cardRole: "default",
9806
+ composition: {
9807
+ kind: "offerings-preview",
9808
+ treatment: "joined-programme-panel"
9809
+ }
9810
+ }
9811
+ }), defineBlockAppearancePreset({
9812
+ id: "feature-cards-raised-rule",
9813
+ target: "feature-cards",
9814
+ label: "Raised cards with rule",
9815
+ blockKinds: ["block.feature-cards"],
9816
+ design: {
9817
+ sectionSurface: "base",
9818
+ contentFrame: plainFrame,
9819
+ cardRole: "default"
9820
+ }
9821
+ }), defineBlockAppearancePreset({
9822
+ id: "feature-cards-bold-colors",
9823
+ target: "feature-cards",
9824
+ label: "Bold colour-blocked cards",
9825
+ blockKinds: ["block.feature-cards"],
9826
+ design: {
9827
+ sectionSurface: "base",
9828
+ contentFrame: plainFrame,
9829
+ cardRole: "alternative"
9830
+ }
9831
+ }), defineBlockAppearancePreset({
9832
+ id: "feature-cards-editorial-columns",
9833
+ target: "feature-cards",
9834
+ label: "Editorial open columns",
9835
+ blockKinds: ["block.feature-cards"],
9836
+ design: {
9837
+ sectionSurface: "muted-band",
9838
+ contentFrame: plainFrame,
9839
+ cardRole: "open"
9840
+ }
9841
+ }), defineBlockAppearancePreset({
9842
+ id: "feature-cards-asymmetric-emphasis",
9843
+ target: "feature-cards",
9844
+ label: "Asymmetric emphasis pair",
9845
+ blockKinds: ["block.feature-cards"],
9846
+ constraints: { layoutFamilies: ["grid"] },
9847
+ design: {
9848
+ sectionSurface: "base",
9849
+ contentFrame: plainFrame,
9850
+ composition: {
9851
+ kind: "feature-cards",
9852
+ treatment: "asymmetric-emphasis"
9853
+ }
9854
+ }
9855
+ }), defineBlockAppearancePreset({
9856
+ id: "feature-cards-framed-programme",
9857
+ target: "feature-cards",
9858
+ label: "Framed programme cards",
9859
+ blockKinds: ["block.feature-cards"],
9860
+ constraints: { layoutFamilies: ["grid"] },
9861
+ design: {
9862
+ sectionSurface: "brand-depth-band",
9863
+ contentFrame: plainFrame,
9864
+ cardRole: "alternative",
9865
+ composition: {
9866
+ kind: "feature-cards",
9867
+ treatment: "framed-programme"
9868
+ }
9869
+ }
9870
+ }), defineBlockAppearancePreset({
9871
+ id: "feature-cards-soft-panels",
9872
+ target: "feature-cards",
9873
+ label: "Soft tinted panels",
9874
+ blockKinds: ["block.feature-cards"],
9875
+ design: {
9876
+ sectionSurface: "base",
9877
+ contentFrame: plainFrame,
9878
+ cardRole: "alternative"
9879
+ }
9880
+ }), defineBlockAppearancePreset({
9881
+ id: "feature-cards-editorial-diptych",
9882
+ target: "feature-cards",
9883
+ label: "Editorial diptych",
9884
+ blockKinds: ["block.feature-cards"],
9885
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
9886
+ design: {
9887
+ sectionSurface: "base",
9888
+ contentFrame: plainFrame,
9889
+ cardRole: "default"
9890
+ }
9891
+ }), defineBlockAppearancePreset({
9892
+ id: "feature-cards-editorial-pathways",
9893
+ target: "feature-cards",
9894
+ label: "Editorial pathways",
9895
+ blockKinds: ["block.feature-cards"],
9896
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
9897
+ design: {
9898
+ sectionSurface: "base",
9899
+ contentFrame: plainFrame,
9900
+ cardRole: "default"
9901
+ }
9902
+ }), defineBlockAppearancePreset({
9903
+ id: "feature-cards-photo-tiles",
9904
+ target: "feature-cards",
9905
+ label: "Photo tiles",
9906
+ blockKinds: ["block.feature-cards"],
9907
+ design: {
9908
+ sectionSurface: "base",
9909
+ contentFrame: plainFrame,
9910
+ cardRole: "default"
9911
+ }
9912
+ }), defineBlockAppearancePreset({
9913
+ id: "events-lined-panel",
9914
+ target: "events",
9915
+ label: "Raised event panel",
9916
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9917
+ design: {
9918
+ sectionSurface: "base",
9919
+ contentFrame: panelFrame("raised")
9920
+ }
9921
+ }), defineBlockAppearancePreset({
9922
+ id: "events-ruled-register",
9923
+ target: "events",
9924
+ label: "Ruled event register",
9925
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9926
+ design: {
9927
+ sectionSurface: "brand-depth-band",
9928
+ contentFrame: plainFrame,
9929
+ eventListTreatment: "ruled-register"
9930
+ }
9931
+ }), defineBlockAppearancePreset({
9932
+ id: "events-editorial-register",
9933
+ target: "events",
9934
+ label: "Editorial event register",
9935
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9936
+ design: {
9937
+ sectionSurface: "base",
9938
+ contentFrame: plainFrame,
9939
+ eventListTreatment: "editorial-register"
9940
+ }
9941
+ }), defineBlockAppearancePreset({
9942
+ id: "events-dense-index",
9943
+ target: "events",
9944
+ label: "Dense event index",
9945
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9946
+ design: {
9947
+ sectionSurface: "accent-band",
9948
+ contentFrame: plainFrame,
9949
+ eventListTreatment: "dense-index"
9950
+ }
9951
+ }), defineBlockAppearancePreset({
9952
+ id: "schedule-details-brand-depth",
9953
+ target: "events",
9954
+ label: "Brand-depth schedule details",
9955
+ blockKinds: ["block.event-details"],
9956
+ design: {
9957
+ sectionSurface: "brand-depth-band",
9958
+ contentFrame: plainFrame,
9959
+ tileTreatment: "brand-depth"
9960
+ }
9961
+ }), defineBlockAppearancePreset({
9962
+ id: "media-text-flush-feature",
9963
+ target: "media-text",
9964
+ label: "Flush media feature",
9965
+ blockKinds: ["block.media-text"],
9966
+ design: {
9967
+ sectionSurface: "muted-band",
9968
+ contentFrame: flushPanelFrame({ bleed: "start" })
9969
+ }
9970
+ }), defineBlockAppearancePreset({
9971
+ id: "testimonials-simple-cards",
9972
+ target: "testimonials",
9973
+ label: "Simple testimonial cards",
9974
+ blockKinds: ["block.testimonials"],
9975
+ design: {
9976
+ sectionSurface: "base",
9977
+ contentFrame: plainFrame,
9978
+ cardRole: "default"
9979
+ }
9980
+ }), defineBlockAppearancePreset({
9981
+ id: "testimonials-raised-panel",
9982
+ target: "testimonials",
9983
+ label: "Raised testimonial panel",
9984
+ blockKinds: ["block.testimonials"],
9985
+ design: {
9986
+ sectionSurface: "muted-band",
9987
+ contentFrame: panelFrame("raised"),
9988
+ cardRole: "default"
9989
+ }
9990
+ }), defineBlockAppearancePreset({
9991
+ id: "testimonials-accent-panel",
9992
+ target: "testimonials",
9993
+ label: "Accent testimonial panel",
9994
+ blockKinds: ["block.testimonials"],
9995
+ design: {
9996
+ sectionSurface: "accent-band",
9997
+ contentFrame: panelFrame("raised"),
9998
+ cardRole: "default"
9999
+ }
10000
+ }), defineBlockAppearancePreset({
10001
+ id: "testimonials-default-cards",
10002
+ target: "testimonials",
10003
+ label: "Default cards",
10004
+ blockKinds: ["block.testimonials"],
10005
+ design: {
10006
+ sectionSurface: "base",
10007
+ contentFrame: plainFrame,
10008
+ cardRole: "default"
10009
+ }
10010
+ }), defineBlockAppearancePreset({
10011
+ id: "testimonials-statement-cards",
10012
+ target: "testimonials",
10013
+ label: "Statement cards",
10014
+ blockKinds: ["block.testimonials"],
10015
+ design: {
10016
+ sectionSurface: "accent-band",
10017
+ contentFrame: plainFrame,
10018
+ cardRole: "alternative"
10019
+ }
10020
+ }), defineBlockAppearancePreset({
10021
+ id: "testimonials-brand-statement-cards",
10022
+ target: "testimonials",
10023
+ label: "Brand statement cards",
10024
+ blockKinds: ["block.testimonials"],
10025
+ design: {
10026
+ sectionSurface: "brand-depth-band",
10027
+ contentFrame: plainFrame,
10028
+ cardRole: "alternative"
10029
+ }
10030
+ }), defineBlockAppearancePreset({
10031
+ id: "testimonials-non-carded",
10032
+ target: "testimonials",
10033
+ label: "Non-carded",
10034
+ blockKinds: ["block.testimonials"],
10035
+ design: {
10036
+ sectionSurface: "muted-band",
10037
+ contentFrame: plainFrame,
10038
+ composition: {
10039
+ kind: "testimonials",
10040
+ treatment: "open-editorial"
10041
+ }
10042
+ }
10043
+ }), defineBlockAppearancePreset({
10044
+ id: "testimonials-evergreen-lead",
10045
+ target: "testimonials",
10046
+ label: "Evergreen lead",
10047
+ blockKinds: ["block.testimonials"],
10048
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
10049
+ design: {
10050
+ sectionSurface: "base",
10051
+ contentFrame: plainFrame,
10052
+ composition: {
10053
+ kind: "testimonials",
10054
+ treatment: "evergreen-lead"
10055
+ }
10056
+ }
10057
+ }), defineBlockAppearancePreset({
10058
+ id: "testimonials-room-and-response",
10059
+ target: "testimonials",
10060
+ label: "Room and response",
10061
+ blockKinds: ["block.testimonials"],
10062
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
10063
+ design: {
10064
+ sectionSurface: "base",
10065
+ contentFrame: plainFrame,
10066
+ composition: {
10067
+ kind: "testimonials",
10068
+ treatment: "room-and-response"
10069
+ }
10070
+ }
10071
+ }), defineBlockAppearancePreset({
10072
+ id: "testimonials-open-floor",
10073
+ target: "testimonials",
10074
+ label: "Open floor",
10075
+ blockKinds: ["block.testimonials"],
10076
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
10077
+ design: {
10078
+ sectionSurface: "base",
10079
+ contentFrame: plainFrame,
10080
+ composition: {
10081
+ kind: "testimonials",
10082
+ treatment: "open-floor"
10083
+ }
10084
+ }
10085
+ }), defineBlockAppearancePreset({
10086
+ id: "faq-base-accordion",
10087
+ target: "faq",
10088
+ label: "Base accordion FAQ",
10089
+ blockKinds: ["block.faq"],
10090
+ design: {
10091
+ sectionSurface: "base",
10092
+ contentFrame: plainFrame,
10093
+ cardRole: "default"
10094
+ }
10095
+ }), defineBlockAppearancePreset({
10096
+ id: "faq-contained-help",
10097
+ target: "faq",
10098
+ label: "Contained help panel",
10099
+ blockKinds: ["block.faq"],
10100
+ design: {
10101
+ sectionSurface: "muted-band",
10102
+ contentFrame: panelFrame("inset"),
10103
+ cardRole: "default"
10104
+ }
10105
+ }), defineBlockAppearancePreset({
10106
+ id: "contact-form-panel",
10107
+ target: "contact-form",
10108
+ label: "Raised form panel",
10109
+ blockKinds: ["block.form"],
10110
+ design: {
10111
+ sectionSurface: "muted-band",
10112
+ contentFrame: panelFrame("raised")
10113
+ }
10114
+ }), defineBlockAppearancePreset({
10115
+ id: "booking-brand-band",
10116
+ target: "contact-form",
10117
+ label: "Brand band booking",
10118
+ blockKinds: ["block.appointment-booking"],
10119
+ design: {
10120
+ sectionSurface: "brand-depth-band",
10121
+ contentFrame: plainFrame
10122
+ }
10123
+ }), defineBlockAppearancePreset({
10124
+ id: "cta-accent-band",
10125
+ target: "cta",
10126
+ label: "Accent CTA band",
10127
+ blockKinds: ["block.cta-full"],
10128
+ design: {
10129
+ sectionSurface: "accent-band",
10130
+ contentFrame: plainFrame,
10131
+ eyebrowTreatment: "accent"
10132
+ }
10133
+ });
10134
+ asPageFlowPresetId("generated-default");
10135
+ asSiteStyleId("site-style:south-west-twerk-school");
10136
+ asAppearancePresetId("hero-brand-scrim-fixed-frame");
10137
+ asLayoutVariantKey("classic");
10138
+ asLayoutVariantKey("micro");
8931
10139
  asBoundaryOptionId("break:wave");
8932
- asBoundaryOptionId("break:wave-balanced");
8933
- asBoundaryOptionId("break:wave-gentle");
8934
- asBoundaryOptionId("break:wave-bold");
8935
- asBoundaryOptionId("break:wave-drift");
8936
- asBoundaryOptionId("break:angle-subtle");
8937
- asBoundaryOptionId("break:angle-balanced");
8938
- asBoundaryOptionId("break:angle-steep");
8939
10140
  //#endregion
8940
10141
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
8941
10142
  function defineSectionForegroundRuntimeTokens(input) {
@@ -8959,7 +10160,7 @@ function defineComponentRuntimeRules(rules) {
8959
10160
  }
8960
10161
  /**
8961
10162
  * Default design rules translate semantic page-level choices into the current
8962
- * runtime's section background and transition style-group vocabulary.
10163
+ * runtime's section background vocabulary.
8963
10164
  */
8964
10165
  const defaultDesignRuntimeRules = defineDesignRuntimeRules({
8965
10166
  sectionSurfaces: {
@@ -8994,8 +10195,7 @@ const defaultDesignRuntimeRules = defineDesignRuntimeRules({
8994
10195
  color: "surface",
8995
10196
  opacity: .88
8996
10197
  }
8997
- },
8998
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
10198
+ }
8999
10199
  });
9000
10200
  /**
9001
10201
  * Default component rules translate frame and item-surface semantics into the
@@ -10710,14 +11910,6 @@ const curatedSiteStyles = [
10710
11910
  })
10711
11911
  ];
10712
11912
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
10713
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>");
10714
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V42C120 24 240 24 360 42C480 60 600 60 720 42C840 24 960 24 1080 42C1200 60 1320 60 1440 42V72H0Z' fill='white'/></svg>");
10715
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V43C180 32 300 32 480 43C660 54 780 54 960 43C1140 32 1260 32 1440 43V72H0Z' fill='white'/></svg>");
10716
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V44C90 14 270 14 360 44C450 74 630 74 720 44C810 14 990 14 1080 44C1170 74 1350 74 1440 44V72H0Z' fill='white'/></svg>");
10717
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>");
10718
- function svgDataUrl(svg) {
10719
- return `data:image/svg+xml,${encodeURIComponent(svg)}`;
10720
- }
10721
11913
  //#endregion
10722
11914
  //#region ../theme-core/src/status/generateStatusCss.ts
10723
11915
  /**
@@ -13847,6 +15039,12 @@ const containerResponsiveThemeCss = `/*
13847
15039
  :where(.theme-scope) .rb-prose p {
13848
15040
  margin: var(--rt-space-y) 0;
13849
15041
  }
15042
+ :where(.theme-scope) .rb-prose li > p:first-child {
15043
+ margin-top: 0;
15044
+ }
15045
+ :where(.theme-scope) .rb-prose li > p:last-child {
15046
+ margin-bottom: 0;
15047
+ }
13850
15048
  :where(.theme-scope) .rb-prose img {
13851
15049
  display: block;
13852
15050
  max-width: 100%;
@@ -25230,6 +26428,12 @@ function getDefaultButtonVariants() {
25230
26428
  }
25231
26429
  //#endregion
25232
26430
  //#region ../theme-core/src/inputs/core.ts
26431
+ /**
26432
+ * Core Input CSS Generator
26433
+ *
26434
+ * Pure functions for generating form input CSS without requiring the full Theme type.
26435
+ * Used by both the full CMS theme system and the SDK theme bridge.
26436
+ */
25233
26437
  const CORNER_RADIUS_MAP = {
25234
26438
  square: "0",
25235
26439
  soft: "0.25rem",
@@ -25264,7 +26468,7 @@ function generateInputCoreCss(scopeId, settings) {
25264
26468
  const borderRadius = CORNER_RADIUS_MAP[settings.corners];
25265
26469
  const cssBlocks = [];
25266
26470
  cssBlocks.push(`${root} .form-label {
25267
- color: rgb(var(--tb-${settings.labelToken}));
26471
+ color: ${textColorValue(settings.labelToken)};
25268
26472
  font-weight: 600;
25269
26473
  font-size: 0.875rem;
25270
26474
  display: block;